[Home] [Help]
PACKAGE BODY: APPS.FTE_FREIGHT_PRICING
Source
1 PACKAGE BODY FTE_FREIGHT_PRICING as
2 /* $Header: FTEFRPRB.pls 120.23 2005/12/02 09:53:05 mechawla ship $ */
3
4 -- Private Package level Variables
5
6 G_PKG_NAME CONSTANT VARCHAR2(30) := 'FTE_FREIGHT_PRICING';
7
8 G_RC_SUCCESS CONSTANT NUMBER := 0;
9 G_RC_ERROR CONSTANT NUMBER := 1;
10 G_RC_REPRICE_NOT_REQUIRED CONSTANT NUMBER := 2;
11 G_RC_NOT_RATE_FREIGHT_TERM CONSTANT NUMBER := 3;
12 G_RC_NOT_RATE_MANIFESTING CONSTANT NUMBER := 4;
13
14 g_finished_success EXCEPTION;
15 g_finished_warning EXCEPTION;
16
17 CURSOR get_uom_for_each
18 IS
19 SELECT uom_for_num_of_units
20 FROM wsh_global_parameters;
21
22 -- CURSOR get_uom_for_each
23 -- IS
24 -- SELECT 'Ea' uom_for_num_of_units
25 -- FROM wsh_global_parameters;
26
27 CURSOR get_category(c_item_id IN NUMBER,c_org_id IN NUMBER,c_classification_code IN VARCHAR2) IS
28 SELECT mc.category_id
29 FROM mtl_categories mc, mtl_item_categories mic,
30 mtl_category_sets_tl mcstl
31 WHERE mic.inventory_item_id = c_item_id
32 AND mic.organization_id = c_org_id
33 AND mic.category_set_id = mcstl.category_set_id
34 AND mc.category_id = mic.category_id
35 AND mc.segment1 = c_classification_code
36 AND mcstl.category_set_name = 'WSH_COMMODITY_CODE';
37
38 CURSOR get_category_basis(c_lane_id IN NUMBER,c_category_id IN NUMBER) IS
39 SELECT basis
40 FROM fte_lane_commodities
41 WHERE lane_id = c_lane_id
42 AND commodity_catg_id = c_category_id;
43
44 -- This category id will get assigned to an item when a lane does not have any classification code assigned to it
45 -- which effectively means the user does not care about the categories of the items going on that lane eg. Parcel lanes
46 g_default_category_id NUMBER:= -9999;
47
48 CURSOR c_get_delivery_id(c_leg_id NUMBER)
49 IS
50 SELECT delivery_id
51 FROM wsh_delivery_legs
52 WHERE delivery_leg_id = c_leg_id;
53
54 CURSOR c_count_delivery_details(c_delivery_id NUMBER)
55 IS
56 SELECT count(delivery_detail_id) FROM wsh_delivery_assignments
57 WHERE delivery_id = c_delivery_id;
58
59 CURSOR c_count_delivery_details2(c_trip_id NUMBER)
60 IS
61 SELECT count(delivery_detail_id) FROM wsh_delivery_assignments
62 WHERE delivery_id in
63 (SELECT wdl.delivery_id
64 FROM wsh_delivery_legs wdl,
65 wsh_trip_stops wts1,
66 wsh_trip_stops wts2
67 WHERE wts1.trip_id = c_trip_id
68 AND wts2.trip_id = c_trip_id
69 AND wts1.stop_id = wdl.pick_up_stop_id
70 AND wts2.stop_id = wdl.drop_off_stop_id
71 );
72
73 -- count the number of deliveries which should not be rated due to freight term
74 CURSOR c_check_del_freight_term(c_delivery_id NUMBER)
75 IS
76 SELECT count(wd.delivery_id)
77 FROM wsh_new_deliveries wd, wsh_global_parameters wgp
78 WHERE (
79 ((wd.shipment_direction in ('I'))
80 and (wgp.rate_ib_dels_fgt_term is not null)
81 and (wd.freight_terms_code is not null)
82 and (wgp.rate_ib_dels_fgt_term <> wd.freight_terms_code)
83 )
84 OR
85 ((wd.shipment_direction in ('D'))
86 and (wgp.rate_ds_dels_fgt_term_id is not null)
87 and (wd.freight_terms_code is not null)
88 and (wgp.rate_ds_dels_fgt_term_id <> wd.freight_terms_code)
89 )
90 OR
91 ((nvl(wd.shipment_direction,'O') in ('O','IO'))
92 and (wgp.skip_rate_ob_dels_fgt_term is not null)
93 and (wd.freight_terms_code is not null)
94 and (wgp.skip_rate_ob_dels_fgt_term = wd.freight_terms_code)
95 )
96 )
97 AND wd.delivery_id = c_delivery_id;
98
99 -- count the number of deliveries which should not be rated due to freight term
100 CURSOR c_check_del_freight_term2(c_trip_id NUMBER)
101 IS
102 SELECT count(wd.delivery_id)
103 FROM wsh_new_deliveries wd, wsh_global_parameters wgp
104 WHERE (
105 ((wd.shipment_direction in ('I'))
106 and (wgp.rate_ib_dels_fgt_term is not null)
107 and (wd.freight_terms_code is not null)
108 and (wgp.rate_ib_dels_fgt_term <> wd.freight_terms_code)
109 )
110 OR
111 ((wd.shipment_direction in ('D'))
112 and (wgp.rate_ds_dels_fgt_term_id is not null)
113 and (wd.freight_terms_code is not null)
114 and (wgp.rate_ds_dels_fgt_term_id <> wd.freight_terms_code)
115 )
116 OR
117 ((nvl(wd.shipment_direction,'O') in ('O','IO'))
118 and (wgp.skip_rate_ob_dels_fgt_term is not null)
119 and (wd.freight_terms_code is not null)
120 and (wgp.skip_rate_ob_dels_fgt_term = wd.freight_terms_code)
121 )
122 )
123 AND wd.delivery_id in
124 (SELECT wdl.delivery_id
125 FROM wsh_delivery_legs wdl,
126 wsh_trip_stops wts1,
127 wsh_trip_stops wts2
128 WHERE wts1.trip_id = c_trip_id
129 AND wts2.trip_id = c_trip_id
130 AND wts1.stop_id = wdl.pick_up_stop_id
131 AND wts2.stop_id = wdl.drop_off_stop_id
132 );
133
134 -- count the number of deliveries which should not be rated due to manifesting
135 CURSOR c_check_del_manifesting(c_delivery_id NUMBER)
136 IS
137 SELECT count(a.delivery_id)
138 FROM wsh_new_deliveries a,
139 mtl_parameters b,
140 wsh_carriers c
141 WHERE a.organization_id = b.organization_id
142 AND a.carrier_id = c.carrier_id
143 AND c.manifesting_enabled_flag = 'Y'
144 AND b.carrier_manifesting_flag = 'Y'
145 AND a.delivery_id = c_delivery_id;
146
147 -- count the number of deliveries which should not be rated due to manifesting
148 CURSOR c_check_del_manifesting2(c_trip_id NUMBER)
149 IS
150 SELECT count(a.delivery_id)
151 FROM wsh_new_deliveries a,
152 mtl_parameters b,
153 wsh_carriers c
154 WHERE a.organization_id = b.organization_id
155 AND a.carrier_id = c.carrier_id
156 AND c.manifesting_enabled_flag = 'Y'
157 AND b.carrier_manifesting_flag = 'Y'
158 AND a.delivery_id in
159 (SELECT wdl.delivery_id
160 FROM wsh_delivery_legs wdl,
161 wsh_trip_stops wts1,
162 wsh_trip_stops wts2
163 WHERE wts1.trip_id = c_trip_id
164 AND wts2.trip_id = c_trip_id
165 AND wts1.stop_id = wdl.pick_up_stop_id
166 AND wts2.stop_id = wdl.drop_off_stop_id
167 );
168
169 CURSOR c_cnt_trip_legs(c_trip_id NUMBER)
170 IS
171 SELECT count(wdl.delivery_leg_id)
172 FROM wsh_delivery_legs wdl,
173 wsh_trip_stops wts1,
174 wsh_trip_stops wts2
175 WHERE wts1.trip_id = c_trip_id
176 AND wts2.trip_id = c_trip_id
177 AND wts1.stop_id = wdl.pick_up_stop_id
178 AND wts2.stop_id = wdl.drop_off_stop_id;
179
180 CURSOR c_count_reprice_reqd(c_trip_id IN NUMBER) IS
181 Select count(*)
182 from wsh_delivery_legs wdl, wsh_trip_stops wts1, wsh_trip_stops wts2,wsh_trips wt
183 where wdl.pick_up_stop_id = wts1.stop_id
184 and wdl.drop_off_stop_id = wts2.stop_id
185 and wdl.reprice_required = 'Y'
186 and wts1.trip_id = wt.trip_id
187 and wts2.trip_id = wt.trip_id
188 and wt.trip_id = c_trip_id;
189
190 TYPE pricing_engine_output_rec_type IS RECORD
191 (output_index NUMBER , -- Should be same as input index
192 -- input_index NUMBER , -- One record per input index
193 priced_quantity NUMBER ,
194 priced_uom_code VARCHAR2(30), -- Do we need or should we
195 -- return in input uom and currency
196 unit_price NUMBER ,
197 adjusted_unit_price NUMBER ,
198 updated_adjusted_unit_price NUMBER,
199 line_unit_price NUMBER,
200 percent_price NUMBER
201 );
202
203 TYPE pricing_engine_output_tab_type IS TABLE OF pricing_engine_output_rec_type INDEX BY BINARY_INTEGER;
204
205 TYPE dlvy_leg_summ_rec_type IS RECORD
206 (entity_id NUMBER ,
207 summary_amount NUMBER
208 );
209
210 TYPE dlvy_leg_summ_tab_type IS TABLE OF dlvy_leg_summ_rec_type INDEX BY BINARY_INTEGER;
211
212 TYPE basis_categ_rec_type IS RECORD
213 (category_id NUMBER ,
214 basis NUMBER
215 );
216
217 TYPE basis_categ_tab_type IS TABLE OF basis_categ_rec_type INDEX BY BINARY_INTEGER;
218
219 TYPE instance_category_rec_type IS RECORD
220 (category_id NUMBER ,
221 instance_index NUMBER
222 );
223
224 TYPE instance_category_tab_type IS TABLE OF instance_category_rec_type INDEX BY BINARY_INTEGER;
225
226 TYPE instance_basis_rec_type IS RECORD
227 (basis NUMBER ,
228 instance_index NUMBER
229 );
230
231 TYPE instance_basis_tab_type IS TABLE OF instance_basis_rec_type INDEX BY BINARY_INTEGER;
232
233 TYPE instance_enginerow_rec_type IS RECORD
234 (input_index NUMBER ,
235 tot_amount NUMBER
236 );
237
238 TYPE instance_enginerow_tab_type IS TABLE OF instance_enginerow_rec_type INDEX BY BINARY_INTEGER;
239
240 TYPE quantity_rec_type IS RECORD
241 (quantity NUMBER ,
242 uom VARCHAR2(30)
243 );
244
245 TYPE quantity_tab_type IS TABLE OF quantity_rec_type INDEX BY BINARY_INTEGER;
246
247 TYPE quantity_basis_rec_type IS RECORD
248 (basis NUMBER ,
249 quantity NUMBER ,
250 uom VARCHAR2(30)
251 );
252
253 TYPE quantity_basis_tab_type IS TABLE OF quantity_basis_rec_type INDEX BY BINARY_INTEGER;
254
255 TYPE total_discount_rec_type IS RECORD
256 (total_amount NUMBER ,
257 discount_amount NUMBER
258 );
259
260 TYPE total_discount_tab_type IS TABLE OF total_discount_rec_type INDEX BY BINARY_INTEGER;
261
262 TYPE container_sum_rec_type IS RECORD
263 (currency_code VARCHAR2(30),
264 total_amount NUMBER ,
265 discount_amount NUMBER ,
266 delivery_id NUMBER ,
267 delivery_leg_id NUMBER DEFAULT NULL,
268 bquantity NUMBER DEFAULT NULL,
269 bbasis NUMBER DEFAULT NULL,
270 buom VARCHAR2(20) DEFAULT NULL
271 );
272
273 TYPE container_sum_tab_type IS TABLE OF container_sum_rec_type INDEX BY BINARY_INTEGER;
274
275 TYPE container_detail_rec_type IS RECORD
276 (entity_id NUMBER ,
277 detail_id NUMBER
278 );
279
280 TYPE container_detail_tab_type IS TABLE OF container_detail_rec_type INDEX BY BINARY_INTEGER;
281
282 TYPE trip_info_rec IS RECORD
283 (
284 trip_id NUMBER,
285 name VARCHAR2(30),
286 planned_flag VARCHAR2(1),
287 status_code VARCHAR2(2),
288 carrier_id NUMBER,
289 ship_method_code VARCHAR2(30),
290 service_level VARCHAR2(30),
291 mode_of_transport VARCHAR2(30),
292 consolidation_allowed VARCHAR2(1),
293 lane_id NUMBER,
294 schedule_id NUMBER,
295 load_tender_status wsh_trips.load_tender_status%TYPE
296 );
297
298 -- Private APIs
299
300 PROCEDURE Get_Basis_Meaning ( p_basis IN NUMBER,
301 x_basis_meaning OUT NOCOPY VARCHAR2
302 )
303 IS
304
305 BEGIN
306 IF p_basis = G_CONTAINER_BASIS THEN
307 x_basis_meaning := 'CONTAINER';
308 ELSIF p_basis = G_WEIGHT_BASIS THEN
309 x_basis_meaning := 'WEIGHT';
310 ELSIF p_basis = G_VOLUME_BASIS THEN
311 x_basis_meaning := 'VOLUME';
312 END IF;
313 END Get_Basis_Meaning;
314
315 PROCEDURE MDC_Get_child_fraction(
316 p_consol_LPN_children IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child detail id, value of parent consol detail id
317 x_fraction OUT NOCOPY DBMS_UTILITY.NUMBER_ARRAY,
318 x_return_status OUT NOCOPY VARCHAR2) IS
319
320 i NUMBER;
321 l_uom VARCHAR2(30);
322 l_weight NUMBER;
323 l_parent_detail_id NUMBER;
324 l_detail_weight DBMS_UTILITY.NUMBER_ARRAY;
325 l_total_lpn_weight DBMS_UTILITY.NUMBER_ARRAY;
326
327 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
328
329 BEGIN
330 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
331 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
332 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'MDC_Get_child_fraction','start');
333
334
335 --Gather sum of all children weight in l_total_lpn_weight
336
337 l_uom:=NULL;
338 i:=p_consol_LPN_children.FIRST;
339 WHILE( i IS NOT NULL)
340 LOOP
341 l_detail_weight(i):=0;
342 IF((g_shipment_line_rows(i).gross_weight IS NOT NULL)
343 AND (g_shipment_line_rows(i).weight_uom_code IS NOT NULL)
344 )
345 THEN
346 IF(l_uom IS NULL)
347 THEN
348 l_uom:=g_shipment_line_rows(i).weight_uom_code;
349 END IF;
350
351 IF (l_uom <> g_shipment_line_rows(i).weight_uom_code)
352 THEN
353
354 l_weight:=FTE_FREIGHT_PRICING_UTIL.convert_uom(
355 g_shipment_line_rows(i).weight_uom_code,
356 l_uom,
357 g_shipment_line_rows(i).gross_weight,
358 0);
359 IF (l_weight IS NULL)
360 THEN
361 raise FTE_FREIGHT_PRICING_UTIL.g_tl_weight_uom_conv_fail;
362 END IF;
363
364
365 ELSE
366 l_weight:=g_shipment_line_rows(i).gross_weight;
367
368 END IF;
369 l_detail_weight(i):=l_weight;
370 IF (l_total_lpn_weight.EXISTS(p_consol_LPN_children(i)))
371 THEN
372 l_total_lpn_weight(p_consol_LPN_children(i)):=
373 l_total_lpn_weight(p_consol_LPN_children(i))+l_weight;
374 ELSE
375 l_total_lpn_weight(p_consol_LPN_children(i)):=l_weight;
376 END IF;
377
378
379
380 END IF;
381
382
383 i:=p_consol_LPN_children.NEXT(i);
384 END LOOP;
385
386 --Determine fraction
387
388 i:=p_consol_LPN_children.FIRST;
389 WHILE( i IS NOT NULL)
390 LOOP
391 x_fraction(i):=0;
392 l_parent_detail_id:=p_consol_LPN_children(i);
393 IF ((l_total_lpn_weight.EXISTS(l_parent_detail_id) )
394 AND (l_total_lpn_weight(l_parent_detail_id)>0))
395 THEN
396 x_fraction(i):=l_detail_weight(i)/l_total_lpn_weight(l_parent_detail_id);
397
398 END IF;
399
400 i:=p_consol_LPN_children.NEXT(i);
401 END LOOP;
402
403
404 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Get_child_fraction');
408 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
405
406 EXCEPTION
407 WHEN FTE_FREIGHT_PRICING_UTIL.g_tl_weight_uom_conv_fail THEN
409 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Get_child_fraction',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_tl_weight_uom_conv_fail');
410 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Get_child_fraction');
411 WHEN others THEN
412 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
413 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Get_child_fraction',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
414 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
415 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Get_child_fraction');
416
417 END MDC_Get_child_fraction;
418
419 PROCEDURE MDC_Get_LPN_Cost_rec(
420 p_consol_LPNs IN DBMS_UTILITY.NUMBER_ARRAY,
421 p_freight_cost_main_tab IN Freight_Cost_Main_Tab_Type,
422 p_freight_cost_temp_tab IN Freight_Cost_Temp_Tab_Type,
423 x_ref OUT NOCOPY DBMS_UTILITY.NUMBER_ARRAY,
424 x_return_status OUT NOCOPY VARCHAR2) IS
425
426 i NUMBER;
427 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
428
429 BEGIN
430 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
431 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
432 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'MDC_Get_LPN_Cost_rec','start');
433
434 i:=p_freight_cost_main_tab.FIRST;
435 WHILE (i IS NOT NULL)
436 LOOP
437 IF((p_freight_cost_main_tab(i).delivery_detail_id IS NOT NULL)
438 AND (p_freight_cost_main_tab(i).line_type_code IS NOT NULL)
439 AND (p_consol_LPNs.EXISTS(p_freight_cost_main_tab(i).delivery_detail_id)))
440 THEN
441 x_ref(p_freight_cost_main_tab(i).delivery_detail_id):=i;
442
443 END IF;
444
445 i:=p_freight_cost_main_tab.NEXT(i);
446 END LOOP;
447
448 i:=p_freight_cost_temp_tab.FIRST;
449 WHILE (i IS NOT NULL)
450 LOOP
451 IF((p_freight_cost_temp_tab(i).delivery_detail_id IS NOT NULL)
452 AND (p_freight_cost_temp_tab(i).line_type_code IS NOT NULL)
453 AND (p_consol_LPNs.EXISTS(p_freight_cost_temp_tab(i).delivery_detail_id)))
454 THEN
455 x_ref(p_freight_cost_temp_tab(i).delivery_detail_id):=i;
456
457 END IF;
458
459 i:=p_freight_cost_temp_tab.NEXT(i);
460 END LOOP;
461
462 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Get_LPN_Cost_rec');
463
464 EXCEPTION
465
466 WHEN others THEN
467 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
468 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Get_LPN_Cost_rec',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
469 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
470 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Get_LPN_Cost_rec');
471
472
473 END MDC_Get_LPN_Cost_rec;
474
475 PROCEDURE MDC_Alloc_From_consol_LPN(
476 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or temp table
477 p_consol_LPNs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by consol LPN detail id
478 p_consol_LPN_children IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child detail id, value of parent consol detail id
479 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
480 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_temp_Tab_Type,
481 x_freight_cost_main_charge IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
482 x_freight_cost_temp_charge IN OUT NOCOPY Freight_Cost_temp_Tab_Type,
483 x_return_status OUT NOCOPY VARCHAR2) IS
484 i NUMBER;
485 j NUMBER;
486 n NUMBER;
487 l_temp NUMBER;
488 l_price_ref DBMS_UTILITY.NUMBER_ARRAY;
489
490
491 l_fractions DBMS_UTILITY.NUMBER_ARRAY;
492 l_dtl_fraction NUMBER;
493 l_LPN_rec_index NUMBER;
494
495 l_child_dtl_temp_rec Freight_Cost_temp_Rec_Type;
496 l_child_dtl_main_rec WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
497 l_LPN_main_rec WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
498 l_LPN_temp_rec Freight_Cost_Temp_Rec_Type;
499
500 l_freight_cost_type_id NUMBER;
501
502 l_return_status VARCHAR2(1);
503 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
504
505 BEGIN
506 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
507 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
508 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'MDC_Alloc_From_consol_LPN','start');
509
510
511
512 --Get LPN Summary records locations
513 MDC_Get_LPN_Cost_rec(
514 p_consol_LPNs=>p_consol_LPNs,
515 p_freight_cost_main_tab=>x_freight_cost_main_price,
516 p_freight_cost_temp_tab=>x_freight_cost_temp_price,
517 x_ref=>l_price_ref,
518 x_return_status=>l_return_status);
519
520 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
521 THEN
522 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
523 THEN
524 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_Get_LPN_cost_rec_fail;
525 END IF;
526 END IF;
527
528
529
530 MDC_Get_child_fraction(
531 p_consol_LPN_children=>p_consol_LPN_children,--Indexed by child detail id, value of parent consol detail id
532 x_fraction=>l_fractions,
533 x_return_status=>l_return_status);
534
535 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
536 THEN
540 END IF;
537 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
538 THEN
539 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_get_chld_fract_fail;
541 END IF;
542
543
544
545 --Price records
546
547
548 i:=p_consol_LPN_children.FIRST;
549 WHILE(i IS NOT NULL)
550 LOOP
551
552 l_dtl_fraction:=l_fractions(i);
553
554 l_LPN_rec_index:=l_price_ref(p_consol_LPN_children(i));
555
556 IF(p_save_flag='M')
557 THEN
558
559 l_LPN_main_rec:=x_freight_cost_main_price(l_LPN_rec_index);
560 l_child_dtl_main_rec:=l_LPN_main_rec;
561 l_child_dtl_main_rec.delivery_id:=g_shipment_line_rows(i).delivery_id;
562 l_child_dtl_main_rec.delivery_leg_id:=g_shipment_line_rows(i).delivery_leg_id;
563 l_child_dtl_main_rec.delivery_detail_id:=i;
564 l_child_dtl_main_rec.total_amount:=l_dtl_fraction*l_child_dtl_main_rec.total_amount;
565 l_child_dtl_main_rec.unit_amount:=l_dtl_fraction*l_child_dtl_main_rec.unit_amount;
566 l_child_dtl_main_rec.quantity:=l_dtl_fraction*l_child_dtl_main_rec.quantity;
567 l_child_dtl_main_rec.billable_quantity:=l_dtl_fraction*l_child_dtl_main_rec.billable_quantity;
568 l_child_dtl_main_rec.line_type_code:='PRICE';
569 x_freight_cost_main_price(x_freight_cost_main_price.LAST+1):=l_child_dtl_main_rec;
570
571
572 --ELSIF(p_save_flag='T')
573 ELSE -- P or T
574 --THEN
575
576 l_LPN_temp_rec:=x_freight_cost_temp_price(l_LPN_rec_index);
577
578 l_child_dtl_temp_rec:=l_LPN_temp_rec;
579
580 l_child_dtl_temp_rec.delivery_id:=g_shipment_line_rows(i).delivery_id;
581
582 l_child_dtl_temp_rec.delivery_leg_id:=g_shipment_line_rows(i).delivery_leg_id;
583 l_child_dtl_temp_rec.delivery_detail_id:=i;
584 l_child_dtl_temp_rec.total_amount:=l_dtl_fraction*l_child_dtl_temp_rec.total_amount;
585 l_child_dtl_temp_rec.unit_amount:=l_dtl_fraction*l_child_dtl_temp_rec.unit_amount;
586 l_child_dtl_temp_rec.quantity:=l_dtl_fraction*l_child_dtl_temp_rec.quantity;
587 l_child_dtl_temp_rec.billable_quantity:=l_dtl_fraction*l_child_dtl_temp_rec.billable_quantity;
588 l_child_dtl_temp_rec.line_type_code:='PRICE';
589
590 x_freight_cost_temp_price(x_freight_cost_temp_price.LAST+1):=l_child_dtl_temp_rec;
591
592
593
594 END IF;
595
596
597
598
599 i:=p_consol_LPN_children.NEXT(i);
600 END LOOP;
601
602
603 --Charge records
604
605
606
607 i:=x_freight_cost_main_charge.FIRST;
608 n:=x_freight_cost_main_charge.LAST;
609 WHILE((i IS NOT NULL) AND (i<= n) )
610 LOOP
611
612
613 IF ((x_freight_cost_main_charge(i).delivery_detail_id IS NOT NULL)
614 AND (p_consol_LPNs.EXISTS(x_freight_cost_main_charge(i).delivery_detail_id)))
615 THEN
616 j:=p_consol_LPN_children.FIRST;
617 WHILE(j IS NOT NULL)
618 LOOP
619 IF(p_consol_LPN_children(j)=x_freight_cost_main_charge(i).delivery_detail_id)
620 THEN
621
622 l_dtl_fraction:=l_fractions(j);
623
624 l_child_dtl_main_rec:=x_freight_cost_main_charge(i);
625 l_child_dtl_main_rec.delivery_id:=g_shipment_line_rows(j).delivery_id;
626 l_child_dtl_main_rec.delivery_leg_id:=g_shipment_line_rows(j).delivery_leg_id;
627 l_child_dtl_main_rec.delivery_detail_id:=j;
628 l_child_dtl_main_rec.total_amount:=l_dtl_fraction*l_child_dtl_main_rec.total_amount;
629 l_child_dtl_main_rec.unit_amount:=l_dtl_fraction*l_child_dtl_main_rec.unit_amount;
630 l_child_dtl_main_rec.quantity:=l_dtl_fraction*l_child_dtl_main_rec.quantity;
631 l_child_dtl_main_rec.billable_quantity:=l_dtl_fraction*l_child_dtl_main_rec.billable_quantity;
632 x_freight_cost_main_charge(x_freight_cost_main_charge.LAST+1):=l_child_dtl_main_rec;
633
634
635
636 END IF;
637
638 j:=p_consol_LPN_children.NEXT(j);
639
640 END LOOP;
641 --Delete this charge for the consol LPN
642 x_freight_cost_main_charge.DELETE(i);
643
644 END IF;
645
646 i:=x_freight_cost_main_charge.NEXT(i);
647 END LOOP;
648
649
650
651
652
653 i:=x_freight_cost_temp_charge.FIRST;
654 n:=x_freight_cost_temp_charge.LAST;
655 WHILE((i IS NOT NULL) AND (i<= n) )
656 LOOP
657 IF ((x_freight_cost_temp_charge(i).delivery_detail_id IS NOT NULL)
658 AND (p_consol_LPNs.EXISTS(x_freight_cost_temp_charge(i).delivery_detail_id)))
659 THEN
660 j:=p_consol_LPN_children.FIRST;
661 WHILE(j IS NOT NULL)
662 LOOP
663 IF(p_consol_LPN_children(j)=x_freight_cost_temp_charge(i).delivery_detail_id)
664 THEN
668 l_child_dtl_temp_rec:=x_freight_cost_temp_charge(i);
665
666 l_dtl_fraction:=l_fractions(j);
667
669 l_child_dtl_temp_rec.delivery_id:=g_shipment_line_rows(j).delivery_id;
670 l_child_dtl_temp_rec.delivery_leg_id:=g_shipment_line_rows(j).delivery_leg_id;
671 l_child_dtl_temp_rec.delivery_detail_id:=j;
672 l_child_dtl_temp_rec.total_amount:=l_dtl_fraction*l_child_dtl_temp_rec.total_amount;
673 l_child_dtl_temp_rec.unit_amount:=l_dtl_fraction*l_child_dtl_temp_rec.unit_amount;
674 l_child_dtl_temp_rec.quantity:=l_dtl_fraction*l_child_dtl_temp_rec.quantity;
675 l_child_dtl_temp_rec.billable_quantity:=l_dtl_fraction*l_child_dtl_temp_rec.billable_quantity;
676 x_freight_cost_temp_charge(x_freight_cost_temp_charge.LAST+1):=l_child_dtl_temp_rec;
677
678
679
680 END IF;
681
682 j:=p_consol_LPN_children.NEXT(j);
683
684 END LOOP;
685 --Delete this charge for the consol LPN
686 x_freight_cost_temp_charge.DELETE(i);
687
688 END IF;
689
690 i:=x_freight_cost_temp_charge.NEXT(i);
691 END LOOP;
692
693
694
695
696
697
698
699
700
701 get_fc_type_id(
702 p_line_type_code => 'FTESUMMARY',
703 p_charge_subtype_code => 'SUMMARY',
704 x_freight_cost_type_id => l_freight_cost_type_id,
705 x_return_status => l_return_status);
706
707 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
708 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
709 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
710 END IF;
711 ELSE
712 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
713 END IF;
714
715
716
717 --Alter PRICE to SUMMARY for consol LPNs
718
719 i:=l_price_ref.FIRST;
720 WHILE(i IS NOT NULL)
721 LOOP
722 IF(p_save_flag='M')
723 THEN
724
725 x_freight_cost_main_price(l_price_ref(i)).line_type_code:='SUMMARY';
726
727 x_freight_cost_main_price(l_price_ref(i)).freight_cost_type_id:=l_freight_cost_type_id;
728 ELSE--(p_save_flag='T') or P
729 --THEN
730 x_freight_cost_temp_price(l_price_ref(i)).line_type_code:='SUMMARY';
731
732 x_freight_cost_temp_price(l_price_ref(i)).freight_cost_type_id:=l_freight_cost_type_id;
733
734
735 END IF;
736
737 i:=l_price_ref.NEXT(i);
738 END LOOP;
739
740
741 --Remove gaps in x_freight_cost_main_charge
742
743 i:=x_freight_cost_main_charge.FIRST;
744 j:=i;
745 WHILE(i IS NOT NULL)
746 LOOP
747 IF(j <> i)
748 THEN
749 x_freight_cost_main_charge(j):=x_freight_cost_main_charge(i);
750
751 END IF;
752
753
754 j:=j+1;
755 i:=x_freight_cost_main_charge.NEXT(i);
756 END LOOP;
757
758
759 --Remove gaps in x_freight_cost_temp_charge
760
761 i:=x_freight_cost_temp_charge.FIRST;
762 j:=i;
763 WHILE(i IS NOT NULL)
764 LOOP
765 IF(j <> i)
766 THEN
767 x_freight_cost_temp_charge(j):=x_freight_cost_temp_charge(i);
768
769 END IF;
770
771
772 j:=j+1;
773 i:=x_freight_cost_temp_charge.NEXT(i);
774 END LOOP;
775
776 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Alloc_From_consol_LPN');
777
778 EXCEPTION
779
780 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_Get_LPN_cost_rec_fail THEN
781 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
782 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Alloc_From_consol_LPN',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_Get_LPN_cost_rec_fail');
783 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Alloc_From_consol_LPN');
784
785
786 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_get_chld_fract_fail THEN
787 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
788 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Alloc_From_consol_LPN',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_get_chld_fract_fail');
789 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Alloc_From_consol_LPN');
790
791
792 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed THEN
793 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
794 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Alloc_From_consol_LPN',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_fc_type_failed');
795 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Alloc_From_consol_LPN');
796 WHEN others THEN
797 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
798 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Alloc_From_consol_LPN',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
799 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
800 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Alloc_From_consol_LPN');
801
802
803
804 END MDC_Alloc_From_consol_LPN;
805
806
807 PROCEDURE Create_Parent_Dleg_Summaries(
808 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or temp table
809 p_parent_dlegs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by parent dleg id
810 p_child_dlegs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child dleg id, value of parent dleg id
811 p_dleg_to_delivery IN DBMS_UTILITY.NUMBER_ARRAY,
812 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_main_Tab_Type,
813 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_temp_Tab_Type,
817 l_existing_dlegs DBMS_UTILITY.NUMBER_ARRAY;
814 x_return_status OUT NOCOPY VARCHAR2) IS
815 i NUMBER;
816 l_parent_dleg_summaries DBMS_UTILITY.NUMBER_ARRAY;
818 l_freight_cost_temp_price Freight_Cost_temp_Rec_Type;
819 l_freight_cost_main_price WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
820 l_return_status VARCHAR2(1);
821 l_index NUMBER;
822 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
823
824 BEGIN
825 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
826 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
827 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Create_Parent_Dleg_Summaries','start');
828
829
830
831
832 i:=x_freight_cost_main_price.FIRST;
833 WHILE(i IS NOT NULL)
834 LOOP
835
836 IF ((x_freight_cost_main_price(i).delivery_leg_id IS NOT NULL)
837 AND (x_freight_cost_main_price(i).delivery_detail_id IS NULL)
838 AND (p_child_dlegs.EXISTS(x_freight_cost_main_price(i).delivery_leg_id)))
839 THEN
840
841
842 IF(l_parent_dleg_summaries.EXISTS(p_child_dlegs(x_freight_cost_main_price(i).delivery_leg_id)))
843 THEN
844
845 l_parent_dleg_summaries(p_child_dlegs(x_freight_cost_main_price(i).delivery_leg_id)):=
846 l_parent_dleg_summaries(p_child_dlegs(x_freight_cost_main_price(i).delivery_leg_id))
847 +x_freight_cost_main_price(i).total_amount;
848 ELSE
849
850 l_parent_dleg_summaries(p_child_dlegs(x_freight_cost_main_price(i).delivery_leg_id)):=
851 x_freight_cost_main_price(i).total_amount;
852
853 l_freight_cost_main_price:=x_freight_cost_main_price(i);
854 END IF;
855
856 END IF;
857
858 IF ((x_freight_cost_main_price(i).delivery_leg_id IS NOT NULL)
859 AND (x_freight_cost_main_price(i).delivery_detail_id IS NULL)
860 AND (p_parent_dlegs.EXISTS(x_freight_cost_main_price(i).delivery_leg_id)))
861 THEN
862
863 l_existing_dlegs(x_freight_cost_main_price(i).delivery_leg_id):=i;
864
865 END IF;
866
867 i:=x_freight_cost_main_price.NEXT(i);
868 END LOOP;
869
870
871 i:=x_freight_cost_temp_price.FIRST;
872 WHILE(i IS NOT NULL)
873 LOOP
874
875 IF ((x_freight_cost_temp_price(i).delivery_leg_id IS NOT NULL)
876 AND (x_freight_cost_temp_price(i).delivery_detail_id IS NULL)
877 AND (p_child_dlegs.EXISTS(x_freight_cost_temp_price(i).delivery_leg_id)))
878 THEN
879
880 IF(l_parent_dleg_summaries.EXISTS(p_child_dlegs(x_freight_cost_temp_price(i).delivery_leg_id)))
881 THEN
882
883 l_parent_dleg_summaries(p_child_dlegs(x_freight_cost_temp_price(i).delivery_leg_id)):=
884 l_parent_dleg_summaries(p_child_dlegs(x_freight_cost_temp_price(i).delivery_leg_id))
885 +x_freight_cost_temp_price(i).total_amount;
886 ELSE
887
888 l_parent_dleg_summaries(p_child_dlegs(x_freight_cost_temp_price(i).delivery_leg_id)):=
889 x_freight_cost_temp_price(i).total_amount;
890
891 l_freight_cost_temp_price:=x_freight_cost_temp_price(i);
892 END IF;
893
894 END IF;
895
896
897 IF ((x_freight_cost_temp_price(i).delivery_leg_id IS NOT NULL)
898 AND (x_freight_cost_temp_price(i).delivery_detail_id IS NULL)
899 AND (p_parent_dlegs.EXISTS(x_freight_cost_temp_price(i).delivery_leg_id)))
900 THEN
901
902 l_existing_dlegs(x_freight_cost_temp_price(i).delivery_leg_id):=i;
903 END IF;
904
905 i:=x_freight_cost_temp_price.NEXT(i);
906 END LOOP;
907
908
909 i:=l_parent_dleg_summaries.FIRST;
910 WHILE(i IS NOT NULL)
911 LOOP
912
913 IF ( l_existing_dlegs.EXISTS(i))
914 THEN
915
916 IF(p_save_flag='M')
917 THEN
918 x_freight_cost_main_price(l_existing_dlegs(i)).total_amount:=l_parent_dleg_summaries(i);
919 x_freight_cost_main_price(l_existing_dlegs(i)).unit_amount:=l_parent_dleg_summaries(i);
920 ELSE--(p_save_flag='T')
921 --THEN
922 x_freight_cost_temp_price(l_existing_dlegs(i)).total_amount:=l_parent_dleg_summaries(i);
923 x_freight_cost_temp_price(l_existing_dlegs(i)).unit_amount:=l_parent_dleg_summaries(i);
924 END IF;
925
926
927 ELSE
928
929
930 IF(p_save_flag='M')
931 THEN
932
933 --get fc id for dleg
934 l_freight_cost_main_price.freight_cost_id:=FTE_FREIGHT_PRICING.get_fc_id_from_dleg(i);
935
936 l_freight_cost_main_price.delivery_leg_id:=i;
937
938 l_freight_cost_main_price.delivery_id:=p_dleg_to_delivery(i);
939
940 l_freight_cost_main_price.total_amount:=l_parent_dleg_summaries(i);
941 l_freight_cost_main_price.unit_amount:=l_parent_dleg_summaries(i);
942
943 x_freight_cost_main_price(x_freight_cost_main_price.LAST+1):=l_freight_cost_main_price;
944
945
946 ELSE--(p_save_flag='T') or P
947 --THEN
948
949 l_freight_cost_temp_price.delivery_leg_id:=i;
950
951 l_freight_cost_temp_price.delivery_id:=p_dleg_to_delivery(i);
952
953 l_freight_cost_temp_price.total_amount:=l_parent_dleg_summaries(i);
954 l_freight_cost_temp_price.unit_amount:=l_parent_dleg_summaries(i);
955
956 l_index:=x_freight_cost_temp_price.LAST+1;
957 x_freight_cost_temp_price(l_index):=l_freight_cost_temp_price;
958
959
960 END IF;
961
962 END IF;
963 i:=l_parent_dleg_summaries.NEXT(i);
964 END LOOP;
965
966 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Parent_Dleg_Summaries');
967
968 EXCEPTION
972 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
969 WHEN others THEN
970 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
971 FTE_FREIGHT_PRICING_UTIL.set_exception('Create_Parent_Dleg_Summaries',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
973 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Parent_Dleg_Summaries');
974
975 END Create_Parent_Dleg_Summaries;
976
977
978 PROCEDURE Create_Child_Dleg_Summaries(
979 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or temp table
980 p_dleg_to_delivery IN DBMS_UTILITY.NUMBER_ARRAY,
981 p_parent_dlegs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by parent dleg id
982 p_child_dlegs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child dleg id, value of parent dleg id
983 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_main_Tab_Type,
984 x_fc_main_update_rows IN OUT NOCOPY Freight_Cost_main_Tab_Type,
985 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_temp_Tab_Type,
986 x_return_status OUT NOCOPY VARCHAR2) IS
987
988 l_child_dleg_summaries DBMS_UTILITY.NUMBER_ARRAY;
989 l_existing_dlegs DBMS_UTILITY.NUMBER_ARRAY;
990 i NUMBER;
991 l_freight_cost_main_price WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
992 l_freight_cost_temp_price Freight_Cost_Temp_Rec_Type;
993 l_freight_cost_type_id NUMBER;
994 l_return_status VARCHAR2(1);
995 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
996
997 BEGIN
998 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
999 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
1000 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Create_Child_Dleg_Summaries','start');
1001
1002
1003
1004 i:=x_freight_cost_main_price.FIRST;
1005 WHILE(i IS NOT NULL)
1006 LOOP
1007 IF((x_freight_cost_main_price(i).delivery_detail_id IS NOT NULL)
1008 AND (x_freight_cost_main_price(i).line_type_code ='PRICE')
1009 AND (x_freight_cost_main_price(i).delivery_leg_id IS NOT NULL)
1010 AND(p_child_dlegs.EXISTS(x_freight_cost_main_price(i).delivery_leg_id)))
1011 THEN
1012
1013 l_freight_cost_main_price:=x_freight_cost_main_price(i);
1014
1015 IF(l_child_dleg_summaries.EXISTS(x_freight_cost_main_price(i).delivery_leg_id))
1016 THEN
1017 l_child_dleg_summaries(x_freight_cost_main_price(i).delivery_leg_id):=
1018 l_child_dleg_summaries(x_freight_cost_main_price(i).delivery_leg_id)
1019 +x_freight_cost_main_price(i).total_amount;
1020 ELSE
1021 l_child_dleg_summaries(x_freight_cost_main_price(i).delivery_leg_id):=
1022 x_freight_cost_main_price(i).total_amount;
1023
1024 END IF;
1025
1026 END IF;
1027
1028 IF((x_freight_cost_main_price(i).delivery_detail_id IS NULL)
1029 AND (x_freight_cost_main_price(i).line_type_code ='SUMMARY')
1030 AND (x_freight_cost_main_price(i).delivery_leg_id IS NOT NULL)
1031 AND(p_child_dlegs.EXISTS(x_freight_cost_main_price(i).delivery_leg_id)))
1032 THEN
1033 l_existing_dlegs(x_freight_cost_main_price(i).delivery_leg_id):=i;
1034
1035 END IF;
1036
1037 i:=x_freight_cost_main_price.NEXT(i);
1038 END LOOP;
1039
1040
1041
1042 i:=x_freight_cost_temp_price.FIRST;
1043 WHILE(i IS NOT NULL)
1044 LOOP
1045 IF((x_freight_cost_temp_price(i).delivery_detail_id IS NOT NULL)
1046 AND (x_freight_cost_temp_price(i).line_type_code ='PRICE')
1047 AND (x_freight_cost_temp_price(i).delivery_leg_id IS NOT NULL)
1048 AND(p_child_dlegs.EXISTS(x_freight_cost_temp_price(i).delivery_leg_id)))
1049 THEN
1050
1051 l_freight_cost_temp_price:=x_freight_cost_temp_price(i);
1052 IF(l_child_dleg_summaries.EXISTS(x_freight_cost_temp_price(i).delivery_leg_id))
1053 THEN
1054 l_child_dleg_summaries(x_freight_cost_temp_price(i).delivery_leg_id):=
1055 l_child_dleg_summaries(x_freight_cost_temp_price(i).delivery_leg_id)
1056 +x_freight_cost_temp_price(i).total_amount;
1057 ELSE
1058 l_child_dleg_summaries(x_freight_cost_temp_price(i).delivery_leg_id):=
1059 x_freight_cost_temp_price(i).total_amount;
1060
1061 END IF;
1062
1063 END IF;
1064
1065
1066 IF((x_freight_cost_temp_price(i).delivery_detail_id IS NULL)
1067 AND (x_freight_cost_temp_price(i).line_type_code ='SUMMARY')
1068 AND (x_freight_cost_temp_price(i).delivery_leg_id IS NOT NULL)
1069 AND(p_child_dlegs.EXISTS(x_freight_cost_temp_price(i).delivery_leg_id)))
1070 THEN
1071
1072 l_existing_dlegs(x_freight_cost_temp_price(i).delivery_leg_id):=i;
1073 END IF;
1074
1075 i:=x_freight_cost_temp_price.NEXT(i);
1076 END LOOP;
1077
1078
1079
1080 get_fc_type_id(
1081 p_line_type_code => 'FTESUMMARY',
1082 p_charge_subtype_code => 'SUMMARY',
1083 x_freight_cost_type_id => l_freight_cost_type_id,
1084 x_return_status => l_return_status);
1085
1086 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1087 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1088 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
1089 END IF;
1090 ELSE
1091 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
1092 END IF;
1093
1094 l_freight_cost_main_price.freight_cost_type_id:=l_freight_cost_type_id;
1095 l_freight_cost_main_price.line_type_code:='SUMMARY';
1096 l_freight_cost_main_price.delivery_detail_id:=NULL;
1097 l_freight_cost_main_price.quantity:=NULL;
1098 l_freight_cost_main_price.uom:=NULL;
1099 l_freight_cost_main_price.billable_basis:=NULL;
1100 l_freight_cost_main_price.billable_quantity:=NULL;
1101 l_freight_cost_main_price.billable_uom:=NULL;
1102 l_freight_cost_main_price.charge_unit_value:=NULL;
1103
1104 l_freight_cost_temp_price.freight_cost_type_id:=l_freight_cost_type_id;
1105 l_freight_cost_temp_price.line_type_code:='SUMMARY';
1106 l_freight_cost_temp_price.delivery_detail_id:=NULL;
1107 l_freight_cost_temp_price.quantity:=NULL;
1108 l_freight_cost_temp_price.uom:=NULL;
1109 l_freight_cost_temp_price.billable_basis:=NULL;
1110 l_freight_cost_temp_price.billable_quantity:=NULL;
1111 l_freight_cost_temp_price.billable_uom:=NULL;
1112 l_freight_cost_temp_price.charge_unit_value:=NULL;
1113
1114
1115 i:=l_child_dleg_summaries.FIRST;
1116 WHILE(i IS NOT NULL)
1117 LOOP
1118 --Some dlegs may already have summaries created
1119 --over write their amounts
1120 IF ( l_existing_dlegs.EXISTS(i))
1121 THEN
1122
1123 IF(p_save_flag='M')
1124 THEN
1125 x_fc_main_update_rows(l_existing_dlegs(i)).total_amount:=l_child_dleg_summaries(i);
1126 x_fc_main_update_rows(l_existing_dlegs(i)).unit_amount:=l_child_dleg_summaries(i);
1127 ELSE--(p_save_flag='T') or P
1128 --THEN
1129 x_freight_cost_temp_price(l_existing_dlegs(i)).total_amount:=l_child_dleg_summaries(i);
1130 x_freight_cost_temp_price(l_existing_dlegs(i)).unit_amount:=l_child_dleg_summaries(i);
1131 END IF;
1132
1133
1134 ELSE
1135 IF(p_save_flag='M')
1136 THEN
1137
1138
1139 l_freight_cost_main_price.freight_cost_id:=FTE_FREIGHT_PRICING.get_fc_id_from_dleg(i);
1140
1141
1142 l_freight_cost_main_price.total_amount:=l_child_dleg_summaries(i);
1143 l_freight_cost_main_price.unit_amount:=l_child_dleg_summaries(i);
1144 l_freight_cost_main_price.delivery_leg_id:=i;
1145 l_freight_cost_main_price.delivery_id:=p_dleg_to_delivery(i);
1146
1147 x_fc_main_update_rows(x_fc_main_update_rows.LAST+1):=l_freight_cost_main_price;
1148
1149 ELSE--IF(p_save_flag='T') or P
1150 --THEN
1151
1152 l_freight_cost_temp_price.total_amount:=l_child_dleg_summaries(i);
1153 l_freight_cost_temp_price.unit_amount:=l_child_dleg_summaries(i);
1154 l_freight_cost_temp_price.delivery_leg_id:=i;
1155 l_freight_cost_temp_price.delivery_id:=p_dleg_to_delivery(i);
1156
1157 x_freight_cost_temp_price(x_freight_cost_temp_price.LAST+1):=l_freight_cost_temp_price;
1158
1159
1160 END IF;
1161
1162 END IF;
1163
1164 i:=l_child_dleg_summaries.NEXT(i);
1165 END LOOP;
1166
1167 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Child_Dleg_Summaries');
1168
1169 EXCEPTION
1170 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed THEN
1171 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1172 FTE_FREIGHT_PRICING_UTIL.set_exception('Create_Child_Dleg_Summaries',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_fc_type_failed');
1173 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Child_Dleg_Summaries');
1177 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1174 WHEN others THEN
1175 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1176 FTE_FREIGHT_PRICING_UTIL.set_exception('Create_Child_Dleg_Summaries',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
1178 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Child_Dleg_Summaries');
1179
1180
1181 END Create_Child_Dleg_Summaries;
1182
1183
1184 PROCEDURE Populate_Dleg_Id(
1185 p_delivery_to_dleg IN DBMS_UTILITY.NUMBER_ARRAY,
1186 x_freight_cost_temp IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
1187 x_return_status OUT NOCOPY VARCHAR2 ) IS
1188
1189 i NUMBER;
1190 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
1191
1192 BEGIN
1193 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1194 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
1195 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Populate_Dleg_Id','start');
1196
1197
1198 i:=x_freight_cost_temp.FIRST;
1199 WHILE( i IS NOT NULL)
1200 LOOP
1201 IF((x_freight_cost_temp(i).delivery_id IS NOT NULL)
1202 AND (x_freight_cost_temp(i).delivery_leg_id IS NULL)
1203 AND(p_delivery_to_dleg.EXISTS(x_freight_cost_temp(i).delivery_id)))
1204 THEN
1205
1206 x_freight_cost_temp(i).delivery_leg_id:=
1207 p_delivery_to_dleg(x_freight_cost_temp(i).delivery_id);
1208
1209 END IF;
1210
1211 i:=x_freight_cost_temp.NEXT(i);
1212 END LOOP;
1213 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Populate_Dleg_Id');
1214
1215 EXCEPTION
1216 WHEN others THEN
1217 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1218 FTE_FREIGHT_PRICING_UTIL.set_exception('Populate_Dleg_Id',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
1219 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1220 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Populate_Dleg_Id');
1221
1222
1223 END Populate_Dleg_Id;
1224
1225 PROCEDURE Create_LPN_Summary(
1226 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or temp table
1227 p_consol_LPN_children IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child detail id, value of parent consol detail id
1228 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
1229 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_temp_Tab_Type,
1230 x_freight_cost_main_charge IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
1231 x_freight_cost_temp_charge IN OUT NOCOPY Freight_Cost_temp_Tab_Type,
1232 x_return_status OUT NOCOPY VARCHAR2) IS
1233
1234 i NUMBER;
1235 l_LPN_summaries DBMS_UTILITY.NUMBER_ARRAY;
1236 l_existing_LPN DBMS_UTILITY.NUMBER_ARRAY;--If it is required to update existing LPN summaries
1237 l_freight_cost_main_price WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
1238 l_freight_cost_temp_price Freight_Cost_temp_Rec_Type;
1239 l_freight_cost_type_id NUMBER;
1240 l_return_status VARCHAR2(1);
1241
1242 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
1243
1244 BEGIN
1245 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1246 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
1247 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Create_LPN_Summary','start');
1248
1249
1250 i:=x_freight_cost_main_price.FIRST;
1251 WHILE(i IS NOT NULL)
1252 LOOP
1253 IF ((x_freight_cost_main_price(i).delivery_detail_id IS NOT NULL)
1254 AND(x_freight_cost_main_price(i).line_type_code='PRICE')
1255 AND (p_consol_LPN_children.EXISTS(x_freight_cost_main_price(i).delivery_detail_id)))
1256 THEN
1257
1258 IF(l_LPN_summaries.EXISTS(p_consol_LPN_children(x_freight_cost_main_price(i).delivery_detail_id)))
1259 THEN
1260 l_LPN_summaries(p_consol_LPN_children(x_freight_cost_main_price(i).delivery_detail_id)):=
1261 l_LPN_summaries(p_consol_LPN_children(x_freight_cost_main_price(i).delivery_detail_id))
1262 +x_freight_cost_main_price(i).total_amount;
1263 ELSE
1264
1265 l_LPN_summaries(p_consol_LPN_children(x_freight_cost_main_price(i).delivery_detail_id)):=
1266 x_freight_cost_main_price(i).total_amount;
1267
1268 l_freight_cost_main_price:=x_freight_cost_main_price(i);
1269 END IF;
1270
1271 END IF;
1272
1273 i:=x_freight_cost_main_price.NEXT(i);
1274 END LOOP;
1275
1276
1277 i:=x_freight_cost_temp_price.FIRST;
1278 WHILE(i IS NOT NULL)
1279 LOOP
1280 IF ((x_freight_cost_temp_price(i).delivery_detail_id IS NOT NULL)
1281 AND(x_freight_cost_temp_price(i).line_type_code='PRICE')
1282 AND (p_consol_LPN_children.EXISTS(x_freight_cost_temp_price(i).delivery_detail_id)))
1283 THEN
1284
1285 IF(l_LPN_summaries.EXISTS(p_consol_LPN_children(x_freight_cost_temp_price(i).delivery_detail_id)))
1286 THEN
1287 l_LPN_summaries(p_consol_LPN_children(x_freight_cost_temp_price(i).delivery_detail_id)):=
1288 l_LPN_summaries(p_consol_LPN_children(x_freight_cost_temp_price(i).delivery_detail_id))
1289 +x_freight_cost_temp_price(i).total_amount;
1290 ELSE
1291
1292 l_LPN_summaries(p_consol_LPN_children(x_freight_cost_temp_price(i).delivery_detail_id)):=
1293 x_freight_cost_temp_price(i).total_amount;
1294
1295 l_freight_cost_temp_price:=x_freight_cost_temp_price(i);
1296 END IF;
1297
1298 END IF;
1299
1300 i:=x_freight_cost_temp_price.NEXT(i);
1301 END LOOP;
1302
1303
1304 get_fc_type_id(
1305 p_line_type_code => 'FTESUMMARY',
1309
1306 p_charge_subtype_code => 'SUMMARY',
1307 x_freight_cost_type_id => l_freight_cost_type_id,
1308 x_return_status => l_return_status);
1310 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1311 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1312 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
1313 END IF;
1314 ELSE
1315 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
1316 END IF;
1317
1318 l_freight_cost_main_price.freight_cost_type_id:=l_freight_cost_type_id;
1319 l_freight_cost_main_price.line_type_code:='SUMMARY';
1320 l_freight_cost_main_price.delivery_detail_id:=NULL;
1321 l_freight_cost_main_price.quantity:=NULL;
1322 l_freight_cost_main_price.uom:=NULL;
1323 l_freight_cost_main_price.billable_basis:=NULL;
1324 l_freight_cost_main_price.billable_quantity:=NULL;
1325 l_freight_cost_main_price.billable_uom:=NULL;
1326 l_freight_cost_main_price.charge_unit_value:=NULL;
1327
1328 l_freight_cost_temp_price.freight_cost_type_id:=l_freight_cost_type_id;
1329 l_freight_cost_temp_price.line_type_code:='SUMMARY';
1330 l_freight_cost_temp_price.delivery_detail_id:=NULL;
1331 l_freight_cost_temp_price.quantity:=NULL;
1332 l_freight_cost_temp_price.uom:=NULL;
1333 l_freight_cost_temp_price.billable_basis:=NULL;
1334 l_freight_cost_temp_price.billable_quantity:=NULL;
1335 l_freight_cost_temp_price.billable_uom:=NULL;
1336 l_freight_cost_temp_price.charge_unit_value:=NULL;
1337
1338
1339
1340 i:=l_LPN_summaries.FIRST;
1341 WHILE(i IS NOT NULL)
1342 LOOP
1343 IF(p_save_flag='M')
1344 THEN
1345
1346 l_freight_cost_main_price.delivery_detail_id:=i;
1347 l_freight_cost_main_price.delivery_id:=g_shipment_line_rows(i).delivery_id;
1348 l_freight_cost_main_price.delivery_leg_id:=g_shipment_line_rows(i).delivery_leg_id;
1349
1350 l_freight_cost_main_price.total_amount:=l_LPN_summaries(i);
1351 l_freight_cost_main_price.unit_amount:=l_LPN_summaries(i);
1352 x_freight_cost_main_price(x_freight_cost_main_price.LAST+1):=l_freight_cost_main_price;
1353
1354
1355 ELSE--(p_save_flag='T') or P
1356 --THEN
1357 l_freight_cost_temp_price.delivery_detail_id:=i;
1358 l_freight_cost_temp_price.delivery_id:=g_shipment_line_rows(i).delivery_id;
1359 l_freight_cost_temp_price.delivery_leg_id:=g_shipment_line_rows(i).delivery_leg_id;
1360
1361 l_freight_cost_temp_price.total_amount:=l_LPN_summaries(i);
1362 l_freight_cost_temp_price.unit_amount:=l_LPN_summaries(i);
1363 x_freight_cost_temp_price(x_freight_cost_temp_price.LAST+1):=l_freight_cost_temp_price;
1364
1365 END IF;
1366
1367 i:=l_LPN_summaries.NEXT(i);
1368 END LOOP;
1369
1370 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_LPN_Summary');
1371
1372 EXCEPTION
1373 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed THEN
1374 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1375 FTE_FREIGHT_PRICING_UTIL.set_exception('Create_LPN_Summary',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_fc_type_failed');
1376 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_LPN_Summary');
1377 WHEN others THEN
1381 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_LPN_Summary');
1378 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1379 FTE_FREIGHT_PRICING_UTIL.set_exception('Create_LPN_Summary',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
1380 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1382
1383
1384 END Create_LPN_Summary;
1385
1386 PROCEDURE MDC_Check_Rated(
1387 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or temp table
1388 p_consol_LPNs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by consol LPN detail id
1389 p_consol_LPN_children IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child detail id, value of parent consol detail id
1390 p_parent_dlegs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by parent dleg id
1391 p_child_dlegs IN DBMS_UTILITY.NUMBER_ARRAY,--Indexed by child dleg id, value of parent dleg id
1392 p_freight_cost_main_price IN Freight_Cost_Main_Tab_Type,
1393 p_freight_cost_temp_price IN Freight_Cost_Temp_Tab_Type,
1394 p_fc_main_update_rows IN Freight_Cost_Main_Tab_Type, -- For update of SUMMARY records
1395 x_child_details_rated OUT NOCOPY VARCHAR2,
1396 x_consol_LPNs_rated OUT NOCOPY VARCHAR2,
1397 x_child_dlegs_rated OUT NOCOPY VARCHAR2,
1398 x_parent_dlegs_rated OUT NOCOPY VARCHAR2,
1399 x_return_status OUT NOCOPY VARCHAR2) IS
1400
1401
1402 l_child_detail_rated DBMS_UTILITY.NUMBER_ARRAY;
1403 l_consol_LPN_rated DBMS_UTILITY.NUMBER_ARRAY;
1404 l_child_dlegs_rated DBMS_UTILITY.NUMBER_ARRAY;
1405 l_parent_dlegs_rated DBMS_UTILITY.NUMBER_ARRAY;
1406 i NUMBER;
1407 l_return_status VARCHAR2(1);
1408
1409 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
1410
1411 BEGIN
1412 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1413 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
1414 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'MDC_Check_Rated','start');
1415
1416
1417 l_child_detail_rated.DELETE;
1418 l_consol_LPN_rated.DELETE;
1419
1420 l_child_dlegs_rated.DELETE;
1421 l_parent_dlegs_rated.DELETE;
1422
1423
1424 x_child_details_rated:='N';
1425 x_consol_LPNs_rated:='N';
1426 x_child_dlegs_rated:='N';
1427 x_parent_dlegs_rated:='N';
1428
1429
1430 i:=p_freight_cost_main_price.FIRST;
1431 WHILE(i IS NOT NULL)
1432 LOOP
1433 IF ((p_freight_cost_main_price(i).delivery_detail_id IS NOT NULL)
1434 AND (p_consol_LPN_children.EXISTS(p_freight_cost_main_price(i).delivery_detail_id)))
1435 THEN
1436 l_child_detail_rated(p_freight_cost_main_price(i).delivery_detail_id):=1;
1437
1438 END IF;
1439
1440 IF ((p_freight_cost_main_price(i).delivery_detail_id IS NOT NULL)
1441 AND (p_consol_LPNs.EXISTS(p_freight_cost_main_price(i).delivery_detail_id)))
1442 THEN
1443 l_consol_LPN_rated(p_freight_cost_main_price(i).delivery_detail_id):=1;
1444
1445 END IF;
1446
1447
1448 i:=p_freight_cost_main_price.NEXT(i);
1449 END LOOP;
1450
1451
1452 i:=p_freight_cost_temp_price.FIRST;
1453 WHILE(i IS NOT NULL)
1454 LOOP
1455 IF ((p_freight_cost_temp_price(i).delivery_detail_id IS NOT NULL)
1456 AND (p_consol_LPN_children.EXISTS(p_freight_cost_temp_price(i).delivery_detail_id)))
1457 THEN
1458 l_child_detail_rated(p_freight_cost_temp_price(i).delivery_detail_id):=1;
1459
1460 END IF;
1461
1462 IF ((p_freight_cost_temp_price(i).delivery_detail_id IS NOT NULL)
1463 AND (p_consol_LPNs.EXISTS(p_freight_cost_temp_price(i).delivery_detail_id)))
1464 THEN
1465 l_consol_LPN_rated(p_freight_cost_temp_price(i).delivery_detail_id):=1;
1466
1467 END IF;
1468
1469
1470 IF ((p_freight_cost_temp_price(i).delivery_detail_id IS NULL)
1471 AND (p_freight_cost_temp_price(i).delivery_leg_id IS NOT NULL)
1472 AND (p_child_dlegs.EXISTS(p_freight_cost_temp_price(i).delivery_leg_id)))
1473 THEN
1474 l_child_dlegs_rated(p_freight_cost_temp_price(i).delivery_leg_id):=1;
1475
1476 END IF;
1477
1478 IF ((p_freight_cost_temp_price(i).delivery_detail_id IS NULL)
1479 AND (p_freight_cost_temp_price(i).delivery_leg_id IS NOT NULL)
1480 AND (p_parent_dlegs.EXISTS(p_freight_cost_temp_price(i).delivery_leg_id)))
1481 THEN
1482 l_parent_dlegs_rated(p_freight_cost_temp_price(i).delivery_leg_id):=1;
1483
1484 END IF;
1485
1486
1487
1488 i:=p_freight_cost_temp_price.NEXT(i);
1489 END LOOP;
1490
1491
1492 i:=p_fc_main_update_rows.FIRST;
1493 WHILE(i IS NOT NULL)
1494 LOOP
1495
1496
1497 IF ((p_fc_main_update_rows(i).delivery_detail_id IS NULL)
1498 AND (p_fc_main_update_rows(i).delivery_leg_id IS NOT NULL)
1499 AND (p_child_dlegs.EXISTS(p_fc_main_update_rows(i).delivery_leg_id)))
1500 THEN
1501 l_child_dlegs_rated(p_fc_main_update_rows(i).delivery_leg_id):=1;
1502
1503 END IF;
1504
1505 IF ((p_fc_main_update_rows(i).delivery_detail_id IS NULL)
1506 AND (p_fc_main_update_rows(i).delivery_leg_id IS NOT NULL)
1507 AND (p_parent_dlegs.EXISTS(p_fc_main_update_rows(i).delivery_leg_id)))
1508 THEN
1509 l_parent_dlegs_rated(p_fc_main_update_rows(i).delivery_leg_id):=1;
1510
1511 END IF;
1512
1513
1514
1515 i:=p_fc_main_update_rows.NEXT(i);
1516 END LOOP;
1517
1518
1519
1520 IF(l_child_detail_rated.COUNT > 0)
1521 THEN
1522 x_child_details_rated:='Y';
1526 IF(l_consol_LPN_rated.COUNT > 0)
1523
1524 END IF;
1525
1527 THEN
1528 x_consol_LPNs_rated:='Y';
1529 END IF;
1530
1531
1532 IF(l_child_dlegs_rated.COUNT = p_child_dlegs.COUNT)
1533 THEN
1534 x_child_dlegs_rated:='Y';
1535
1536 END IF;
1537
1538 IF(l_parent_dlegs_rated.COUNT > 0)
1539 THEN
1540
1541 x_parent_dlegs_rated:='Y';
1542 END IF;
1543
1544
1545 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
1546 'Child Detail Rated:'||x_child_details_rated||
1547 'Consol LPN Rated:'||x_consol_LPNs_rated||
1548 ' Child Dlegs rated:'||x_child_dlegs_rated||
1549 'Parent Dlegs rated:'||x_parent_dlegs_rated);
1550
1551
1552 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Check_Rated');
1553
1554 EXCEPTION
1555 WHEN others THEN
1556 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1557 FTE_FREIGHT_PRICING_UTIL.set_exception('MDC_Check_Rated',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
1558 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1559 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'MDC_Check_Rated');
1560
1561
1562 END MDC_Check_Rated;
1563
1564
1565
1566 PROCEDURE Handle_MDC(
1567 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or temp table
1568 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
1569 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
1570 x_freight_cost_main_charge IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
1571 x_freight_cost_temp_charge IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
1572 x_fc_main_update_rows IN OUT NOCOPY Freight_Cost_Main_Tab_Type, -- For update of SUMMARY records
1573 x_return_status OUT NOCOPY VARCHAR2 ) IS
1574
1575 l_parent_deliveries DBMS_UTILITY.NUMBER_ARRAY;
1576 l_child_deliveries DBMS_UTILITY.NUMBER_ARRAY;
1577 l_parent_dlegs DBMS_UTILITY.NUMBER_ARRAY;
1578 l_child_dlegs DBMS_UTILITY.NUMBER_ARRAY;
1579 l_consol_LPNs DBMS_UTILITY.NUMBER_ARRAY;--Indexed by child detail id
1580 l_consol_LPN_children DBMS_UTILITY.NUMBER_ARRAY;
1581 l_delivery_to_dleg DBMS_UTILITY.NUMBER_ARRAY;
1582 l_dleg_to_delivery DBMS_UTILITY.NUMBER_ARRAY;
1583 i NUMBER;
1584 l_child_details_rated VARCHAR2(1);
1585 l_consol_LPNs_rated VARCHAR2(1);
1586 l_child_dlegs_rated VARCHAR2(1);
1587 l_parent_dlegs_rated VARCHAR2(1);
1588 l_return_status VARCHAR2(1);
1589
1590 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
1591
1592 BEGIN
1593 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1594 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
1595 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Handle_MDC','start');
1596
1597
1598
1599 IF (p_save_flag IS NOT NULL)--((p_save_flag IS NOT NULL) AND ((p_save_flag ='T') OR (p_save_flag='M')))
1600 THEN
1601
1602 --gather MDC information from cache
1603
1604 i:=g_shipment_line_rows.FIRST;
1605 WHILE(i IS NOT NULL)
1606 LOOP
1607
1608 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
1609 'Detail_id:'||g_shipment_line_rows(i).delivery_detail_id ||
1610 ' Delivery Id:'||g_shipment_line_rows(i).delivery_id ||
1611 ' Dleg Id:'||g_shipment_line_rows(i).delivery_leg_id||
1612 ' Parent Delivery Detail id:'||g_shipment_line_rows(i).parent_delivery_detail_id ||
1613 ' Parent Delivery id:'||g_shipment_line_rows(i).parent_delivery_id ||
1614 'Parent Dleg Id:'||g_shipment_line_rows(i).parent_delivery_leg_id||
1615 'Assignment type:'||g_shipment_line_rows(i).assignment_type);
1616
1617 IF ((g_shipment_line_rows(i).delivery_id IS NOT NULL) AND (g_shipment_line_rows(i).delivery_leg_id IS NOT NULL))
1618 THEN
1619 IF (NOT (l_delivery_to_dleg.EXISTS(g_shipment_line_rows(i).delivery_id)))
1620 THEN
1621 l_delivery_to_dleg(g_shipment_line_rows(i).delivery_id):=
1622 g_shipment_line_rows(i).delivery_leg_id;
1623 END IF;
1624
1625 IF (NOT (l_dleg_to_delivery.EXISTS(g_shipment_line_rows(i).delivery_leg_id)))
1626 THEN
1627 l_dleg_to_delivery(g_shipment_line_rows(i).delivery_leg_id):=
1628 g_shipment_line_rows(i).delivery_id;
1629 END IF;
1630
1631
1632 END IF;
1633
1634 IF ((g_shipment_line_rows(i).parent_delivery_id IS NOT NULL) AND (g_shipment_line_rows(i).parent_delivery_leg_id IS NOT NULL))
1635 THEN
1636 l_parent_deliveries(g_shipment_line_rows(i).parent_delivery_id):=g_shipment_line_rows(i).parent_delivery_id;
1637 l_child_deliveries(g_shipment_line_rows(i).delivery_id):=g_shipment_line_rows(i).delivery_id;
1638
1639 l_parent_dlegs(g_shipment_line_rows(i).parent_delivery_leg_id):=g_shipment_line_rows(i).parent_delivery_leg_id;
1640 l_child_dlegs(g_shipment_line_rows(i).delivery_leg_id):=g_shipment_line_rows(i).parent_delivery_leg_id;
1641
1642 l_delivery_to_dleg(g_shipment_line_rows(i).parent_delivery_id):=
1643 g_shipment_line_rows(i).parent_delivery_leg_id;
1644
1645 l_dleg_to_delivery(g_shipment_line_rows(i).parent_delivery_leg_id):=
1646 g_shipment_line_rows(i).parent_delivery_id;
1647
1648
1649 END IF;
1650
1651
1652 IF ((g_shipment_line_rows(i).assignment_type IS NOT NULL) AND (g_shipment_line_rows(i).assignment_type='C')
1653 AND (g_shipment_line_rows(i).parent_delivery_detail_id IS NOT NULL))
1654 THEN
1658
1655 l_consol_LPNs(g_shipment_line_rows(i).parent_delivery_detail_id):=g_shipment_line_rows(i).parent_delivery_detail_id;
1656 l_consol_LPN_children(g_shipment_line_rows(i).delivery_detail_id):=g_shipment_line_rows(i).parent_delivery_detail_id;
1657 END IF;
1659 i:=g_shipment_line_rows.NEXT(i);
1660 END LOOP;
1661
1662
1663
1664
1665 --Check if there is any MDC content otherwise do nothing
1666 IF (l_parent_deliveries.COUNT>0)
1667 THEN
1668
1669
1670 Populate_Dleg_Id(
1671 p_delivery_to_dleg=>l_delivery_to_dleg,
1672 x_freight_cost_temp=>x_freight_cost_temp_price,
1673 x_return_status=>l_return_status);
1674
1675 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1676 THEN
1677 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1678 THEN
1679 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_populate_dleg_id;
1680 END IF;
1681 END IF;
1682
1683
1684
1685 Populate_Dleg_Id(
1686 p_delivery_to_dleg=>l_delivery_to_dleg,
1687 x_freight_cost_temp=>x_freight_cost_temp_charge,
1688 x_return_status=>l_return_status);
1689
1690 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1691 THEN
1692 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1693 THEN
1694 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_populate_dleg_id;
1695 END IF;
1696 END IF;
1697
1698
1699
1700 MDC_Check_Rated(
1701 p_save_flag=>p_save_flag,
1702 p_consol_LPNs=>l_consol_LPNs,
1703 p_consol_LPN_children=>l_consol_LPN_children,
1704 p_parent_dlegs=>l_parent_dlegs,
1705 p_child_dlegs=>l_child_dlegs,
1706 p_freight_cost_main_price=>x_freight_cost_main_price,
1707 p_freight_cost_temp_price=>x_freight_cost_temp_price,
1708 p_fc_main_update_rows=>x_fc_main_update_rows,
1709 x_child_details_rated=>l_child_details_rated,
1710 x_consol_LPNs_rated=>l_consol_LPNs_rated,
1711 x_child_dlegs_rated=>l_child_dlegs_rated,
1712 x_parent_dlegs_rated=>l_parent_dlegs_rated,
1713 x_return_status=>l_return_status);
1714
1715 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1716 THEN
1717 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1718 THEN
1719 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_check_rated;
1720 END IF;
1721 END IF;
1722
1723
1724
1725 --Rates at the detail level
1726
1727 IF((l_consol_LPNs.COUNT>0) AND (l_consol_LPNs_rated='Y') AND (l_consol_LPN_children.COUNT> 0)
1728 AND (l_child_details_rated='N'))
1729 THEN
1730
1731 MDC_Alloc_From_consol_LPN(
1732 p_save_flag=>p_save_flag,
1733 p_consol_LPNs=>l_consol_LPNs,
1734 p_consol_LPN_children=>l_consol_LPN_children,
1735 x_freight_cost_main_price=>x_freight_cost_main_price,
1736 x_freight_cost_temp_price=>x_freight_cost_temp_price,
1737 x_freight_cost_main_charge=>x_freight_cost_main_charge,
1738 x_freight_cost_temp_charge=>x_freight_cost_temp_charge,
1739 x_return_status=>l_return_status);
1740
1741 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1742 THEN
1743 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1744 THEN
1745 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_alloc_from_consol_LPN;
1746 END IF;
1747 END IF;
1748
1749
1750
1751 ELSIF((l_consol_LPNs.COUNT>0) AND (l_consol_LPNs_rated='N') AND (l_consol_LPN_children.COUNT> 0)
1752 AND (l_child_details_rated='Y'))
1753 THEN
1754 Create_LPN_Summary(
1755 p_save_flag=>p_save_flag,
1756 p_consol_LPN_children=>l_consol_LPN_children,
1757 x_freight_cost_main_price=>x_freight_cost_main_price,
1758 x_freight_cost_temp_price=>x_freight_cost_temp_price,
1759 x_freight_cost_main_charge=>x_freight_cost_main_charge,
1760 x_freight_cost_temp_charge=>x_freight_cost_temp_charge,
1761 x_return_status=>l_return_status);
1762
1763 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1764 THEN
1765 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1766 THEN
1767 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_cre_LPN_summ;
1768 END IF;
1769 END IF;
1770
1771
1772
1773
1774 END IF;
1775
1776
1777 --Rates at dleg level
1778 --Always recalculate child dleg summaries
1779 IF((l_child_dlegs.COUNT > 0) AND (l_parent_dlegs.COUNT >0))
1780 THEN
1781
1782 Create_Child_Dleg_Summaries(
1783 p_save_flag=>p_save_flag,
1784 p_dleg_to_delivery=>l_dleg_to_delivery,
1785 p_parent_dlegs=>l_parent_dlegs,
1786 p_child_dlegs=>l_child_dlegs,
1787 x_freight_cost_main_price=>x_fc_main_update_rows,
1788 x_freight_cost_temp_price=>x_freight_cost_temp_price,
1789 x_fc_main_update_rows=>x_fc_main_update_rows,
1790 x_return_status=>l_return_status);
1791
1792 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1793 THEN
1794 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1795 THEN
1796 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_cre_child_dleg_summ;
1797 END IF;
1798 END IF;
1799
1800
1801
1802 END IF;
1803
1804
1805 --IF((l_child_dlegs.COUNT > 0) AND (l_child_dlegs_rated='Y')
1809 IF((l_child_dlegs.COUNT > 0)AND (l_parent_dlegs.COUNT >0))
1806 --AND (l_parent_dlegs.COUNT >0) AND (l_parent_dlegs_rated='N'))
1807
1808 --Always recalculate parent dleg summaries
1810 THEN
1811 Create_Parent_Dleg_Summaries(
1812 p_save_flag=>p_save_flag,
1813 p_parent_dlegs=>l_parent_dlegs,
1814 p_child_dlegs=>l_child_dlegs,
1815 p_dleg_to_delivery=>l_dleg_to_delivery,
1816 x_freight_cost_main_price=>x_fc_main_update_rows,
1817 x_freight_cost_temp_price=>x_freight_cost_temp_price,
1818 x_return_status=>l_return_status);
1819
1820 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
1821 THEN
1822 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
1823 THEN
1824 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_cre_parent_dleg_summ;
1825 END IF;
1826 END IF;
1827
1828
1829
1830 END IF;
1831
1832
1833
1834
1835
1836 END IF;
1837
1838
1839 END IF;
1840
1841 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1842
1843 EXCEPTION
1844 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_populate_dleg_id THEN
1845 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1846 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_populate_dleg_id');
1847 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1848
1849 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_check_rated THEN
1850 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1851 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_check_rated');
1852 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1853
1854 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_alloc_from_consol_LPN THEN
1855 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1856 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_alloc_from_consol_LPN');
1857 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1858
1859 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_cre_LPN_summ THEN
1860 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1861 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_cre_LPN_summ');
1862 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1863
1864 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_cre_parent_dleg_summ THEN
1865 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1866 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_cre_parent_dleg_summ');
1867 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1868
1869 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_cre_child_dleg_summ THEN
1870 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1871 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_cre_child_dleg_summ');
1872 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1873
1874 WHEN others THEN
1875 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1876 FTE_FREIGHT_PRICING_UTIL.set_exception('Handle_MDC',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
1877 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1878 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Handle_MDC');
1879
1880
1881 END Handle_MDC;
1882
1883 FUNCTION hasMultipleLegs (
1884 p_delivery_id IN NUMBER) RETURN VARCHAR2
1885
1886 IS
1887
1888 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
1889
1890 CURSOR c_get_legs(c_delivery_id NUMBER) IS
1891 SELECT count(delivery_leg_id) FROM wsh_delivery_legs
1892 WHERE delivery_id = c_delivery_id;
1893
1894 l_count NUMBER :=0;
1895
1896 BEGIN
1897
1898 OPEN c_get_legs(p_delivery_id);
1899 FETCH c_get_legs INTO l_count;
1900 CLOSE c_get_legs;
1901
1902 IF l_count > 1 THEN
1903 RETURN 'Y';
1904 ELSE
1905 RETURN 'N';
1906 END IF;
1907
1908 END hasMultipleLegs;
1909
1910
1911 FUNCTION get_default_category (
1912 p_classification_code IN VARCHAR2) RETURN NUMBER
1913 IS
1914
1915 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
1916
1917 CURSOR c_get_structure_id
1918 IS
1919 SELECT structure_id
1920 FROM mtl_category_sets mcs, mtl_category_sets_tl mcst
1921 WHERE mcs.category_set_id = mcst.category_set_id
1922 AND mcst.category_set_name='WSH_COMMODITY_CODE'
1923 AND mcst.language='US';
1924
1925 CURSOR c_get_def_category(c_classification_code VARCHAR2, c_structure_id NUMBER)
1926 IS
1927 SELECT category_id
1928 FROM mtl_categories_b
1929 WHERE segment1=c_classification_code
1930 AND segment4='Y'
1931 AND structure_id=c_structure_id;
1932
1933 l_structure_id NUMBER;
1934 l_category_id NUMBER;
1935
1936 BEGIN
1937
1938 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
1939 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_default_category','start');
1940
1941 OPEN c_get_structure_id;
1942 FETCH c_get_structure_id INTO l_structure_id;
1943 CLOSE c_get_structure_id;
1944
1948 CLOSE c_get_def_category;
1945 IF (p_classification_code IS NOT NULL) THEN
1946 OPEN c_get_def_category(p_classification_code, l_structure_id);
1947 FETCH c_get_def_category INTO l_category_id;
1949 ELSE
1950 l_category_id := g_default_category_id;
1951 END IF;
1952
1953 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_default_category');
1954 RETURN l_category_id;
1955
1956 EXCEPTION
1957 WHEN others THEN
1958 --x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1959 FTE_FREIGHT_PRICING_UTIL.set_exception('get_default_category',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
1960 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1961 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
1962 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_default_category');
1963 END get_default_category;
1964
1965
1966
1967 PROCEDURE Get_Trip_Mode(
1968 p_trip_id IN NUMBER,
1969 p_dleg_id IN NUMBER,
1970 x_trip_id IN OUT NOCOPY NUMBER,
1971 x_mode_of_transport IN OUT NOCOPY VARCHAR2,
1972 x_return_status OUT NOCOPY VARCHAR2 )
1973 IS
1974
1975 CURSOR c_get_trip_from_dleg(c_dleg_id IN NUMBER)
1976 IS
1977 SELECT t.trip_id, t.mode_of_transport
1978 FROM wsh_delivery_legs dl,
1979 wsh_trip_stops s,
1980 wsh_trips t
1981 WHERE dl.delivery_leg_id =c_dleg_id AND
1982 dl.pick_up_stop_id=s.stop_id AND
1983 s.trip_id=t.trip_id ;
1984
1985
1986 CURSOR c_get_mode_for_trip(c_trip_id IN NUMBER)
1987 IS
1988 select t.mode_of_transport
1989 FROM wsh_trips t
1990 WHERE t.trip_id=c_trip_id;
1991
1992 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
1993 l_count NUMBER;
1994 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DELIVERY';
1995
1996 BEGIN
1997
1998 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1999
2000 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2001 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name,'start');
2002
2003
2004 x_mode_of_transport:=NULL;
2005 x_trip_id:=NULL;
2006 IF(p_trip_id IS NOT NULL)
2007 THEN
2008 x_trip_id:=p_trip_id;
2009 OPEN c_get_mode_for_trip(p_trip_id);
2010 FETCH c_get_mode_for_trip INTO x_mode_of_transport;
2011 CLOSE c_get_mode_for_trip;
2012
2013 ELSIF(p_dleg_id IS NOT NULL)
2014 THEN
2015
2016 OPEN c_get_trip_from_dleg(p_dleg_id);
2017 FETCH c_get_trip_from_dleg INTO x_trip_id,x_mode_of_transport;
2018 CLOSE c_get_trip_from_dleg;
2019
2020 END IF;
2021
2022 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2023
2024 EXCEPTION
2025 WHEN others THEN
2026 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2027 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
2028 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2029 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2030
2031
2032
2033 END Get_Trip_Mode;
2034
2035
2036
2037 PROCEDURE validate_delivery (p_delivery_id IN NUMBER,
2038 x_return_code OUT NOCOPY NUMBER)
2039 IS
2040 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
2041 l_count NUMBER;
2042 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DELIVERY';
2043 BEGIN
2044 --
2045 x_return_code := G_RC_SUCCESS;
2046
2047 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2048 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name,'start');
2049
2050 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_delivery_id='||p_delivery_id);
2051
2052 -- check for empty delivery
2053 l_count := 0;
2054 OPEN c_count_delivery_details(p_delivery_id);
2055 FETCH c_count_delivery_details INTO l_count;
2056 CLOSE c_count_delivery_details;
2057 IF ( l_count <= 0 ) THEN
2058
2059 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'empty delivery');
2060
2061 FTE_FREIGHT_PRICING_UTIL.setmsg(
2062 p_api => l_api_name,
2063 p_exc => ' ',
2064 p_msg_name => 'FTE_PRC_EMPTY_DEL',
2065 p_msg_type => 'E',
2066 p_delivery_id => p_delivery_id);
2067 RAISE FND_API.G_EXC_ERROR;
2068 END IF;
2069
2070 -- validate freight term
2071 l_count := 0;
2072 OPEN c_check_del_freight_term(p_delivery_id);
2073 FETCH c_check_del_freight_term INTO l_count;
2074 CLOSE c_check_del_freight_term;
2075 IF ( l_count > 0 ) THEN
2076 FTE_FREIGHT_PRICING_UTIL.setmsg(
2077 p_api => l_api_name,
2078 p_exc => ' ',
2079 p_msg_name => 'FTE_PRC_NOTRATE_DEL_FGT_TERM',
2080 p_msg_type => 'E',
2081 p_delivery_id => p_delivery_id);
2082 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'do not rate the freight term.');
2083 x_return_code := G_RC_NOT_RATE_FREIGHT_TERM;
2084 raise g_finished_warning;
2085 END IF;
2086
2087 -- Manifesting validation
2088 l_count := 0;
2089 OPEN c_check_del_manifesting(p_delivery_id);
2090 FETCH c_check_del_manifesting INTO l_count;
2094 p_api => l_api_name,
2091 CLOSE c_check_del_manifesting;
2092 IF ( l_count > 0 ) THEN
2093 FTE_FREIGHT_PRICING_UTIL.setmsg(
2095 p_exc => ' ',
2096 p_msg_name => 'FTE_PRC_NOTRATE_DEL_MAN',
2097 p_msg_type => 'E',
2098 p_delivery_id => p_delivery_id);
2099 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'delivery organization is manifesting enabled and carrier is manifesting enabled, do not rate.');
2100 x_return_code := G_RC_NOT_RATE_FREIGHT_TERM;
2101 raise g_finished_warning;
2102 END IF;
2103
2104 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2105
2106 EXCEPTION
2107 WHEN g_finished_warning THEN
2108 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2109 --
2110 WHEN FND_API.G_EXC_ERROR THEN
2111 x_return_code := G_RC_ERROR;
2112 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'FND_API.G_EXC_ERROR');
2113 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2114 --
2115 WHEN OTHERS THEN
2116 WSH_UTIL_CORE.DEFAULT_HANDLER(G_PKG_NAME||'.'||l_api_name);
2117 x_return_code := G_RC_ERROR;
2118 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
2119 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2120 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2121 --
2122 END validate_delivery;
2123
2124 PROCEDURE validate_nontl_trip (p_trip_id IN NUMBER,
2125 x_return_code OUT NOCOPY NUMBER)
2126 IS
2127 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
2128 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_NONTL_TRIP';
2129 l_count NUMBER;
2130 BEGIN
2131
2132 x_return_code := G_RC_SUCCESS;
2133
2134 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2135 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name,'start');
2136
2137 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_trip_id='||p_trip_id);
2138
2139 l_count := 0;
2140 OPEN c_cnt_trip_legs(p_trip_id);
2141 FETCH c_cnt_trip_legs INTO l_count;
2142 CLOSE c_cnt_trip_legs;
2143
2144 IF (l_count <= 0) THEN
2145 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'trip '||p_trip_id||' has no delivery');
2146 FTE_FREIGHT_PRICING_UTIL.setmsg(
2147 p_api => l_api_name,
2148 p_exc => ' ',
2149 p_msg_name => 'FTE_PRC_TRP_NO_DLV',
2150 p_msg_type => 'E',
2151 p_trip_id => p_trip_id);
2152 RAISE FND_API.G_EXC_ERROR;
2153 END IF;
2154
2155 -- check for empty delivery
2156 l_count := 0;
2157 OPEN c_count_delivery_details2(p_trip_id);
2158 FETCH c_count_delivery_details2 INTO l_count;
2159 CLOSE c_count_delivery_details2;
2160 IF ( l_count <= 0 ) THEN
2161
2162 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'empty delivery');
2163
2164 FTE_FREIGHT_PRICING_UTIL.setmsg(
2165 p_api => l_api_name,
2166 p_exc => ' ',
2167 p_msg_name => 'FTE_PRC_TRP_NO_DEL_CONTENT',
2168 p_msg_type => 'E',
2169 p_trip_id => p_trip_id);
2170 RAISE FND_API.G_EXC_ERROR;
2171 END IF;
2172
2173 -- validate freight term
2174 l_count := 0;
2175 OPEN c_check_del_freight_term2(p_trip_id);
2176 FETCH c_check_del_freight_term2 INTO l_count;
2177 CLOSE c_check_del_freight_term2;
2178 IF ( l_count > 0 ) THEN
2179 FTE_FREIGHT_PRICING_UTIL.setmsg(
2180 p_api => l_api_name,
2181 p_exc => ' ',
2182 p_msg_name => 'FTE_PRC_NOTRATE_TRP_FGT_TERM',
2183 p_msg_type => 'E',
2184 p_trip_id => p_trip_id);
2185 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'do not rate the freight term.');
2186 x_return_code := G_RC_NOT_RATE_FREIGHT_TERM;
2187 raise g_finished_warning;
2188 END IF;
2189
2190 -- Manifesting validation
2191 l_count := 0;
2192 OPEN c_check_del_manifesting2(p_trip_id);
2193 FETCH c_check_del_manifesting2 INTO l_count;
2194 CLOSE c_check_del_manifesting2;
2195 IF ( l_count > 0 ) THEN
2196 FTE_FREIGHT_PRICING_UTIL.setmsg(
2197 p_api => l_api_name,
2198 p_exc => ' ',
2199 p_msg_name => 'FTE_PRC_NOTRATE_TRP_MAN',
2200 p_msg_type => 'E',
2201 p_trip_id => p_trip_id);
2202 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'delivery organization is manifesting enabled and carrier is manifesting enabled, do not rate.');
2203 x_return_code := G_RC_NOT_RATE_FREIGHT_TERM;
2204 raise g_finished_warning;
2205 END IF;
2206
2207 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2208
2209 EXCEPTION
2210 WHEN g_finished_warning THEN
2211 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2212 --
2213 WHEN FND_API.G_EXC_ERROR THEN
2214 x_return_code := G_RC_ERROR;
2215 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'FND_API.G_EXC_ERROR');
2216 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2217 --
2218 WHEN OTHERS THEN
2219 WSH_UTIL_CORE.DEFAULT_HANDLER(G_PKG_NAME||'.'||l_api_name);
2220 x_return_code := G_RC_ERROR;
2221 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
2225 --
2222 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2223 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
2224 END validate_nontl_trip;
2226 PROCEDURE Create_Freight_Cost_Temp(
2227 p_freight_cost_temp_info IN Freight_Cost_Temp_Rec_Type,
2228 x_freight_cost_temp_id OUT NOCOPY NUMBER,
2229 x_return_status OUT NOCOPY VARCHAR2)
2230 IS
2231
2232 CURSOR C_Next_Freight_Cost_Id
2233 IS
2234 SELECT fte_freight_costs_temp_s.nextval
2235 FROM sys.dual;
2236
2237 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
2238
2239 BEGIN
2240
2241 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2242
2243 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2244 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Create_Freight_Cost_Temp','start');
2245
2246 OPEN C_Next_Freight_Cost_Id;
2247 FETCH C_Next_Freight_Cost_Id INTO x_freight_cost_temp_id;
2248 CLOSE C_Next_Freight_Cost_Id;
2249
2250 INSERT INTO fte_freight_costs_temp(
2251 freight_cost_id,
2252 freight_cost_type_id,
2253 charge_unit_value,
2254 unit_amount,
2255 calculation_method,
2256 uom,
2257 quantity,
2258 total_amount,
2259 currency_code,
2260 line_type_code,
2261 charge_source_code,
2262 estimated_flag,
2263 comparison_request_id,
2264 lane_id,
2265 schedule_id,
2266 moved_to_main_flag,
2267 service_type_code, -- bug2741467
2268 conversion_date,
2269 conversion_rate,
2270 conversion_type_code,
2271 trip_id,
2272 stop_id,
2273 delivery_id,
2274 delivery_leg_id,
2275 delivery_detail_id,
2276 attribute_category,
2277 attribute1,
2278 attribute2,
2279 attribute3,
2280 attribute4,
2281 attribute5,
2282 attribute6,
2283 attribute7,
2284 attribute8,
2285 attribute9,
2286 attribute10,
2287 attribute11,
2288 attribute12,
2289 attribute13,
2290 attribute14,
2291 attribute15,
2292 creation_date,
2293 created_by,
2294 last_update_date,
2295 last_updated_by,
2296 last_update_login,
2297 program_application_id,
2298 program_id,
2299 program_update_date,
2300 request_id,
2301 commodity_category_id,
2302 billable_quantity,
2303 billable_uom,
2304 billable_basis
2305 ) VALUES (
2306 x_freight_cost_temp_id,
2307 p_freight_cost_temp_info.freight_cost_type_id,
2308 p_freight_cost_temp_info.charge_unit_value,
2309 p_freight_cost_temp_info.unit_amount,
2310 p_freight_cost_temp_info.calculation_method,
2311 p_freight_cost_temp_info.uom,
2312 p_freight_cost_temp_info.quantity,
2313 p_freight_cost_temp_info.total_amount,
2314 p_freight_cost_temp_info.currency_code,
2315 p_freight_cost_temp_info.line_type_code,
2316 p_freight_cost_temp_info.charge_source_code,
2317 p_freight_cost_temp_info.estimated_flag,
2318 p_freight_cost_temp_info.comparison_request_id,
2319 p_freight_cost_temp_info.lane_id,
2320 p_freight_cost_temp_info.schedule_id,
2321 p_freight_cost_temp_info.moved_to_main_flag,
2322 p_freight_cost_temp_info.service_type_code,
2323 p_freight_cost_temp_info.conversion_date,
2324 p_freight_cost_temp_info.conversion_rate,
2325 p_freight_cost_temp_info.conversion_type_code,
2326 p_freight_cost_temp_info.trip_id,
2327 p_freight_cost_temp_info.stop_id,
2328 p_freight_cost_temp_info.delivery_id,
2329 p_freight_cost_temp_info.delivery_leg_id,
2330 p_freight_cost_temp_info.delivery_detail_id,
2331 p_freight_cost_temp_info.attribute_category,
2332 p_freight_cost_temp_info.attribute1,
2333 p_freight_cost_temp_info.attribute2,
2334 p_freight_cost_temp_info.attribute3,
2335 p_freight_cost_temp_info.attribute4,
2336 p_freight_cost_temp_info.attribute5,
2337 p_freight_cost_temp_info.attribute6,
2338 p_freight_cost_temp_info.attribute7,
2339 p_freight_cost_temp_info.attribute8,
2340 p_freight_cost_temp_info.attribute9,
2341 p_freight_cost_temp_info.attribute10,
2342 p_freight_cost_temp_info.attribute11,
2343 p_freight_cost_temp_info.attribute12,
2344 p_freight_cost_temp_info.attribute13,
2345 p_freight_cost_temp_info.attribute14,
2346 p_freight_cost_temp_info.attribute15,
2350 p_freight_cost_temp_info.last_updated_by,
2347 p_freight_cost_temp_info.creation_date,
2348 p_freight_cost_temp_info.created_by,
2349 p_freight_cost_temp_info.last_update_date,
2351 p_freight_cost_temp_info.last_update_login,
2352 p_freight_cost_temp_info.program_application_id,
2353 p_freight_cost_temp_info.program_id,
2354 p_freight_cost_temp_info.program_update_date,
2355 p_freight_cost_temp_info.request_id,
2356 p_freight_cost_temp_info.commodity_category_id,
2357 p_freight_cost_temp_info.billable_quantity,
2358 p_freight_cost_temp_info.billable_uom,
2359 p_freight_cost_temp_info.billable_basis
2360 );
2361
2362 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Freight_Cost_Temp');
2363 EXCEPTION
2364 WHEN others THEN
2365 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2366 FTE_FREIGHT_PRICING_UTIL.set_exception('Create_Freight_Cost_Temp',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
2367 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2368 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2369 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Create_Freight_Cost_Temp');
2370
2371 END Create_Freight_Cost_Temp;
2372
2373 -- This API will look up global g_rolledup_lines
2374 -- It will return the input category/basis total for the input container
2375
2376 PROCEDURE get_rolledup_amount(
2377 p_container_id IN NUMBER, -- Mandatory
2378 p_category_id IN NUMBER DEFAULT NULL, -- Either category id or basis
2379 p_basis IN NUMBER DEFAULT NULL,
2380 p_line_type_code IN VARCHAR2 DEFAULT NULL, -- gets list line type code from line details
2381 p_wsh_amount IN NUMBER,
2382 p_fte_amount IN NUMBER DEFAULT NULL,
2383 p_fc_dlvd_rows IN total_discount_tab_type,
2384 p_quantity IN NUMBER,
2385 p_uom IN VARCHAR2,
2386 p_save_flag IN VARCHAR2,
2387 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
2388 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
2389 x_freight_cost_main_charge IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
2390 x_freight_cost_temp_charge IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
2391 x_quantity OUT NOCOPY NUMBER, -- Returns in input uom
2392 x_return_status OUT NOCOPY VARCHAR2)
2393 IS
2394
2395 i NUMBER:=0;
2396 l_sum NUMBER:=0;
2397 l_quantity NUMBER:=0;
2398 l_wsh_amount NUMBER:=0;
2399 l_fte_amount NUMBER:=0;
2400 l_charge_total_amount NUMBER:=0;
2401 l_discount_total_amount NUMBER:=0;
2402 l_index NUMBER:=0;
2403 l_main_price_index NUMBER:=x_freight_cost_main_price.COUNT;
2404 l_main_charge_index NUMBER:=x_freight_cost_main_charge.COUNT;
2405 l_temp_price_index NUMBER:=x_freight_cost_temp_price.COUNT;
2406 l_temp_charge_index NUMBER:=x_freight_cost_temp_charge.COUNT;
2407
2408 l_fc_rec top_level_fc_rec_type;
2409
2410 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
2411 l_basis_meaning VARCHAR2(30);
2412
2413 BEGIN
2414
2415 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2416 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2417 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_rolledup_amount','start');
2418 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Container : '||p_container_id);
2419
2420 IF p_save_flag = 'M' THEN
2421
2422 IF p_line_type_code IS NOT NULL THEN -- charge
2423 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'For Charge ');
2424 l_index := l_main_charge_index;
2425 ELSE
2426 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'For Base Price ');
2427 l_index := l_main_price_index;
2428 END IF;
2429
2430 ELSE
2431
2432 IF p_line_type_code IS NOT NULL THEN -- charge
2433 l_index := l_temp_charge_index;
2434 ELSE
2435 l_index := l_temp_price_index;
2436 END IF;
2437
2438 END IF;
2439
2440 Get_Basis_Meaning( p_basis => p_basis,
2441 x_basis_meaning => l_basis_meaning);
2442
2443 i := g_rolledup_lines.FIRST;
2444 LOOP
2445 IF g_rolledup_lines(i).master_container_id = p_container_id THEN
2446
2447 --l_index := l_index + 1;
2448
2449 IF g_rolledup_lines(i).line_uom <> p_uom THEN
2450
2451 l_quantity := WSH_WV_UTILS.convert_uom(g_rolledup_lines(i).line_uom,
2452 p_uom,
2453 g_rolledup_lines(i).line_quantity,
2454 0); -- Within same UOM class
2455 ELSE
2456
2457 l_quantity := g_rolledup_lines(i).line_quantity;
2458 END IF;
2459
2460 l_wsh_amount := p_wsh_amount * (l_quantity/p_quantity);
2464 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_wsh_amount='||l_wsh_amount);
2461 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'roll->delivery_detail_id='||g_rolledup_lines(i).delivery_detail_id);
2462 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_quantity='||l_quantity);
2463 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'p_quantity='||p_quantity);
2465 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'p_category_id='||p_category_id);
2466 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'p_basis='||p_basis);
2467 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_basis_meaning'||l_basis_meaning);
2468 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'p_uom='||p_uom);
2469
2470
2471 IF (p_category_id IS NOT NULL AND g_rolledup_lines(i).category_id = p_category_id) OR
2472 (p_basis IS NOT NULL AND g_rolledup_lines(i).rate_basis = p_basis) THEN
2473
2474 l_index := l_index + 1;
2475
2476 IF p_fc_dlvd_rows.COUNT > 0 THEN
2477 l_charge_total_amount := p_fc_dlvd_rows(g_rolledup_lines(i).delivery_detail_id).total_amount;
2478 l_discount_total_amount := p_fc_dlvd_rows(g_rolledup_lines(i).delivery_detail_id).discount_amount;
2479 ELSE
2480 l_charge_total_amount := 0;
2481 l_discount_total_amount := 0;
2482 END IF;
2483
2484 l_sum := l_sum + l_quantity;
2485 l_fc_rec.delivery_detail_id := g_rolledup_lines(i).delivery_detail_id;
2486 l_fc_rec.quantity := l_quantity;
2487
2488 IF p_line_type_code IS NULL THEN -- base price
2489
2490 --l_fc_rec.unit_amount := l_wsh_amount - p_fc_dlvd_rows(g_rolledup_lines(i).delivery_detail_id).discount_amount;
2491 l_fc_rec.unit_amount := l_wsh_amount - l_discount_total_amount;
2492
2493 ELSE
2494 --IF nvl(p_line_type_code,'-N') <> 'DISCOUNT' THEN
2495 IF nvl(p_line_type_code,'-N') <> 'DIS' THEN
2496
2497 l_fc_rec.unit_amount := l_wsh_amount;
2498
2499 ELSE
2500
2501 l_fc_rec.line_type_code := 'DISCOUNT';
2502
2503 END IF;
2504 END IF;
2505
2506 IF p_fte_amount IS NOT NULL THEN -- Charge
2507
2508 l_fc_rec.total_amount := l_wsh_amount;
2509
2510 ELSE
2511
2512 --l_fc_rec.total_amount := l_wsh_amount + p_fc_dlvd_rows(g_rolledup_lines(i).delivery_detail_id).total_amount;
2513 l_fc_rec.total_amount := l_wsh_amount + l_charge_total_amount;
2514
2515 END IF;
2516
2517 IF p_save_flag = 'M' THEN
2518
2519 IF p_line_type_code IS NULL THEN -- base price
2520 x_freight_cost_main_price(l_index).line_type_code := l_fc_rec.line_type_code;
2521 x_freight_cost_main_price(l_index).delivery_detail_id := l_fc_rec.delivery_detail_id;
2522 x_freight_cost_main_price(l_index).quantity := l_fc_rec.quantity;
2523 x_freight_cost_main_price(l_index).unit_amount := round(l_fc_rec.unit_amount,2);
2524 x_freight_cost_main_price(l_index).total_amount := round(l_fc_rec.total_amount,2);
2525 ELSE
2526 x_freight_cost_main_charge(l_index).line_type_code := l_fc_rec.line_type_code;
2527 x_freight_cost_main_charge(l_index).delivery_detail_id := l_fc_rec.delivery_detail_id;
2528 x_freight_cost_main_charge(l_index).quantity := l_fc_rec.quantity;
2529 x_freight_cost_main_charge(l_index).unit_amount := round(l_fc_rec.unit_amount,2);
2530 x_freight_cost_main_charge(l_index).total_amount := round(l_fc_rec.total_amount,2);
2531 END IF;
2532
2533 ELSE
2534
2535 IF p_line_type_code IS NULL THEN -- base price
2536 x_freight_cost_temp_price(l_index).line_type_code := l_fc_rec.line_type_code;
2537 x_freight_cost_temp_price(l_index).delivery_detail_id := l_fc_rec.delivery_detail_id;
2538 x_freight_cost_temp_price(l_index).quantity := l_fc_rec.quantity;
2539 x_freight_cost_temp_price(l_index).unit_amount := round(l_fc_rec.unit_amount,2);
2540 x_freight_cost_temp_price(l_index).total_amount := round(l_fc_rec.total_amount,2);
2541 ELSE
2542 x_freight_cost_temp_charge(l_index).line_type_code := l_fc_rec.line_type_code;
2543 x_freight_cost_temp_charge(l_index).delivery_detail_id := l_fc_rec.delivery_detail_id;
2544 x_freight_cost_temp_charge(l_index).quantity := l_fc_rec.quantity;
2545 x_freight_cost_temp_charge(l_index).unit_amount := round(l_fc_rec.unit_amount,2);
2546 x_freight_cost_temp_charge(l_index).total_amount := round(l_fc_rec.total_amount,2);
2547 END IF;
2548
2549 END IF;
2550
2551 ELSIF p_category_id IS NULL AND p_basis IS NULL THEN
2552
2553 l_sum := l_sum + l_quantity;
2554
2555 END IF;
2556
2557 END IF;
2558
2559 EXIT WHEN i = g_rolledup_lines.LAST;
2560 i := g_rolledup_lines.NEXT(i);
2561 END LOOP;
2562
2563 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_sum='||l_sum);
2564 x_quantity := l_sum;
2565 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_rolledup_amount');
2569 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2566
2567 EXCEPTION
2568 WHEN others THEN
2570 FTE_FREIGHT_PRICING_UTIL.set_exception('get_rolledup_amount',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
2571 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2572 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2573 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_rolledup_amount');
2574
2575 END get_rolledup_amount;
2576
2577 PROCEDURE get_fc_type_id (
2578 p_line_type_code IN VARCHAR2,
2579 p_charge_subtype_code IN VARCHAR2 DEFAULT NULL,
2580 x_freight_cost_type_id OUT NOCOPY NUMBER,
2581 x_return_status OUT NOCOPY VARCHAR2 )
2582 -- RETURN NUMBER
2583 -- Also get the charge_subtype_code
2584 -- for line type code = 'CHARGE'
2585 IS
2586
2587 CURSOR c_get_fc_type_id IS
2588 SELECT freight_cost_type_id
2589 FROM WSH_FREIGHT_COST_TYPES
2590 WHERE freight_cost_type_code = p_line_type_code;
2591
2592 CURSOR c_get_fc_charge_type_id IS
2593 SELECT freight_cost_type_id
2594 FROM WSH_FREIGHT_COST_TYPES
2595 WHERE freight_cost_type_code = p_line_type_code
2596 AND name = p_charge_subtype_code;
2597
2598 l_freight_cost_type_id NUMBER:=0;
2599 l_type_count NUMBER:=0;
2600
2601 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
2602
2603 BEGIN
2604
2605 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2606 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2607 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_fc_type_id','start');
2608
2609 IF p_charge_subtype_code IS NOT NULL THEN
2610 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'charge');
2611
2612 OPEN c_get_fc_charge_type_id;
2613 FETCH c_get_fc_charge_type_id INTO l_freight_cost_type_id;
2614 l_type_count := c_get_fc_charge_type_id%ROWCOUNT;
2615 CLOSE c_get_fc_charge_type_id;
2616
2617 ELSE
2618 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'not charge');
2619
2620 OPEN c_get_fc_type_id;
2621 FETCH c_get_fc_type_id INTO l_freight_cost_type_id;
2622 l_type_count := c_get_fc_type_id%ROWCOUNT;
2623 CLOSE c_get_fc_type_id;
2624
2625 END IF;
2626 IF l_type_count = 0 THEN
2627 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_fc_type;
2628 END IF;
2629
2630 x_freight_cost_type_id := l_freight_cost_type_id;
2631 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_fc_type_id');
2632
2633 EXCEPTION
2634 WHEN FTE_FREIGHT_PRICING_UTIL.g_invalid_fc_type THEN
2635 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2636 FTE_FREIGHT_PRICING_UTIL.set_exception('get_fc_type_id',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_invalid_fc_type');
2637 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_fc_type_id');
2638 WHEN others THEN
2639 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2640 FTE_FREIGHT_PRICING_UTIL.set_exception('get_fc_type_id',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
2641 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
2642 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_fc_type_id');
2643
2644 END get_fc_type_id;
2645
2646 PROCEDURE prepare_fc_records (
2647 p_delivery_detail_id IN NUMBER, -- Top level container / loose item
2648 p_delivery_id IN NUMBER, -- Will be delivery id for 'T'
2649 p_entity_id IN NUMBER, -- Will be delivery id for 'T' and delivery leg id for 'M'
2650 p_qp_output_line_row IN QP_PREQ_GRP.LINE_REC_TYPE,
2651 p_qp_output_detail_rows IN QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
2652 p_pricing_engine_input IN pricing_engine_input_tab_type,
2653 p_grouping_level IN VARCHAR2 DEFAULT NULL,
2654 p_aggregation IN VARCHAR2 DEFAULT NULL,
2655 p_save_flag IN VARCHAR2,
2656 p_rate_basis IN VARCHAR2 DEFAULT NULL,
2657 x_container_summary IN OUT NOCOPY container_sum_tab_type,
2658 x_fc_dleg_rows IN OUT NOCOPY dlvy_leg_summ_tab_type,
2659 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
2660 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
2661 x_freight_cost_main_charge IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
2662 x_freight_cost_temp_charge IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
2663 x_return_status OUT NOCOPY VARCHAR2)
2664 IS
2665
2666 m NUMBER:=0;
2667 n NUMBER:=0;
2668 o NUMBER:=0;
2669 l_output_fte NUMBER:=0;
2670 l_output_wsh NUMBER:=0;
2671 l_charge_unit_value NUMBER:=0;
2672 l_dleg_sum_amount NUMBER:=0;
2673 l_fte_total_amount NUMBER:=0;
2674 l_curr_fc_count NUMBER:=0;
2675 l_end_fc_count NUMBER:=0;
2676 l_category_price NUMBER:=0;
2677 l_container_price NUMBER:=0;
2681 l_basis_charge NUMBER:=0;
2678 l_basis_price NUMBER:=0;
2679 l_category_charge NUMBER:=0;
2680 l_container_charge NUMBER:=0;
2682 l_category_sum NUMBER:=0;
2683 l_basis_sum NUMBER:=0;
2684 l_total_amount NUMBER:=0;
2685 l_charge_total_amount NUMBER:=0;
2686 l_discount_total_amount NUMBER:=0;
2687 l_freight_cost_type_id NUMBER:=0;
2688 l_delivery_detail_id NUMBER:=0;
2689 l_discount_total NUMBER:=0;
2690 l_discount_cont NUMBER:=0;
2691 l_container_quantity NUMBER:=0;
2692 l_return_status VARCHAR2(1);
2693 --l_container_summary WSH_UTIL_CORE.id_tab_type;
2694 l_container_summary container_sum_tab_type;
2695 l_main_price_index NUMBER:=x_freight_cost_main_price.COUNT;
2696 l_main_charge_index NUMBER:=x_freight_cost_main_charge.COUNT;
2697 l_temp_price_index NUMBER:=x_freight_cost_temp_price.COUNT;
2698 l_temp_charge_index NUMBER:=x_freight_cost_temp_charge.COUNT;
2699 l_fc_dlvd_rows total_discount_tab_type;
2700 l_fc_rec top_level_fc_rec_type;
2701 l_fc_charge_rec top_level_fc_rec_type;
2702
2703 l_freight_cost_main_price Freight_Cost_Main_Tab_Type;
2704 l_freight_cost_temp_price Freight_Cost_Temp_Tab_Type;
2705 l_freight_cost_main_charge Freight_Cost_Main_Tab_Type;
2706 l_freight_cost_temp_charge Freight_Cost_Temp_Tab_Type;
2707
2708 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_INF;
2709 l_billed_weight NUMBER;
2710
2711 BEGIN
2712
2713 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2714 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
2715 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'prepare_fc_records','start');
2716
2717 l_fte_total_amount := 0;
2718 l_main_price_index :=l_main_price_index + 1;
2719 l_temp_price_index :=l_temp_price_index + 1;
2720
2721 l_fc_rec.delivery_detail_id := p_delivery_detail_id;
2722 l_fc_rec.delivery_leg_id := p_entity_id;
2723
2724 l_fc_rec.line_type_code := 'PRICE';
2725 l_fc_rec.currency_code := p_qp_output_line_row.currency_code ;
2726 l_fc_rec.quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
2727 l_fc_rec.uom := p_pricing_engine_input(p_qp_output_line_row.line_index).line_uom;
2728
2729 -- uom conversion
2730 --l_fc_rec.charge_unit_value := p_qp_output_line_row.unit_price;
2731 l_fc_rec.charge_unit_value := (p_qp_output_line_row.unit_price)*(p_qp_output_line_row.priced_quantity/l_fc_rec.quantity);
2732 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_fc_rec.quantity='||l_fc_rec.quantity);
2733 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_fc_rec.uom='||l_fc_rec.uom);
2734 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_fc_rec.charge_unit_value='||l_fc_rec.charge_unit_value);
2735
2736 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,' QP Output Detail row count : '||p_qp_output_detail_rows.COUNT);
2737 m := p_qp_output_detail_rows.FIRST; -- Determine the charges/discounts
2738 IF m IS NOT NULL THEN
2739 -- {
2740 LOOP
2741 -- {
2742 l_discount_cont := 0;
2743 l_discount_total :=0;
2744
2745 IF p_qp_output_detail_rows(m).list_line_type_code = 'SUR' OR
2746 p_qp_output_detail_rows(m).list_line_type_code = 'DIS' THEN
2747 -- {
2748
2749 IF p_qp_output_line_row.line_index = p_qp_output_detail_rows(m).line_index THEN
2750 -- {
2751
2752 l_fc_charge_rec.delivery_detail_id := p_delivery_detail_id;
2753 l_fc_charge_rec.delivery_leg_id := p_entity_id;
2754
2755 l_fc_charge_rec.line_type_code := p_qp_output_detail_rows(m).charge_subtype_code;
2756 l_fc_charge_rec.currency_code := p_qp_output_line_row.currency_code ;
2757 -- No change for dfw
2758 l_fc_charge_rec.quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
2759 l_fc_charge_rec.uom := p_pricing_engine_input(p_qp_output_line_row.line_index).line_uom;
2760 -- uom conversion
2761 l_charge_unit_value := ABS(p_qp_output_detail_rows(m).adjustment_amount);
2762 -- No change for dfw
2763 --l_fc_charge_rec.charge_unit_value := (ABS(p_qp_output_detail_rows(m).adjustment_amount))*(p_qp_output_line_row.priced_quantity/l_fc_charge_rec.quantity);
2764 l_fc_charge_rec.charge_unit_value := (l_charge_unit_value)*(p_qp_output_line_row.priced_quantity/l_fc_charge_rec.quantity);
2765
2766 l_output_fte := l_charge_unit_value*p_qp_output_line_row.priced_quantity;
2767
2768
2769
2770 IF p_save_flag = 'M' THEN
2771 l_curr_fc_count := x_freight_cost_main_charge.COUNT;
2772 ELSE
2773 l_curr_fc_count := x_freight_cost_temp_charge.COUNT;
2774 END IF;
2775
2776 IF p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id IS NOT NULL THEN
2777 -- {
2778
2779 -- Variable to keep track of the sum of the charges for the loose item
2780
2784 IF p_save_flag = 'M' THEN -- Populate appropriate columns
2781 -- Take care of the fc rows
2782 l_main_price_index := l_curr_fc_count + 1;
2783
2785 -- {
2786
2787 x_freight_cost_main_charge(l_main_price_index).delivery_detail_id := p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id;
2788 x_freight_cost_main_charge(l_main_price_index).quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
2789 x_freight_cost_main_charge(l_main_price_index).total_amount := round(l_output_fte,2);
2790
2791
2792
2793
2794 IF p_qp_output_detail_rows(m).list_line_type_code <> 'DIS' THEN
2795
2796 x_freight_cost_main_charge(l_main_price_index).unit_amount := round(l_output_fte,2);
2797
2798 ELSE
2799
2800 x_freight_cost_main_charge(l_main_price_index).line_type_code := 'DISCOUNT';
2801
2802 END IF;
2803
2804 -- }
2805 ELSE
2806 -- {
2807
2808 x_freight_cost_temp_charge(l_main_price_index).delivery_detail_id := p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id;
2809 x_freight_cost_temp_charge(l_main_price_index).quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
2810 x_freight_cost_temp_charge(l_main_price_index).total_amount := round(l_output_fte,2);
2811
2812
2813 IF p_qp_output_detail_rows(m).list_line_type_code <> 'DIS' THEN
2814
2815 x_freight_cost_temp_charge(l_main_price_index).unit_amount := round(l_output_fte,2);
2816
2817 ELSE
2818
2819 x_freight_cost_temp_charge(l_main_price_index).line_type_code := 'DISCOUNT';
2820
2821 END IF;
2822
2823 -- }
2824 END IF;
2825
2826 -- }
2827 ELSE -- Need to prorate among the top level lines
2828 -- {
2829
2830 IF p_aggregation = 'WITHIN' THEN
2831 -- {
2832 -- Need to prorate back to top level lines based on the category
2833 -- Find out the output line category and quantity : x
2834 -- Find out the rolledup line quantity for that category :y
2835 -- l_fc_charge_rec.total_amount = output line total_amount * y/x
2836
2837 -- This API would put the freight costs with the applicable/appropriate delivery detail
2838 -- i.e. rolled up line, It would also populate the total_amount and unit_amount
2839
2840 get_rolledup_amount(
2841 p_container_id => p_delivery_detail_id,
2842 --p_basis => p_pricing_engine_input(p_qp_output_line_row.line_index).basis,
2843 p_category_id => p_pricing_engine_input(p_qp_output_line_row.line_index).category_id,
2844 p_line_type_code => p_qp_output_detail_rows(m).list_line_type_code,
2845 p_wsh_amount => l_output_fte,
2846 p_fte_amount => l_output_fte,
2847 p_fc_dlvd_rows => l_fc_dlvd_rows, -- dummy
2848 p_quantity => p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity,
2849 p_uom => l_fc_charge_rec.uom,
2850 p_save_flag => p_save_flag,
2851 x_freight_cost_main_price => l_freight_cost_main_price,
2852 x_freight_cost_temp_price => l_freight_cost_temp_price,
2853 x_freight_cost_main_charge => x_freight_cost_main_charge,
2854 x_freight_cost_temp_charge => x_freight_cost_temp_charge,
2855 x_quantity => l_category_sum, -- Returns in input uom
2856 x_return_status => l_return_status);
2857
2858 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2859 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2860 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Charge get_rolled_up');
2861 raise FTE_FREIGHT_PRICING_UTIL.g_proration_failed;
2862 END IF;
2863 ELSE
2864 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Engine row quantity : '||p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
2865 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Container : '||p_delivery_detail_id||' Category : '||p_pricing_engine_input(p_qp_output_line_row.line_index).category_id||' Children Qty Sum : '||l_category_sum);
2866 END IF;
2867
2868 --l_billed_weight := l_category_sum;
2869 -- When the category is not there in engine row, there is no proration
2870 IF p_pricing_engine_input(p_qp_output_line_row.line_index).category_id IS NULL
2871 AND p_grouping_level = 'CONTAINER' THEN
2872 l_category_sum := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
2873 END IF;
2874
2875
2876 -- Need to create container level SUMMARY FC record here
2880
2877 -- Only if any new fc record got created
2878
2879 l_container_charge := l_output_fte * (l_category_sum/p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
2881 IF p_qp_output_detail_rows(m).list_line_type_code = 'DIS' THEN
2882
2883 l_discount_cont := l_container_charge;
2884 l_container_charge := 0 - l_container_charge;
2885
2886 END IF;
2887
2888 -- new code for loose items
2889 -- no need for summary records for loose items
2890 IF ((g_shipment_line_rows(p_delivery_detail_id).container_flag = 'Y')OR (g_shipment_line_rows(p_delivery_detail_id).container_flag = 'C')) THEN
2891 IF NOT x_container_summary.EXISTS(p_delivery_detail_id) THEN
2892 x_container_summary(p_delivery_detail_id).currency_code := l_fc_rec.currency_code;
2893 x_container_summary(p_delivery_detail_id).total_amount := l_container_charge;
2894 x_container_summary(p_delivery_detail_id).discount_amount := l_discount_cont;
2895
2896 --MDC
2897 --x_container_summary(p_delivery_detail_id).delivery_id := p_delivery_id;
2898 x_container_summary(p_delivery_detail_id).delivery_id := g_shipment_line_rows(p_delivery_detail_id).delivery_id;
2899
2900
2901
2902 IF p_save_flag = 'M' THEN
2903 x_container_summary(p_delivery_detail_id).delivery_leg_id := p_entity_id;
2904 END IF;
2905 ELSE
2906 x_container_summary(p_delivery_detail_id).total_amount := x_container_summary(p_delivery_detail_id).total_amount + l_container_charge;
2907 x_container_summary(p_delivery_detail_id).discount_amount := x_container_summary(p_delivery_detail_id).discount_amount + l_discount_cont;
2908 END IF;
2909 END IF;
2910
2911 -- }
2912 ELSE
2913 -- {
2914 -- Need to prorate back to top level lines based on the basis
2915 -- Find out the output line basis and quantity : x
2916 -- Find out the rolledup line quantity for that basis :y
2917 -- l_fc_charge_rec.total_amount = output line total_amount * y/x
2918
2919 -- New API : Case for global l_rolledup_lines
2920 get_rolledup_amount(
2921 p_container_id => p_delivery_detail_id,
2922 p_basis => p_pricing_engine_input(p_qp_output_line_row.line_index).basis,
2923 --p_line_type_code => p_qp_output_detail_rows(m).charge_subtype_code,
2924 p_line_type_code => p_qp_output_detail_rows(m).list_line_type_code,
2925 p_wsh_amount => l_output_fte,
2926 p_fte_amount => l_output_fte,
2927 p_fc_dlvd_rows => l_fc_dlvd_rows, -- dummy
2928 p_quantity => p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity,
2929 p_uom => l_fc_charge_rec.uom,
2930 p_save_flag => p_save_flag,
2931 x_freight_cost_main_price => l_freight_cost_main_price,
2932 x_freight_cost_temp_price => l_freight_cost_temp_price,
2933 x_freight_cost_main_charge => x_freight_cost_main_charge,
2934 x_freight_cost_temp_charge => x_freight_cost_temp_charge,
2935 x_quantity => l_basis_sum, -- Returns in input uom
2936 x_return_status => l_return_status);
2937
2938 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2939 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2940 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Charge get_rolled_up');
2941 raise FTE_FREIGHT_PRICING_UTIL.g_proration_failed;
2942 END IF;
2943 ELSE
2944 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Engine row quantity : '||p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
2945 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Container : '||p_delivery_detail_id||' Basis : '||p_pricing_engine_input(p_qp_output_line_row.line_index).basis||' Children Qty Sum : '||l_basis_sum);
2946 END IF;
2947
2948 -- When the basis is not there in engine row, there is no proration
2949 IF p_pricing_engine_input(p_qp_output_line_row.line_index).basis IS NULL
2950 AND p_grouping_level = 'CONTAINER' THEN
2951 l_basis_sum := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
2952 END IF;
2953
2954 -- Need to create container level SUMMARY FC record here
2955
2956 l_container_charge := l_output_fte * (l_basis_sum/p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
2957
2958 IF p_qp_output_detail_rows(m).list_line_type_code = 'DIS' THEN
2959
2960 l_discount_cont := l_container_charge;
2961 l_container_charge := 0 - l_container_charge;
2962
2966 -- no need for summary records for loose items
2963 END IF;
2964
2965 -- new code for loose items
2967 IF ((g_shipment_line_rows(p_delivery_detail_id).container_flag = 'Y') OR (g_shipment_line_rows(p_delivery_detail_id).container_flag = 'C')) THEN
2968 IF NOT x_container_summary.EXISTS(p_delivery_detail_id) THEN
2969 x_container_summary(p_delivery_detail_id).currency_code := l_fc_rec.currency_code;
2970 x_container_summary(p_delivery_detail_id).total_amount := l_container_charge;
2971 x_container_summary(p_delivery_detail_id).discount_amount := l_discount_cont;
2972
2973 --x_container_summary(p_delivery_detail_id) := l_container_charge;
2974 --MDC
2975 --x_container_summary(p_delivery_detail_id).delivery_id := p_delivery_id;
2976 x_container_summary(p_delivery_detail_id).delivery_id := g_shipment_line_rows(p_delivery_detail_id).delivery_id;
2977
2978 -- Billable Weight at Container Level Summary
2979 x_container_summary(p_delivery_detail_id).bquantity := l_basis_sum;
2980 x_container_summary(p_delivery_detail_id).bbasis := p_pricing_engine_input(p_qp_output_line_row.line_index).basis;
2981 x_container_summary(p_delivery_detail_id).buom := l_fc_charge_rec.uom;
2982
2983 IF p_save_flag = 'M' THEN
2984 --MDC
2985 --x_container_summary(p_delivery_detail_id).delivery_leg_id := p_entity_id;
2986 x_container_summary(p_delivery_detail_id).delivery_leg_id := g_shipment_line_rows(p_delivery_detail_id).delivery_leg_id;
2987 END IF;
2988 ELSE
2989 x_container_summary(p_delivery_detail_id).total_amount := x_container_summary(p_delivery_detail_id).total_amount + l_container_charge;
2990 x_container_summary(p_delivery_detail_id).discount_amount := x_container_summary(p_delivery_detail_id).discount_amount + l_discount_cont;
2991 --x_container_summary(p_delivery_detail_id) := x_container_summary(p_delivery_detail_id) + l_container_charge;
2992 END IF;
2993 END IF;
2994
2995 -- }
2996 END IF;
2997
2998 -- }
2999 END IF;
3000
3001 IF p_save_flag = 'M' THEN
3002 l_end_fc_count := x_freight_cost_main_charge.COUNT;
3003 ELSE
3004 l_end_fc_count := x_freight_cost_temp_charge.COUNT;
3005 END IF;
3006
3007 IF l_end_fc_count = l_curr_fc_count THEN -- Do it only if No rolled up lines got new fc records
3008 -- {
3009 -- And it is not because the container did not have any matching lines
3010 -- eg.in case of consolidating SCWB with MCWB
3011
3012 IF p_aggregation = 'ACROSS' AND p_pricing_engine_input(p_qp_output_line_row.line_index).basis IS NULL
3013 -- {
3014 AND p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id IS NULL THEN
3015
3016 -- If basis on the input engine line is NULL for commodity_aggregation = 'ACROSS'
3017 -- Put the charge at the container level itself with the proper line type code
3018 -- In this case the container will not have the summary record
3019 -- What about unit amount
3020 -- For these kind of lines unit amount and total amount follows exactly the same logic
3021
3022 l_main_price_index := l_end_fc_count + 1;
3023 l_container_quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3024
3025 IF p_save_flag = 'M' THEN -- Populate appropriate columns
3026
3027 x_freight_cost_main_charge(l_main_price_index).delivery_detail_id := p_delivery_detail_id;
3028 -- This quantity will now become the container level gross quantity
3029 x_freight_cost_main_charge(l_main_price_index).quantity := l_container_quantity;
3030
3031 x_freight_cost_main_charge(l_main_price_index).total_amount := round(l_output_fte,2);
3032
3033 IF p_qp_output_detail_rows(m).list_line_type_code <> 'DIS' THEN
3034 x_freight_cost_main_charge(l_main_price_index).unit_amount := round(l_output_fte,2);
3035 END IF;
3036
3037
3038 ELSE
3039
3040 x_freight_cost_temp_charge(l_main_price_index).delivery_detail_id := p_delivery_detail_id;
3041 -- This quantity will now become the container level gross quantity
3042 x_freight_cost_temp_charge(l_main_price_index).quantity := l_container_quantity;
3043
3044 x_freight_cost_temp_charge(l_main_price_index).total_amount := round(l_output_fte,2);
3045
3046 IF p_qp_output_detail_rows(m).list_line_type_code <> 'DIS' THEN
3047 x_freight_cost_temp_charge(l_main_price_index).unit_amount := round(l_output_fte,2);
3048 END IF;
3049
3050
3051 END IF;
3052 l_end_fc_count := l_end_fc_count + 1;
3053
3054 -- }
3055 END IF;
3056
3057 -- }
3058 END IF;
3059
3063 p_line_type_code => 'FTECHARGE',
3060 IF p_qp_output_detail_rows(m).list_line_type_code = 'SUR' THEN
3061 --l_freight_cost_type_id := get_fc_type_id(
3062 get_fc_type_id(
3064 p_charge_subtype_code => l_fc_charge_rec.line_type_code,
3065 x_freight_cost_type_id => l_freight_cost_type_id,
3066 x_return_status => l_return_status);
3067 ELSIF p_qp_output_detail_rows(m).list_line_type_code = 'DIS' THEN
3068 --l_freight_cost_type_id := get_fc_type_id(
3069 get_fc_type_id(
3070 p_line_type_code => 'FTEDISCOUNT',
3071 p_charge_subtype_code => 'DISCOUNT',
3072 x_freight_cost_type_id => l_freight_cost_type_id,
3073 x_return_status => l_return_status);
3074 END IF;
3075
3076 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3077 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3078 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
3079 END IF;
3080 ELSE
3081 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
3082 END IF;
3083
3084 l_fte_total_amount := 0;
3085
3086 IF l_end_fc_count > l_curr_fc_count THEN
3087 -- {
3088
3089 n := l_curr_fc_count + 1; -- Determine the charges/discounts
3090
3091 LOOP
3092
3093 IF p_save_flag = 'M' THEN -- Populate appropriate columns
3094
3095 IF x_freight_cost_main_charge(n).line_type_code IS NULL THEN
3096
3097 x_freight_cost_main_charge(n).line_type_code := 'CHARGE';
3098
3099 END IF;
3100
3101 x_freight_cost_main_charge(n).charge_source_code := 'PRICING_ENGINE';
3102 --x_freight_cost_main_charge(n).estimated_flag := 'Y';
3103 x_freight_cost_main_charge(n).estimated_flag := 'N';
3104
3105 x_freight_cost_main_charge(n).freight_cost_type_id := l_freight_cost_type_id;
3106 --x_freight_cost_main_charge(n).delivery_leg_id := l_fc_charge_rec.delivery_leg_id;
3107
3108 --MDC
3109 --x_freight_cost_main_charge(n).delivery_leg_id := p_entity_id;
3110 --x_freight_cost_main_charge(n).delivery_id := p_delivery_id;
3111
3112 x_freight_cost_main_charge(n).delivery_leg_id := g_shipment_line_rows(x_freight_cost_main_charge(n).delivery_detail_id).delivery_leg_id;
3113 x_freight_cost_main_charge(n).delivery_id := g_shipment_line_rows(x_freight_cost_main_charge(n).delivery_detail_id).delivery_id;
3114
3115
3116 x_freight_cost_main_charge(n).currency_code := l_fc_charge_rec.currency_code;
3117 x_freight_cost_main_charge(n).uom := l_fc_charge_rec.uom;
3118 x_freight_cost_main_charge(n).charge_unit_value := l_fc_charge_rec.charge_unit_value;
3119
3120 l_total_amount := x_freight_cost_main_charge(n).total_amount;
3121
3122 IF x_freight_cost_main_charge(n).line_type_code = 'DISCOUNT' THEN
3123
3124 l_total_amount := 0 - l_total_amount;
3125 l_discount_total := x_freight_cost_main_charge(n).total_amount;
3126
3127 END IF;
3128
3129 l_delivery_detail_id := x_freight_cost_main_charge(n).delivery_detail_id;
3130
3131 -- ELSIF p_save_flag = 'T' THEN
3132 ELSE -- VVP (OM Est change)
3133
3134 IF x_freight_cost_temp_charge(n).line_type_code IS NULL THEN
3135
3136 x_freight_cost_temp_charge(n).line_type_code := 'CHARGE';
3137
3138 END IF;
3139
3140 x_freight_cost_temp_charge(n).charge_source_code := 'PRICING_ENGINE';
3141 x_freight_cost_temp_charge(n).estimated_flag := 'Y';
3142
3143 x_freight_cost_temp_charge(n).freight_cost_type_id := l_freight_cost_type_id;
3144
3145 --MDC
3146 --x_freight_cost_temp_charge(n).delivery_id := p_entity_id;
3147 x_freight_cost_temp_charge(n).delivery_id := g_shipment_line_rows(x_freight_cost_temp_charge(n).delivery_detail_id).delivery_id;
3148
3149 x_freight_cost_temp_charge(n).currency_code := l_fc_charge_rec.currency_code;
3150 x_freight_cost_temp_charge(n).uom := l_fc_charge_rec.uom;
3151 x_freight_cost_temp_charge(n).charge_unit_value := l_fc_charge_rec.charge_unit_value;
3152
3153 l_total_amount := x_freight_cost_temp_charge(n).total_amount;
3154
3155 IF x_freight_cost_temp_charge(n).line_type_code = 'DISCOUNT' THEN
3156
3157 l_total_amount := 0 - l_total_amount;
3158 l_discount_total := x_freight_cost_temp_charge(n).total_amount;
3159
3160 END IF;
3161
3162 l_delivery_detail_id := x_freight_cost_temp_charge(n).delivery_detail_id;
3163
3164 END IF;
3165
3166 -- WSH amount for base price lines should be base price
3167 -- less sum of the discounts on that base price
3168
3169 IF NOT l_fc_dlvd_rows.EXISTS(l_delivery_detail_id) THEN
3173 ELSE
3170 l_fc_dlvd_rows(l_delivery_detail_id).total_amount := l_total_amount;
3171 l_fc_dlvd_rows(l_delivery_detail_id).discount_amount := l_discount_total;
3172 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Discount total for detail '||l_delivery_detail_id||' is '||l_fc_dlvd_rows(l_delivery_detail_id).discount_amount);
3174 l_fc_dlvd_rows(l_delivery_detail_id).total_amount := l_fc_dlvd_rows(l_delivery_detail_id).total_amount + l_total_amount;
3175 l_fc_dlvd_rows(l_delivery_detail_id).discount_amount := l_fc_dlvd_rows(l_delivery_detail_id).discount_amount + l_discount_total;
3176 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Discount total for detail '||l_delivery_detail_id||' is '||l_fc_dlvd_rows(l_delivery_detail_id).discount_amount);
3177 END IF;
3178
3179 IF p_save_flag = 'M' THEN
3180
3181 EXIT WHEN n = x_freight_cost_main_charge.LAST; -- Same number of rows in either table
3182 n := x_freight_cost_main_charge.NEXT(n);
3183
3184 ELSE
3185
3186 EXIT WHEN n = x_freight_cost_temp_charge.LAST; -- Same number of rows in either table
3187 n := x_freight_cost_temp_charge.NEXT(n);
3188
3189 END IF;
3190
3191 END LOOP;
3192
3193 --}
3194 END IF; -- No new fc records were created
3195
3196 -- }
3197 END IF;
3198
3199 -- } -- 'SUR' or 'DIS'
3200 END IF;
3201
3202 EXIT WHEN m = p_qp_output_detail_rows.LAST;
3203 m := p_qp_output_detail_rows.NEXT(m);
3204 -- }
3205 END LOOP;
3206 -- }
3207 ELSE
3208 -- {
3209 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'NO QP line detail records created');
3210 -- }
3211 END IF;
3212
3213 l_charge_unit_value := p_qp_output_line_row.unit_price;
3214 --l_output_wsh := l_fc_rec.charge_unit_value * l_fc_rec.quantity;
3215 l_output_wsh := l_charge_unit_value * p_qp_output_line_row.priced_quantity;
3216
3217 IF p_save_flag = 'M' THEN
3218 l_curr_fc_count := x_freight_cost_main_price.COUNT;
3219 ELSE
3220 l_curr_fc_count := x_freight_cost_temp_price.COUNT;
3221 END IF;
3222
3223 IF p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id IS NOT NULL THEN
3224 -- {
3225
3226 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Loose item id : '||p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id);
3227
3228 l_main_price_index := l_curr_fc_count + 1;
3229
3230 IF l_fc_dlvd_rows.COUNT > 0 THEN
3231 l_charge_total_amount := l_fc_dlvd_rows(p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id).total_amount;
3232 l_discount_total_amount := l_fc_dlvd_rows(p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id).discount_amount;
3233 ELSE
3234 l_charge_total_amount := 0;
3235 l_discount_total_amount := 0;
3236 END IF;
3237
3238 IF p_save_flag = 'M' THEN -- Populate appropriate columns
3239
3240 x_freight_cost_main_price(l_main_price_index).delivery_detail_id := p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id;
3241 x_freight_cost_main_price(l_main_price_index).quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3242 x_freight_cost_main_price(l_main_price_index).unit_amount := round(l_output_wsh - l_discount_total_amount,2);
3243
3244 x_freight_cost_main_price(l_main_price_index).total_amount := round(l_output_wsh + l_charge_total_amount,2);
3245
3246 ELSE
3247
3248 x_freight_cost_temp_price(l_main_price_index).delivery_detail_id := p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id;
3249 x_freight_cost_temp_price(l_main_price_index).quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3250 x_freight_cost_temp_price(l_main_price_index).unit_amount := round(l_output_wsh - l_discount_total_amount,2);
3251
3252 x_freight_cost_temp_price(l_main_price_index).total_amount := round(l_output_wsh + l_charge_total_amount,2);
3253
3254 END IF;
3255
3256 -- }
3257 ELSE -- Need to prorate among the top level lines
3258 -- {
3259
3260 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'p_aggregation= '||p_aggregation);
3261 IF p_aggregation = 'WITHIN' THEN
3262 -- {
3263 -- Need to prorate back to top level lines based on the category
3264
3265 -- New API : Case for global l_rolledup_lines
3266 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,' Basis is : '||p_pricing_engine_input(p_qp_output_line_row.line_index).basis);
3267 get_rolledup_amount(
3268 p_container_id => p_delivery_detail_id,
3269 --p_basis => p_pricing_engine_input(p_qp_output_line_row.line_index).basis,
3270 p_category_id => p_pricing_engine_input(p_qp_output_line_row.line_index).category_id,
3271 p_wsh_amount => l_output_wsh,
3275 p_save_flag => p_save_flag,
3272 p_fc_dlvd_rows => l_fc_dlvd_rows,
3273 p_quantity => p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity,
3274 p_uom => l_fc_rec.uom,
3276 x_freight_cost_main_price => x_freight_cost_main_price,
3277 x_freight_cost_temp_price => x_freight_cost_temp_price,
3278 x_freight_cost_main_charge => l_freight_cost_main_charge,
3279 x_freight_cost_temp_charge => l_freight_cost_temp_charge,
3280 x_quantity => l_category_sum, -- Returns in input uom
3281 x_return_status => l_return_status);
3282
3283 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,' l_category_sum ='||l_category_sum);
3284
3285 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3286 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3287 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Price get_rolled_up');
3288 raise FTE_FREIGHT_PRICING_UTIL.g_proration_failed;
3289 END IF;
3290 ELSE
3291 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Engine row quantity : '||p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
3292 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Container : '||p_delivery_detail_id||' Category : '||p_pricing_engine_input(p_qp_output_line_row.line_index).category_id||' Children Qty Sum : '||l_category_sum);
3293 END IF;
3294
3295 -- When the category is not there in engine row, there is no proration
3296 IF p_pricing_engine_input(p_qp_output_line_row.line_index).category_id IS NULL
3297 AND p_grouping_level = 'CONTAINER' THEN
3298 l_category_sum := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3299 END IF;
3300
3301 -- Need to create container level SUMMARY FC record here
3302
3303 l_container_price := l_output_wsh * (l_category_sum/p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
3304
3305 l_billed_weight := l_category_sum;
3306 -- new code for loose items
3307 -- no need for summary records for loose items
3308 IF ((g_shipment_line_rows(p_delivery_detail_id).container_flag = 'Y') OR (g_shipment_line_rows(p_delivery_detail_id).container_flag = 'C')) THEN
3309 -- {
3310 IF x_container_summary.EXISTS(p_delivery_detail_id) THEN
3311 x_container_summary(p_delivery_detail_id).total_amount := x_container_summary(p_delivery_detail_id).total_amount + l_container_price;
3312 x_container_summary(p_delivery_detail_id).discount_amount := l_container_price - x_container_summary(p_delivery_detail_id).discount_amount;
3313
3314 ELSE
3315 x_container_summary(p_delivery_detail_id).currency_code := l_fc_rec.currency_code;
3316 x_container_summary(p_delivery_detail_id).total_amount := l_container_price;
3317 x_container_summary(p_delivery_detail_id).discount_amount := l_container_price;
3318 --Billable columns at container level
3319 x_container_summary(p_delivery_detail_id).bquantity := l_category_sum;--p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3320 x_container_summary(p_delivery_detail_id).bbasis := p_pricing_engine_input(p_qp_output_line_row.line_index).basis;
3321 x_container_summary(p_delivery_detail_id).buom := l_fc_rec.uom;
3322
3323 --MDC
3324 --x_container_summary(p_delivery_detail_id).delivery_id := p_delivery_id;
3325 x_container_summary(p_delivery_detail_id).delivery_id := g_shipment_line_rows(p_delivery_detail_id).delivery_id;
3326
3327 IF p_save_flag = 'M' THEN
3328 --MDC
3329 --x_container_summary(p_delivery_detail_id).delivery_leg_id := p_entity_id;
3330 x_container_summary(p_delivery_detail_id).delivery_leg_id := g_shipment_line_rows(p_delivery_detail_id).delivery_leg_id;
3331
3332 END IF;
3333 END IF;
3334 -- }
3335 END IF; --container flag
3336
3337 -- }
3338 ELSE
3339 -- {
3340
3341 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,' Basis 2 is : '||p_pricing_engine_input(p_qp_output_line_row.line_index).basis);
3342 get_rolledup_amount(
3343 p_container_id => p_delivery_detail_id,
3344 p_basis => p_pricing_engine_input(p_qp_output_line_row.line_index).basis,
3345 p_wsh_amount => l_output_wsh,
3346 p_fc_dlvd_rows => l_fc_dlvd_rows,
3347 p_quantity => p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity,
3348 p_uom => l_fc_rec.uom,
3349 p_save_flag => p_save_flag,
3350 x_freight_cost_main_price => x_freight_cost_main_price,
3351 x_freight_cost_temp_price => x_freight_cost_temp_price,
3355 x_return_status => l_return_status);
3352 x_freight_cost_main_charge => l_freight_cost_main_charge,
3353 x_freight_cost_temp_charge => l_freight_cost_temp_charge,
3354 x_quantity => l_basis_sum, -- Returns in input uom
3356
3357 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,' l_basis_sum ='||l_basis_sum);
3358
3359 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3360 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3361 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Price get_rolled_up');
3362 raise FTE_FREIGHT_PRICING_UTIL.g_proration_failed;
3363 END IF;
3364 ELSE
3365 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Engine row quantity : '||p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
3366 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Container : '||p_delivery_detail_id||' Basis : '||p_pricing_engine_input(p_qp_output_line_row.line_index).basis||' Children Qty Sum : '||l_basis_sum);
3367 END IF;
3368
3369 -- When the basis is not there in engine row, there is no proration
3370 IF p_pricing_engine_input(p_qp_output_line_row.line_index).basis IS NULL
3371 AND p_grouping_level = 'CONTAINER' THEN
3372 l_basis_sum := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3373 END IF;
3374
3375 -- Need to create container level SUMMARY FC record here
3376
3377 l_container_price := l_output_wsh * (l_basis_sum/p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity);
3378
3379 l_billed_weight := l_basis_sum;
3380
3381 -- new code for loose items
3382 -- no need for summary records for loose items
3383 IF ((g_shipment_line_rows(p_delivery_detail_id).container_flag = 'Y')OR (g_shipment_line_rows(p_delivery_detail_id).container_flag = 'C')) THEN
3384 -- {
3385 IF x_container_summary.EXISTS(p_delivery_detail_id) THEN
3386 x_container_summary(p_delivery_detail_id).total_amount := x_container_summary(p_delivery_detail_id).total_amount + l_container_price;
3387 x_container_summary(p_delivery_detail_id).discount_amount := l_container_price - x_container_summary(p_delivery_detail_id).discount_amount;
3388
3389 ELSE
3390 x_container_summary(p_delivery_detail_id).currency_code := l_fc_rec.currency_code;
3391 x_container_summary(p_delivery_detail_id).total_amount := l_container_price;
3392 x_container_summary(p_delivery_detail_id).discount_amount := l_container_price;
3393 --Billable columns at container level
3394 x_container_summary(p_delivery_detail_id).bquantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3395 x_container_summary(p_delivery_detail_id).bbasis := p_pricing_engine_input(p_qp_output_line_row.line_index).basis;
3396 x_container_summary(p_delivery_detail_id).buom := l_fc_rec.uom;
3397
3398
3399 --MDC
3400 --x_container_summary(p_delivery_detail_id).delivery_id := p_delivery_id;
3401 x_container_summary(p_delivery_detail_id).delivery_id := g_shipment_line_rows(p_delivery_detail_id).delivery_id;
3402 IF p_save_flag = 'M' THEN
3403 --MDC
3404 --x_container_summary(p_delivery_detail_id).delivery_leg_id := p_entity_id;
3405
3406 x_container_summary(p_delivery_detail_id).delivery_leg_id := g_shipment_line_rows(p_delivery_detail_id).delivery_leg_id;
3407
3408 END IF;
3409 END IF;
3410 -- }
3411 END IF;
3412
3413 -- }
3414 END IF;
3415 -- }
3416 END IF;
3417
3418 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_billed_weight='||l_billed_weight);
3419
3420 IF p_save_flag = 'M' THEN
3421 l_end_fc_count := x_freight_cost_main_price.COUNT;
3422 ELSE
3423 l_end_fc_count := x_freight_cost_temp_price.COUNT;
3424 END IF;
3425
3426 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'No. of fc base price records created w/o Container level BP : '||to_char(l_end_fc_count - l_curr_fc_count));
3427
3428 IF l_end_fc_count = l_curr_fc_count THEN -- Do it only if No rolled up lines got new fc records -- {
3429 -- And it is not because the container did not have any matching lines
3430 -- eg.in case of consolidating SCWB with MCWB
3431
3432 -- IF p_aggregation = 'ACROSS' AND p_pricing_engine_input(p_qp_output_line_row.line_index).basis IS NULL
3433 -- AND p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_id IS NULL THEN
3434 IF p_aggregation = 'ACROSS' AND p_pricing_engine_input(p_qp_output_line_row.line_index).basis IS NULL
3435 AND p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_flag = 'N' THEN
3436 -- {
3437 -- If basis on the input engine line is NULL for commodity_aggregation = 'ACROSS'
3438 -- Put the charge at the container level itself with the proper line type code
3442
3439 -- In this case the container will not have the summary record
3440 -- What about unit amount
3441 -- For these kind of lines unit amount and total amount follows exactly the same logic
3443 l_main_price_index := l_end_fc_count + 1;
3444 l_container_quantity := p_pricing_engine_input(p_qp_output_line_row.line_index).line_quantity;
3445
3446
3447
3448 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Container Quantity : '|| l_container_quantity);
3449
3450 IF p_save_flag = 'M' THEN -- Populate appropriate columns
3451 x_freight_cost_main_price(l_main_price_index).delivery_detail_id := p_delivery_detail_id;
3452 -- This quantity will now become the container level gross quantity
3453 x_freight_cost_main_price(l_main_price_index).quantity := l_container_quantity;
3454 x_freight_cost_main_price(l_main_price_index).total_amount := round(x_container_summary(p_delivery_detail_id).total_amount,2);
3455 x_freight_cost_main_price(l_main_price_index).unit_amount := round(x_container_summary(p_delivery_detail_id).discount_amount,2);
3456 x_freight_cost_main_price(l_main_price_index).billable_quantity := l_container_quantity;
3457 x_freight_cost_main_price(l_main_price_index).billable_uom := l_fc_rec.uom;
3458 x_freight_cost_main_price(l_main_price_index).billable_basis := p_rate_basis;
3459
3460 ELSE
3461 x_freight_cost_temp_price(l_main_price_index).delivery_detail_id := p_delivery_detail_id;
3462 -- This quantity will now become the container level gross quantity
3463 x_freight_cost_temp_price(l_main_price_index).quantity := l_container_quantity;
3464 x_freight_cost_temp_price(l_main_price_index).total_amount := round(x_container_summary(p_delivery_detail_id).total_amount,2);
3465 x_freight_cost_temp_price(l_main_price_index).unit_amount := round(x_container_summary(p_delivery_detail_id).discount_amount,2);
3466 x_freight_cost_temp_price(l_main_price_index).billable_quantity := l_container_quantity;
3467 x_freight_cost_temp_price(l_main_price_index).billable_uom := l_fc_rec.uom;
3468 x_freight_cost_temp_price(l_main_price_index).billable_basis := p_rate_basis;
3469
3470 END IF;
3471 l_end_fc_count := l_end_fc_count + 1;
3472 x_container_summary.DELETE(p_delivery_detail_id); -- No summary record for this one
3473
3474 -- }
3475 END IF;
3476
3477 -- }
3478 END IF;
3479
3480 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'No. of fc base price records created in all : '||to_char(l_end_fc_count - l_curr_fc_count));
3481
3482 IF l_end_fc_count > l_curr_fc_count THEN
3483
3484 get_fc_type_id(
3485 p_line_type_code => 'FTEPRICE',
3486 p_charge_subtype_code => 'PRICE',
3487 x_freight_cost_type_id => l_freight_cost_type_id,
3488 x_return_status => l_return_status);
3489
3490 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3491 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3492 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
3493 END IF;
3494 ELSE
3495 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
3496 END IF;
3497
3498 o := l_curr_fc_count + 1; -- Determine the base price
3499 LOOP
3500
3501 --l_freight_cost_type_id := get_fc_type_id(
3502
3503 IF p_save_flag = 'M' THEN -- Populate appropriate columns
3504
3505 x_freight_cost_main_price(o).line_type_code := l_fc_rec.line_type_code;
3506 --x_freight_cost_main_price(o).line_type_code := nvl(x_freight_cost_main_price(n).line_type_code,'PRICE');
3507 x_freight_cost_main_price(o).charge_source_code := 'PRICING_ENGINE';
3508 --x_freight_cost_main_price(o).estimated_flag := 'Y';
3509 x_freight_cost_main_price(o).estimated_flag := 'N';
3510 x_freight_cost_main_price(o).freight_cost_type_id := l_freight_cost_type_id;
3511 --x_freight_cost_main_price(o).delivery_leg_id := l_fc_rec.delivery_leg_id;
3512
3513 --MDC
3514 --x_freight_cost_main_price(o).delivery_leg_id := p_entity_id;
3515 x_freight_cost_main_price(o).delivery_leg_id :=g_shipment_line_rows(x_freight_cost_main_price(o).delivery_detail_id).delivery_leg_id;
3516 --x_freight_cost_main_price(o).delivery_id := p_delivery_id;
3517 x_freight_cost_main_price(o).delivery_id :=g_shipment_line_rows(x_freight_cost_main_price(o).delivery_detail_id).delivery_id;
3518
3519 x_freight_cost_main_price(o).currency_code := l_fc_rec.currency_code;
3520 x_freight_cost_main_price(o).uom := l_fc_rec.uom;
3521 x_freight_cost_main_price(o).charge_unit_value := l_fc_rec.charge_unit_value;
3522
3523 -- Need to set for Top level Price record in case of commodity based rating
3524 -- Container rates columns are set during container summary records.
3525
3526 IF p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_flag = 'Y'
3527 AND l_fc_rec.line_type_code = 'PRICE' THEN
3528 x_freight_cost_main_price(o).billable_uom := l_fc_rec.uom;
3529 x_freight_cost_main_price(o).billable_quantity := l_billed_weight;--l_fc_rec.quantity;
3530 x_freight_cost_main_price(o).billable_basis := p_rate_basis;--p_pricing_engine_input(p_qp_output_line_row.line_index).basis;
3531 END IF;
3532
3533 --MDC
3537 x_fc_dleg_rows(x_freight_cost_main_price(o).delivery_leg_id).entity_id := x_freight_cost_main_price(o).delivery_leg_id;
3534 IF x_freight_cost_main_price(o).delivery_leg_id IS NOT NULL THEN
3535
3536 IF NOT x_fc_dleg_rows.EXISTS(x_freight_cost_main_price(o).delivery_leg_id) THEN
3538 x_fc_dleg_rows(x_freight_cost_main_price(o).delivery_leg_id).summary_amount := x_freight_cost_main_price(o).total_amount;
3539 ELSE
3540 x_fc_dleg_rows(x_freight_cost_main_price(o).delivery_leg_id).summary_amount := x_fc_dleg_rows(x_freight_cost_main_price(o).delivery_leg_id).summary_amount + x_freight_cost_main_price(o).total_amount;
3541 END IF;
3542
3543 END IF;
3544
3545
3546 --l_dleg_sum_amount := l_dleg_sum_amount + x_freight_cost_main_price(o).total_amount;
3547
3548 --ELSIF p_save_flag = 'T' THEN
3549 ELSE -- VVP (OM Est change)
3550
3551 x_freight_cost_temp_price(o).line_type_code := l_fc_rec.line_type_code;
3552 --x_freight_cost_temp_price(o).line_type_code := nvl(x_freight_cost_temp_price(n).line_type_code,l_fc_rec.line_type_code);
3553 x_freight_cost_temp_price(o).charge_source_code := 'PRICING_ENGINE';
3554 x_freight_cost_temp_price(o).estimated_flag := 'Y';
3555 x_freight_cost_temp_price(o).freight_cost_type_id := l_freight_cost_type_id;
3556
3557 --MDC
3558 --x_freight_cost_temp_price(o).delivery_id := p_entity_id;
3559
3560 x_freight_cost_temp_price(o).delivery_id := g_shipment_line_rows(x_freight_cost_temp_price(o).delivery_detail_id).delivery_id;
3561
3562 x_freight_cost_temp_price(o).currency_code := l_fc_rec.currency_code;
3563 x_freight_cost_temp_price(o).uom := l_fc_rec.uom;
3564 -- Need to set for Top level Price record in case of commodity based rating
3565 -- Container rates columns are set during container summary records.
3566 IF p_pricing_engine_input(p_qp_output_line_row.line_index).loose_item_flag = 'Y'
3567 AND l_fc_rec.line_type_code = 'PRICE' THEN
3568 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Setting billed Weight in case of Price and lose Item Y');
3569
3570 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_billed_weight ='||l_billed_weight);
3571 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_fc_rec.quantity ='||l_fc_rec.quantity);
3572
3573 x_freight_cost_temp_price(o).billable_uom := l_fc_rec.uom;
3574 x_freight_cost_temp_price(o).billable_quantity := l_billed_weight;--l_fc_rec.quantity;
3575 x_freight_cost_temp_price(o).billable_basis := p_rate_basis;--p_pricing_engine_input(p_qp_output_line_row.line_index).basis;
3576 END IF;
3577 x_freight_cost_temp_price(o).charge_unit_value := l_fc_rec.charge_unit_value;
3578
3579 --MDC
3580 IF x_freight_cost_temp_price(o).delivery_id IS NOT NULL THEN
3581
3582 IF NOT x_fc_dleg_rows.EXISTS(x_freight_cost_temp_price(o).delivery_id) THEN
3583 x_fc_dleg_rows(x_freight_cost_temp_price(o).delivery_id).entity_id := x_freight_cost_temp_price(o).delivery_id;
3584 x_fc_dleg_rows(x_freight_cost_temp_price(o).delivery_id).summary_amount := x_freight_cost_temp_price(o).total_amount;
3585 ELSE
3586 x_fc_dleg_rows(x_freight_cost_temp_price(o).delivery_id).summary_amount := x_fc_dleg_rows(x_freight_cost_temp_price(o).delivery_id).summary_amount + x_freight_cost_temp_price(o).total_amount;
3587 END IF;
3588
3589 END IF;
3590
3591
3592 --l_dleg_sum_amount := l_dleg_sum_amount + x_freight_cost_temp_price(o).total_amount;
3593
3594 END IF;
3595
3596 IF p_save_flag = 'M' THEN
3597
3598 EXIT WHEN o = x_freight_cost_main_price.LAST; -- Same number of rows in either table
3599 o := x_freight_cost_main_price.NEXT(o);
3600
3601 ELSE
3602
3603 EXIT WHEN o = x_freight_cost_temp_price.LAST; -- Same number of rows in either table
3604 o := x_freight_cost_temp_price.NEXT(o);
3605
3606 END IF;
3607
3608 END LOOP;
3609
3610 --MDC
3611 --IF p_entity_id IS NOT NULL THEN
3612
3613 --IF NOT x_fc_dleg_rows.EXISTS(p_entity_id) THEN
3614 --x_fc_dleg_rows(p_entity_id).entity_id := p_entity_id;
3615 --x_fc_dleg_rows(p_entity_id).summary_amount := l_dleg_sum_amount;
3616 --ELSE
3617 --x_fc_dleg_rows(p_entity_id).summary_amount := x_fc_dleg_rows(p_entity_id).summary_amount + l_dleg_sum_amount;
3618 --END IF;
3619
3620 --END IF;
3621
3622 END IF; -- No new fc records were inserted
3623 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'prepare_fc_records');
3624
3625 EXCEPTION
3626 WHEN FTE_FREIGHT_PRICING_UTIL.g_proration_failed THEN
3627 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3628 FTE_FREIGHT_PRICING_UTIL.set_exception('prepare_fc_records',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_proration_failed');
3629 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'prepare_fc_records failed ');
3630 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'prepare_fc_records');
3631 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed THEN
3632 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3633 FTE_FREIGHT_PRICING_UTIL.set_exception('prepare_fc_records',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_fc_type_failed');
3634 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'prepare_fc_records');
3635 WHEN others THEN
3636 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3640 END prepare_fc_records;
3637 FTE_FREIGHT_PRICING_UTIL.set_exception('prepare_fc_records',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
3638 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
3639 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'prepare_fc_records');
3641
3642 -- This API will result in one qp output line per instance
3643 -- It will delete other engine rows and associated engine output line details
3644
3645 PROCEDURE resolve_pricing_objective(
3646 p_pricing_dual_instances IN pricing_dual_instance_tab_type,
3647 x_pricing_engine_input IN OUT NOCOPY pricing_engine_input_tab_type,
3648 x_qp_output_line_rows IN OUT NOCOPY QP_PREQ_GRP.LINE_TBL_TYPE,
3649 x_qp_output_line_details IN OUT NOCOPY QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
3650 x_return_status OUT NOCOPY VARCHAR2)
3651 IS
3652 i NUMBER:=0;
3653 j NUMBER:=0;
3654 l_tot_amount NUMBER:=0;
3655 l_return_status VARCHAR2(1);
3656
3657 l_instance_output instance_enginerow_tab_type;
3658
3659 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_INF;
3660
3661 BEGIN
3662
3663 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3664 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
3665 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'resolve_pricing_objective','start');
3666
3667 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'QP Output line row count : '||x_qp_output_line_rows.COUNT);
3668 i := x_qp_output_line_rows.FIRST;
3669 IF i IS NOT NULL THEN
3670 LOOP
3671 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'QP line index : '||x_qp_output_line_rows(i).line_index);
3672 -- IF x_pricing_engine_input(x_qp_output_line_rows(i).line_index).loose_item_id IS NULL THEN -- Container
3673 IF x_pricing_engine_input(x_qp_output_line_rows(i).line_index).loose_item_flag = 'N' THEN -- Container
3674
3675 IF NOT l_instance_output.EXISTS(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index) THEN
3676
3677 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'QP line index : '||x_qp_output_line_rows(i).line_index||'Instance : '
3678 ||x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index||' Quanitity : '||x_pricing_engine_input(x_qp_output_line_rows(i).line_index).line_quantity);
3679
3680 l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).input_index := x_qp_output_line_rows(i).line_index;
3681 --l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).tot_amount := x_qp_output_line_rows(i).unit_price * x_pricing_engine_input(x_qp_output_line_rows(i).line_index).line_quantity;
3682
3683 l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).tot_amount := x_qp_output_line_rows(i).unit_price * x_qp_output_line_rows(i).priced_quantity;
3684
3685 ELSE
3686
3687 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'QP line index : '||x_qp_output_line_rows(i).line_index||'Instance : '
3688 ||x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index||' Quanitity : '||x_pricing_engine_input(x_qp_output_line_rows(i).line_index).line_quantity);
3689
3690 -- Find out the line index to choose for this instance based on pricing objective
3691 -- What happens if there is no pricing objective ?
3692
3693 --l_tot_amount := x_qp_output_line_rows(i).unit_price * x_pricing_engine_input(x_qp_output_line_rows(i).line_index).line_quantity; -- assuming same input and output currency code
3694
3695 l_tot_amount := x_qp_output_line_rows(i).unit_price * x_qp_output_line_rows(i).priced_quantity; -- assuming same input and output currency code
3696
3697 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Current Total amount : '||l_tot_amount);
3698 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Existing instance amount : '||l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).tot_amount);
3699 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Pricing objective : '||p_pricing_dual_instances(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).objective);
3700
3701 IF p_pricing_dual_instances(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).objective IS NOT NULL THEN
3702
3703 IF ((p_pricing_dual_instances(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).objective = G_OBJECTIVE_HIGHEST AND
3704 l_tot_amount > l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).tot_amount ) OR
3705 (p_pricing_dual_instances(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).objective = G_OBJECTIVE_LOWEST AND
3706 l_tot_amount < l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).tot_amount )) THEN
3707
3708 x_pricing_engine_input.DELETE(l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).input_index);
3709
3710 FTE_QP_ENGINE.delete_lines (
3711 p_line_index => l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).input_index,
3712 x_qp_output_line_rows => x_qp_output_line_rows ,
3713 x_qp_output_detail_rows => x_qp_output_line_details,
3714 x_return_status => l_return_status);
3715
3719 raise FTE_FREIGHT_PRICING_UTIL.g_delete_qpline_failed;
3716 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3717 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3718 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Highest current higher delete_lines ');
3720 END IF;
3721 ELSE
3722 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Deleted QP output : '||l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).input_index);
3723 END IF;
3724
3725 l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).tot_amount := l_tot_amount;
3726 l_instance_output(x_pricing_engine_input(x_qp_output_line_rows(i).line_index).instance_index).input_index := x_qp_output_line_rows(i).line_index;
3727
3728 ELSE
3729
3730 x_pricing_engine_input.DELETE(x_qp_output_line_rows(i).line_index);
3731
3732 FTE_QP_ENGINE.delete_lines (
3733 p_line_index => i,
3734 x_qp_output_line_rows => x_qp_output_line_rows ,
3735 x_qp_output_detail_rows => x_qp_output_line_details,
3736 x_return_status => l_return_status);
3737
3738 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3739 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3740 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Highest current not higher delete_lines');
3741 raise FTE_FREIGHT_PRICING_UTIL.g_delete_qpline_failed;
3742 END IF;
3743 ELSE
3744 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Deleted QP output : '||i);
3745 END IF;
3746
3747 -- For NULL pricing objective we will keep all the output lines for the instance
3748
3749 END IF;
3750 END IF; -- pricing_objective NOT NULL
3751
3752 END IF;
3753
3754 -- Found out the line index for this instance based on pricing objective
3755 END IF;
3756
3757 EXIT WHEN i >= x_qp_output_line_rows.LAST;
3758 i := x_qp_output_line_rows.NEXT(i);
3759 END LOOP;
3760 END IF;
3761 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'resolve_pricing_objective');
3762
3763 EXCEPTION
3764 WHEN FTE_FREIGHT_PRICING_UTIL.g_delete_qpline_failed THEN
3765 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3766 FTE_FREIGHT_PRICING_UTIL.set_exception('resolve_pricing_objective',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_delete_qpline_failed');
3767 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'delete_qpline_failed failed ');
3768 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'resolve_pricing_objective');
3769 WHEN others THEN
3770 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3771 FTE_FREIGHT_PRICING_UTIL.set_exception('resolve_pricing_objective',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
3772 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
3773 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'resolve_pricing_objective');
3774
3775 END resolve_pricing_objective;
3776
3777 PROCEDURE add_other_container_summary (
3778 p_save_flag IN VARCHAR2,
3779 x_freight_cost_main_price IN OUT NOCOPY Freight_Cost_Main_Tab_Type,
3780 x_freight_cost_temp_price IN OUT NOCOPY Freight_Cost_Temp_Tab_Type,
3781 x_return_status OUT NOCOPY VARCHAR2)
3782 IS
3783
3784 i NUMBER:=0;
3785 j NUMBER:=0;
3786 l NUMBER:=0;
3787 n NUMBER:=0;
3788 p NUMBER:=0;
3789 l_price_first NUMBER:=0;
3790 l_child_container NUMBER:=0;
3791 l_master_container NUMBER:=0;
3792 l_parent_container NUMBER:=0;
3793 l_price_last NUMBER:=0;
3794 l_curr_fc_count NUMBER:=0;
3795 l_main_price_index NUMBER:=0;
3796 l_freight_cost_type_id NUMBER:=0;
3797 l_in_between_cont_prv_cnt NUMBER:=0;
3798 l_container_summary container_sum_tab_type;
3799 l_between_cont_sum container_sum_tab_type;
3800 l_in_between_containers container_detail_tab_type;
3801 l_return_status VARCHAR2(1);
3802
3803 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
3804
3805 BEGIN
3806 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3807 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
3808 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'add_other_container_summary','start');
3809
3810 IF p_save_flag = 'M' THEN
3811 l_price_first := x_freight_cost_main_price.FIRST;
3812 l_price_last := x_freight_cost_main_price.LAST;
3813 l_curr_fc_count := x_freight_cost_main_price.COUNT;
3814 ELSE
3815 l_price_first := x_freight_cost_temp_price.FIRST;
3816 l_price_last := x_freight_cost_temp_price.LAST;
3817 l_curr_fc_count := x_freight_cost_temp_price.COUNT;
3818 END IF;
3819
3820 p := 0;
3821 i := g_rolledup_lines.FIRST;
3822 LOOP
3823 IF g_rolledup_lines(i).master_container_id <> g_rolledup_lines(i).container_id THEN
3827
3824 -- This is a rolled up line which
3825 -- actually is inside a non top level container
3826 -- For this delivery detail we need to look up the total_amount
3828 -- Now, an interesting problem here would be if the container_id here is not a direct
3829 -- child of the master_container_id and there is no rolled up line
3830 -- for the in between containers
3831 -- For all those in between containers a SUMMARY record needs to be inserted
3832 -- these records will look exactly the same as that of the actual container_id here
3833
3834 l_in_between_cont_prv_cnt := l_in_between_containers.COUNT;
3835 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Parent non top level container for detail : '||g_rolledup_lines(i).delivery_detail_id);
3836
3837 l_child_container := g_rolledup_lines(i).container_id;
3838 l_master_container := g_rolledup_lines(i).master_container_id;
3839 LOOP
3840
3841 l_parent_container := g_shipment_line_rows(l_child_container).parent_delivery_detail_id;
3842
3843 IF l_parent_container <> l_master_container THEN
3844 -- We have to deal with in between containers
3845
3846 IF NOT l_container_summary.EXISTS(l_parent_container) THEN
3847 p := p + 1;
3848 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Adding in between container : '||l_parent_container);
3849
3850 -- If indexed by container_id then can not store detail id
3851 -- Create a hash of detail and container together ?
3852 -- and store both detail and container
3853
3854 l_in_between_containers(p).detail_id := g_rolledup_lines(i).delivery_detail_id;
3855 l_in_between_containers(p).entity_id := l_parent_container;
3856
3857 END IF;
3858 l_child_container := g_shipment_line_rows(l_child_container).parent_delivery_detail_id;
3859 ELSE
3860 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done adding in between containers for detail : '||g_rolledup_lines(i).delivery_detail_id);
3861 EXIT;
3862 END IF;
3863 END LOOP;
3864
3865 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Parent container : '||g_rolledup_lines(i).container_id);
3866 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Master container : '||g_rolledup_lines(i).master_container_id);
3867 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'In between container count : '||l_in_between_containers.COUNT);
3868
3869 -- No need to loop over charge records as the PRICE record for the
3870 -- delivery detail would already have taken care of the charges and discounts
3871 -- in its TOTAL_AMOUNT column
3872
3873 -- Loop over price records
3874 j := l_price_first;
3875 IF j IS NOT NULL THEN
3876 LOOP
3877 IF p_save_flag = 'M' THEN
3878 IF x_freight_cost_main_price(j).delivery_detail_id = g_rolledup_lines(i).delivery_detail_id THEN
3879 IF NOT l_container_summary.EXISTS(g_rolledup_lines(i).container_id) THEN
3880 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Adding non in between other container : '||g_rolledup_lines(i).container_id);
3881
3882 l_container_summary(g_rolledup_lines(i).container_id).total_amount := x_freight_cost_main_price(j).total_amount;
3883 l_container_summary(g_rolledup_lines(i).container_id).currency_code := x_freight_cost_main_price(j).currency_code;
3884 l_container_summary(g_rolledup_lines(i).container_id).delivery_leg_id := x_freight_cost_main_price(j).delivery_leg_id;
3885 l_container_summary(g_rolledup_lines(i).container_id).delivery_id := x_freight_cost_main_price(j).delivery_id;
3886 ELSE
3887 l_container_summary(g_rolledup_lines(i).container_id).total_amount :=
3888 l_container_summary(g_rolledup_lines(i).container_id).total_amount + x_freight_cost_main_price(j).total_amount;
3889 END IF;
3890 END IF;
3891 ELSE
3892 IF x_freight_cost_temp_price(j).delivery_detail_id = g_rolledup_lines(i).delivery_detail_id THEN
3893 IF NOT l_container_summary.EXISTS(g_rolledup_lines(i).container_id) THEN
3894 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Adding non in between other container : '||g_rolledup_lines(i).container_id);
3895
3896 l_container_summary(g_rolledup_lines(i).container_id).total_amount := x_freight_cost_temp_price(j).total_amount;
3897 l_container_summary(g_rolledup_lines(i).container_id).currency_code := x_freight_cost_temp_price(j).currency_code;
3898 --l_container_summary(g_rolledup_lines(i).container_id).delivery_leg_id := x_freight_cost_temp_price(j).delivery_leg_id;
3899 l_container_summary(g_rolledup_lines(i).container_id).delivery_id := x_freight_cost_temp_price(j).delivery_id;
3900 ELSE
3901 l_container_summary(g_rolledup_lines(i).container_id).total_amount :=
3902 l_container_summary(g_rolledup_lines(i).container_id).total_amount + x_freight_cost_temp_price(j).total_amount;
3903 END IF;
3904 END IF;
3905 END IF;
3906
3907 IF l_in_between_containers.COUNT > l_in_between_cont_prv_cnt THEN
3911 IF p_save_flag = 'M' THEN
3908 n := l_in_between_cont_prv_cnt + 1;
3909 IF n IS NOT NULL THEN
3910 LOOP
3912 IF ((x_freight_cost_main_price(j).delivery_detail_id = g_rolledup_lines(i).delivery_detail_id) AND
3913 (x_freight_cost_main_price(j).delivery_detail_id = l_in_between_containers(n).detail_id)) THEN
3914 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Fc exists for in between container : '||l_in_between_containers(n).entity_id);
3915
3916 IF NOT l_between_cont_sum.EXISTS(l_in_between_containers(n).entity_id) THEN
3917 l_between_cont_sum(l_in_between_containers(n).entity_id).total_amount := x_freight_cost_main_price(j).total_amount;
3918 l_between_cont_sum(l_in_between_containers(n).entity_id).currency_code := x_freight_cost_main_price(j).currency_code;
3919 l_between_cont_sum(l_in_between_containers(n).entity_id).delivery_leg_id := x_freight_cost_main_price(j).delivery_leg_id;
3920 l_between_cont_sum(l_in_between_containers(n).entity_id).delivery_id := x_freight_cost_main_price(j).delivery_id;
3921 ELSE
3922 l_between_cont_sum(l_in_between_containers(n).entity_id).total_amount :=
3923 l_between_cont_sum(l_in_between_containers(n).entity_id).total_amount +
3924 x_freight_cost_main_price(j).total_amount;
3925 END IF;
3926 END IF;
3927
3928 ELSE
3929 IF ((x_freight_cost_temp_price(j).delivery_detail_id = g_rolledup_lines(i).delivery_detail_id) AND
3930 (x_freight_cost_temp_price(j).delivery_detail_id = l_in_between_containers(n).detail_id)) THEN
3931 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Fc exists for in between container : '||l_in_between_containers(n).entity_id);
3932
3933 IF NOT l_between_cont_sum.EXISTS(l_in_between_containers(n).entity_id) THEN
3934 l_between_cont_sum(l_in_between_containers(n).entity_id).total_amount := x_freight_cost_temp_price(j).total_amount;
3935 l_between_cont_sum(l_in_between_containers(n).entity_id).currency_code := x_freight_cost_temp_price(j).currency_code;
3936 l_between_cont_sum(l_in_between_containers(n).entity_id).delivery_leg_id := x_freight_cost_temp_price(j).delivery_leg_id;
3937 l_between_cont_sum(l_in_between_containers(n).entity_id).delivery_id := x_freight_cost_temp_price(j).delivery_id;
3938 ELSE
3939 l_between_cont_sum(l_in_between_containers(n).entity_id).total_amount :=
3940 l_between_cont_sum(l_in_between_containers(n).entity_id).total_amount +
3941 x_freight_cost_main_price(j).total_amount;
3942 END IF;
3943
3944 END IF;
3945
3946 END IF;
3947
3948 EXIT WHEN n = l_in_between_containers.LAST;
3949 n := l_in_between_containers.NEXT(n);
3950 END LOOP;
3951 END IF;
3952 END IF;
3953
3954 EXIT WHEN j = l_price_last;
3955 IF p_save_flag = 'M' THEN
3956 j := x_freight_cost_main_price.NEXT(j);
3957 ELSE
3958 j := x_freight_cost_temp_price.NEXT(j);
3959 END IF;
3960
3961 END LOOP;
3962 END IF;
3963
3964 END IF;
3965
3966 EXIT WHEN i = g_rolledup_lines.LAST;
3967 i := g_rolledup_lines.NEXT(i);
3968 END LOOP;
3969
3970 IF l_container_summary.COUNT > 0 OR l_between_cont_sum.COUNT > 0 THEN
3971
3972 get_fc_type_id(
3973 p_line_type_code => 'FTESUMMARY',
3974 p_charge_subtype_code => 'SUMMARY',
3975 x_freight_cost_type_id => l_freight_cost_type_id,
3976 x_return_status => l_return_status);
3977
3978 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3979 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3980 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
3981 END IF;
3982 ELSE
3983 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
3984 END IF;
3985
3986 END IF;
3987
3988 -- Use l_container_summary to add to fc records
3989
3990 IF l_container_summary.COUNT > 0 THEN
3991
3992 l_main_price_index := l_curr_fc_count;
3993 --l_freight_cost_type_id := get_fc_type_id(
3994
3995 l := l_container_summary.FIRST;
3996 LOOP
3997
3998 l_main_price_index := l_main_price_index + 1;
3999 IF p_save_flag = 'M' THEN -- Populate appropriate columns
4000
4001 x_freight_cost_main_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4002 x_freight_cost_main_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4003 x_freight_cost_main_price(l_main_price_index).line_type_code := 'SUMMARY';
4004 x_freight_cost_main_price(l_main_price_index).delivery_detail_id := l;
4005 x_freight_cost_main_price(l_main_price_index).delivery_leg_id := l_container_summary(l).delivery_leg_id;
4006 x_freight_cost_main_price(l_main_price_index).delivery_id := l_container_summary(l).delivery_id;
4007 x_freight_cost_main_price(l_main_price_index).total_amount := round(l_container_summary(l).total_amount,2);
4011
4008 x_freight_cost_main_price(l_main_price_index).currency_code := l_container_summary(l).currency_code;
4009
4010 ELSE
4012 x_freight_cost_temp_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4013 x_freight_cost_temp_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4014 x_freight_cost_temp_price(l_main_price_index).line_type_code := 'SUMMARY';
4015 x_freight_cost_temp_price(l_main_price_index).delivery_detail_id := l;
4016 x_freight_cost_temp_price(l_main_price_index).delivery_id := l_container_summary(l).delivery_id;
4017
4018 x_freight_cost_temp_price(l_main_price_index).total_amount := round(l_container_summary(l).total_amount,2);
4019 x_freight_cost_temp_price(l_main_price_index).currency_code := l_container_summary(l).currency_code;
4020
4021 END IF;
4022
4023 EXIT WHEN l = l_container_summary.LAST;
4024 l := l_container_summary.NEXT(l);
4025 END LOOP;
4026 END IF;
4027
4028 -- Use l_in_between_containers to add to fc records
4029
4030 IF l_between_cont_sum.COUNT > 0 THEN
4031
4032 IF p_save_flag = 'M' THEN
4033 l_curr_fc_count := x_freight_cost_main_price.COUNT;
4034 ELSE
4035 l_curr_fc_count := x_freight_cost_temp_price.COUNT;
4036 END IF;
4037
4038 l_main_price_index := l_curr_fc_count;
4039 --l_freight_cost_type_id := get_fc_type_id(
4040
4041 l := l_between_cont_sum.FIRST;
4042 LOOP
4043
4044 IF NOT l_container_summary.EXISTS(l) THEN
4045 l_main_price_index := l_main_price_index + 1;
4046 IF p_save_flag = 'M' THEN -- Populate appropriate columns
4047
4048 x_freight_cost_main_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4049 x_freight_cost_main_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4050 x_freight_cost_main_price(l_main_price_index).line_type_code := 'SUMMARY';
4051 x_freight_cost_main_price(l_main_price_index).delivery_detail_id := l;
4052 x_freight_cost_main_price(l_main_price_index).delivery_leg_id := l_between_cont_sum(l).delivery_leg_id;
4053 x_freight_cost_main_price(l_main_price_index).delivery_id := l_between_cont_sum(l).delivery_id;
4054
4055 x_freight_cost_main_price(l_main_price_index).total_amount := round(l_between_cont_sum(l).total_amount,2);
4056 x_freight_cost_main_price(l_main_price_index).currency_code := l_between_cont_sum(l).currency_code;
4057
4058 ELSE
4059
4060 x_freight_cost_temp_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4061 x_freight_cost_temp_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4062 x_freight_cost_temp_price(l_main_price_index).line_type_code := 'SUMMARY';
4063 x_freight_cost_temp_price(l_main_price_index).delivery_detail_id := l;
4064 x_freight_cost_temp_price(l_main_price_index).delivery_id := l_between_cont_sum(l).delivery_id;
4065
4066 x_freight_cost_temp_price(l_main_price_index).total_amount := round(l_between_cont_sum(l).total_amount,2);
4067 x_freight_cost_temp_price(l_main_price_index).currency_code := l_between_cont_sum(l).currency_code;
4068
4069 END IF;
4070 END IF;
4071
4072 EXIT WHEN l = l_between_cont_sum.LAST;
4073 l := l_between_cont_sum.NEXT(l);
4074 END LOOP;
4075 END IF;
4076 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'add_other_container_summary');
4077
4078 EXCEPTION
4079 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed THEN
4080 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4081 FTE_FREIGHT_PRICING_UTIL.set_exception('add_other_container_summary',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_fc_type_failed');
4082 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'add_other_container_summary');
4083 WHEN others THEN
4084 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4085 FTE_FREIGHT_PRICING_UTIL.set_exception('add_other_container_summary',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4086 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4087 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'add_other_container_summary');
4088 END add_other_container_summary;
4089
4090
4091 -- This is the QP engine output post processing API
4092 -- It analyzes the QP engine output by looking at the output lines and input lines
4093 -- It uses l_pricing_dual_instances,l_intersection_rows,l_shpmnt_toplevel_rows
4094 -- and g_shipment_line_rows to deconsolidate freight costs to the proper level
4095 -- It creates freight_costs main/temp record and sends back
4096 -- Looks up delivery detail info from g_shipment_line_rows
4097
4098 PROCEDURE process_qp_output (
4099 p_qp_output_line_rows IN QP_PREQ_GRP.LINE_TBL_TYPE, -- line_index = input_index
4100 p_qp_output_detail_rows IN QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
4101 p_pricing_engine_input IN pricing_engine_input_tab_type,
4102 p_pricing_dual_instances IN pricing_dual_instance_tab_type,
4103 p_pattern_rows IN top_level_pattern_tab_type,
4104 p_shpmnt_toplevel_rows IN shpmnt_content_tab_type,
4105 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or MAIN table
4106 p_rate_basis IN VARCHAR2 DEFAULT NULL,
4107 x_freight_cost_main_price OUT NOCOPY Freight_Cost_Main_Tab_Type,
4111 x_fc_main_update_rows OUT NOCOPY Freight_Cost_Main_Tab_Type, -- For update of SUMMARY records
4108 x_freight_cost_temp_price OUT NOCOPY Freight_Cost_Temp_Tab_Type,
4109 x_freight_cost_main_charge OUT NOCOPY Freight_Cost_Main_Tab_Type,
4110 x_freight_cost_temp_charge OUT NOCOPY Freight_Cost_Temp_Tab_Type,
4112 x_summary_lanesched_price OUT NOCOPY NUMBER, -- Only in case of 'T'
4113 x_summary_lanesched_price_uom OUT NOCOPY VARCHAR2,
4114 x_return_status OUT NOCOPY VARCHAR2 )
4115 IS
4116
4117 CURSOR c_get_fc_id(p_dleg_id IN NUMBER) IS
4118 SELECT freight_cost_id,created_by,creation_date
4119 FROM wsh_freight_costs
4120 WHERE delivery_leg_id = p_dleg_id
4121 AND delivery_detail_id IS NULL
4122 AND line_type_code = 'SUMMARY';
4123
4124 CURSOR c_get_dlv_id(c_dleg_id IN NUMBER) IS
4125 SELECT delivery_id
4126 FROM wsh_delivery_legs
4127 WHERE delivery_leg_id = c_dleg_id;
4128
4129 j NUMBER:=0;
4130 k NUMBER:=0;
4131 l NUMBER:=0;
4132 l_freight_cost_id NUMBER:=0;
4133 l_freight_cost_type_id NUMBER:=0;
4134 l_curr_fc_count NUMBER:=0;
4135 l_created_by NUMBER:=0;
4136 l_creation_date DATE;
4137 l_main_price_index NUMBER:=0;
4138 l_temp_price_index NUMBER:=0;
4139 l_price_count NUMBER:=0;
4140 l_charge_count NUMBER:=0;
4141 l_entity_id NUMBER:=0;
4142 l_delivery_id NUMBER:=0;
4143 l_return_status VARCHAR2(1);
4144 l_container_summary container_sum_tab_type;
4145 l_container_summary_dummy container_sum_tab_type;
4146
4147 l_currency_code VARCHAR2(30);
4148
4149 l_temp_amt NUMBER;
4150
4151 l_fc_dleg_rows dlvy_leg_summ_tab_type;
4152 l_dlv_id NUMBER;
4153 l_basis_meaning VARCHAR2(100);
4154 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_INF;
4155
4156
4157 BEGIN
4158
4159 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4160 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
4161 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'process_qp_output','start');
4162
4163 -- This API will result in one qp output line per instance
4164 -- It will delete other output lines and associated engine output line details
4165
4166 j := p_qp_output_line_rows.FIRST; -- Can still have more than one output_line_row per instance
4167 -- if there is no pricing objective
4168
4169 l_currency_code := p_qp_output_line_rows(j).currency_code;
4170 LOOP
4171 -- {
4172
4173 -- If there are still more than one output line for an instance
4174 -- we should put as many freight cost records for the associated pattern(s)
4175 -- No special logic required
4176
4177 IF p_pricing_engine_input(p_qp_output_line_rows(j).line_index).loose_item_id IS NOT NULL THEN
4178 -- {
4179
4180 IF p_save_flag = 'M' THEN
4181 l_price_count := x_freight_cost_main_price.COUNT;
4182 l_charge_count := x_freight_cost_main_charge.COUNT;
4183 ELSE
4184 l_price_count := x_freight_cost_temp_price.COUNT;
4185 l_charge_count := x_freight_cost_temp_charge.COUNT;
4186 END IF;
4187
4188 IF p_save_flag = 'M' THEN
4189 l_entity_id := p_shpmnt_toplevel_rows(p_pricing_engine_input(p_qp_output_line_rows(j).line_index).loose_item_id).delivery_leg_id;
4190 l_delivery_id := g_shipment_line_rows(p_pricing_engine_input(p_qp_output_line_rows(j).line_index).loose_item_id).delivery_id;
4191 ELSE
4192 l_entity_id := g_shipment_line_rows(p_pricing_engine_input(p_qp_output_line_rows(j).line_index).loose_item_id).delivery_id;
4193 l_delivery_id := g_shipment_line_rows(p_pricing_engine_input(p_qp_output_line_rows(j).line_index).loose_item_id).delivery_id;
4194 END IF;
4195
4196 prepare_fc_records (
4197 p_delivery_detail_id => p_pricing_engine_input(p_qp_output_line_rows(j).line_index).loose_item_id,
4198 p_delivery_id => l_delivery_id,
4199 p_entity_id => l_entity_id,
4200 p_qp_output_line_row => p_qp_output_line_rows(j) ,
4201 p_qp_output_detail_rows => p_qp_output_detail_rows,
4202 p_pricing_engine_input => p_pricing_engine_input,
4203 p_save_flag => p_save_flag,
4204 p_rate_basis => p_rate_basis,
4205 x_container_summary => l_container_summary_dummy,
4206 x_fc_dleg_rows => l_fc_dleg_rows,
4207 x_freight_cost_main_price => x_freight_cost_main_price,
4208 x_freight_cost_temp_price => x_freight_cost_temp_price,
4209 x_freight_cost_main_charge => x_freight_cost_main_charge,
4210 x_freight_cost_temp_charge => x_freight_cost_temp_charge,
4211 x_return_status => l_return_status);
4212
4213 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4214 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
4218 ELSE
4215 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Loose Item ');
4216 raise FTE_FREIGHT_PRICING_UTIL.g_prepare_fc_rec_failed;
4217 END IF;
4219 IF p_save_flag = 'M' THEN
4220 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_main_price.COUNT - l_price_count || ' Main fc base price Records created ');
4221 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_main_charge.COUNT - l_charge_count || ' Main fc charge Records created ');
4222 ELSE
4223 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_temp_price.COUNT - l_price_count || ' Temp fc base price Records created ');
4224 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_temp_charge.COUNT - l_charge_count || ' Temp fc charge Records created ');
4225 END IF;
4226 END IF;
4227
4228
4229 -- }
4230 ELSE
4231 -- {
4232 k := p_pattern_rows.FIRST;
4233 LOOP
4234 -- {
4235
4236 IF p_pattern_rows(k).instance_index = p_pricing_engine_input(p_qp_output_line_rows(j).line_index).instance_index THEN
4237
4238 IF p_save_flag = 'M' THEN
4239 l_price_count := x_freight_cost_main_price.COUNT;
4240 l_charge_count := x_freight_cost_main_charge.COUNT;
4241 ELSE
4242 l_price_count := x_freight_cost_temp_price.COUNT;
4243 l_charge_count := x_freight_cost_temp_charge.COUNT;
4244 END IF;
4245
4246 IF p_save_flag = 'M' THEN
4247 l_entity_id := p_shpmnt_toplevel_rows(p_pattern_rows(k).content_id).delivery_leg_id;
4248 l_delivery_id := g_shipment_line_rows(p_pattern_rows(k).content_id).delivery_id;
4249 ELSE
4250 l_entity_id := g_shipment_line_rows(p_pattern_rows(k).content_id).delivery_id;
4251 l_delivery_id := g_shipment_line_rows(p_pattern_rows(k).content_id).delivery_id;
4252 END IF;
4253
4254 prepare_fc_records (
4255 p_delivery_detail_id => p_pattern_rows(k).content_id,
4256 p_delivery_id => l_delivery_id,
4257 p_entity_id => l_entity_id,
4258 p_qp_output_line_row => p_qp_output_line_rows(j) ,
4259 p_qp_output_detail_rows => p_qp_output_detail_rows,
4260 p_pricing_engine_input => p_pricing_engine_input,
4261 p_grouping_level => p_pricing_dual_instances(p_pattern_rows(k).instance_index).grouping_level,
4262 p_aggregation => p_pricing_dual_instances(p_pattern_rows(k).instance_index).aggregation,
4263 p_save_flag => p_save_flag,
4264 p_rate_basis => p_rate_basis,
4265 x_container_summary => l_container_summary,
4266 x_fc_dleg_rows => l_fc_dleg_rows,
4267 x_freight_cost_main_price => x_freight_cost_main_price,
4268 x_freight_cost_temp_price => x_freight_cost_temp_price,
4269 x_freight_cost_main_charge => x_freight_cost_main_charge,
4270 x_freight_cost_temp_charge => x_freight_cost_temp_charge,
4271 x_return_status => l_return_status);
4272
4273 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4274 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
4275 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Container '||p_pattern_rows(k).content_id);
4276 raise FTE_FREIGHT_PRICING_UTIL.g_prepare_fc_rec_failed;
4277 END IF;
4278 ELSE
4279 IF p_save_flag = 'M' THEN
4280 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_main_price.COUNT - l_price_count || ' Main fc base price Records created ');
4281 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_main_charge.COUNT - l_charge_count || ' Main fc charge Records created ');
4282 ELSE
4283 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_temp_price.COUNT - l_price_count || ' Temp fc base price Records created ');
4284 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_temp_charge.COUNT - l_charge_count || ' Temp fc charge Records created ');
4285 END IF;
4286 END IF;
4287
4288 END IF;
4289
4290 EXIT WHEN k = p_pattern_rows.LAST;
4291 k := p_pattern_rows.NEXT(k);
4292 -- }
4293 END LOOP;
4294 -- }
4295 END IF; -- Loose item
4296
4297 EXIT WHEN j = p_qp_output_line_rows.LAST;
4298 j := p_qp_output_line_rows.NEXT(j);
4299 -- }
4300 END LOOP;
4301
4302 get_fc_type_id(
4303 p_line_type_code => 'FTESUMMARY',
4304 p_charge_subtype_code => 'SUMMARY',
4305 x_freight_cost_type_id => l_freight_cost_type_id,
4306 x_return_status => l_return_status);
4307
4308 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4312 ELSE
4309 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
4310 raise FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed;
4311 END IF;
4313 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||l_freight_cost_type_id);
4314 END IF;
4315
4316 IF l_container_summary.COUNT > 0 THEN
4317
4318 IF p_save_flag = 'M' THEN
4319 l_curr_fc_count := x_freight_cost_main_price.COUNT;
4320 ELSE
4321 l_curr_fc_count := x_freight_cost_temp_price.COUNT;
4322 END IF;
4323
4324 l_main_price_index := l_curr_fc_count;
4325 --l_freight_cost_type_id := get_fc_type_id(
4326
4327 l := l_container_summary.FIRST;
4328 LOOP
4329
4330 IF nvl(l_container_summary(l).total_amount,0) <> 0 THEN
4331
4332 l_main_price_index := l_main_price_index + 1;
4333 Get_Basis_Meaning ( p_basis => l_container_summary(l).bbasis,
4334 x_basis_meaning => l_basis_meaning);
4335
4336 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Before setting billable columns in main for basis :'||l_basis_meaning);
4337 IF p_save_flag = 'M' THEN -- Populate appropriate columns
4338
4339 x_freight_cost_main_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4340 x_freight_cost_main_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4341 x_freight_cost_main_price(l_main_price_index).line_type_code := 'SUMMARY';
4342 x_freight_cost_main_price(l_main_price_index).delivery_detail_id := l;
4343 x_freight_cost_main_price(l_main_price_index).delivery_leg_id := l_container_summary(l).delivery_leg_id;
4344 x_freight_cost_main_price(l_main_price_index).delivery_id := l_container_summary(l).delivery_id;
4345
4346 x_freight_cost_main_price(l_main_price_index).total_amount := round(l_container_summary(l).total_amount,2);
4347 --x_freight_cost_main_price(l_main_price_index).currency_code := l_currency_code;
4348 x_freight_cost_main_price(l_main_price_index).currency_code := l_container_summary(l).currency_code;
4349 x_freight_cost_main_price(l_main_price_index).billable_quantity := l_container_summary(l).bquantity;
4350 x_freight_cost_main_price(l_main_price_index).billable_uom := l_container_summary(l).buom;
4351 x_freight_cost_main_price(l_main_price_index).billable_basis := l_basis_meaning;
4352 ELSE
4353
4354 x_freight_cost_temp_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4355 x_freight_cost_temp_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4356 x_freight_cost_temp_price(l_main_price_index).line_type_code := 'SUMMARY';
4357 x_freight_cost_temp_price(l_main_price_index).delivery_detail_id := l;
4358 x_freight_cost_temp_price(l_main_price_index).delivery_id := l_container_summary(l).delivery_id;
4359
4360 x_freight_cost_temp_price(l_main_price_index).total_amount := round(l_container_summary(l).total_amount,2);
4361 --x_freight_cost_temp_price(l_main_price_index).currency_code := l_currency_code;
4362 x_freight_cost_temp_price(l_main_price_index).currency_code := l_container_summary(l).currency_code;
4363 x_freight_cost_temp_price(l_main_price_index).billable_quantity := l_container_summary(l).bquantity;
4364 x_freight_cost_temp_price(l_main_price_index).billable_basis := l_basis_meaning;
4365 x_freight_cost_temp_price(l_main_price_index).billable_uom := l_container_summary(l).buom;
4366
4367 END IF;
4368 END IF;
4369
4370 EXIT WHEN l = l_container_summary.LAST;
4371 l := l_container_summary.NEXT(l);
4372 END LOOP;
4373
4374 -- Here need to create additional summary fc record for all containers
4375 -- in this shipment_pricing session irrespective of their level in the hierarchy
4376 -- Applicable only if atleast one top level container summary record has been created
4377
4378 IF p_save_flag = 'M' THEN
4379 l_price_count := x_freight_cost_main_price.COUNT;
4380 ELSE
4381 l_price_count := x_freight_cost_temp_price.COUNT;
4382 END IF;
4383
4384 add_other_container_summary (
4385 p_save_flag => p_save_flag,
4386 x_freight_cost_main_price => x_freight_cost_main_price,
4387 x_freight_cost_temp_price => x_freight_cost_temp_price,
4388 x_return_status => l_return_status);
4389
4390 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4391 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
4392 raise FTE_FREIGHT_PRICING_UTIL.g_other_cont_summ_failed;
4393 END IF;
4394 ELSE
4395 IF p_save_flag = 'M' THEN
4396 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_main_price.COUNT - l_price_count || ' Non top level container summary records created');
4397 ELSE
4398 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,x_freight_cost_temp_price.COUNT - l_price_count || ' Non top level container summary records created');
4399 END IF;
4400 END IF;
4401
4402 END IF;
4403
4407
4404 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_container_summary.COUNT || ' Top level Container Summary fc Records created ');
4405
4406 IF l_fc_dleg_rows.COUNT > 0 THEN
4408 IF p_save_flag = 'M' THEN
4409 l_main_price_index := 0;
4410 ELSE
4411 l_main_price_index := x_freight_cost_temp_price.COUNT;
4412 END IF;
4413
4414 --l_main_price_index := 0;
4415 l := l_fc_dleg_rows.FIRST; -- Can be delivery level also for 'T'
4416 LOOP
4417
4418 l_main_price_index := l_main_price_index + 1;
4419 IF p_save_flag = 'M' THEN -- Populate appropriate columns
4420
4421 OPEN c_get_fc_id(l);
4422 FETCH c_get_fc_id INTO l_freight_cost_id,l_created_by,l_creation_date;
4423 CLOSE c_get_fc_id;
4424
4425 OPEN c_get_dlv_id(l);
4426 FETCH c_get_dlv_id INTO l_dlv_id;
4427 CLOSE c_get_dlv_id;
4428
4429 --l_main_price_index := 1;
4430 x_fc_main_update_rows(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4431 x_fc_main_update_rows(l_main_price_index).freight_cost_id := l_freight_cost_id;
4432 x_fc_main_update_rows(l_main_price_index).created_by := l_created_by;
4433 x_fc_main_update_rows(l_main_price_index).creation_date := l_creation_date;
4434 x_fc_main_update_rows(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4435 x_fc_main_update_rows(l_main_price_index).line_type_code := 'SUMMARY';
4436 x_fc_main_update_rows(l_main_price_index).delivery_leg_id := l;
4437 x_fc_main_update_rows(l_main_price_index).currency_code := l_currency_code;
4438 x_fc_main_update_rows(l_main_price_index).total_amount := round(l_fc_dleg_rows(l).summary_amount,2);
4439 -- WSH wants to see the summary record. Hence unit_amount and delivery_id is needed(12/20/02)
4440 x_fc_main_update_rows(l_main_price_index).unit_amount := round(l_fc_dleg_rows(l).summary_amount,2);
4441 x_fc_main_update_rows(l_main_price_index).delivery_id := l_dlv_id;
4442
4443 -- ELSIF p_save_flag = 'T' THEN -- Populate appropriate columns
4444 ELSE -- VVP (OM Est change)
4445
4446 --l_temp_price_index := x_freight_cost_temp_price.COUNT + 1;
4447 /*
4448 x_freight_cost_temp_price(l_temp_price_index).freight_cost_type_id := l_freight_cost_type_id;
4449 x_freight_cost_temp_price(l_temp_price_index).freight_cost_id := l_freight_cost_id;
4450 x_freight_cost_temp_price(l_temp_price_index).charge_source_code := 'PRICING_ENGINE';
4451 x_freight_cost_temp_price(l_temp_price_index).line_type_code := 'SUMMARY';
4452 x_freight_cost_temp_price(l_temp_price_index).delivery_id := l;
4453 x_freight_cost_temp_price(l_temp_price_index).currency_code := l_currency_code;
4454 x_freight_cost_temp_price(l_temp_price_index).total_amount := round(l_fc_dleg_rows(l).summary_amount,2);
4455 */
4456 x_freight_cost_temp_price(l_main_price_index).freight_cost_type_id := l_freight_cost_type_id;
4457 x_freight_cost_temp_price(l_main_price_index).freight_cost_id := l_freight_cost_id;
4458 x_freight_cost_temp_price(l_main_price_index).charge_source_code := 'PRICING_ENGINE';
4459 x_freight_cost_temp_price(l_main_price_index).line_type_code := 'SUMMARY';
4460 x_freight_cost_temp_price(l_main_price_index).delivery_id := l;
4461 x_freight_cost_temp_price(l_main_price_index).currency_code := l_currency_code;
4462 x_freight_cost_temp_price(l_main_price_index).total_amount := round(l_fc_dleg_rows(l).summary_amount,2);
4463 x_freight_cost_temp_price(l_main_price_index).unit_amount := round(l_fc_dleg_rows(l).summary_amount,2);
4464
4465 END IF;
4466
4467 EXIT WHEN l = l_fc_dleg_rows.LAST;
4468 l := l_fc_dleg_rows.NEXT(l);
4469 END LOOP;
4470
4471 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_fc_dleg_rows.COUNT || ' Delivery Leg Summary fc Records created ');
4472
4473 -- IF p_save_flag = 'T' THEN
4474 IF p_save_flag <> 'M' THEN -- VVP (OM Est change)
4475 -- Need to send back lane/sched level summary amount
4476 -- which will be equal to l_fc_dleg_rows(l).summary_amount
4477 -- as in this case only one entity can be there per call
4478
4479 -- bug 3373643 : the above assumption is no longer true for J, because
4480 -- it is possible to assign multiple deliveries to trips first and then do service compare
4481 -- from trip workbench. So we must take a sum of summary amounts.
4482 -- I am adding the if condition, only to isolate the problem from cases where the above assumption
4483 -- is still valid
4484
4485 l_temp_amt :=0;
4486 IF (l_fc_dleg_rows.COUNT > 1) THEN
4487 l := l_fc_dleg_rows.FIRST;
4488 LOOP
4489
4490 l_temp_amt := l_temp_amt + l_fc_dleg_rows(l).summary_amount;
4491 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
4492 'l='||l||' summary='||l_fc_dleg_rows(l).summary_amount);
4493
4494 EXIT WHEN l = l_fc_dleg_rows.LAST;
4495 l := l_fc_dleg_rows.NEXT(l);
4496 END LOOP;
4497 x_summary_lanesched_price := round(l_temp_amt,2);
4498 x_summary_lanesched_price_uom := l_currency_code;
4499
4500 ELSE
4501 -- original code (bug 3373643)
4502 x_summary_lanesched_price := round(l_fc_dleg_rows(l).summary_amount,2);
4506 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'x_summary_lanesched_price='||round(l_temp_amt,2));
4503 x_summary_lanesched_price_uom := l_currency_code;
4504 l_temp_amt := round(l_fc_dleg_rows(l).summary_amount,2); --for debug only
4505 END IF;
4507
4508 END IF;
4509 ELSE
4510 raise FTE_FREIGHT_PRICING_UTIL.g_dleg_sum_not_created;
4511 END IF; -- l_fc_dleg_rows.COUNT > 0
4512 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_qp_output');
4513
4514 EXCEPTION
4515 WHEN FTE_FREIGHT_PRICING_UTIL.g_prepare_fc_rec_failed THEN
4516 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4517 FTE_FREIGHT_PRICING_UTIL.set_exception('process_qp_output',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_prepare_fc_rec_failed');
4518 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'prepare_fc_rec failed ');
4519 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_qp_output');
4520 WHEN FTE_FREIGHT_PRICING_UTIL.g_other_cont_summ_failed THEN
4521 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4522 FTE_FREIGHT_PRICING_UTIL.set_exception('process_qp_output',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_other_cont_summ_failed');
4523 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'other_cont_sum failed ');
4524 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_qp_output');
4525 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_fc_type_failed THEN
4526 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4527 FTE_FREIGHT_PRICING_UTIL.set_exception('process_qp_output',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_fc_type_failed');
4528 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_qp_output');
4529 WHEN FTE_FREIGHT_PRICING_UTIL.g_dleg_sum_not_created THEN
4530 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4531 FTE_FREIGHT_PRICING_UTIL.set_exception('process_qp_output',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_dleg_sum_not_created');
4532 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Delivery summary not created ');
4533 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_qp_output');
4534 WHEN others THEN
4535 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4536 FTE_FREIGHT_PRICING_UTIL.set_exception('process_qp_output',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4537 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4538 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_qp_output');
4539
4540 END process_qp_output;
4541
4542 -- Start printing procedures
4543
4544 PROCEDURE print_top_level_detail (
4545 p_first_level_rows IN shpmnt_content_tab_type, -- Will get indexed on delivery_detail_id
4546 x_return_status OUT NOCOPY VARCHAR2 )
4547 IS
4548
4549 i NUMBER:=0;
4550
4551 BEGIN
4552
4553 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4554
4555 IF p_first_level_rows.COUNT > 0 THEN
4556 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '<TOP_LEVEL_DETAIL>');
4557 i := p_first_level_rows.FIRST;
4558 LOOP
4559
4560 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg =>
4561 'content_id:'||p_first_level_rows(i).content_id
4562 ||' delivery_leg_id:'||p_first_level_rows(i).delivery_leg_id
4563 ||' container_flag:'||p_first_level_rows(i).container_flag
4564 ||' container_type_code:'||p_first_level_rows(i).container_type_code
4565 ||' det gross wt:'||g_shipment_line_rows(p_first_level_rows(i).content_id).gross_weight
4566 ||' '||g_shipment_line_rows(p_first_level_rows(i).content_id).weight_uom_code
4567 ||' top level wt:'||p_first_level_rows(i).gross_weight
4568 ||' '||p_first_level_rows(i).weight_uom
4569 ||' wdd_volume:'||p_first_level_rows(i).wdd_volume
4570 ||' '||p_first_level_rows(i).wdd_volume_uom_code
4571 ||' wdd_net_weight:'||p_first_level_rows(i).wdd_net_weight
4572 ||' wdd_tare_weight:'||p_first_level_rows(i).wdd_tare_weight
4573 ||' wdd_gross_weight:'||p_first_level_rows(i).wdd_gross_weight
4574 ||' '||p_first_level_rows(i).wdd_weight_uom_code);
4575
4576 EXIT WHEN i=p_first_level_rows.LAST;
4577 i := p_first_level_rows.NEXT(i);
4578 END LOOP;
4579 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '</TOP_LEVEL_DETAIL>');
4580 END IF;
4581
4582 EXCEPTION
4583 WHEN others THEN
4584 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4585 FTE_FREIGHT_PRICING_UTIL.set_exception('print_top_level_detail',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4586 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4587
4588 END print_top_level_detail;
4589
4590
4591 PROCEDURE print_rolledup_lines (
4592 p_rolledup_lines IN rolledup_line_tab_type,
4593 x_return_status OUT NOCOPY VARCHAR2 )
4594 IS
4595
4596 i NUMBER:=0;
4597
4598 BEGIN
4599
4600 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4601
4602 IF p_rolledup_lines.COUNT > 0 THEN
4603 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '<ROLLEDUP_LINES>');
4604 i := p_rolledup_lines.FIRST;
4605 LOOP
4606
4607 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'delivery_detail_id : '||p_rolledup_lines(i).delivery_detail_id||' category_id : '||p_rolledup_lines(i).category_id||' rate_basis : '||
4608 p_rolledup_lines(i).rate_basis||'container_id : '||p_rolledup_lines(i).container_id||' master_container_id : '||p_rolledup_lines(i).master_container_id||'line_quantity : '||
4609 p_rolledup_lines(i).line_quantity||' line_uom : '||p_rolledup_lines(i).line_uom);
4613 END LOOP;
4610
4611 EXIT WHEN i=p_rolledup_lines.LAST;
4612 i := p_rolledup_lines.NEXT(i);
4614 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '</ROLLEDUP_LINES>');
4615 END IF;
4616
4617 EXCEPTION
4618 WHEN others THEN
4619 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4620 FTE_FREIGHT_PRICING_UTIL.set_exception('print_rolledup_lines',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4621 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4622 END print_rolledup_lines;
4623
4624
4625 PROCEDURE print_top_level_pattern (
4626 p_pattern_rows IN top_level_pattern_tab_type, -- Will get indexed on delivery_detail_id
4627 x_return_status OUT NOCOPY VARCHAR2 )
4628 IS
4629
4630 i NUMBER:=0;
4631
4632 BEGIN
4633
4634 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4635
4636 IF p_pattern_rows.COUNT > 0 THEN
4637 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '<PATTERNS>');
4638 i := p_pattern_rows.FIRST;
4639 LOOP
4640
4641 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'pattern_index : '||p_pattern_rows(i).pattern_index||' pattern_no : '||p_pattern_rows(i).pattern_no||' services_hash : '||
4642 p_pattern_rows(i).services_hash||' content_id : '||p_pattern_rows(i).content_id||' instance_index : '||p_pattern_rows(i).instance_index);
4643
4644 EXIT WHEN i=p_pattern_rows.LAST;
4645 i := p_pattern_rows.NEXT(i);
4646 END LOOP;
4647 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '</PATTERNS>');
4648 END IF;
4649
4650 EXCEPTION
4651 WHEN others THEN
4652 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4653 FTE_FREIGHT_PRICING_UTIL.set_exception('print_top_level_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4654 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4655
4656 END print_top_level_pattern;
4657
4658 PROCEDURE print_dual_instances (
4659 p_dual_instances IN pricing_dual_instance_tab_type, -- Will get indexed on delivery_detail_id
4660 x_return_status OUT NOCOPY VARCHAR2 )
4661 IS
4662
4663 i NUMBER:=0;
4664
4665 BEGIN
4666
4667 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4668
4669 IF p_dual_instances.COUNT > 0 THEN
4670 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '<INSTANCES>');
4671 i := p_dual_instances.FIRST;
4672 LOOP
4673
4674 FTE_FREIGHT_PRICING_UTIL.print_msg(
4675 p_msg => 'instance_index : '||p_dual_instances(i).instance_index||' pattern_no : '||p_dual_instances(i).pattern_no||' services_hash : '||p_dual_instances(i).services_hash||
4676 ' grouping_level : '||p_dual_instances(i).grouping_level||' aggregation : '||p_dual_instances(i).aggregation||' objective : '||p_dual_instances(i).objective||' count_pattern : '
4677 ||p_dual_instances(i).count_pattern||' loose_item_flag : '||p_dual_instances(i).loose_item_flag);
4678
4679 EXIT WHEN i=p_dual_instances.LAST;
4680 i := p_dual_instances.NEXT(i);
4681 END LOOP;
4682 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '</INSTANCES>');
4683 END IF;
4684
4685 EXCEPTION
4686 WHEN others THEN
4687 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4688 FTE_FREIGHT_PRICING_UTIL.set_exception('print_dual_instances',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4689 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4690
4691 END print_dual_instances;
4692
4693 PROCEDURE print_qp_output_lines (
4694 p_engine_output_line IN QP_PREQ_GRP.LINE_TBL_TYPE,
4695 p_engine_output_detail IN QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE,
4696 p_return_status IN VARCHAR2 ,
4697 x_return_status OUT NOCOPY VARCHAR2 )
4698 IS
4699
4700 I NUMBER:=0;
4701
4702 BEGIN
4703
4704 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4705
4706 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Return Status text '|| p_return_status);
4707
4708 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '<Request_Line_Information>');
4709
4710 I := p_engine_output_line.FIRST;
4711 IF I IS NOT NULL THEN
4712 LOOP
4713 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Line Index: '||p_engine_output_line(I).line_index);
4714 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Unit_price: '||p_engine_output_line(I).unit_price);
4715 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Adjusted Unit Price: '||p_engine_output_line(I).adjusted_unit_price);
4716 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Percent price: '||p_engine_output_line(I).percent_price);
4717 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Pricing status code: '||p_engine_output_line(I).status_code);
4718 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Pricing status text: '||p_engine_output_line(I).status_text);
4719 fte_freight_pricing_util.print_msg(fte_freight_pricing_util.G_DBG,'-------------------------------- -------------------');
4720 EXIT WHEN I = p_engine_output_line.LAST;
4721 I := p_engine_output_line.NEXT(I);
4722 END LOOP;
4723 END IF;
4724 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '</Request_Line_Information>');
4725 --FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => '</Request Line Information>');
4726
4727 I := p_engine_output_detail.FIRST;
4728
4732 LOOP
4729 FTE_FREIGHT_PRICING_UTIL.print_tag(FTE_FREIGHT_PRICING_UTIL.G_DBG,'<Price_List_Discount_Information>');
4730
4731 IF I IS NOT NULL THEN
4733 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Line Index: '||p_engine_output_detail(I).line_index);
4734 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Line Detail Index: '||p_engine_output_detail(I).line_detail_index);
4735 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Line Detail Type:'||p_engine_output_detail(I).line_detail_type_code);
4736 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'List Header Id: '||p_engine_output_detail(I).list_header_id);
4737 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'List Line Id: '||p_engine_output_detail(I).list_line_id);
4738 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'List Line Type Code: '||p_engine_output_detail(I).list_line_type_code);
4739 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Charge Type Code: '||p_engine_output_detail(I).charge_type_code);
4740 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Charge Sub Type Code: '||p_engine_output_detail(I).charge_subtype_code);
4741 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Adjustment Amount : '||p_engine_output_detail(I).adjustment_amount);
4742 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Line Quantity : '||p_engine_output_detail(I).line_quantity);
4743 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Operand Calculation Code: '||p_engine_output_detail(I).Operand_calculation_code);
4744 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Operand value: '||p_engine_output_detail(I).operand_value);
4745 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Automatic Flag: '||p_engine_output_detail(I).automatic_flag);
4746 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Override Flag: '||p_engine_output_detail(I).override_flag);
4747 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'status_code: '||p_engine_output_detail(I).status_code);
4748 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'status text: '||p_engine_output_detail(I).status_text);
4749 fte_freight_pricing_util.print_msg(fte_freight_pricing_util.G_DBG,'-------------------------------- -------------------');
4750 EXIT WHEN I = p_engine_output_detail.LAST;
4751 I := p_engine_output_detail.NEXT(I);
4752 END LOOP;
4753 END IF;
4754 FTE_FREIGHT_PRICING_UTIL.print_tag(FTE_FREIGHT_PRICING_UTIL.G_DBG,'</Price_List_Discount_Information>');
4755 EXCEPTION
4756 WHEN others THEN
4757 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4758 FTE_FREIGHT_PRICING_UTIL.set_exception('print_qp_output_lines',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4759 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4760
4761 END print_qp_output_lines;
4762
4763 PROCEDURE print_engine_rows (
4764 p_engine_rows IN pricing_engine_input_tab_type,
4765 x_return_status OUT NOCOPY VARCHAR2 )
4766 IS
4767
4768 i NUMBER:=0;
4769
4770 BEGIN
4771
4772 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4773
4774 IF p_engine_rows.COUNT > 0 THEN
4775 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '<ENGINE_ROWS>');
4776 i := p_engine_rows.FIRST;
4777 LOOP
4778
4779 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg =>
4780 'input_index:'||p_engine_rows(i).input_index
4781 ||' instance_index:'||p_engine_rows(i).instance_index
4782 ||' Loose item id:'||p_engine_rows(i).loose_item_id
4783 ||' category_id:'||p_engine_rows(i).category_id
4784 ||' basis:'||p_engine_rows(i).basis
4785 ||' line_quantity:'||p_engine_rows(i).line_quantity
4786 ||' line_uom:'||p_engine_rows(i).line_uom
4787 ||' loose_item_flag:'||p_engine_rows(i).loose_item_flag
4788 ||' container_type_code:'||p_engine_rows(i).container_type_code);
4789
4790 EXIT WHEN i=p_engine_rows.LAST;
4791 i := p_engine_rows.NEXT(i);
4792 END LOOP;
4793 FTE_FREIGHT_PRICING_UTIL.print_tag(p_msg => '</ENGINE_ROWS>');
4794 END IF;
4795
4796 EXCEPTION
4797 WHEN others THEN
4798 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4799 FTE_FREIGHT_PRICING_UTIL.set_exception('print_engine_rows',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4800 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4801
4802 END print_engine_rows;
4803
4804 PROCEDURE print_attribute_rows (
4805 p_attribute_rows IN pricing_attribute_tab_type,
4806 x_return_status OUT NOCOPY VARCHAR2 )
4807 IS
4808
4809 i NUMBER:=0;
4810
4811 BEGIN
4812
4813 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4814
4815 IF p_attribute_rows.COUNT > 0 THEN
4816 FTE_FREIGHT_PRICING_UTIL.print_tag(FTE_FREIGHT_PRICING_UTIL.G_INF,'<ATTRIBUTE_ROWS>');
4817 i := p_attribute_rows.FIRST;
4818 LOOP
4819
4820 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'attribute_index : '||p_attribute_rows(i).attribute_index||' input_index : '||p_attribute_rows(i).input_index||' attribute_name : '||
4821 p_attribute_rows(i).attribute_name||' attribute_value : '||p_attribute_rows(i).attribute_value);
4822
4823 EXIT WHEN i=p_attribute_rows.LAST;
4824 i := p_attribute_rows.NEXT(i);
4825 END LOOP;
4826 FTE_FREIGHT_PRICING_UTIL.print_tag(FTE_FREIGHT_PRICING_UTIL.G_INF,'</ATTRIBUTE_ROWS>');
4827 END IF;
4828
4829 EXCEPTION
4830 WHEN others THEN
4834
4831 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4832 FTE_FREIGHT_PRICING_UTIL.set_exception('print_attribute_rows',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4833 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4835 END print_attribute_rows;
4836
4837 PROCEDURE print_fc_main_rows (
4838 p_fc_main_rows IN Freight_Cost_Main_Tab_Type,
4839 x_return_status OUT NOCOPY VARCHAR2 )
4840 IS
4841
4842 i NUMBER:=0;
4843
4844 BEGIN
4845
4846 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4847
4848 IF p_fc_main_rows.COUNT > 0 THEN
4849 FTE_FREIGHT_PRICING_UTIL.print_tag(FTE_FREIGHT_PRICING_UTIL.G_INF,'<FC_Records>');
4850 i := p_fc_main_rows.FIRST;
4851 LOOP
4852
4853 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'fc type id : '||p_fc_main_rows(i).freight_cost_type_id||' line type code : '||
4854 p_fc_main_rows(i).line_type_code||' detail id : '||p_fc_main_rows(i).delivery_detail_id||' delivery leg : '||
4855 p_fc_main_rows(i).delivery_leg_id||' quantity : '||p_fc_main_rows(i).quantity||' uom : '||p_fc_main_rows(i).uom||' unit amount : '||p_fc_main_rows(i).unit_amount||'total amount : '||
4856 p_fc_main_rows(i).total_amount||' currency code : '||p_fc_main_rows(i).currency_code||' Charge unit value : '||p_fc_main_rows(i).charge_unit_value||' Delivery id : '||p_fc_main_rows(i).delivery_id);
4857
4858 EXIT WHEN i=p_fc_main_rows.LAST;
4859 i := p_fc_main_rows.NEXT(i);
4860 END LOOP;
4861 FTE_FREIGHT_PRICING_UTIL.print_tag(FTE_FREIGHT_PRICING_UTIL.G_INF,'</FC_Records>');
4862 END IF;
4863
4864 EXCEPTION
4865 WHEN others THEN
4866 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4867 FTE_FREIGHT_PRICING_UTIL.set_exception('print_fc_main_rows',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4868 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4869
4870 END print_fc_main_rows;
4871
4872 PROCEDURE print_fc_temp_rows (
4873 p_fc_temp_rows IN Freight_Cost_Temp_Tab_Type,
4874 x_return_status OUT NOCOPY VARCHAR2 )
4875 IS
4876
4877 i NUMBER:=0;
4878 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
4879
4880 BEGIN
4881
4882 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4883
4884 IF p_fc_temp_rows.COUNT > 0 THEN
4885 FTE_FREIGHT_PRICING_UTIL.print_tag(l_log_level,'<FC_TEMP_Records>');
4886 i := p_fc_temp_rows.FIRST;
4887 LOOP
4888
4889 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'-------------');
4890 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4891 'FREIGHT_COST_ID='||p_fc_temp_rows(i).FREIGHT_COST_ID);
4892 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4893 'FREIGHT_COST_TYPE_ID='||p_fc_temp_rows(i).FREIGHT_COST_TYPE_ID);
4894 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4895 'UNIT_AMOUNT='||p_fc_temp_rows(i).UNIT_AMOUNT);
4896 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4897 'CALCULATION_METHOD='||p_fc_temp_rows(i).CALCULATION_METHOD);
4898 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4899 'UOM='||p_fc_temp_rows(i).UOM);
4900 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4901 'QUANTITY='||p_fc_temp_rows(i).QUANTITY);
4902 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4903 'TOTAL_AMOUNT='||p_fc_temp_rows(i).TOTAL_AMOUNT);
4904 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4905 'CURRENCY_CODE='||p_fc_temp_rows(i).CURRENCY_CODE);
4906 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4907 'CONVERSION_DATE='||p_fc_temp_rows(i).CONVERSION_DATE);
4908 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4909 'CONVERSION_RATE='||p_fc_temp_rows(i).CONVERSION_RATE);
4910 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4911 'CONVERSION_TYPE_CODE='||p_fc_temp_rows(i).CONVERSION_TYPE_CODE);
4912 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4913 'TRIP_ID='||p_fc_temp_rows(i).TRIP_ID);
4914 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4915 'STOP_ID='||p_fc_temp_rows(i).STOP_ID);
4916 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4917 'DELIVERY_ID='||p_fc_temp_rows(i).DELIVERY_ID);
4918 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4919 'DELIVERY_LEG_ID='||p_fc_temp_rows(i).DELIVERY_LEG_ID);
4920 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4921 'DELIVERY_DETAIL_ID='||p_fc_temp_rows(i).DELIVERY_DETAIL_ID);
4922 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4923 'LINE_TYPE_CODE='||p_fc_temp_rows(i).LINE_TYPE_CODE);
4924 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4925 'PRICING_LIST_HEADER_ID='||p_fc_temp_rows(i).PRICING_LIST_HEADER_ID);
4926 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4927 'PRICING_LIST_LINE_ID='||p_fc_temp_rows(i).PRICING_LIST_LINE_ID);
4928 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4929 'APPLIED_TO_CHARGE_ID='||p_fc_temp_rows(i).APPLIED_TO_CHARGE_ID);
4930 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4931 'CHARGE_UNIT_VALUE='||p_fc_temp_rows(i).CHARGE_UNIT_VALUE);
4932 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4933 'CHARGE_SOURCE_CODE='||p_fc_temp_rows(i).CHARGE_SOURCE_CODE);
4934 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4935 'ESTIMATED_FLAG='||p_fc_temp_rows(i).ESTIMATED_FLAG);
4936 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4937 'COMPARISON_REQUEST_ID='||p_fc_temp_rows(i).COMPARISON_REQUEST_ID);
4938 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4939 'LANE_ID='||p_fc_temp_rows(i).LANE_ID);
4943 'MOVED_TO_MAIN_FLAG='||p_fc_temp_rows(i).MOVED_TO_MAIN_FLAG);
4940 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4941 'SCHEDULE_ID='||p_fc_temp_rows(i).SCHEDULE_ID);
4942 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4944 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4945 'SERVICE_TYPE_CODE='||p_fc_temp_rows(i).SERVICE_TYPE_CODE);
4946 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4947 'COMMODITY_CATEGORY_ID='||p_fc_temp_rows(i).COMMODITY_CATEGORY_ID);
4948 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4949 'BILLABLE_QUANTITY='||p_fc_temp_rows(i).BILLABLE_QUANTITY);
4950 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4951 'BILLABLE_UOM='||p_fc_temp_rows(i).BILLABLE_UOM);
4952 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
4953 'BILLABLE_BASIS='||p_fc_temp_rows(i).BILLABLE_BASIS);
4954
4955
4956 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'-------------');
4957
4958 EXIT WHEN i=p_fc_temp_rows.LAST;
4959 i := p_fc_temp_rows.NEXT(i);
4960 END LOOP;
4961 FTE_FREIGHT_PRICING_UTIL.print_tag(l_log_level,'</FC_TEMP_Records>');
4962 END IF;
4963
4964 EXCEPTION
4965 WHEN others THEN
4966 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4967 FTE_FREIGHT_PRICING_UTIL.set_exception('print_fc_temp_rows',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
4968 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
4969
4970 END print_fc_temp_rows;
4971 -- End printing procedures
4972
4973 PROCEDURE rollup_container_hierarchy (
4974 p_container_id IN NUMBER,
4975 p_classification_code IN VARCHAR2,
4976 p_lane_basis IN VARCHAR2,
4977 p_lane_id IN NUMBER,
4978 x_rolledup_lines IN OUT NOCOPY rolledup_line_tab_type,
4979 x_return_status OUT NOCOPY VARCHAR2 )
4980 IS
4981
4982 l_uom_ea VARCHAR2(30);
4983 l_api_name CONSTANT VARCHAR2(30) := 'rollup_container_hierarchy';
4984 i NUMBER:=0;
4985 l_category_id NUMBER:=0;
4986 l_basis VARCHAR2(30):=NULL;
4987 l_num_basis NUMBER:=0;
4988 l_start_count NUMBER:=0;
4989 l_detail_count NUMBER:=0;
4990 l_return_status VARCHAR2(1);
4991
4992 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_INF;
4993
4994 BEGIN
4995
4996 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4997 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
4998 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'rollup_container_hierarchy','start');
4999
5000 OPEN get_uom_for_each;
5001 FETCH get_uom_for_each INTO l_uom_ea;
5002 CLOSE get_uom_for_each;
5003
5004 IF l_uom_ea is null THEN
5005 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'After get_uom_for_each ');
5006 fte_freight_pricing_util.set_exception(l_api_name,l_log_level,'g_get_uom_for_each_failed');
5007 raise FND_API.G_EXC_ERROR;
5008 END IF;
5009
5010 i := g_shipment_line_rows.FIRST;
5011 LOOP
5012 IF g_shipment_line_rows(i).parent_delivery_detail_id = p_container_id THEN
5013
5014 IF ((g_shipment_line_rows(i).container_flag = 'Y' ) OR (g_shipment_line_rows(i).container_flag = 'C' ))THEN
5015
5016 l_start_count := x_rolledup_lines.COUNT;
5017 rollup_container_hierarchy (
5018 p_container_id => g_shipment_line_rows(i).delivery_detail_id,
5019 p_classification_code => p_classification_code,
5020 p_lane_basis => p_lane_basis,
5021 p_lane_id => p_lane_id,
5022 x_rolledup_lines => x_rolledup_lines,
5023 x_return_status => l_return_status);
5024
5025 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5026 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5027 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Container '||g_shipment_line_rows(i).delivery_detail_id);
5028 raise FTE_FREIGHT_PRICING_UTIL.g_rollup_container_failed;
5029 END IF;
5030 ELSE
5031 l_detail_count := x_rolledup_lines.COUNT - l_start_count;
5032 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Container '||g_shipment_line_rows(i).delivery_detail_id||' has '||l_detail_count||' rolled up lines');
5033 END IF;
5034 ELSE
5035
5036 IF p_classification_code IS NOT NULL THEN
5037
5038 IF (g_shipment_line_rows(i).inventory_item_id IS NULL
5039 AND g_shipment_line_rows(i).comm_category_id IS NOT NULL) THEN
5040 -- FTE J FTE estimate rate --
5041 l_category_id := g_shipment_line_rows(i).comm_category_id;
5042 ELSIF (g_shipment_line_rows(i).inventory_item_id IS NULL
5043 AND g_shipment_line_rows(i).comm_category_id IS NULL) THEN
5044 -- FTE J one-time items --
5045 l_category_id := get_default_category(p_classification_code=>p_classification_code);
5046
5047 IF (l_category_id IS NOT NULL) THEN
5048 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,
5049 'Default category id '||l_category_id||' got assigned to : '
5053 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_LOG,
5050 || g_shipment_line_rows(i).delivery_detail_id);
5051 g_shipment_line_rows(i).comm_category_id := l_category_id;
5052 ELSE
5054 'No default category found ');
5055 raise FTE_FREIGHT_PRICING_UTIL.g_category_not_found;
5056 END IF;
5057
5058 ELSE
5059
5060 OPEN get_category(g_shipment_line_rows(i).inventory_item_id,g_shipment_line_rows(i).organization_id,p_classification_code);
5061 -- There should be only one category for one classification code for an item-org
5062 FETCH get_category INTO l_category_id;
5063 IF get_category%NOTFOUND THEN
5064 CLOSE get_category;
5065 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Rolledup line '||g_shipment_line_rows(i).delivery_detail_id);
5066 -- FTE J --
5067 -- Attempt to assign a default category and continue
5068 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,
5069 'Delivery detail has no commodity assignment. Try to get default category');
5070 l_category_id := get_default_category(p_classification_code=>p_classification_code);
5071 IF (l_category_id IS NULL) THEN
5072 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_LOG,
5073 'No default category found ');
5074 raise FTE_FREIGHT_PRICING_UTIL.g_category_not_found;
5075 END IF;
5076 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,
5077 'Default category id '||l_category_id);
5078 ELSE
5079 CLOSE get_category;
5080 END IF;
5081
5082 END IF; -- if inventory_item_id is null
5083
5084 OPEN get_category_basis(p_lane_id,l_category_id);
5085 FETCH get_category_basis INTO l_basis;
5086 CLOSE get_category_basis;
5087
5088 ELSE
5089
5090 l_category_id := g_default_category_id;
5091 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Default category id (-9999) got assigned to : '|| g_shipment_line_rows(i).delivery_detail_id||' as no classification code is found on the lane');
5092
5093 END IF;
5094
5095 IF l_basis IS NULL THEN
5096 l_basis := p_lane_basis;
5097 END IF;
5098
5099 IF l_basis = 'CONTAINER' THEN
5100 l_num_basis := G_CONTAINER_BASIS;
5101 ELSIF l_basis = 'WEIGHT' THEN
5102 l_num_basis := G_WEIGHT_BASIS;
5103 ELSIF l_basis = 'VOLUME' THEN
5104 l_num_basis := G_VOLUME_BASIS;
5105 ELSE -- NULL or non supported basis
5106 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_basis;
5107 END IF;
5108
5109 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).delivery_detail_id := g_shipment_line_rows(i).delivery_detail_id;
5110 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).container_id := p_container_id;
5111 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).category_id := l_category_id;
5112 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).rate_basis := l_num_basis;
5113
5114 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).delivery_detail_id := g_shipment_line_rows(i).delivery_detail_id;
5115 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).container_id := p_container_id;
5116 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).category_id := l_category_id;
5117 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).rate_basis := l_num_basis;
5118
5119 IF l_num_basis = G_CONTAINER_BASIS THEN
5120
5121 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := 1;
5122 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_uom := l_uom_ea;
5123 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := 1;
5124 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_uom := l_uom_ea;
5125 ELSIF l_num_basis = G_WEIGHT_BASIS THEN
5126
5127 --x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := g_shipment_line_rows(i).net_weight;
5128 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := nvl(g_shipment_line_rows(i).net_weight,g_shipment_line_rows(i).gross_weight);
5129 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_uom := g_shipment_line_rows(i).weight_uom_code;
5130 --g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := g_shipment_line_rows(i).net_weight;
5131 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := nvl(g_shipment_line_rows(i).net_weight,g_shipment_line_rows(i).gross_weight);
5132 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_uom := g_shipment_line_rows(i).weight_uom_code;
5133 ELSIF l_num_basis = G_VOLUME_BASIS THEN
5134
5135 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := g_shipment_line_rows(i).volume;
5136 x_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_uom := g_shipment_line_rows(i).volume_uom_code;
5140
5137 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_quantity := g_shipment_line_rows(i).volume;
5138 g_rolledup_lines(g_shipment_line_rows(i).delivery_detail_id).line_uom := g_shipment_line_rows(i).volume_uom_code;
5139 END IF;
5141 END IF;
5142 END IF;
5143
5144 EXIT WHEN i = g_shipment_line_rows.LAST;
5145 i := g_shipment_line_rows.NEXT(i);
5146 END LOOP;
5147 x_return_status := l_return_status;
5148 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_container_hierarchy');
5149
5150 EXCEPTION
5151 WHEN FND_API.G_EXC_ERROR THEN
5152 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5153 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_container_hierarchy');
5154 WHEN FTE_FREIGHT_PRICING_UTIL.g_rollup_container_failed THEN
5155 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5156 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_container_hierarchy',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_rollup_container_failed');
5157 --FTE_FREIGHT_PRICING_UTIL.print_debug('rollup_container failed ');
5158 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'rollup_container failed ');
5159 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_container_hierarchy');
5160 WHEN FTE_FREIGHT_PRICING_UTIL.g_category_not_found THEN
5161 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5162 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_container_hierarchy',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_category_not_found');
5163 --FTE_FREIGHT_PRICING_UTIL.print_debug('category_not_found ');
5164 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'category_not_found ');
5165 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_container_hierarchy');
5166 WHEN FTE_FREIGHT_PRICING_UTIL.g_invalid_basis THEN
5167 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5168 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_container_hierarchy',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_invalid_basis');
5169 --FTE_FREIGHT_PRICING_UTIL.print_debug('basis_not_found ');
5170 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'basis_not_found ');
5171 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_container_hierarchy');
5172 WHEN others THEN
5173 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5174 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_container_hierarchy',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
5175 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5176 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5177 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_container_hierarchy');
5178
5179 END rollup_container_hierarchy;
5180
5181
5182 PROCEDURE rollup_loose_item (
5183 p_loose_item_id IN NUMBER,
5184 p_classification_code IN VARCHAR2,
5185 p_lane_basis IN VARCHAR2,
5186 p_lane_id IN NUMBER,
5187 x_rolledup_rec IN OUT NOCOPY rolledup_line_rec_type,
5188 x_return_status OUT NOCOPY VARCHAR2 )
5189 IS
5190
5191 l_uom_ea VARCHAR2(30);
5192 l_api_name CONSTANT VARCHAR2(30) := 'rollup_loose_item';
5193 i NUMBER:=0;
5194 l_category_id NUMBER:=0;
5195 l_basis VARCHAR2(30):=NULL;
5196 l_num_basis NUMBER:=0;
5197 l_return_status VARCHAR2(1);
5198
5199 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_INF;
5200
5201 BEGIN
5202 -- {
5203
5204 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5205 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
5206 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'rollup_loose_item','start');
5207
5208 OPEN get_uom_for_each;
5209 FETCH get_uom_for_each INTO l_uom_ea;
5210 CLOSE get_uom_for_each;
5211
5212 IF l_uom_ea is null THEN
5213 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'After get_uom_for_each ');
5214 fte_freight_pricing_util.set_exception(l_api_name,l_log_level,'g_get_uom_for_each_failed');
5215 raise FND_API.G_EXC_ERROR;
5216 END IF;
5217
5218 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'p_classification_code='||p_classification_code);
5219 IF p_classification_code IS NOT NULL THEN
5220 -- {
5221 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'g_shipment_line_rows.COUNT='||g_shipment_line_rows.COUNT);
5222 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'g_shipment_line_rows(p_loose_item_id).inventory_item_id ='||g_shipment_line_rows(p_loose_item_id).inventory_item_id);
5223 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'g_shipment_line_rows(p_loose_item_id).organization_id ='||g_shipment_line_rows(p_loose_item_id).organization_id);
5224
5225
5226 IF (g_shipment_line_rows(p_loose_item_id).inventory_item_id IS NULL
5227 AND g_shipment_line_rows(p_loose_item_id).comm_category_id IS NOT NULL) THEN
5228 -- FTE J FTE estimate rate --
5229 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'g_shipment_line_rows(p_loose_item_id).comm_category_id='||g_shipment_line_rows(p_loose_item_id).comm_category_id);
5230 l_category_id := g_shipment_line_rows(p_loose_item_id).comm_category_id;
5231 ELSIF (g_shipment_line_rows(p_loose_item_id).inventory_item_id IS NULL
5232 AND g_shipment_line_rows(p_loose_item_id).comm_category_id IS NULL) THEN
5236 IF (l_category_id IS NOT NULL) THEN
5233 -- FTE J one-time items --
5234 l_category_id := get_default_category(p_classification_code=>p_classification_code);
5235
5237 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,
5238 'Default category id '||l_category_id||' got assigned to : '
5239 || g_shipment_line_rows(p_loose_item_id).delivery_detail_id);
5240 g_shipment_line_rows(p_loose_item_id).comm_category_id := l_category_id;
5241 ELSE
5242 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_LOG,
5243 'No default category found ');
5244 raise FTE_FREIGHT_PRICING_UTIL.g_category_not_found;
5245 END IF;
5246 ELSE
5247
5248 OPEN get_category(g_shipment_line_rows(p_loose_item_id).inventory_item_id,g_shipment_line_rows(p_loose_item_id).organization_id,p_classification_code);
5249 -- There should be only one category for one classification code for an item-org
5250 FETCH get_category INTO l_category_id;
5251 IF get_category%NOTFOUND THEN
5252 CLOSE get_category;
5253 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Rolledup line '||g_shipment_line_rows(p_loose_item_id).delivery_detail_id);
5254 -- FTE J --
5255 -- Attempt to assign a default category and continue
5256 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,
5257 'Delivery detail has no commodity assignment. Try to get default category');
5258 l_category_id := get_default_category(p_classification_code=>p_classification_code);
5259 IF (l_category_id IS NULL) THEN
5260 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_LOG,
5261 'No default category found ');
5262 raise FTE_FREIGHT_PRICING_UTIL.g_category_not_found;
5263 END IF;
5264 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,
5265 'Default category id '||l_category_id);
5266 ELSE
5267 CLOSE get_category;
5268 END IF;
5269 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_category_id='||l_category_id);
5270
5271 END IF;
5272
5273 OPEN get_category_basis(p_lane_id,l_category_id);
5274 FETCH get_category_basis INTO l_basis;
5275 CLOSE get_category_basis;
5276
5277 -- }
5278 ELSE
5279 -- {
5280
5281 l_category_id := g_default_category_id;
5282 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Default category id got assigned to : '|| p_loose_item_id ||' as no classification code is found on the lane');
5283
5284 -- }
5285 END IF;
5286
5287 IF l_basis IS NULL THEN
5288 l_basis := p_lane_basis;
5289 END IF;
5290
5291 IF l_basis = 'CONTAINER' THEN
5292 l_num_basis := G_CONTAINER_BASIS;
5293 ELSIF l_basis = 'WEIGHT' THEN
5294 l_num_basis := G_WEIGHT_BASIS;
5295 ELSIF l_basis = 'VOLUME' THEN
5296 l_num_basis := G_VOLUME_BASIS;
5297 ELSE -- NULL or non supported basis
5298 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_basis;
5299 END IF;
5300
5301 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'p_loose_item_id= '||p_loose_item_id);
5302 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'got basis');
5303
5304 x_rolledup_rec.delivery_detail_id := p_loose_item_id;
5305 -- x_rolledup_rec.container_id := null;
5306 x_rolledup_rec.container_id := p_loose_item_id;
5307 x_rolledup_rec.category_id := l_category_id;
5308 x_rolledup_rec.rate_basis := l_num_basis;
5309
5310 g_rolledup_lines(p_loose_item_id) := x_rolledup_rec;
5311 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'added to g_rolledup_lines');
5312
5313 IF l_num_basis = G_CONTAINER_BASIS THEN
5314
5315 x_rolledup_rec.line_quantity := 1;
5316 x_rolledup_rec.line_uom := l_uom_ea;
5317 g_rolledup_lines(p_loose_item_id).line_quantity := 1;
5318 g_rolledup_lines(p_loose_item_id).line_uom := l_uom_ea;
5319
5320 ELSIF l_num_basis = G_WEIGHT_BASIS THEN
5321 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'before x_rolledup_rec.line_quantity');
5322
5323 x_rolledup_rec.line_quantity := nvl(g_shipment_line_rows(p_loose_item_id).net_weight,g_shipment_line_rows(p_loose_item_id).gross_weight);
5324 x_rolledup_rec.line_uom := g_shipment_line_rows(p_loose_item_id).weight_uom_code;
5325 g_rolledup_lines(p_loose_item_id).line_quantity := x_rolledup_rec.line_quantity;
5326 g_rolledup_lines(p_loose_item_id).line_uom := x_rolledup_rec.line_uom;
5327
5328 ELSIF l_num_basis = G_VOLUME_BASIS THEN
5329
5330 x_rolledup_rec.line_quantity := g_shipment_line_rows(p_loose_item_id).volume;
5331 x_rolledup_rec.line_uom := g_shipment_line_rows(p_loose_item_id).volume_uom_code;
5332 g_rolledup_lines(p_loose_item_id).line_quantity := x_rolledup_rec.line_quantity;
5333 g_rolledup_lines(p_loose_item_id).line_uom := x_rolledup_rec.line_uom;
5334
5335 END IF;
5336
5337
5338 x_return_status := l_return_status;
5339 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_loose_item');
5340
5341 EXCEPTION
5342 WHEN FND_API.G_EXC_ERROR THEN
5343 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5347 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_loose_item',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_rollup_container_failed');
5344 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_loose_item');
5345 WHEN FTE_FREIGHT_PRICING_UTIL.g_rollup_container_failed THEN
5346 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5348 --FTE_FREIGHT_PRICING_UTIL.print_debug('rollup_container failed ');
5349 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'rollup_loose_item failed ');
5350 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_loose_item');
5351 WHEN FTE_FREIGHT_PRICING_UTIL.g_category_not_found THEN
5352 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5353 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_loose_item',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_category_not_found');
5354 --FTE_FREIGHT_PRICING_UTIL.print_debug('category_not_found ');
5355 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'category_not_found ');
5356 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_loose_item');
5357 WHEN FTE_FREIGHT_PRICING_UTIL.g_invalid_basis THEN
5358 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5359 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_loose_item',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_invalid_basis');
5360 --FTE_FREIGHT_PRICING_UTIL.print_debug('basis_not_found ');
5361 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'basis_not_found ');
5362 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_loose_item');
5363 WHEN others THEN
5364 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5365 FTE_FREIGHT_PRICING_UTIL.set_exception('rollup_loose_item',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
5366 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5367 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5368 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'rollup_loose_item');
5369
5370 -- }
5371 END rollup_loose_item;
5372
5373 PROCEDURE search_matching_instance (
5374 --p_rolledup_category_rows IN WSH_UTIL_CORE.id_tab_type, -- Indexed on category_id
5375 --p_rolledup_category_basis IN WSH_UTIL_CORE.id_tab_type,
5376 p_pattern_no IN NUMBER,
5377 p_grouping_level IN VARCHAR2,
5378 p_aggregation IN VARCHAR2,
5379 p_objective IN VARCHAR2,
5380 p_toplevel_charges_hash IN VARCHAR2, -- Top level requested additional services hash
5381 p_pricing_dual_instances IN pricing_dual_instance_tab_type,
5382 --p_pricing_engine_rows IN pricing_engine_input_tab_type,
5383 x_matched_instance_index OUT NOCOPY NUMBER, -- -100 if does not match
5384 x_return_status OUT NOCOPY VARCHAR2 )
5385 IS
5386
5387 i NUMBER :=0;
5388 j NUMBER :=0;
5389 k NUMBER :=0;
5390 l NUMBER :=0;
5391 m NUMBER :=0;
5392 n NUMBER :=0;
5393 l_matched_index WSH_UTIL_CORE.id_tab_type;
5394 l_matched_category_rows instance_category_tab_type;
5395 l_matched_basis_rows instance_basis_tab_type;
5396 l_matched_instance_index NUMBER :=0;
5397 l_hash_string VARCHAR2(50);
5398 l_index NUMBER:=0;
5399
5400 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
5401
5402 BEGIN
5403
5404 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5405 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
5406 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'search_matching_instance','start');
5407
5408 i := p_pricing_dual_instances.FIRST;
5409 LOOP
5410 -- SC_WB(2) should match with MC_WB(5) and SC_VB(3) should match with MC_VB(6)
5411 -- as long as the pricing dual and pricing objectives match
5412 IF p_pricing_dual_instances(i).pattern_no = p_pattern_no THEN -- Can match with more than one here
5413 l_matched_index(p_pricing_dual_instances(i).instance_index) := p_pricing_dual_instances(i).instance_index;
5414 ELSIF (p_pattern_no = G_PATTERN_2 OR p_pattern_no = G_PATTERN_5 OR p_pattern_no = G_PATTERN_9) THEN
5415 IF (p_pricing_dual_instances(i).pattern_no = G_PATTERN_5 OR
5416 p_pricing_dual_instances(i).pattern_no = G_PATTERN_9 OR
5417 p_pricing_dual_instances(i).pattern_no = G_PATTERN_2) AND
5418 p_pricing_dual_instances(i).grouping_level = p_grouping_level AND
5419 p_pricing_dual_instances(i).aggregation = p_aggregation AND
5420 NVL(p_pricing_dual_instances(i).objective,'N') = NVL(p_objective,'N') THEN
5421 l_matched_index(p_pricing_dual_instances(i).instance_index) :=
5422 p_pricing_dual_instances(i).instance_index;
5423 END IF;
5424 ELSIF (p_pattern_no = G_PATTERN_3 OR p_pattern_no = G_PATTERN_6 OR p_pattern_no = G_PATTERN_10) THEN
5425 IF (p_pricing_dual_instances(i).pattern_no = G_PATTERN_6 OR
5426 p_pricing_dual_instances(i).pattern_no = G_PATTERN_10 OR
5427 p_pricing_dual_instances(i).pattern_no = G_PATTERN_3) AND
5428 p_pricing_dual_instances(i).grouping_level = p_grouping_level AND
5429 p_pricing_dual_instances(i).aggregation = p_aggregation AND
5430 NVL(p_pricing_dual_instances(i).objective,'N') = NVL(p_objective,'N') THEN
5431 l_matched_index(p_pricing_dual_instances(i).instance_index) :=
5435
5432 p_pricing_dual_instances(i).instance_index;
5433 END IF;
5434 END IF;
5436 EXIT WHEN i = p_pricing_dual_instances.LAST;
5437 i := p_pricing_dual_instances.NEXT(i);
5438 END LOOP;
5439
5440 IF l_matched_index.COUNT <> 0 THEN
5441
5442 -- Comes here if there are instances from same pattern and
5443 -- p_aggregation = 'ACROSS' and matching basis or p_aggregation = 'WITHIN' and matching categories
5444 -- Now match the additional services for the top level row with that of the matched instances
5445
5446 m := p_pricing_dual_instances.FIRST;
5447 LOOP
5448 IF l_matched_index.EXISTS(p_pricing_dual_instances(m).instance_index) THEN
5449 IF NVL(p_pricing_dual_instances(m).services_hash,'N') = NVL(p_toplevel_charges_hash,'N') THEN
5450 l_matched_instance_index := p_pricing_dual_instances(m).instance_index;
5451 EXIT; -- Maximum one can match
5452 END IF;
5453 END IF;
5454
5455 EXIT WHEN m = p_pricing_dual_instances.LAST;
5456 m := p_pricing_dual_instances.NEXT(m);
5457 END LOOP;
5458
5459 IF l_matched_instance_index = 0 THEN
5460 l_matched_instance_index := -100;
5461 END IF;
5462
5463 ELSE
5464 l_matched_instance_index := -100;
5465
5466 END IF;
5467
5468 x_matched_instance_index := l_matched_instance_index;
5469 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'search_matching_instance');
5470 RETURN;
5471
5472 EXCEPTION
5473 WHEN others THEN
5474 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5475 FTE_FREIGHT_PRICING_UTIL.set_exception('search_matching_instance',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
5476 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5477 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5478 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'search_matching_instance');
5479 END search_matching_instance;
5480
5481 -- This procedure should be called to create associated engine rows while creating one new instance
5482 -- It also creates relevant associated attribute rows
5483 -- The calling procedure takes care of creating pattern_row and dual_instance_row
5484 -- Additional attributes either at delivery level/container level are also added there
5485 -- It is called for each top level container
5486 -- Can be called for both Single-commodity and multi-commodity (ie. for all patterns)
5487
5488 PROCEDURE create_new_instance (
5489 p_rolled_up_lines IN rolledup_line_tab_type,
5490 p_toplevel_lines IN shpmnt_content_rec_type,
5491 p_grouping_level IN VARCHAR2,
5492 p_aggregation IN VARCHAR2,
5493 p_objective IN VARCHAR2,
5494 p_instance_count IN NUMBER,
5495 x_pricing_engine_rows IN OUT NOCOPY pricing_engine_input_tab_type,
5496 x_pricing_attribute_rows IN OUT NOCOPY pricing_attribute_tab_type,
5497 x_return_status OUT NOCOPY VARCHAR2 )
5498 IS
5499
5500 i NUMBER:=0;
5501 j NUMBER:=0;
5502 l_container_working_weight NUMBER:=0;
5503 l_container_working_volume NUMBER:=0;
5504 l_instance_index NUMBER:= p_instance_count;
5505 l_input_index NUMBER:= x_pricing_engine_rows.COUNT;
5506 l_input_engine_row_count NUMBER;
5507 l_attribute_index NUMBER:= x_pricing_attribute_rows.COUNT;
5508 l_hash_string VARCHAR2(50);
5509 l_hash_value NUMBER;
5510 l_category_rows quantity_tab_type;
5511 l_basis_rows quantity_tab_type;
5512 l_basis_categ_tab basis_categ_tab_type;
5513 l_container_flag VARCHAR2(1) := 'Y';
5514
5515 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
5516
5517 BEGIN
5518 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5519 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
5520 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'create_new_instance','start');
5521 l_instance_index := l_instance_index + 1;
5522
5523 l_input_engine_row_count := l_input_index;
5524 i := p_rolled_up_lines.FIRST;
5525 LOOP
5526 -- {
5527
5528 IF p_aggregation = 'WITHIN' THEN
5529 --OR p_rolled_up_lines(i).rate_basis = G_CONTAINER_BASIS THEN
5530 -- {
5531
5532 -- Group p_rolled_up_lines by category
5533 -- Sum up quantities for lines within each group (For CONTAINER basis do not sum up the line quantities)
5534 -- Prepare one engine row for each group
5535
5536 IF NOT l_category_rows.EXISTS(p_rolled_up_lines(i).category_id) THEN
5537 -- {
5538
5539 l_category_rows(p_rolled_up_lines(i).category_id).uom := p_rolled_up_lines(i).line_uom;
5540 l_category_rows(p_rolled_up_lines(i).category_id).quantity := p_rolled_up_lines(i).line_quantity;
5541 l_input_index := l_input_index + 1;
5542 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index);
5543 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
5544 x_pricing_engine_rows(l_input_index).instance_index := l_instance_index;
5548 x_pricing_engine_rows(l_input_index).line_quantity := p_rolled_up_lines(i).line_quantity;
5545 x_pricing_engine_rows(l_input_index).category_id := p_rolled_up_lines(i).category_id;
5546 --x_pricing_engine_rows(l_input_index).basis := p_rolled_up_lines(i).rate_basis; -- No basis for WITHIN
5547 x_pricing_engine_rows(l_input_index).basis := p_rolled_up_lines(i).rate_basis; -- No basis for WITHIN
5549 x_pricing_engine_rows(l_input_index).line_uom := p_rolled_up_lines(i).line_uom;
5550
5551 IF p_rolled_up_lines(i).rate_basis = G_CONTAINER_BASIS THEN
5552 -- {
5553 l_attribute_index := l_attribute_index + 1;
5554 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
5555 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
5556 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CONTAINER_TYPE';
5557 x_pricing_attribute_rows(l_attribute_index).attribute_value := g_shipment_line_rows(p_toplevel_lines.content_id).container_type_code; -- Need to convert to VARCHAR2
5558
5559 -- }
5560 END IF;
5561
5562 l_attribute_index := l_attribute_index + 1;
5563 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
5564 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
5565 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CATEGORY_ID';
5566 x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(p_rolled_up_lines(i).category_id); -- Need to convert to VARCHAR2
5567
5568 -- }
5569 ELSE
5570 -- {
5571 IF p_rolled_up_lines(i).rate_basis <> G_CONTAINER_BASIS THEN
5572 -- {
5573 IF p_rolled_up_lines(i).line_uom = l_category_rows(p_rolled_up_lines(i).category_id).uom THEN
5574 l_category_rows(p_rolled_up_lines(i).category_id).quantity :=
5575 l_category_rows(p_rolled_up_lines(i).category_id).quantity + p_rolled_up_lines(i).line_quantity;
5576 ELSE
5577 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Within - uom conversion');
5578 l_category_rows(p_rolled_up_lines(i).category_id).quantity :=
5579 l_category_rows(p_rolled_up_lines(i).category_id).quantity +
5580 WSH_WV_UTILS.convert_uom(p_rolled_up_lines(i).line_uom,
5581 l_category_rows(p_rolled_up_lines(i).category_id).uom,
5582 p_rolled_up_lines(i).line_quantity,
5583 0); -- Within same UOM class
5584 END IF;
5585 -- }
5586 END IF;
5587 -- }
5588 END IF;
5589
5590 -- }
5591 ELSE -- p_aggregation = 'ACROSS'
5592 -- {
5593
5594 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Across - creating hash');
5595 l_hash_string := CONCAT(TO_CHAR(p_rolled_up_lines(i).rate_basis),TO_CHAR(p_rolled_up_lines(i).category_id));
5596 l_hash_value := dbms_utility.get_hash_value(
5597 name => l_hash_string,
5598 base => g_hash_base,
5599 hash_size =>g_hash_size );
5600
5601 -- Group p_rolled_up_lines by basis
5602 -- Sum up quantities for lines within each group
5603
5604 IF NOT l_basis_rows.EXISTS(p_rolled_up_lines(i).rate_basis) THEN
5605 -- {
5606
5607 l_basis_categ_tab(l_hash_value).basis := p_rolled_up_lines(i).rate_basis;
5608 l_basis_categ_tab(l_hash_value).category_id := p_rolled_up_lines(i).category_id;
5609
5610 l_basis_rows(p_rolled_up_lines(i).rate_basis).uom := p_rolled_up_lines(i).line_uom;
5611 l_basis_rows(p_rolled_up_lines(i).rate_basis).quantity := p_rolled_up_lines(i).line_quantity;
5612 l_input_index := l_input_index + 1;
5613 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index);
5614 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
5615 x_pricing_engine_rows(l_input_index).instance_index := l_instance_index;
5616 x_pricing_engine_rows(l_input_index).category_id := p_rolled_up_lines(i).category_id;
5617
5618 x_pricing_engine_rows(l_input_index).basis := p_rolled_up_lines(i).rate_basis;
5619 x_pricing_engine_rows(l_input_index).line_quantity := p_rolled_up_lines(i).line_quantity;
5620 x_pricing_engine_rows(l_input_index).line_uom := p_rolled_up_lines(i).line_uom;
5621
5622 IF p_rolled_up_lines(i).rate_basis = G_CONTAINER_BASIS THEN
5623 -- {
5624 l_attribute_index := l_attribute_index + 1;
5625 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
5626 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
5627 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CONTAINER_TYPE';
5628 x_pricing_attribute_rows(l_attribute_index).attribute_value := g_shipment_line_rows(p_toplevel_lines.content_id).container_type_code; -- Need to convert to VARCHAR2
5629
5630 -- }
5631 END IF;
5632
5633 -- Would not put category id if pricing objective is null
5634 IF p_objective IS NOT NULL THEN
5635 -- {
5636
5637 l_attribute_index := l_attribute_index + 1;
5638 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
5642
5639 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
5640 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CATEGORY_ID';
5641 x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(p_rolled_up_lines(i).category_id);
5643 -- }
5644 END IF;
5645
5646 -- }
5647 ELSE
5648 -- {
5649
5650 IF NOT l_basis_categ_tab.EXISTS(l_hash_value) AND p_objective IS NOT NULL THEN
5651 -- {
5652 l_basis_categ_tab(l_hash_value).basis := p_rolled_up_lines(i).rate_basis;
5653 l_basis_categ_tab(l_hash_value).category_id := p_rolled_up_lines(i).category_id;
5654
5655 -- Prepare as many engine row as many distinct categories within each group
5656 -- Need to sum up quantities within basis across categories
5657 -- Would not create new engine rows if pricing objective is null
5658
5659 l_input_index := l_input_index + 1;
5660 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index);
5661 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
5662 x_pricing_engine_rows(l_input_index).instance_index := l_instance_index;
5663 x_pricing_engine_rows(l_input_index).category_id := p_rolled_up_lines(i).category_id;
5664 x_pricing_engine_rows(l_input_index).basis := p_rolled_up_lines(i).rate_basis;
5665 x_pricing_engine_rows(l_input_index).line_quantity := p_rolled_up_lines(i).line_quantity;
5666 x_pricing_engine_rows(l_input_index).line_uom := p_rolled_up_lines(i).line_uom;
5667
5668 IF p_rolled_up_lines(i).rate_basis = G_CONTAINER_BASIS THEN
5669 -- {
5670 l_attribute_index := l_attribute_index + 1;
5671 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
5672 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
5673 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CONTAINER_TYPE';
5674 x_pricing_attribute_rows(l_attribute_index).attribute_value := g_shipment_line_rows(p_toplevel_lines.content_id).container_type_code; -- Need to convert to VARCHAR2
5675
5676 -- }
5677 END IF;
5678
5679 l_attribute_index := l_attribute_index + 1;
5680 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
5681 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
5682 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CATEGORY_ID';
5683 x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(p_rolled_up_lines(i).category_id);
5684
5685 -- }
5686 END IF;
5687
5688 IF p_rolled_up_lines(i).rate_basis <> G_CONTAINER_BASIS THEN
5689 -- {
5690 IF p_rolled_up_lines(i).line_uom = l_basis_rows(p_rolled_up_lines(i).rate_basis).uom THEN
5691 l_basis_rows(p_rolled_up_lines(i).rate_basis).quantity :=
5692 l_basis_rows(p_rolled_up_lines(i).rate_basis).quantity + p_rolled_up_lines(i).line_quantity;
5693 ELSE
5694 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Across - uom conversion');
5695 l_basis_rows(p_rolled_up_lines(i).rate_basis).quantity :=
5696 l_basis_rows(p_rolled_up_lines(i).rate_basis).quantity +
5697 WSH_WV_UTILS.convert_uom(p_rolled_up_lines(i).line_uom,
5698 l_basis_rows(p_rolled_up_lines(i).rate_basis).uom,
5699 p_rolled_up_lines(i).line_quantity,
5700 0); -- Within same UOM class
5701 END IF;
5702 -- }
5703 END IF;
5704 -- }
5705 END IF;
5706
5707 -- }
5708 END IF;
5709
5710 EXIT WHEN i = p_rolled_up_lines.LAST;
5711 i := p_rolled_up_lines.NEXT(i);
5712 -- }
5713 END LOOP;
5714
5715 IF x_pricing_engine_rows.COUNT > l_input_engine_row_count THEN
5716 -- {
5717 j := l_input_engine_row_count + 1;
5718 LOOP
5719 -- {
5720 -- new code for loose items
5721 -- set the loose_item_id in the pricing_engine_row
5722 IF (p_toplevel_lines.container_flag = 'N') THEN
5723 -- x_pricing_engine_rows(j).loose_item_id := p_toplevel_lines.content_id;
5724 x_pricing_engine_rows(j).loose_item_flag := 'Y';
5725 END IF;
5726
5727 IF x_pricing_engine_rows(j).basis <> G_CONTAINER_BASIS THEN -- Might not have basis ?
5728 IF p_aggregation = 'WITHIN' THEN
5729 x_pricing_engine_rows(j).line_quantity := l_category_rows(x_pricing_engine_rows(j).category_id).quantity;
5730 ELSE
5731 x_pricing_engine_rows(j).line_quantity := l_basis_rows(x_pricing_engine_rows(j).basis).quantity;
5732 END IF;
5733 END IF;
5734
5735 -- Do not populate basis in engine row if there exists only one basis for the top level line
5736 -- irrespective of pricing objective present or not
5737 -- No longer 04/30 ST
5738
5739 IF l_basis_rows.COUNT = 1 AND p_aggregation = 'ACROSS' THEN
5740 -- {
5741
5742 -- If there is no objective container gross weight/volume should replace sum (line weight/volume)
5743 -- Do not populate basis in engine row
5744 -- Affected - Parcel
5748 IF p_objective IS NULL AND p_grouping_level = 'CONTAINER' THEN
5745 -- For now we are going to do this only for a grouping level = Container 03/15
5746 -- If there is a need we will do it for shipment level also
5747
5749 IF x_pricing_engine_rows(j).basis = G_WEIGHT_BASIS THEN
5750
5751 IF nvl(g_shipment_line_rows(p_toplevel_lines.content_id).gross_weight,0) <> 0 THEN
5752
5753 -- uom conversion TODO ?
5754 IF g_shipment_line_rows(p_toplevel_lines.content_id).weight_uom_code = x_pricing_engine_rows(j).line_uom THEN
5755
5756 IF p_toplevel_lines.weight_uom = x_pricing_engine_rows(j).line_uom THEN
5757
5758 l_container_working_weight := GREATEST(g_shipment_line_rows(p_toplevel_lines.content_id).gross_weight,x_pricing_engine_rows(j).line_quantity + p_toplevel_lines.gross_weight);
5759
5760 ELSE
5761
5762 l_container_working_weight := GREATEST(g_shipment_line_rows(p_toplevel_lines.content_id).gross_weight,x_pricing_engine_rows(j).line_quantity +
5763 WSH_WV_UTILS.convert_uom(p_toplevel_lines.weight_uom,
5764 x_pricing_engine_rows(j).line_uom,
5765 p_toplevel_lines.gross_weight,
5766 0) ); -- Within same UOM class
5767
5768 END IF;
5769
5770 ELSE
5771
5772 IF p_toplevel_lines.weight_uom = x_pricing_engine_rows(j).line_uom THEN
5773
5774 l_container_working_weight := GREATEST(
5775 WSH_WV_UTILS.convert_uom(g_shipment_line_rows(p_toplevel_lines.content_id).weight_uom_code,
5776 x_pricing_engine_rows(j).line_uom,
5777 g_shipment_line_rows(p_toplevel_lines.content_id).gross_weight,
5778 0),x_pricing_engine_rows(j).line_quantity + p_toplevel_lines.gross_weight);
5779
5780
5781 ELSE
5782
5783 l_container_working_weight := GREATEST(
5784 WSH_WV_UTILS.convert_uom(g_shipment_line_rows(p_toplevel_lines.content_id).weight_uom_code,
5785 x_pricing_engine_rows(j).line_uom,
5786 g_shipment_line_rows(p_toplevel_lines.content_id).gross_weight,
5787 0),x_pricing_engine_rows(j).line_quantity +
5788 WSH_WV_UTILS.convert_uom(p_toplevel_lines.weight_uom,
5789 x_pricing_engine_rows(j).line_uom,
5790 p_toplevel_lines.gross_weight,
5791 0)); -- Within same UOM class
5792
5793 END IF;
5794
5795 END IF;
5796
5797 x_pricing_engine_rows(j).line_quantity := l_container_working_weight;
5798
5799 ELSE
5800
5801 -- uom conversion TODO
5802 IF p_toplevel_lines.weight_uom = x_pricing_engine_rows(j).line_uom THEN
5803 x_pricing_engine_rows(j).line_quantity := x_pricing_engine_rows(j).line_quantity + p_toplevel_lines.gross_weight ;
5804 ELSE
5805 x_pricing_engine_rows(j).line_quantity := x_pricing_engine_rows(j).line_quantity +
5806 WSH_WV_UTILS.convert_uom(p_toplevel_lines.weight_uom,
5807 x_pricing_engine_rows(j).line_uom,
5808 p_toplevel_lines.gross_weight,
5809 0); -- Within same UOM class
5810
5811 END IF;
5812 END IF;
5813
5814 ELSIF x_pricing_engine_rows(j).basis = G_VOLUME_BASIS THEN
5815
5816 IF nvl(g_shipment_line_rows(p_toplevel_lines.content_id).volume,0) <> 0 THEN
5817
5818 -- uom conversion TODO ?
5819 IF g_shipment_line_rows(p_toplevel_lines.content_id).volume_uom_code = x_pricing_engine_rows(j).line_uom THEN
5820
5821 l_container_working_volume := GREATEST(g_shipment_line_rows(p_toplevel_lines.content_id).volume,x_pricing_engine_rows(j).line_quantity);
5822
5823 ELSE
5824
5825 l_container_working_volume := GREATEST(
5826 WSH_WV_UTILS.convert_uom(g_shipment_line_rows(p_toplevel_lines.content_id).volume_uom_code,
5827 x_pricing_engine_rows(j).line_uom,
5828 g_shipment_line_rows(p_toplevel_lines.content_id).volume,
5829 0),x_pricing_engine_rows(j).line_quantity);
5830
5831 END IF;
5832
5833 x_pricing_engine_rows(j).line_quantity := l_container_working_volume;
5834
5835 ELSE -- For Volume basis we consider either container volume or if it is not there
5836 -- sum of the rolled up lines' volume
5837 -- Rolled up lines' volume can't be added to container's unit volume in this case
5838
5839 NULL;
5840
5841 END IF;
5842 END IF;
5843 x_pricing_engine_rows(j).basis := NULL;
5844 END IF;
5845 --x_pricing_engine_rows(j).basis := NULL;
5846
5847 -- }
5848 END IF;
5849 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Created engine row '||j||' with quantity : '||x_pricing_engine_rows(j).line_quantity||x_pricing_engine_rows(j).line_uom);
5850
5851 EXIT WHEN j = x_pricing_engine_rows.LAST;
5852 j := x_pricing_engine_rows.NEXT(j);
5853 -- }
5854 END LOOP;
5858 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Could not create any engine row for Container : '||p_toplevel_lines.content_id);
5855 -- }
5856 ELSE
5857 -- {
5859 raise FTE_FREIGHT_PRICING_UTIL.g_no_enginerow_created;
5860 -- }
5861 END IF;
5862 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'create_new_instance');
5863
5864 EXCEPTION
5865 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_enginerow_created THEN
5866 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5867 FTE_FREIGHT_PRICING_UTIL.set_exception('create_new_instance',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_enginerow_created');
5868 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'create_new_instance');
5869 WHEN others THEN
5870 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5871 FTE_FREIGHT_PRICING_UTIL.set_exception('create_new_instance',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
5872 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
5873 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'create_new_instance');
5874 END create_new_instance;
5875
5876 -- This procedure should be called to add a pattern to a matched instance
5877 -- The calling procedure takes care of creating pattern_row and modifying dual_instance_row
5878 -- This procedure might need to create new engine rows and associated attribute rows
5879 -- for any new category in case of 'WITHIN' and for new basis and new category in existing basis
5880 -- in case of ACROSS
5881 -- It is called for a top level container for which a matching instance has already been found
5882 -- Can be called for both Single-commodity and multi-commodity (ie. for all patterns)
5883
5884 PROCEDURE add_to_instance (
5885 p_container_flag IN VARCHAR2 DEFAULT 'Y', -- new for loose item
5886 p_rolled_up_lines IN rolledup_line_tab_type,
5887 p_matching_instance_index IN NUMBER,
5888 p_aggregation IN VARCHAR2,
5889 p_objective IN VARCHAR2,
5890 x_pricing_engine_rows IN OUT NOCOPY pricing_engine_input_tab_type,
5891 x_pricing_attribute_rows IN OUT NOCOPY pricing_attribute_tab_type,
5892 x_return_status OUT NOCOPY VARCHAR2 )
5893 IS
5894 l_unmatched_categories basis_categ_tab_type;
5895 l_unmatched_basis quantity_tab_type;
5896 l_unmatched_bascateg basis_categ_tab_type;
5897 l_unmatched_categ quantity_basis_tab_type;
5898 l_basis_sum quantity_tab_type;
5899 l_hash_string VARCHAR2(50);
5900 l_hash_value NUMBER;
5901 l_engine_categ quantity_tab_type;
5902 l_engine_basis quantity_tab_type;
5903 l_engine_bas_categ basis_categ_tab_type;
5904 i NUMBER:=0;
5905 j NUMBER:=0;
5906 k NUMBER:=0;
5907 l NUMBER:=0;
5908 m NUMBER:=0;
5909 n NUMBER:=0;
5910 l_input_index NUMBER;
5911 l_attribute_index NUMBER;
5912
5913 -- to fix bug 2739329
5914 l_consumed_rollup_det wsh_util_core.id_tab_type;
5915
5916 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
5917
5918 BEGIN
5919
5920 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5921 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
5922 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'add_to_instance','start');
5923
5924 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5925 'Parameters :');
5926 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5927 ' p_container_flag = '||p_container_flag);
5928 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5929 ' p_matching_instance_index = '||p_matching_instance_index);
5930 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5931 ' x_pricing_engine_rows.COUNT = '||x_pricing_engine_rows.COUNT);
5932 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5933 ' p_aggregation = '||p_aggregation);
5934
5935 i := x_pricing_engine_rows.FIRST;
5936 LOOP
5937 -- {
5938 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 1 ');
5939
5940 -- IF x_pricing_engine_rows(i).loose_item_id IS NULL THEN -- Search/ADD only for containers
5941 -- IF (( p_container_flag = 'Y' AND x_pricing_engine_rows(i).loose_item_id IS NULL)
5942 -- OR (p_container_flag = 'N' AND x_pricing_engine_rows(i).loose_item_id IS NOT NULL)) THEN -- Search/ADD only for containers, or only for loose items
5943 --IF (( p_container_flag = 'Y' AND x_pricing_engine_rows(i).loose_item_flag = 'N')
5944 -- OR (p_container_flag = 'N' AND x_pricing_engine_rows(i).loose_item_flag = 'Y' )) THEN -- Search/ADD only for containers, or only for loose items
5945 -- don't mix loose items and containers
5946 -- {
5947 IF x_pricing_engine_rows(i).instance_index = p_matching_instance_index THEN
5948 -- {
5949 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Adding to instance index : '||p_matching_instance_index);
5950 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5951 'x_pricing_engine_rows=> i = '||i);
5955 IF p_aggregation = 'WITHIN' THEN
5952 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5953 'x_pricing_engine_rows=> category_id = '||x_pricing_engine_rows(i).category_id);
5954
5956 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 2 ');
5957 -- To store unique list of category ids for matching engine rows
5958 IF NOT l_engine_categ.EXISTS(x_pricing_engine_rows(i).category_id) THEN
5959 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 3 ');
5960 l_engine_categ(x_pricing_engine_rows(i).category_id).quantity := x_pricing_engine_rows(i).line_quantity;
5961 l_engine_categ(x_pricing_engine_rows(i).category_id).uom := x_pricing_engine_rows(i).line_uom;
5962 END IF;
5963 ELSIF p_aggregation = 'ACROSS' THEN
5964
5965 IF NOT l_engine_basis.EXISTS(x_pricing_engine_rows(i).basis) THEN
5966 l_engine_basis(x_pricing_engine_rows(i).basis).quantity := x_pricing_engine_rows(i).line_quantity;
5967 l_engine_basis(x_pricing_engine_rows(i).basis).uom := x_pricing_engine_rows(i).line_uom;
5968 END IF;
5969
5970 -- Is it required for Pricing Objective = NULL
5971 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Across - creating hash');
5972 l_hash_string := CONCAT(TO_CHAR(x_pricing_engine_rows(i).basis),TO_CHAR(x_pricing_engine_rows(i).category_id));
5973 l_hash_value := dbms_utility.get_hash_value(
5974 name => l_hash_string,
5975 base => g_hash_base,
5976 hash_size =>g_hash_size );
5977
5978 IF NOT l_engine_bas_categ.EXISTS(l_hash_value) THEN
5979 l_engine_bas_categ(l_hash_value).basis := x_pricing_engine_rows(i).basis;
5980 l_engine_bas_categ(l_hash_value).category_id := x_pricing_engine_rows(i).category_id;
5981 END IF;
5982 END IF;
5983
5984 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 4 ');
5985
5986 j := p_rolled_up_lines.FIRST;
5987 LOOP
5988 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 5 ');
5989 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5990 'p_rolled_up_lines=> j ='||j);
5991 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
5992 'p_rolled_up_lines=> category_id ='||p_rolled_up_lines(j).category_id);
5993
5994 IF p_aggregation = 'WITHIN' THEN
5995 -- Need to add quantities to the correct category
5996 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 6 ');
5997
5998 IF x_pricing_engine_rows(i).category_id = p_rolled_up_lines(j).category_id THEN
5999 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 7 ');
6000 IF l_unmatched_categ.EXISTS(p_rolled_up_lines(j).category_id) THEN
6001 l_unmatched_categ.DELETE(p_rolled_up_lines(j).category_id);
6002 END IF;
6003 IF p_rolled_up_lines(j).line_uom <> x_pricing_engine_rows(i).line_uom THEN
6004 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 8 ');
6005 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Within matching category uom conversion');
6006
6007 x_pricing_engine_rows(i).line_quantity := x_pricing_engine_rows(i).line_quantity +
6008 WSH_WV_UTILS.convert_uom(p_rolled_up_lines(j).line_uom,
6009 x_pricing_engine_rows(i).line_uom,
6010 p_rolled_up_lines(j).line_quantity,
6011 0); -- Within same UOM class
6012 ELSE
6013 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 8 ');
6014 x_pricing_engine_rows(i).line_quantity := x_pricing_engine_rows(i).line_quantity +
6015 p_rolled_up_lines(j).line_quantity;
6016 END IF;
6017 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
6018 'x_pricing_engine_rows=>line_quantity='||x_pricing_engine_rows(i).line_quantity);
6019 ELSE -- Populate new categories table
6020 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 9 ');
6021 --IF NOT l_unmatched_categ.EXISTS(p_rolled_up_lines(j).category_id) THEN
6022 IF (NOT l_engine_categ.EXISTS(p_rolled_up_lines(j).category_id)) AND (NOT l_unmatched_categ.EXISTS(p_rolled_up_lines(j).category_id)) THEN
6023 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 10 ');
6024 l_unmatched_categ(p_rolled_up_lines(j).category_id).basis := p_rolled_up_lines(j).rate_basis;
6025 l_unmatched_categ(p_rolled_up_lines(j).category_id).quantity := p_rolled_up_lines(j).line_quantity;
6026 l_unmatched_categ(p_rolled_up_lines(j).category_id).uom := p_rolled_up_lines(j).line_uom;
6027 -- begin fix bug 2739329
6028 -- everytime an entry is created in l_unmatched_categ, keep track of rollup lines
6029 -- so that we don't sum the same delivery detail again and again
6033 ELSE -- Sum up quantity within the new category
6030 l_consumed_rollup_det(p_rolled_up_lines(j).delivery_detail_id) := p_rolled_up_lines(j).delivery_detail_id;
6031 -- end fix
6032
6034 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 11 ');
6035
6036 -- begin fix bug 2739329
6037 IF (NOT l_consumed_rollup_det.EXISTS(p_rolled_up_lines(j).delivery_detail_id) ) THEN
6038 -- end fix
6039 IF l_unmatched_categ.EXISTS(p_rolled_up_lines(j).category_id) THEN
6040 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 12 ');
6041 IF p_rolled_up_lines(j).line_uom <> l_unmatched_categ(p_rolled_up_lines(j).category_id).uom THEN
6042 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 13 ');
6043 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Within new category uom conversion');
6044
6045 l_unmatched_categ(p_rolled_up_lines(j).category_id).quantity :=
6046 l_unmatched_categ(p_rolled_up_lines(j).category_id).quantity +
6047 WSH_WV_UTILS.convert_uom(p_rolled_up_lines(j).line_uom,
6048 l_unmatched_categ(p_rolled_up_lines(j).category_id).uom,
6049 p_rolled_up_lines(j).line_quantity,
6050 0); -- Within same UOM class
6051 ELSE
6052 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 13 ');
6053 l_unmatched_categ(p_rolled_up_lines(j).category_id).quantity :=
6054 l_unmatched_categ(p_rolled_up_lines(j).category_id).quantity +
6055 p_rolled_up_lines(j).line_quantity;
6056 END IF;
6057
6058 END IF;
6059 -- begin fix bug 2739329
6060 END IF;
6061 -- end fix
6062
6063 END IF;
6064 END IF;
6065 ELSE -- p_aggregation = 'ACROSS'
6066 -- Add quantities within same basis
6067 -- If there is no pricing objective send only one line per basis
6068 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 14 ');
6069
6070 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Engine row category : '||x_pricing_engine_rows(i).category_id);
6071 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'rolledup line category : '||p_rolled_up_lines(j).category_id);
6072 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Engine row basis : '||x_pricing_engine_rows(i).basis);
6073 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'rolledup line basis : '||p_rolled_up_lines(j).rate_basis);
6074
6075 l_hash_string := CONCAT(TO_CHAR(p_rolled_up_lines(j).rate_basis),TO_CHAR(p_rolled_up_lines(j).category_id));
6076 l_hash_value := dbms_utility.get_hash_value(
6077 name => l_hash_string,
6078 base => g_hash_base,
6079 hash_size =>g_hash_size );
6080
6081 IF x_pricing_engine_rows(i).basis = p_rolled_up_lines(j).rate_basis THEN
6082 -- Problem if there is NULL basis in engine row
6083
6084 IF l_unmatched_basis.EXISTS(p_rolled_up_lines(j).rate_basis) THEN
6085 l_unmatched_basis.DELETE(p_rolled_up_lines(j).rate_basis);
6086 END IF;
6087
6088 -- Might need to create new engine rows if new categories (within the same basis) come up
6089 -- Only if pricing objective is not null
6090
6091 IF x_pricing_engine_rows(i).category_id IS NOT NULL THEN
6092 IF x_pricing_engine_rows(i).category_id <> p_rolled_up_lines(j).category_id AND
6093 p_objective IS NOT NULL THEN
6094
6095 --IF NOT l_unmatched_categories.EXISTS(p_rolled_up_lines(j).category_id) THEN
6096 IF (NOT l_engine_bas_categ.EXISTS(l_hash_value)) AND (NOT l_unmatched_categories.EXISTS(p_rolled_up_lines(j).category_id)) THEN
6097
6098 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Adding unmatched category : '||p_rolled_up_lines(j).category_id);
6099
6100 l_unmatched_categories(p_rolled_up_lines(j).category_id).category_id := p_rolled_up_lines(j).category_id;
6101 l_unmatched_categories(p_rolled_up_lines(j).category_id).basis := x_pricing_engine_rows(i).basis;
6102 END IF;
6103 ELSE
6104 IF l_unmatched_categories.EXISTS(p_rolled_up_lines(j).category_id) THEN
6105 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Deleting from unmatched category : '||p_rolled_up_lines(j).category_id);
6106 l_unmatched_categories.DELETE(p_rolled_up_lines(j).category_id);
6107 END IF;
6108 END IF;
6109 END IF;
6110
6111 IF p_rolled_up_lines(j).line_uom <> x_pricing_engine_rows(i).line_uom THEN
6112 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Within matching basis uom conversion');
6113
6114 x_pricing_engine_rows(i).line_quantity := x_pricing_engine_rows(i).line_quantity +
6115 WSH_WV_UTILS.convert_uom(p_rolled_up_lines(j).line_uom,
6119 ELSE
6116 x_pricing_engine_rows(i).line_uom,
6117 p_rolled_up_lines(j).line_quantity,
6118 0); -- Within same UOM class
6120 x_pricing_engine_rows(i).line_quantity := x_pricing_engine_rows(i).line_quantity +
6121 p_rolled_up_lines(j).line_quantity;
6122 END IF;
6123 ELSE -- Populate new basis table
6124
6125 --IF NOT l_unmatched_basis.EXISTS(p_rolled_up_lines(j).rate_basis) THEN
6126 IF (NOT l_engine_basis.EXISTS(p_rolled_up_lines(j).rate_basis)) AND (NOT l_unmatched_basis.EXISTS(p_rolled_up_lines(j).rate_basis)) THEN
6127
6128 IF l_unmatched_basis.EXISTS(p_rolled_up_lines(j).rate_basis) THEN
6129 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).quantity := p_rolled_up_lines(j).line_quantity;
6130 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).uom := p_rolled_up_lines(j).line_uom;
6131 END IF;
6132 ELSE -- Sum up quantity within the new basis
6133 -- Might need to create new engine rows if new categories (within this new basis) come up
6134 -- Only if pricing objective is not null
6135
6136 IF l_unmatched_basis.EXISTS(p_rolled_up_lines(j).rate_basis) THEN
6137 --IF NOT l_unmatched_bascateg.EXISTS(p_rolled_up_lines(j).category_id) AND
6138 IF NOT l_unmatched_bascateg.EXISTS(l_hash_value) AND
6139 p_objective IS NOT NULL THEN
6140 -- It could have been okay to index the following on category_id as well
6141 -- because more than one different bases can never
6142 -- have any common categories
6143 -- We are using l_hash_value to index to be on the safer side
6144
6145 l_unmatched_bascateg(l_hash_value).category_id := p_rolled_up_lines(j).category_id;
6146 l_unmatched_bascateg(l_hash_value).basis := p_rolled_up_lines(j).rate_basis;
6147 END IF;
6148
6149 IF p_rolled_up_lines(j).line_uom <> l_unmatched_basis(p_rolled_up_lines(j).rate_basis).uom THEN
6150 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Within new basis uom conversion');
6151
6152 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).quantity :=
6153 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).quantity +
6154 WSH_WV_UTILS.convert_uom(p_rolled_up_lines(j).line_uom,
6155 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).uom,
6156 p_rolled_up_lines(j).line_quantity,
6157 0); -- Within same UOM class
6158 ELSE
6159 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).quantity :=
6160 l_unmatched_basis(p_rolled_up_lines(j).rate_basis).quantity +
6161 p_rolled_up_lines(j).line_quantity;
6162 END IF;
6163 END IF;
6164 END IF;
6165 END IF;
6166
6167 END IF;
6168 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 15 ');
6169
6170 EXIT WHEN j = p_rolled_up_lines.LAST;
6171 j := p_rolled_up_lines.NEXT(j);
6172 END LOOP;
6173 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 16 ');
6174
6175 -- ACROSS : Handling new categories within existing basis
6176 IF l_unmatched_categories.COUNT > 0 AND NOT l_basis_sum.EXISTS(x_pricing_engine_rows(i).basis) THEN
6177 l_basis_sum(x_pricing_engine_rows(i).basis).quantity := x_pricing_engine_rows(i).line_quantity;
6178 l_basis_sum(x_pricing_engine_rows(i).basis).uom := x_pricing_engine_rows(i).line_uom;
6179 END IF;
6180
6181 -- }
6182 END IF;
6183 -- }
6184 --END IF;
6185
6186 EXIT WHEN i = x_pricing_engine_rows.LAST;
6187 i := x_pricing_engine_rows.NEXT(i);
6188 -- }
6189 END LOOP;
6190
6191 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 17 ');
6192 -- ACROSS : Handling new categories within existing basis
6193 IF l_unmatched_categories.COUNT > 0 AND p_aggregation = 'ACROSS' THEN
6194 k := l_unmatched_categories.FIRST;
6195 LOOP
6196
6197 l_input_index := x_pricing_engine_rows.COUNT + 1;
6198 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index||' with category id : '||l_unmatched_categories(k).category_id);
6199 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
6200 x_pricing_engine_rows(l_input_index).instance_index := p_matching_instance_index;
6201 x_pricing_engine_rows(l_input_index).category_id := l_unmatched_categories(k).category_id;
6202 x_pricing_engine_rows(l_input_index).basis := l_unmatched_categories(k).basis;
6203 x_pricing_engine_rows(l_input_index).line_quantity := l_basis_sum(l_unmatched_categories(k).basis).quantity;
6204 x_pricing_engine_rows(l_input_index).line_uom := l_basis_sum(l_unmatched_categories(k).basis).uom;
6205 -- new code for loose items
6206 IF (p_container_flag = 'N') THEN
6210 l_attribute_index := x_pricing_attribute_rows.COUNT + 1;
6207 x_pricing_engine_rows(l_input_index).loose_item_flag := 'Y';
6208 END IF;
6209
6211 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
6212 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
6213 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CATEGORY_ID';
6214 x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(l_unmatched_categories(k).category_id);
6215
6216
6217 EXIT WHEN k = l_unmatched_categories.LAST;
6218 k := l_unmatched_categories.NEXT(k);
6219 END LOOP;
6220 END IF;
6221
6222 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 18 ');
6223 -- WITHIN : Handling new categories
6224 IF l_unmatched_categ.COUNT > 0 AND p_aggregation = 'WITHIN' THEN
6225 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 19 ');
6226 l := l_unmatched_categ.FIRST;
6227 LOOP
6228
6229 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 20 ');
6230 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
6231 'l_unmatched_categ => l=category_id='||l);
6232 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
6233 'l_unmatched_categ=>quantity='||l_unmatched_categ(l).quantity);
6234 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
6235 'l_unmatched_categ=>uom='||l_unmatched_categ(l).uom);
6236 l_input_index := x_pricing_engine_rows.COUNT + 1;
6237 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index);
6238 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
6239 x_pricing_engine_rows(l_input_index).instance_index := p_matching_instance_index;
6240 x_pricing_engine_rows(l_input_index).category_id := l;
6241 --x_pricing_engine_rows(l_input_index).basis := l_unmatched_categories(k).basis;
6242 -- Need to put the correct category id
6243 -- l_unmatched_categ rectype needs to include basis also
6244 x_pricing_engine_rows(l_input_index).basis := l_unmatched_categ(l).basis;
6245 x_pricing_engine_rows(l_input_index).line_quantity := l_unmatched_categ(l).quantity;
6246 x_pricing_engine_rows(l_input_index).line_uom := l_unmatched_categ(l).uom;
6247 -- new code for loose items
6248 IF (p_container_flag = 'N') THEN
6249 x_pricing_engine_rows(l_input_index).loose_item_flag := 'Y';
6250 END IF;
6251 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 21 ');
6252
6253 l_attribute_index := x_pricing_attribute_rows.COUNT + 1;
6254 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
6255 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
6256 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CATEGORY_ID';
6257 x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(l);
6258
6259
6260 EXIT WHEN l = l_unmatched_categ.LAST;
6261 l := l_unmatched_categ.NEXT(l);
6262 END LOOP;
6263 END IF;
6264 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG, '>>> 22 ');
6265
6266 -- ACROSS : Handling new basis
6267 IF l_unmatched_basis.COUNT > 0 AND p_aggregation = 'ACROSS' THEN
6268 m := l_unmatched_basis.FIRST;
6269 LOOP
6270
6271 IF l_unmatched_bascateg.COUNT > 0 THEN
6272 -- ACROSS : Handling individual categories in the new basis
6273 n := l_unmatched_bascateg.FIRST;
6274 LOOP
6275
6276 l_input_index := x_pricing_engine_rows.COUNT + 1;
6277 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index||' with basis : '||m);
6278 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
6279 x_pricing_engine_rows(l_input_index).instance_index := p_matching_instance_index;
6280 --x_pricing_engine_rows(l_input_index).category_id := n;
6281 x_pricing_engine_rows(l_input_index).category_id := l_unmatched_bascateg(n).category_id;
6282 x_pricing_engine_rows(l_input_index).basis := m;
6283 x_pricing_engine_rows(l_input_index).line_quantity := l_unmatched_basis(m).quantity;
6284 x_pricing_engine_rows(l_input_index).line_uom := l_unmatched_basis(m).uom;
6285 -- new code for loose items
6286 IF (p_container_flag = 'N') THEN
6287 x_pricing_engine_rows(l_input_index).loose_item_flag := 'Y';
6288 END IF;
6289
6290 l_attribute_index := x_pricing_attribute_rows.COUNT + 1;
6291 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
6292 x_pricing_attribute_rows(l_attribute_index).input_index := l_input_index;
6293 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'CATEGORY_ID';
6294 --x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(n);
6295 x_pricing_attribute_rows(l_attribute_index).attribute_value := TO_CHAR(l_unmatched_bascateg(n).category_id);
6296
6297 EXIT WHEN n = l_unmatched_bascateg.LAST;
6298 n := l_unmatched_bascateg.NEXT(n);
6299 END LOOP;
6300 ELSE
6301 l_input_index := x_pricing_engine_rows.COUNT + 1;
6305 x_pricing_engine_rows(l_input_index).basis := m;
6302 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Creating engine row : '||l_input_index);
6303 x_pricing_engine_rows(l_input_index).input_index := l_input_index;
6304 x_pricing_engine_rows(l_input_index).instance_index := p_matching_instance_index;
6306 x_pricing_engine_rows(l_input_index).line_quantity := l_unmatched_basis(m).quantity;
6307 x_pricing_engine_rows(l_input_index).line_uom := l_unmatched_basis(m).uom;
6308 -- new code for loose items
6309 IF (p_container_flag = 'N') THEN
6310 x_pricing_engine_rows(l_input_index).loose_item_flag := 'Y';
6311 END IF;
6312
6313 END IF;
6314
6315 /*
6316 IF l_unmatched_basis.COUNT = 1 THEN
6317 x_pricing_engine_rows(l_input_index).basis := NULL;
6318 END IF;
6319 */
6320
6321 EXIT WHEN m = l_unmatched_basis.LAST;
6322 m := l_unmatched_basis.NEXT(m);
6323 END LOOP;
6324 END IF;
6325 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'add_to_instance');
6326
6327 EXCEPTION
6328 WHEN others THEN
6329 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6330 FTE_FREIGHT_PRICING_UTIL.set_exception('add_to_instance',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
6331 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
6332 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'add_to_instance');
6333 END add_to_instance;
6334
6335 -- This procedure looks up the delivery lines in each of the input content rows and
6336 -- based on the commodity/freight class and pricing basis determines pattern for each
6337 -- It then acknowledges all the patterns and looks up pricing dual from the preferences
6338 -- table for each of them. It consolidates dual instances if possible and formulates input lines
6339 -- For mixed commodity patterns considers pricing objective
6340 -- Looks up delivery detail isnfo from g_shipment_line_rows
6341
6342 PROCEDURE process_shipment_pattern (
6343 p_classification_code IN VARCHAR2, -- Is this right datatype ?
6344 p_lane_basis IN VARCHAR2,
6345 p_lane_id IN NUMBER,
6346 p_carrier_id IN NUMBER,
6347 p_service_code IN VARCHAR2,
6348 p_shpmnt_toplevel_rows IN OUT NOCOPY shpmnt_content_tab_type,
6349 p_shpmnt_toplevel_charges IN addl_services_tab_type, -- Top level requested additional services
6350 x_pricing_dual_instances OUT NOCOPY pricing_dual_instance_tab_type,
6351 x_pricing_engine_rows OUT NOCOPY pricing_engine_input_tab_type,
6352 x_pattern_rows OUT NOCOPY top_level_pattern_tab_type,
6353 x_pricing_attribute_rows OUT NOCOPY pricing_attribute_tab_type, -- Probably not required/required for line level attributes like category/hazard/container_type ?
6354 x_return_status OUT NOCOPY VARCHAR2 )
6355 IS
6356
6357 i NUMBER:=0;
6358 j NUMBER:=0;
6359 k NUMBER:=0;
6360 l NUMBER:=0;
6361 m NUMBER:=0;
6362 l_prev_categ NUMBER:=NULL;
6363 l_prev_basis NUMBER:=NULL;
6364 l_num_basis NUMBER:=NULL;
6365 l_basis VARCHAR2(30):=NULL;
6366 l_wt_basis_count NUMBER:=0;
6367 l_vol_basis_count NUMBER:=0;
6368 l_cont_basis_count NUMBER:=0;
6369 l_pattern_no NUMBER:=0;
6370 l_pattern_name VARCHAR2(30);
6371 l_services_hash VARCHAR2(100):=NULL;
6372 l_lane_function VARCHAR2(30);
6373 l_grouping_level VARCHAR2(30);
6374 l_aggregation VARCHAR2(30);
6375 l_pricing_objective VARCHAR2(30);
6376 l_mixed_categ VARCHAR2(1):='N';
6377 l_mixed_basis VARCHAR2(1):='N';
6378 l_return_status VARCHAR2(1);
6379 l_pattern_index NUMBER:=0;
6380 l_count_pattern NUMBER:=0;
6381 l_instance_count NUMBER:=0;
6382 l_input_index NUMBER:=0;
6383 l_attribute_index NUMBER:=0;
6384 l_category_id NUMBER:=0;
6385 l_instance_index NUMBER:=0;
6386 l_matched_instance_index NUMBER:=0;
6387 l_curr_engine_row_count NUMBER:=0;
6388 l_curr_attribute_count NUMBER:=0;
6389 l_rolledup_lines rolledup_line_tab_type;
6390 l_rolledup_category_rows WSH_UTIL_CORE.id_tab_type;
6391 l_rolledup_category_basis WSH_UTIL_CORE.id_tab_type;
6392
6393 l_rolledup_rec rolledup_line_rec_type;
6394
6395 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_INF;
6396
6397 BEGIN
6398 -- {
6399
6400 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6401 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
6402 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'process_shipment_pattern','start');
6403
6404 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Inside process_shipment_pattern .Before initialization');
6405
6406
6407
6408
6409 FTE_FREIGHT_PRICING_SPECIAL.initialize(
6410 p_lane_id => p_lane_id,
6411 x_lane_function => l_lane_function,
6415 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6412 x_return_status => l_return_status);
6413
6414 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6416 raise FTE_FREIGHT_PRICING_UTIL.g_initialize_failed;
6417 END IF;
6418 ELSE -- What happens if there is an empty container ?
6419 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Parameters and Rules for lane : '||p_lane_id||' has been looked up');
6420 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Lane Function : '||l_lane_function);
6421 END IF;
6422
6423 g_rolledup_lines.DELETE;
6424 i := p_shpmnt_toplevel_rows.FIRST; -- Catch empty delivery exception
6425 LOOP
6426 -- {
6427 l_wt_basis_count := 0 ;
6428 l_vol_basis_count := 0 ;
6429 l_cont_basis_count := 0 ;
6430 l_prev_categ := 0;
6431 l_prev_basis := 0;
6432 l_matched_instance_index := 0;
6433 l_mixed_categ := 'N';
6434 l_mixed_basis := 'N';
6435 l_grouping_level := NULL;
6436 l_aggregation := NULL;
6437 l_pricing_objective := NULL;
6438 l_services_hash := NULL;
6439
6440 l_rolledup_category_rows.DELETE;
6441 l_rolledup_category_basis.DELETE;
6442
6443 l_curr_engine_row_count := x_pricing_engine_rows.COUNT;
6444 l_curr_attribute_count := x_pricing_attribute_rows.COUNT;
6445
6446 IF ((p_shpmnt_toplevel_rows(i).container_flag = 'Y') OR (p_shpmnt_toplevel_rows(i).container_flag = 'C')) THEN
6447 -- {
6448 l_rolledup_lines.DELETE;
6449
6450 rollup_container_hierarchy(
6451 p_container_id => p_shpmnt_toplevel_rows(i).content_id,
6452 p_classification_code => p_classification_code,
6453 p_lane_basis => p_lane_basis,
6454 p_lane_id => p_lane_id,
6455 x_rolledup_lines => l_rolledup_lines,
6456 x_return_status => l_return_status);
6457
6458 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6459 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6460 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Container '||p_shpmnt_toplevel_rows(i).content_id);
6461 raise FTE_FREIGHT_PRICING_UTIL.g_rollup_container_failed;
6462 END IF;
6463 ELSE -- What happens if there is an empty container ?
6464 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Container '||p_shpmnt_toplevel_rows(i).content_id||' has '||l_rolledup_lines.COUNT||' rolled up lines');
6465 END IF;
6466
6467 IF l_rolledup_lines.COUNT = 0 THEN
6468 goto nextpass;
6469 END IF;
6470
6471 j := l_rolledup_lines.FIRST;
6472 LOOP
6473 -- {
6474 l_rolledup_lines(j).master_container_id := p_shpmnt_toplevel_rows(i).content_id;
6475 g_rolledup_lines(j).master_container_id := p_shpmnt_toplevel_rows(i).content_id;
6476
6477 IF nvl(l_rolledup_lines(j).line_quantity,0) = 0 THEN
6478
6479 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' Rolled up line : '||j||' has line quantity = 0');
6480 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_line_quantity;
6481
6482 END IF;
6483
6484 IF l_rolledup_lines(j).rate_basis = G_WEIGHT_BASIS THEN
6485 l_wt_basis_count := l_wt_basis_count + 1;
6486 ELSIF l_rolledup_lines(j).rate_basis = G_VOLUME_BASIS THEN
6487 l_vol_basis_count := l_vol_basis_count + 1;
6488 ELSIF l_rolledup_lines(j).rate_basis = G_CONTAINER_BASIS THEN
6489 l_cont_basis_count := l_cont_basis_count + 1;
6490 END IF;
6491
6492
6493 IF j <> l_rolledup_lines.FIRST THEN
6494 -- {
6495
6496 IF l_rolledup_lines(j).category_id <> l_prev_categ THEN
6497 l_mixed_categ := 'Y';
6498 l_prev_categ := l_rolledup_lines(j).category_id;
6499 IF NOT l_rolledup_category_rows.EXISTS(l_rolledup_lines(j).category_id) THEN
6500 l_rolledup_category_rows(l_rolledup_lines(j).category_id) := l_rolledup_lines(j).category_id;
6501 END IF;
6502 -- To be used for searching instances
6503 END IF;
6504
6505 IF l_rolledup_lines(j).rate_basis <> l_prev_basis THEN
6506 l_mixed_basis := 'Y';
6507 l_prev_basis := l_rolledup_lines(j).rate_basis;
6508 IF NOT l_rolledup_category_basis.EXISTS(l_rolledup_lines(j).rate_basis) THEN
6509 l_rolledup_category_basis(l_rolledup_lines(j).rate_basis) := l_rolledup_lines(j).rate_basis;
6510 END IF;
6511 END IF;
6512
6513 -- }
6514 ELSE -- First pass
6515 -- {
6516
6517 l_rolledup_category_rows(l_rolledup_lines(j).category_id) := l_rolledup_lines(j).category_id;
6518 l_rolledup_category_basis(l_rolledup_lines(j).rate_basis) := l_rolledup_lines(j).rate_basis;
6519 l_prev_categ := l_rolledup_lines(j).category_id;
6520 l_prev_basis := l_rolledup_lines(j).rate_basis;
6521
6522 -- }
6523 END IF;
6524
6525
6526 EXIT WHEN j = l_rolledup_lines.LAST;
6527 j := l_rolledup_lines.NEXT(j);
6528
6529 -- }
6533
6530 END LOOP;
6531
6532 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Before Applying Dimensional Weight');
6534 -- Apply dimensional weight to the applicable l_rolledup_lines here per top level container
6535
6536 FTE_FREIGHT_PRICING_SPECIAL.apply_dimensional_weight (
6537 p_lane_id => p_lane_id,
6538 p_carrier_id => p_carrier_id,
6539 p_service_code => p_service_code,
6540 p_top_level_rec => p_shpmnt_toplevel_rows(i),
6541 p_rolledup_rows => l_rolledup_lines,
6542 x_return_status => l_return_status );
6543
6544 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6545 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6546 raise FTE_FREIGHT_PRICING_UTIL.g_dimensional_weight_failed;
6547 END IF;
6548 END IF;
6549
6550 -- Process l_rolledup_lines here per top level container
6551 -- Identify the package pattern
6552 -- Determine value of l_pattern_name conforming to fte_prc_parameter_defaults.PARAMETER_SUB_TYPE
6553 -- looking at l_mixed_categ, l_mixed_basis,l_wt_basis_count,l_cont_basis_count,l_vol_basis_count
6554
6555 IF l_mixed_categ = 'N' THEN -- Single commodity will have l_mixed_basis = 'N'
6556 IF l_cont_basis_count > 0 THEN
6557 l_pattern_no := G_PATTERN_1;
6558 l_pattern_name := G_PATTERN_1_NAME;
6559 ELSIF l_wt_basis_count > 0 THEN
6560 l_pattern_no := G_PATTERN_2;
6561 l_pattern_name := G_PATTERN_2_NAME;
6562 ELSIF l_vol_basis_count > 0 THEN
6563 l_pattern_no := G_PATTERN_3;
6564 l_pattern_name := G_PATTERN_3_NAME;
6565 END IF;
6566 ELSE -- Mixed commodity
6567 IF l_mixed_basis = 'N' THEN -- Same basis
6568 IF l_cont_basis_count > 0 THEN
6569 l_pattern_no := G_PATTERN_4;
6570 l_pattern_name := G_PATTERN_4_NAME;
6571 ELSIF l_wt_basis_count > 0 THEN
6572 l_pattern_no := G_PATTERN_5;
6573 l_pattern_name := G_PATTERN_5_NAME;
6574 ELSIF l_vol_basis_count > 0 THEN
6575 l_pattern_no := G_PATTERN_6;
6576 l_pattern_name := G_PATTERN_6_NAME;
6577 END IF;
6578 ELSE -- Mixed basis
6579 IF l_cont_basis_count > 0 THEN
6580 l_pattern_no := G_PATTERN_7;
6581 l_pattern_name := G_PATTERN_7_NAME;
6582 ELSE
6583 l_pattern_no := G_PATTERN_8;
6584 l_pattern_name := G_PATTERN_8_NAME;
6585 END IF;
6586 END IF;
6587 END IF;
6588
6589 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done identifying pattern');
6590 -- How do you identify Parcel here ? Not required to identify
6591
6592 -- Look up FTE pricing preferences table to find out the pricing dual for that pattern
6593
6594 l_grouping_level := FTE_FREIGHT_PRICING_SPECIAL.g_lane_rules_tab(l_pattern_no).grouping_level;
6595 l_aggregation := FTE_FREIGHT_PRICING_SPECIAL.g_lane_rules_tab(l_pattern_no).commodity_aggregation;
6596 l_pricing_objective := FTE_FREIGHT_PRICING_SPECIAL.g_lane_rules_tab(l_pattern_no).pricing_objective;
6597
6598 -- What happens if grouping level or/and commodity_aggregation is null Exception ?
6599
6600 -- Need to create services_hash here
6601 -- The freight_cost_type_id s come as an ordered list of integers
6602 -- which can be concatenated to be used for across pattern comparison purpose
6603
6604 IF p_shpmnt_toplevel_charges.COUNT > 0 THEN
6605 -- {
6606 k := p_shpmnt_toplevel_charges.FIRST;
6607
6608 LOOP
6609 -- {
6610 IF p_shpmnt_toplevel_charges(k).content_id = p_shpmnt_toplevel_rows(i).content_id THEN
6611 l_services_hash := CONCAT(l_services_hash,TO_CHAR(p_shpmnt_toplevel_charges(k).freight_cost_type_id));
6612 END IF;
6613
6614 EXIT WHEN k = p_shpmnt_toplevel_charges.LAST;
6615 k := p_shpmnt_toplevel_charges.NEXT(k);
6616
6617 -- }
6618 END LOOP;
6619 -- }
6620 END IF;
6621
6622 -- See if already the same dual exists with (same commodity type for Sh-Wi ) a grouping rule = shipment.
6623 -- If yes, consolidate this one to that. If no, create a new pricing dual instance
6624
6625 l_pattern_index := l_pattern_index + 1;
6626
6627 -- Create a new record into x_pattern_rows here
6628
6629 x_pattern_rows(l_pattern_index).pattern_index := l_pattern_index;
6630 x_pattern_rows(l_pattern_index).content_id := p_shpmnt_toplevel_rows(i).content_id;
6631 x_pattern_rows(l_pattern_index).pattern_no := l_pattern_no;
6632 x_pattern_rows(l_pattern_index).services_hash := l_services_hash;
6633
6634 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done initializing pattern row');
6635 IF l_grouping_level = 'CONTAINER' THEN
6636 -- {
6637
6638 l_count_pattern := 1;
6639 create_new_instance (
6640 p_rolled_up_lines => l_rolledup_lines,
6644 p_aggregation => l_aggregation,
6641 --p_toplevel_line_id => p_shpmnt_toplevel_rows(i).content_id,
6642 p_toplevel_lines => p_shpmnt_toplevel_rows(i),
6643 p_grouping_level => l_grouping_level,
6645 p_objective => l_pricing_objective,
6646 p_instance_count => x_pricing_dual_instances.COUNT,
6647 x_pricing_engine_rows => x_pricing_engine_rows,
6648 x_pricing_attribute_rows => x_pricing_attribute_rows,
6649 x_return_status => l_return_status );
6650
6651 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6652 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6653 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'create_instance for container '||p_shpmnt_toplevel_rows(i).content_id);
6654 raise FTE_FREIGHT_PRICING_UTIL.g_create_instance_failed;
6655 END IF;
6656 ELSE -- What happens if no new instance is created ? Exception ?
6657 -- already handled inside the called procedure
6658 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Instance created for container '||p_shpmnt_toplevel_rows(i).content_id);
6659 END IF;
6660
6661 -- Create a new record into x_pricing_dual_instances here
6662 l_instance_index := x_pricing_dual_instances.COUNT + 1;
6663 x_pattern_rows(l_pattern_index).instance_index := l_instance_index;
6664
6665 x_pricing_dual_instances(l_instance_index).instance_index := l_instance_index;
6666 x_pricing_dual_instances(l_instance_index).pattern_no := l_pattern_no;
6667 x_pricing_dual_instances(l_instance_index).services_hash := l_services_hash;
6668 x_pricing_dual_instances(l_instance_index).grouping_level := l_grouping_level;
6669 x_pricing_dual_instances(l_instance_index).aggregation := l_aggregation;
6670 x_pricing_dual_instances(l_instance_index).objective := l_pricing_objective;
6671 x_pricing_dual_instances(l_instance_index).count_pattern := l_count_pattern; -- Need to be incremented and initialized appropriately
6672
6673
6674 -- }
6675 ELSIF l_grouping_level ='SHIPMENT' THEN -- Grouping level = shipment
6676 -- {
6677
6678
6679 -- Now search for matching patterns
6680 -- Pass in x_pricing_dual_instances,x_pricing_engine_rows,l_pattern,l_grouping_level,
6681 -- l_aggregation,l_pricing_objective,l_rolledup_category_rows
6682 -- and additional services hash for current pattern (at the top line level)
6683 -- Get back matching instance_index (if matches), -100 if does not match
6684
6685 IF l_cont_basis_count = 0 THEN
6686 -- {
6687
6688 l_instance_count := x_pricing_dual_instances.COUNT;
6689
6690 IF l_instance_count > 0 THEN
6691 -- {
6692
6693 -- Need to search here
6694
6695 search_matching_instance (
6696 --p_rolledup_category_rows => l_rolledup_category_rows,
6697 --p_rolledup_category_basis => l_rolledup_category_basis,
6698 p_pattern_no => l_pattern_no, -- Created here
6699 p_grouping_level => l_grouping_level,
6700 p_aggregation => l_aggregation,
6701 p_objective => l_pricing_objective,
6702 p_toplevel_charges_hash => l_services_hash, -- Created here from p_shpmnt_toplevel_charges
6703 p_pricing_dual_instances => x_pricing_dual_instances,
6704 --p_pricing_engine_rows => x_pricing_engine_rows,
6705 x_matched_instance_index => l_matched_instance_index, -- -100 if does not match
6706 x_return_status => l_return_status );
6707
6708 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6709 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6710 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'search for container '||p_shpmnt_toplevel_rows(i).content_id);
6711 raise FTE_FREIGHT_PRICING_UTIL.g_search_instance_failed;
6712 END IF;
6713 ELSE
6714 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matched Instance '||l_matched_instance_index||' found for container '||p_shpmnt_toplevel_rows(i).content_id);
6715 END IF;
6716
6717 -- }
6718 END IF;
6719
6720 -- } -- l_cont_basis_count = 0
6721 END IF;
6722
6723 IF l_cont_basis_count > 0
6724 OR (l_cont_basis_count = 0 AND l_instance_count = 0)
6725 OR (l_cont_basis_count = 0 AND l_matched_instance_index = -100) THEN
6726 -- Create new instance and engine row here
6727
6728 l_count_pattern := 1;
6729 create_new_instance (
6730 p_rolled_up_lines => l_rolledup_lines,
6731 --p_toplevel_line_id => p_shpmnt_toplevel_rows(i).content_id,
6732 p_toplevel_lines => p_shpmnt_toplevel_rows(i),
6733 p_grouping_level => l_grouping_level,
6734 p_aggregation => l_aggregation,
6735 p_objective => l_pricing_objective,
6739 x_return_status => l_return_status );
6736 p_instance_count => x_pricing_dual_instances.COUNT,
6737 x_pricing_engine_rows => x_pricing_engine_rows,
6738 x_pricing_attribute_rows => x_pricing_attribute_rows,
6740
6741 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6742 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6743 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'create_instance for container '||p_shpmnt_toplevel_rows(i).content_id);
6744 raise FTE_FREIGHT_PRICING_UTIL.g_create_instance_failed;
6745 END IF;
6746 ELSE -- What happens if no new instance is created ? Exception ?
6747 -- already handled inside the called procedure
6748 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Instance created for container '||p_shpmnt_toplevel_rows(i).content_id);
6749 END IF;
6750
6751 -- Create a new record into x_pricing_dual_instances here
6752
6753 l_instance_index := x_pricing_dual_instances.COUNT + 1;
6754 x_pattern_rows(l_pattern_index).instance_index := l_instance_index;
6755
6756 x_pricing_dual_instances(l_instance_index).instance_index := l_instance_index;
6757 x_pricing_dual_instances(l_instance_index).pattern_no := l_pattern_no;
6758 x_pricing_dual_instances(l_instance_index).services_hash := l_services_hash;
6759 x_pricing_dual_instances(l_instance_index).grouping_level := l_grouping_level;
6760 x_pricing_dual_instances(l_instance_index).aggregation := l_aggregation;
6761 x_pricing_dual_instances(l_instance_index).objective := l_pricing_objective;
6762 x_pricing_dual_instances(l_instance_index).count_pattern := l_count_pattern; -- Need to be incremented and initialized appropriately
6763
6764 ELSE -- Found a matching instance
6765
6766 -- Add to the matching instance l_matched_instance_index
6767
6768 l_count_pattern := x_pricing_dual_instances(l_matched_instance_index).count_pattern + 1;
6769 add_to_instance (
6770 p_rolled_up_lines => l_rolledup_lines,
6771 p_matching_instance_index => l_matched_instance_index,
6772 p_aggregation => l_aggregation,
6773 p_objective => l_pricing_objective,
6774 x_pricing_engine_rows => x_pricing_engine_rows,
6775 x_pricing_attribute_rows => x_pricing_attribute_rows,
6776 x_return_status => l_return_status );
6777
6778 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6779 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6780 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'add_to_instance for container '||p_shpmnt_toplevel_rows(i).content_id);
6781 raise FTE_FREIGHT_PRICING_UTIL.g_add_to_instance_failed;
6782 END IF;
6783 ELSE
6784 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Container '||p_shpmnt_toplevel_rows(i).content_id||' added to instance '||l_matched_instance_index);
6785 END IF;
6786
6787 -- Modify x_pricing_dual_instances(l_matched_instance_index) here
6788 l_instance_index := l_matched_instance_index;
6789 x_pattern_rows(l_pattern_index).instance_index := l_instance_index;
6790
6791 x_pricing_dual_instances(l_instance_index).count_pattern := l_count_pattern;
6792
6793 END IF;
6794 -- }
6795 END IF; -- grouping level
6796
6797 -- }
6798 ELSE -- shipment top level loose item
6799 -- new code to use patterns for loose items
6800 -- {
6801 -- look up basis for current top level row (loose item)
6802 -- assign pattern_no based on basis
6803 -- create new pattern row
6804 -- find out grouping level and aggregation level
6805 -- if grouping level = ITEM
6806 -- create new instance
6807 -- else -- if grouping_level = SHIPMENT
6808 -- if instance_count > 0
6809 -- search for matching instance
6810 -- end if
6811 -- if instance_count = 0 or no match found
6812 -- create new instance
6813 -- else
6814 -- add to instance
6815 -- end if
6816 -- end if
6817
6818
6819 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'For loose item :'|| p_shpmnt_toplevel_rows(i).content_id);
6820
6821 l_rolledup_rec.delivery_detail_id := null;
6822 l_rolledup_rec.container_id := null;
6823 l_rolledup_rec.category_id := null;
6824 l_rolledup_rec.rate_basis := null;
6825 l_rolledup_rec.line_quantity := null;
6826 l_rolledup_rec.line_uom := null;
6827
6828 -- find basis
6829
6830 l_rolledup_lines.DELETE; -- bug 2779306
6831 rollup_loose_item (
6832 p_loose_item_id => p_shpmnt_toplevel_rows(i).content_id,
6833 p_classification_code => p_classification_code,
6837 x_return_status => l_return_status );
6834 p_lane_basis => p_lane_basis,
6835 p_lane_id => p_lane_id,
6836 x_rolledup_rec => l_rolledup_rec,
6838
6839
6840 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6841 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6842 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Loose Item '||p_shpmnt_toplevel_rows(i).content_id);
6843 raise FTE_FREIGHT_PRICING_UTIL.g_rollup_container_failed;
6844 END IF;
6845 END IF;
6846
6847 l_rolledup_rec.master_container_id := p_shpmnt_toplevel_rows(i).content_id;
6848 g_rolledup_lines(p_shpmnt_toplevel_rows(i).content_id).master_container_id := p_shpmnt_toplevel_rows(i).content_id;
6849
6850 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'rollup_rec ->');
6851 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' delivery_detail_id = '||
6852 l_rolledup_rec.delivery_detail_id||' container_id='||l_rolledup_rec.container_id||' category_id = '||l_rolledup_rec.category_id
6853 ||' rate_basis = '||l_rolledup_rec.rate_basis||' qty='||l_rolledup_rec.line_quantity||' '||l_rolledup_rec.line_uom);
6854
6855 IF (nvl(l_rolledup_rec.line_quantity,0) = 0) THEN
6856 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' Rolled up line has line quantity = 0');
6857 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_line_quantity;
6858 END IF;
6859
6860 IF (l_rolledup_rec.rate_basis = G_WEIGHT_BASIS) THEN
6861 l_pattern_no := G_PATTERN_9;
6862 l_pattern_name := G_PATTERN_9_NAME;
6863 ELSIF (l_rolledup_rec.rate_basis = G_VOLUME_BASIS) THEN
6864 l_pattern_no := G_PATTERN_10;
6865 l_pattern_name := G_PATTERN_10_NAME;
6866 ELSE
6867 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_basis;
6868 END IF;
6869
6870 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done identifying pattern: '||l_pattern_no);
6871
6872 l_pattern_index := l_pattern_index + 1;
6873
6874 -- Create a new record into x_pattern_rows here
6875
6876 x_pattern_rows(l_pattern_index).pattern_index := l_pattern_index;
6877 x_pattern_rows(l_pattern_index).content_id := p_shpmnt_toplevel_rows(i).content_id;
6878 x_pattern_rows(l_pattern_index).pattern_no := l_pattern_no;
6879 x_pattern_rows(l_pattern_index).services_hash := null;
6880
6881 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done initializing pattern row');
6882
6883 -- Look up FTE pricing preferences table to find out the pricing dual for that pattern
6884
6885 l_grouping_level := FTE_FREIGHT_PRICING_SPECIAL.g_lane_rules_tab(l_pattern_no).grouping_level;
6886 l_aggregation := FTE_FREIGHT_PRICING_SPECIAL.g_lane_rules_tab(l_pattern_no).commodity_aggregation;
6887 -- l_pricing_objective := FTE_FREIGHT_PRICING_SPECIAL.g_lane_rules_tab(l_pattern_no).pricing_objective;
6888 l_pricing_objective := NULL;
6889
6890 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done getting pricing dual');
6891 l_rolledup_lines(1) := l_rolledup_rec;
6892
6893 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_rolledup_lines.COUNT = '||l_rolledup_lines.COUNT);
6894
6895 IF l_grouping_level = 'ITEM' THEN
6896 -- {
6897
6898 l_count_pattern := 1;
6899 create_new_instance (
6900 p_rolled_up_lines => l_rolledup_lines,
6901 --p_toplevel_line_id => p_shpmnt_toplevel_rows(i).content_id,
6902 p_toplevel_lines => p_shpmnt_toplevel_rows(i),
6903 p_grouping_level => l_grouping_level,
6904 p_aggregation => l_aggregation,
6905 p_objective => l_pricing_objective,
6906 p_instance_count => x_pricing_dual_instances.COUNT,
6907 x_pricing_engine_rows => x_pricing_engine_rows,
6908 x_pricing_attribute_rows => x_pricing_attribute_rows,
6909 x_return_status => l_return_status );
6910
6911 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6912 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6913 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'create_instance for loose item '||p_shpmnt_toplevel_rows(i).content_id);
6914 raise FTE_FREIGHT_PRICING_UTIL.g_create_instance_failed;
6915 END IF;
6916 ELSE -- What happens if no new instance is created ? Exception ?
6917 -- already handled inside the called procedure
6918 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Instance created for loose item '||p_shpmnt_toplevel_rows(i).content_id);
6919 END IF;
6920
6921 -- Create a new record into x_pricing_dual_instances here
6922 l_instance_index := x_pricing_dual_instances.COUNT + 1;
6923 x_pattern_rows(l_pattern_index).instance_index := l_instance_index;
6924
6925 x_pricing_dual_instances(l_instance_index).instance_index := l_instance_index;
6926 x_pricing_dual_instances(l_instance_index).pattern_no := l_pattern_no;
6930 x_pricing_dual_instances(l_instance_index).objective := l_pricing_objective;
6927 x_pricing_dual_instances(l_instance_index).services_hash := null;
6928 x_pricing_dual_instances(l_instance_index).grouping_level := l_grouping_level;
6929 x_pricing_dual_instances(l_instance_index).aggregation := l_aggregation;
6931 x_pricing_dual_instances(l_instance_index).count_pattern := l_count_pattern; -- Need to be incremented and initialized appropriately
6932 x_pricing_dual_instances(l_instance_index).loose_item_flag := 'Y';
6933 -- FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'instance_index = '||l_instance_index||' loose_item_flag ='||x_pricing_dual_instances(l_instance_index).loose_item_flag);
6934
6935
6936 -- }
6937 ELSE -- Grouping level = 'SHIPMENT' (Loose Items only)
6938 -- {
6939
6940 -- should we be looking only at loose item instances? or this will be handled by
6941 -- search matching instances?
6942 l_instance_count := x_pricing_dual_instances.COUNT;
6943
6944 IF l_instance_count > 0 THEN
6945 -- {
6946
6947 -- Need to search here
6948
6949 search_matching_instance (
6950 p_pattern_no => l_pattern_no, -- Created here
6951 p_grouping_level => l_grouping_level,
6952 p_aggregation => l_aggregation,
6953 p_objective => l_pricing_objective,
6954 p_toplevel_charges_hash => null, -- Created here from p_shpmnt_toplevel_charges
6955 p_pricing_dual_instances => x_pricing_dual_instances,
6956 x_matched_instance_index => l_matched_instance_index, -- -100 if does not match
6957 x_return_status => l_return_status );
6958
6959 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6960 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6961 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'search for loose item '||p_shpmnt_toplevel_rows(i).content_id);
6962 raise FTE_FREIGHT_PRICING_UTIL.g_search_instance_failed;
6963 END IF;
6964 ELSE
6965 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matched Instance '||l_matched_instance_index||' found for loose item '||p_shpmnt_toplevel_rows(i).content_id);
6966 END IF;
6967
6968 -- }
6969 END IF;
6970
6971 IF ( l_instance_count = 0 OR l_matched_instance_index = -100) THEN
6972 -- {
6973
6974 l_count_pattern := 1;
6975 create_new_instance (
6976 p_rolled_up_lines => l_rolledup_lines,
6977 p_toplevel_lines => p_shpmnt_toplevel_rows(i),
6978 p_grouping_level => l_grouping_level,
6979 p_aggregation => l_aggregation,
6980 p_objective => l_pricing_objective,
6981 p_instance_count => x_pricing_dual_instances.COUNT,
6982 x_pricing_engine_rows => x_pricing_engine_rows,
6983 x_pricing_attribute_rows => x_pricing_attribute_rows,
6984 x_return_status => l_return_status );
6985
6986 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6987 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6988 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'create_instance for loose item '||p_shpmnt_toplevel_rows(i).content_id);
6989 raise FTE_FREIGHT_PRICING_UTIL.g_create_instance_failed;
6990 END IF;
6991 ELSE -- What happens if no new instance is created ? Exception ?
6992 -- already handled inside the called procedure
6993 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Instance created for loose item '||p_shpmnt_toplevel_rows(i).content_id);
6994 END IF;
6995
6996 -- Create a new record into x_pricing_dual_instances here
6997
6998 l_instance_index := x_pricing_dual_instances.COUNT + 1;
6999 x_pattern_rows(l_pattern_index).instance_index := l_instance_index;
7000
7001 x_pricing_dual_instances(l_instance_index).instance_index := l_instance_index;
7002 x_pricing_dual_instances(l_instance_index).pattern_no := l_pattern_no;
7003 x_pricing_dual_instances(l_instance_index).services_hash := l_services_hash;
7004 x_pricing_dual_instances(l_instance_index).grouping_level := l_grouping_level;
7005 x_pricing_dual_instances(l_instance_index).aggregation := l_aggregation;
7006 x_pricing_dual_instances(l_instance_index).objective := l_pricing_objective;
7007 x_pricing_dual_instances(l_instance_index).count_pattern := l_count_pattern; -- Need to be incremented and initialized appropriately
7008 x_pricing_dual_instances(l_instance_index).loose_item_flag := 'Y';
7009 -- FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'instance_index = '||l_instance_index||' loose_item_flag ='||x_pricing_dual_instances(l_instance_index).loose_item_flag);
7010
7011 -- }
7012 ELSE
7013 -- {
7014 -- match found
7015 -- Add to the matching instance l_matched_instance_index
7016
7020 p_container_flag => p_shpmnt_toplevel_rows(i).container_flag,
7017 l_count_pattern := x_pricing_dual_instances(l_matched_instance_index).count_pattern + 1;
7018 -- new method --
7019 add_to_instance (
7021 p_rolled_up_lines => l_rolledup_lines,
7022 p_matching_instance_index => l_matched_instance_index,
7023 p_aggregation => l_aggregation,
7024 p_objective => l_pricing_objective,
7025 x_pricing_engine_rows => x_pricing_engine_rows,
7026 x_pricing_attribute_rows => x_pricing_attribute_rows,
7027 x_return_status => l_return_status );
7028
7029 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7030 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7031 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'add_to_instance for loose item '||p_shpmnt_toplevel_rows(i).content_id);
7032 raise FTE_FREIGHT_PRICING_UTIL.g_add_to_instance_failed;
7033 END IF;
7034 ELSE
7035 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Loose Item '||p_shpmnt_toplevel_rows(i).content_id||' added to instance '||l_matched_instance_index);
7036 END IF;
7037
7038 -- Modify x_pricing_dual_instances(l_matched_instance_index) here
7039 l_instance_index := l_matched_instance_index;
7040 x_pattern_rows(l_pattern_index).instance_index := l_instance_index;
7041
7042 x_pricing_dual_instances(l_instance_index).count_pattern := l_count_pattern;
7043 -- FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'instance_index = '||l_instance_index||' loose_item_flag ='||x_pricing_dual_instances(l_instance_index).loose_item_flag);
7044
7045 -- }
7046 END IF;
7047
7048 -- }
7049 END IF; -- grouping level
7050
7051
7052 -- } -- container_flag
7053 END IF;
7054
7055 IF x_pricing_engine_rows.COUNT > l_curr_engine_row_count THEN
7056 -- {
7057 l_attribute_index := l_curr_attribute_count;
7058 m := l_curr_engine_row_count + 1;
7059 LOOP
7060
7061 IF p_shpmnt_toplevel_charges.COUNT > 0 THEN
7062 l := p_shpmnt_toplevel_charges.FIRST;
7063 LOOP
7064
7065 IF p_shpmnt_toplevel_charges(l).content_id = p_shpmnt_toplevel_rows(i).content_id THEN
7066
7067 l_attribute_index := l_attribute_index + 1;
7068 x_pricing_attribute_rows(l_attribute_index).attribute_index := l_attribute_index;
7069 x_pricing_attribute_rows(l_attribute_index).input_index := x_pricing_engine_rows(m).input_index;
7070 x_pricing_attribute_rows(l_attribute_index).attribute_name := 'ADDITIONAL_CHARGE';
7071 x_pricing_attribute_rows(l_attribute_index).attribute_value := p_shpmnt_toplevel_charges(l).freight_cost_type_code;
7072
7073 END IF;
7074
7075 EXIT WHEN l = p_shpmnt_toplevel_charges.LAST;
7076 l := p_shpmnt_toplevel_charges.NEXT(l);
7077 END LOOP;
7078 -- }
7079 END IF;
7080
7081 EXIT WHEN m = x_pricing_engine_rows.LAST;
7082 m := x_pricing_engine_rows.NEXT(m);
7083 END LOOP;
7084 END IF;
7085
7086 <<nextpass>>
7087
7088 EXIT WHEN i = p_shpmnt_toplevel_rows.LAST;
7089 i := p_shpmnt_toplevel_rows.NEXT(i);
7090
7091 -- }
7092 END LOOP;
7093
7094 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_lane_function='||l_lane_function);
7095 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_classification_code='||p_classification_code);
7096
7097 IF l_lane_function = 'LTL' and p_classification_code = 'FC' THEN
7098
7099 print_rolledup_lines (
7100 p_rolledup_lines => g_rolledup_lines,
7101 x_return_status => l_return_status );
7102
7103 print_engine_rows (
7104 p_engine_rows => x_pricing_engine_rows,
7105 x_return_status => l_return_status );
7106
7107 FTE_FREIGHT_PRICING_SPECIAL.distribute_LTL_container_wt(
7108 p_top_level_rows => p_shpmnt_toplevel_rows,
7109 x_pricing_engine_rows => x_pricing_engine_rows,
7110 x_return_status => l_return_status );
7111
7112 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
7113 and l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7114 RAISE FND_API.G_EXC_ERROR;
7115 END IF;
7116
7117 END IF; --l_lane_function = 'LTL' and p_classification_code = 'FC'
7118
7119 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7120
7121 EXCEPTION
7122 WHEN FND_API.G_EXC_ERROR THEN
7123 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7124 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'FND_API.G_EXC_ERROR');
7125 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7126 WHEN FTE_FREIGHT_PRICING_UTIL.g_initialize_failed THEN
7127 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7128 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_initialize_failed');
7129 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7130 WHEN FTE_FREIGHT_PRICING_UTIL.g_rollup_container_failed THEN
7134 WHEN FTE_FREIGHT_PRICING_UTIL.g_invalid_line_quantity THEN
7131 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7132 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_rollup_container_failed');
7133 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7135 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7136 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_invalid_line_quantity');
7137 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7138 WHEN FTE_FREIGHT_PRICING_UTIL.g_dimensional_weight_failed THEN
7139 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7140 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_dimensional_weight_failed');
7141 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7142 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_instance_failed THEN
7143 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7144 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_create_instance_failed');
7145 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7146 WHEN FTE_FREIGHT_PRICING_UTIL.g_search_instance_failed THEN
7147 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7148 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_search_instance_failed');
7149 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7150 WHEN FTE_FREIGHT_PRICING_UTIL.g_add_to_instance_failed THEN
7151 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7152 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_add_to_instance_failed');
7153 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7154 WHEN FTE_FREIGHT_PRICING_UTIL.g_category_not_found THEN
7155 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7156 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_category_not_found');
7157 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7158 WHEN FTE_FREIGHT_PRICING_UTIL.g_invalid_basis THEN
7159 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7160 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_invalid_basis');
7161 --FTE_FREIGHT_PRICING_UTIL.print_debug('basis_not_found ');
7162 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'basis_not_found ');
7163 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7164 WHEN FTE_FREIGHT_PRICING_UTIL.g_loose_item_wrong_basis THEN
7165 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7166 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_loose_item_wrong_basis');
7167 --FTE_FREIGHT_PRICING_UTIL.print_debug('Loose item can not have container basis');
7168 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Loose item can not have container basis');
7169 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7170 WHEN others THEN
7171 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7172 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
7173 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
7174 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
7175 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'process_shipment_pattern');
7176
7177 -- }
7178 END process_shipment_pattern;
7179
7180 PROCEDURE get_currency_code (
7181 p_carrier_id IN NUMBER,
7182 x_currency_code OUT NOCOPY wsh_carriers.currency_code%TYPE,
7183 x_return_status OUT NOCOPY VARCHAR2)
7184 IS
7185
7186 CURSOR c_get_currency IS
7187 SELECT currency_code
7188 FROM wsh_carriers
7189 WHERE carrier_id = p_carrier_id;
7190
7191 --l_currency_code wsh_carriers.currency_code%TYPE;
7192
7193 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
7194
7195 BEGIN
7196
7197 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7198 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
7199 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_currency_code','start');
7200
7201 OPEN c_get_currency;
7202 FETCH c_get_currency INTO x_currency_code;
7203 IF c_get_currency%NOTFOUND THEN
7204 raise FTE_FREIGHT_PRICING_UTIL.g_no_currency_found;
7205 CLOSE c_get_currency;
7206 END IF;
7207 CLOSE c_get_currency;
7208
7209 --RETURN l_currency_code;
7210 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_currency_code');
7211
7212 EXCEPTION
7213 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_currency_found THEN
7214 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7215 FTE_FREIGHT_PRICING_UTIL.set_exception('get_currency_code',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_currency_found');
7216 --FTE_FREIGHT_PRICING_UTIL.print_debug('currency_not_found ');
7217 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'currency_not_found ');
7218 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_currency_code');
7219 WHEN others THEN
7220 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7224 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_currency_code');
7221 FTE_FREIGHT_PRICING_UTIL.set_exception('get_currency_code',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
7222 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
7223 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
7225 END get_currency_code;
7226
7227 -- shipment_rating will be called by
7228 -- WSH-LCSS (FTE_FREIGHT_RATING_DLVY_GRP.Rate_Delivery)
7229 -- and OM-LCSS, (FTE_FREIGHT_RATING_PUB.Get_Freight_Costs)
7230 -- and OM-DisplayChoices (FTE_FREIGHT_RATING_PUB.Get_Services)
7231 --
7232 -- shipment_rating rate shipments in g_shipment_line_rows on p_lane_id and p_service_type
7233 -- if p_mode_of_transport = 'TRUCK' it calls tl_shipment_pricing
7234 -- otherwise it calls shipment_pricing
7235 -- shipment_rating always returns rates in pl/sql table
7236 --
7237 PROCEDURE shipment_rating (
7238 p_lane_id IN NUMBER,
7239 p_service_type IN VARCHAR2,
7240 p_mode_of_transport IN VARCHAR2,
7241 p_ship_date IN DATE DEFAULT sysdate,
7242 p_arrival_date IN DATE DEFAULT sysdate,
7243 p_currency_code IN VARCHAR2 DEFAULT NULL,
7244 x_summary_lanesched_price OUT NOCOPY NUMBER,
7245 x_summary_lanesched_price_uom OUT NOCOPY VARCHAR2,
7246 x_freight_cost_temp_price OUT NOCOPY Freight_Cost_Temp_Tab_Type,
7247 x_freight_cost_temp_charge OUT NOCOPY Freight_Cost_Temp_Tab_Type,
7248 x_return_status OUT NOCOPY VARCHAR2,
7249 x_msg_count OUT NOCOPY NUMBER,
7250 x_msg_data OUT NOCOPY VARCHAR2 )
7251 IS
7252 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
7253 l_api_name CONSTANT VARCHAR2(30) := 'SHIPMENT_RATING';
7254 l_return_status VARCHAR2(1);
7255 l_msg_count NUMBER := 0;
7256 l_msg_data VARCHAR2(240);
7257 l_first_level_rows shpmnt_content_tab_type;
7258 l_first_level_charges addl_services_tab_type;
7259 BEGIN
7260 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7261
7262 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
7263 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
7264
7265 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_lane_id='||p_lane_id);
7266 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_service_type='||p_service_type);
7267 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_mode_of_transport='||p_mode_of_transport);
7268 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_ship_date='||p_ship_date);
7269 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_arrival_date='||p_arrival_date);
7270
7271 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'flatten shipment... ');
7272
7273 flatten_shipment (
7274 x_first_level_rows => l_first_level_rows,
7275 x_return_status => l_return_status );
7276
7277 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS and
7278 l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7279 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
7280 ELSE
7281 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level, 'No. of top level lines 7 : '||l_first_level_rows.COUNT);
7282 IF l_first_level_rows.COUNT = 0 THEN
7283 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
7284 END IF;
7285 END IF;
7286
7287 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_currency_code='|| p_currency_code);
7288 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'call shipment_pricing... ');
7289 shipment_pricing (
7290 p_lane_id => p_lane_id,
7291 p_service_type => p_service_type,
7292 p_ship_date => p_ship_date,
7293 p_arrival_date => p_arrival_date,
7294 p_shpmnt_toplevel_rows => l_first_level_rows,
7295 p_shpmnt_toplevel_charges => l_first_level_charges,
7296 p_save_flag => 'P',
7297 p_currency_code => p_currency_code,
7298 x_summary_lanesched_price => x_summary_lanesched_price,
7299 x_summary_lanesched_price_uom => x_summary_lanesched_price_uom,
7300 x_freight_cost_temp_price => x_freight_cost_temp_price,
7301 x_freight_cost_temp_charge => x_freight_cost_temp_charge,
7302 x_return_status => l_return_status ) ;
7303
7304 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS and
7305 l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7306 raise FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed;
7307 END IF;
7308
7309 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
7310
7311 EXCEPTION
7312 WHEN FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed THEN
7313 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7314 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_shipment_pricing_failed');
7315 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
7316 WHEN FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed THEN
7317 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7318 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_flatten_shipment_failed');
7319 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
7320 WHEN others THEN
7321 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7325 END shipment_rating;
7322 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
7323 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
7324 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
7326
7327
7328 -- This procedure is the basic shipment freight charge calculation API
7329 -- Takes a lane id/schedule id or WSH trip id
7330 -- It processes each input shipment content line to identify their patterns
7331 -- and to construct input lines to send to the QP engine using the Pricing preferences
7332 -- Uses process_shipment_pattern to construct inputs to QP engine line and attribute line
7333 -- This API also calls out post-processing APIs and saves to
7334 -- WSH_FREIGHT_COSTS or FTE_FREIGHT_COSTS_TEMP depending on p_save_flag values ('T' or 'M')
7335 -- Looks up delivery detail info from g_shipment_line_rows
7336
7337 PROCEDURE shipment_pricing (
7338 p_lane_id IN NUMBER DEFAULT NULL,
7339 p_schedule_id IN NUMBER DEFAULT NULL,
7340 p_segment_id IN NUMBER DEFAULT NULL,-- Input either Lane/schedule or the trip segment
7341 p_service_type IN VARCHAR2 DEFAULT NULL, -- service type is required with lane/schedule
7342 p_ship_date IN DATE DEFAULT sysdate, -- VVP (09/30/02)
7343 p_arrival_date IN DATE DEFAULT sysdate, -- VVP (09/30/02)
7344 --p_shpmnt_toplevel_rows IN OUT NOCOPY shpmnt_content_tab_type,
7345 p_shpmnt_toplevel_rows IN shpmnt_content_tab_type, /* bug# 2501240 -VVP */
7346 p_shpmnt_toplevel_charges IN addl_services_tab_type, -- Top level requested additional services
7347 -- p_shpmnt_charges IN shpmnt_charges_tab_type, -- Not supported in Phase I
7348 p_save_flag IN VARCHAR2, -- Whether to save to TEMP table or MAIN table
7349 p_request_id IN NUMBER DEFAULT NULL, -- Required only in case of saving to TEMP table
7350 p_currency_code IN VARCHAR2 DEFAULT NULL,
7351 x_summary_lanesched_price OUT NOCOPY NUMBER, -- Only in case of 'T'
7352 x_summary_lanesched_price_uom OUT NOCOPY VARCHAR2,
7353 x_freight_cost_temp_price OUT NOCOPY Freight_Cost_Temp_Tab_Type,
7354 x_freight_cost_temp_charge OUT NOCOPY Freight_Cost_Temp_Tab_Type,
7355 x_return_status OUT NOCOPY VARCHAR2 )
7356 IS
7357
7358 CURSOR c_get_lane_info(c_lane_id IN NUMBER) IS
7359 SELECT fl.lane_id,fl.carrier_id,flrc.list_header_id pricelist_id,
7360 fl.mode_of_transportation_code,fl.origin_id,fl.destination_id,
7361 fl.basis,fl.commodity_catg_id,fl.service_type_code,fl.comm_fc_class_code
7362 FROM fte_lanes fl, fte_lane_rate_charts flrc
7363 WHERE fl.lane_id = c_lane_id
7364 AND fl.lane_id = flrc.lane_id
7365 AND (flrc.start_date_active is null OR flrc.start_date_active <= p_ship_date)
7366 AND (flrc.end_date_active is null OR flrc.end_date_active > p_ship_date);
7367
7368 CURSOR c_get_lane_info_from_trip(c_wsh_trip_id IN NUMBER) IS
7369 SELECT fl.lane_id,fl.carrier_id,flrc.list_header_id pricelist_id,
7370 fl.mode_of_transportation_code,fl.origin_id,fl.destination_id,
7371 fl.basis,fl.commodity_catg_id,fl.service_type_code,fl.comm_fc_class_code
7372 FROM fte_lanes fl, wsh_trips wt, fte_lane_rate_charts flrc
7373 WHERE fl.lane_id = wt.lane_id
7374 AND wt.trip_id = c_wsh_trip_id
7375 AND fl.lane_id = flrc.lane_id
7376 AND (flrc.start_date_active is null OR flrc.start_date_active <= p_ship_date)
7377 AND (flrc.end_date_active is null OR flrc.end_date_active > p_ship_date);
7378
7379 CURSOR c_get_lane_info_from_schedule(c_schedule_id IN NUMBER) IS
7380 SELECT fl.lane_id,fl.carrier_id,flrc.list_header_id pricelist_id,
7381 fl.mode_of_transportation_code,fl.origin_id,fl.destination_id,
7382 fl.basis,fl.commodity_catg_id,fl.service_type_code,fl.comm_fc_class_code
7383 FROM fte_lanes fl, fte_schedules fs, fte_lane_rate_charts flrc
7384 WHERE fl.lane_id = fs.lane_id
7385 AND fs.schedules_id = c_schedule_id
7386 AND fl.lane_id = flrc.lane_id
7387 AND (flrc.start_date_active is null OR flrc.start_date_active <= p_ship_date)
7388 AND (flrc.end_date_active is null OR flrc.end_date_active > p_ship_date);
7389
7390 CURSOR c_get_service_type(c_wsh_trip_id IN NUMBER) IS
7391 SELECT service_level
7392 FROM wsh_trips
7393 WHERE trip_id = c_wsh_trip_id;
7394
7395 i NUMBER:=0;
7396 j NUMBER:=0;
7397 k NUMBER:=0;
7398 l NUMBER:=0;
7399 m NUMBER:=0;
7400 n NUMBER:=0;
7401 o NUMBER:=0;
7402 l_return_status VARCHAR2(1);
7403 l_service_type VARCHAR2(60);
7404 l_currency_code VARCHAR2(30);
7405
7406 l_lane_info lane_info_rec_type;
7407 l_pricing_dual_instances pricing_dual_instance_tab_type;
7408 l_pricing_engine_rows pricing_engine_input_tab_type;
7409 l_pattern_rows top_level_pattern_tab_type;
7413 l_pricing_engine_output_lines QP_PREQ_GRP.LINE_TBL_TYPE;
7410 l_pricing_attribute_rows pricing_attribute_tab_type;
7411 l_pricing_control_rec pricing_control_input_rec_type;
7412 l_pricing_qualifier fte_qual_rec_type;
7414 l_qp_output_line_details QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
7415 l_freight_cost_main_price Freight_Cost_Main_Tab_Type;
7416 l_freight_cost_main_charge Freight_Cost_Main_Tab_Type;
7417 l_freight_cost_temp_price Freight_Cost_Temp_Tab_Type;
7418 l_freight_cost_temp_charge Freight_Cost_Temp_Tab_Type;
7419 l_fc_main_update_rows Freight_Cost_Main_Tab_Type;
7420 l_freight_cost_id NUMBER;
7421 l_freight_cost_main_ids WSH_UTIL_CORE.id_tab_type;
7422 l_freight_cost_temp_ids WSH_UTIL_CORE.id_tab_type;
7423 l_freight_cost_temp_id NUMBER;
7424 l_rowid VARCHAR2(30);
7425 l_rowids WSH_UTIL_CORE.column_tab_type;
7426 l_temp_row_count NUMBER;
7427 l_return_status_text VARCHAR2(240);
7428
7429 l_shpmnt_toplevel_rows shpmnt_content_tab_type;
7430 p NUMBER:=0;
7431
7432 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
7433
7434 BEGIN
7435
7436 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7437 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
7438 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_pricing','start');
7439
7440 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_lane_id='||p_lane_id);
7441 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_schedule_id='||p_schedule_id);
7442 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_segment_id='||p_segment_id);
7443 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_service_type='||p_service_type);
7444 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_ship_date='||p_ship_date);
7445 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_arrival_date='||p_arrival_date);
7446 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_save_flag='||p_save_flag);
7447 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_request_id='||p_request_id);
7448
7449 -- Calls process_shipment_pattern and gets back l_pricing_engine_rows and l_pricing_attribute_rows
7450 -- Modifies l_pricing_attribute_rows to add more rows to it
7451 -- Calls call_qp_engine passing in l_pricing_engine_rows,l_pricing_attribute_rows and l_pricing_qualifier
7452 -- Gets back l_pricing_engine_output_lines and l_qp_output_line_details
7453 -- Processes these two tables together with l_pricing_dual_instances and g_shipment_line_rows
7454 -- Prepares records to go to WSH_FREIGHT_COST main/temp table
7455
7456
7457 g_effectivity_dates.date_from := p_ship_date;
7458 g_effectivity_dates.date_to := p_arrival_date;
7459
7460 IF p_lane_id IS NULL AND p_segment_id IS NULL AND p_schedule_id IS NULL THEN
7461
7462 raise FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg;
7463
7464 ELSIF p_lane_id IS NULL AND p_schedule_id IS NULL THEN
7465
7466 OPEN c_get_lane_info_from_trip(p_segment_id);
7467 FETCH c_get_lane_info_from_trip INTO l_lane_info;
7468 IF c_get_lane_info_from_trip%NOTFOUND THEN
7469 CLOSE c_get_lane_info_from_trip;
7470 raise FTE_FREIGHT_PRICING_UTIL.g_no_lane_info;
7471 END IF;
7472 CLOSE c_get_lane_info_from_trip;
7473
7474 OPEN c_get_service_type(p_segment_id);
7475 FETCH c_get_service_type INTO l_service_type;
7476 -- Is this required TODO
7477 IF c_get_service_type%NOTFOUND THEN
7478 CLOSE c_get_service_type;
7479 raise FTE_FREIGHT_PRICING_UTIL.g_no_segment_service_type;
7480 END IF;
7481 CLOSE c_get_service_type;
7482
7483 ELSIF p_segment_id IS NULL AND p_schedule_id IS NULL THEN
7484
7485 OPEN c_get_lane_info(p_lane_id);
7486 FETCH c_get_lane_info INTO l_lane_info;
7487 IF c_get_lane_info%NOTFOUND THEN
7488 CLOSE c_get_lane_info;
7489 raise FTE_FREIGHT_PRICING_UTIL.g_no_lane_info;
7490 END IF;
7491 CLOSE c_get_lane_info;
7492
7493 l_service_type := p_service_type;
7494
7495 ELSIF p_segment_id IS NULL AND p_lane_id IS NULL THEN
7496
7497 OPEN c_get_lane_info_from_schedule(p_schedule_id);
7498 FETCH c_get_lane_info_from_schedule INTO l_lane_info;
7499 IF c_get_lane_info_from_schedule%NOTFOUND THEN
7500 CLOSE c_get_lane_info_from_schedule;
7501 raise FTE_FREIGHT_PRICING_UTIL.g_no_lane_info;
7502 END IF;
7503 CLOSE c_get_lane_info_from_schedule;
7504
7505 l_service_type := p_service_type;
7506
7507 END IF;
7508
7509 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_lane_info.lane_id='||l_lane_info.lane_id);
7510 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_lane_info.pricelist_id='||l_lane_info.pricelist_id);
7511 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_service_type='||l_service_type);
7512
7513 -- Modified for 12i for multi currency support. Get the currency code in the begining
7514 -- to use everywhere.
7515
7516 IF p_currency_code IS NULL THEN
7517 get_currency_code(
7518 p_carrier_id => l_lane_info.carrier_id,
7519 x_currency_code => l_currency_code,
7520 x_return_status => l_return_status ); -- New API
7521
7522 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7526 END IF;
7523 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7524 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'get_currency_code ');
7525 raise FTE_FREIGHT_PRICING_UTIL.g_currency_code_failed;
7527 ELSE
7528 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Currency code for carrier '||l_lane_info.carrier_id||' is : '||l_currency_code);
7529 END IF;
7530 ELSE
7531 l_currency_code := p_currency_code;
7532 END IF;
7533
7534 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' Currency Code is = ' || l_currency_code);
7535
7536 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' Rate Basis is =' || l_lane_info.basis);
7537
7538 IF l_lane_info.basis = 'CONTAINER_ALL' THEN
7539
7540 l_lane_info.service_type_code := l_service_type;
7541
7542 FTE_FREIGHT_PRICING_SPECIAL.rate_container_all(
7543 p_lane_info => l_lane_info,
7544 p_top_level_rows => p_shpmnt_toplevel_rows,
7545 p_save_flag => p_save_flag,
7546 p_currency_code => l_currency_code,
7547 x_freight_cost_main_price => l_freight_cost_main_price,
7548 x_freight_cost_temp_price => l_freight_cost_temp_price,
7549 x_freight_cost_main_charge => l_freight_cost_main_charge,
7550 x_freight_cost_temp_charge => l_freight_cost_temp_charge,
7551 x_fc_main_update_rows => l_fc_main_update_rows,
7552 x_summary_lanesched_price => x_summary_lanesched_price,
7553 x_summary_lanesched_price_uom => x_summary_lanesched_price_uom,
7554 x_return_status => l_return_status ) ;
7555
7556 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
7557 and l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7558 RAISE FND_API.G_EXC_ERROR;
7559 END IF;
7560
7561 ELSE -- l_lane_info.basis <> 'CONTAINER_ALL'
7562
7563 -- copy p_shpmnt_toplevel_rows to local l_shpmnt_toplevel_rows
7564 p := p_shpmnt_toplevel_rows.FIRST;
7565 IF p is NOT NULL THEN
7566 LOOP
7567 l_shpmnt_toplevel_rows(p) := p_shpmnt_toplevel_rows(p);
7568 EXIT WHEN p = p_shpmnt_toplevel_rows.LAST;
7569 p := p_shpmnt_toplevel_rows.NEXT(p);
7570 END LOOP;
7571 END IF;
7572
7573
7574 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' After copying top level rows ' );
7575
7576 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Service Type Code::=' || l_lane_info.service_type_code);
7577
7578 process_shipment_pattern (
7579 p_classification_code => l_lane_info.classification_code,
7580 p_lane_basis => l_lane_info.basis,
7581 p_lane_id => l_lane_info.lane_id,
7582 p_carrier_id => l_lane_info.carrier_id,
7583 p_service_code => l_lane_info.service_type_code,
7584 --p_shpmnt_toplevel_rows => p_shpmnt_toplevel_rows,
7585 p_shpmnt_toplevel_rows => l_shpmnt_toplevel_rows,
7586 p_shpmnt_toplevel_charges => p_shpmnt_toplevel_charges,
7587 x_pricing_dual_instances => l_pricing_dual_instances,
7588 x_pricing_engine_rows => l_pricing_engine_rows,
7589 x_pattern_rows => l_pattern_rows,
7590 x_pricing_attribute_rows => l_pricing_attribute_rows,
7591 x_return_status => l_return_status );
7592
7593
7594 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,' After process_shipment_pattern ' );
7595
7596 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7597 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7598 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'process_shipment_pattern ');
7599 raise FTE_FREIGHT_PRICING_UTIL.g_shipment_pattern_failed;
7600 END IF;
7601 ELSE -- What happens if no new instance is created ? Exception ?
7602 -- already handled inside the called procedure
7603 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_pricing_engine_rows.COUNT ||'engine rows created');
7604 END IF;
7605
7606 IF FTE_FREIGHT_PRICING_SPECIAL.g_special_flags.lane_function = 'FLAT'
7607 AND FTE_FREIGHT_PRICING_SPECIAL.g_special_flags.flat_containerwt_flag = 'Y' THEN
7608
7609 l_lane_info.service_type_code := l_service_type;
7610
7611 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Inside FlatRate');
7612
7613 FTE_FREIGHT_PRICING_SPECIAL.process_shipment_flatrate(
7614 p_lane_info => l_lane_info,
7615 p_top_level_rows => l_shpmnt_toplevel_rows,
7616 p_save_flag => p_save_flag,
7617 p_currency_code => l_currency_code,
7618 x_freight_cost_main_price => l_freight_cost_main_price,
7619 x_freight_cost_temp_price => l_freight_cost_temp_price,
7620 x_freight_cost_main_charge => l_freight_cost_main_charge,
7621 x_freight_cost_temp_charge => l_freight_cost_temp_charge,
7622 x_fc_main_update_rows => l_fc_main_update_rows,
7623 x_summary_lanesched_price => x_summary_lanesched_price,
7624 x_summary_lanesched_price_uom => x_summary_lanesched_price_uom,
7625 x_return_status => l_return_status ) ;
7626
7630 END IF;
7627 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
7628 and l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7629 RAISE FND_API.G_EXC_ERROR;
7631
7632 ELSE
7633
7634 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Not in FlatRate');
7635 l_pricing_control_rec.pricing_event_num := G_LINE_EVENT_NUM;
7636 l_pricing_control_rec.currency_code := l_currency_code;
7637 l_pricing_control_rec.lane_id := l_lane_info.lane_id;
7638 l_pricing_control_rec.price_list_id := l_lane_info.pricelist_id;
7639 l_pricing_control_rec.party_id := l_lane_info.carrier_id;
7640
7641 i := l_pricing_engine_rows.FIRST;
7642 j := l_pricing_attribute_rows.COUNT;
7643 LOOP
7644
7645 j := j + 1;
7646 l_pricing_attribute_rows(j).attribute_index := j;
7647 l_pricing_attribute_rows(j).input_index := l_pricing_engine_rows(i).input_index;
7648 l_pricing_attribute_rows(j).attribute_name := 'ORIGIN_ZONE';
7649 l_pricing_attribute_rows(j).attribute_value := TO_CHAR(l_lane_info.origin_id);
7650 j := j + 1;
7651 l_pricing_attribute_rows(j).attribute_index := j;
7652 l_pricing_attribute_rows(j).input_index := l_pricing_engine_rows(i).input_index;
7653 l_pricing_attribute_rows(j).attribute_name := 'DESTINATION_ZONE';
7654 l_pricing_attribute_rows(j).attribute_value := TO_CHAR(l_lane_info.destination_id);
7655
7656 IF l_service_type IS NOT NULL THEN
7657
7658 j := j + 1;
7659 l_pricing_attribute_rows(j).attribute_index := j;
7660 l_pricing_attribute_rows(j).input_index := l_pricing_engine_rows(i).input_index;
7661 l_pricing_attribute_rows(j).attribute_name := 'SERVICE_TYPE'; -- Is it required always
7662 l_pricing_attribute_rows(j).attribute_value := l_service_type;
7663
7664 END IF;
7665
7666 -- logistics:total_quantity and volume:total_quantity are special cases,
7667 -- Assuming category, container_type,additional_services
7668 -- and hazard_code
7669 -- come from process_shipment_pattern
7670
7671 EXIT WHEN i = l_pricing_engine_rows.LAST;
7672 i := l_pricing_engine_rows.NEXT(i);
7673
7674 END LOOP;
7675
7676 -- Print engine input details
7677
7678 print_rolledup_lines (
7679 p_rolledup_lines => g_rolledup_lines,
7680 x_return_status => l_return_status );
7681
7682 print_top_level_detail (
7683 --p_first_level_rows => p_shpmnt_toplevel_rows,
7684 p_first_level_rows => l_shpmnt_toplevel_rows,
7685 x_return_status => l_return_status );
7686
7687 print_top_level_pattern (
7688 p_pattern_rows => l_pattern_rows,
7689 x_return_status => l_return_status );
7690
7691 print_dual_instances (
7692 p_dual_instances => l_pricing_dual_instances,
7693 x_return_status => l_return_status );
7694
7695 print_engine_rows (
7696 p_engine_rows => l_pricing_engine_rows,
7697 x_return_status => l_return_status );
7698
7699 print_attribute_rows (
7700 p_attribute_rows => l_pricing_attribute_rows,
7701 x_return_status => l_return_status );
7702
7703 -- First prototype breakpoint
7704
7705 FTE_FREIGHT_PRICING_SPECIAL.process_special_conditions(
7706 p_pricing_control_rec => l_pricing_control_rec,
7707 --p_top_level_rows => p_shpmnt_toplevel_rows,
7708 p_top_level_rows => l_shpmnt_toplevel_rows,
7709 p_pattern_rows => l_pattern_rows,
7710 p_pricing_dual_instances => l_pricing_dual_instances,
7711 x_pricing_engine_rows => l_pricing_engine_rows,
7712 x_pricing_attribute_rows => l_pricing_attribute_rows ,
7713 x_qp_output_line_rows => l_pricing_engine_output_lines, -- line_index = input_index
7714 x_qp_output_detail_rows => l_qp_output_line_details,
7715 x_return_status => l_return_status );
7716
7717 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7718 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7719 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'process_special_conditions ');
7720 raise FTE_FREIGHT_PRICING_UTIL.g_special_conditions_failed;
7721 END IF;
7722 ELSE -- What happens if no QP output lines come back ? Exception ?
7723 -- already handled inside the called procedure
7724 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_pricing_engine_output_lines.COUNT ||' QP output lines resulted ');
7725 END IF;
7726
7727 print_qp_output_lines (
7728 p_engine_output_line => l_pricing_engine_output_lines,
7729 p_engine_output_detail => l_qp_output_line_details,
7730 p_return_status => l_return_status_text ,
7731 x_return_status => l_return_status );
7732
7733 process_qp_output (
7734 p_qp_output_line_rows => l_pricing_engine_output_lines, -- line_index = input_index
7735 p_qp_output_detail_rows => l_qp_output_line_details,
7739 --p_shpmnt_toplevel_rows => p_shpmnt_toplevel_rows, -- Indexed on delivery_detail_id
7736 p_pricing_engine_input => l_pricing_engine_rows,
7737 p_pricing_dual_instances => l_pricing_dual_instances,
7738 p_pattern_rows => l_pattern_rows,
7740 p_shpmnt_toplevel_rows => l_shpmnt_toplevel_rows, -- Indexed on delivery_detail_id
7741 p_save_flag => p_save_flag, -- Whether to save to TEMP table or MAIN table
7742 p_rate_basis => l_lane_info.basis,
7743 x_freight_cost_main_price => l_freight_cost_main_price,
7744 x_freight_cost_temp_price => l_freight_cost_temp_price,
7745 x_freight_cost_main_charge => l_freight_cost_main_charge,
7746 x_freight_cost_temp_charge => l_freight_cost_temp_charge,
7747 x_fc_main_update_rows => l_fc_main_update_rows, -- For update of SUMMARY records
7748 x_summary_lanesched_price => x_summary_lanesched_price, -- Only in case of 'T'
7749 x_summary_lanesched_price_uom => x_summary_lanesched_price_uom,
7750 x_return_status => l_return_status ) ;
7751
7752 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7753 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7754 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'process_qp_output');
7755 raise FTE_FREIGHT_PRICING_UTIL.g_process_qp_output_failed;
7756 END IF;
7757 ELSE -- What happens if no new fc records created ? Exception ?
7758 -- already handled inside the called procedure ?
7759 -- IF p_save_flag = 'T' THEN -- Means either lane/schedule has been passed in
7760 IF p_save_flag <> 'M' THEN -- VVP (OM Est change)
7761 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_freight_cost_temp_price.COUNT ||' FC temp price records resulted ');
7762 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_freight_cost_temp_charge.COUNT ||' FC temp charge records resulted ');
7763 ELSIF p_save_flag = 'M' THEN -- Means either lane/schedule has been passed in
7764 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_freight_cost_main_price.COUNT ||' FC main price records resulted ');
7765 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_freight_cost_main_charge.COUNT ||' FC main charge records resulted ');
7766 END IF;
7767 END IF;
7768
7769 END IF; -- l_is_shipment_flatrate = 'N'
7770
7771 END IF; -- l_lane_info.basis <> 'CONTAINER_ALL'
7772
7773
7774 --MDC Allocation
7775
7776 Handle_MDC(
7777 p_save_flag=>p_save_flag,
7778 x_freight_cost_main_price => l_freight_cost_main_price,
7779 x_freight_cost_temp_price => l_freight_cost_temp_price,
7780 x_freight_cost_main_charge => l_freight_cost_main_charge,
7781 x_freight_cost_temp_charge => l_freight_cost_temp_charge,
7782 x_fc_main_update_rows => l_fc_main_update_rows, -- For update of SUMMARY records
7783 x_return_status => l_return_status ) ;
7784
7785 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7786 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7787 raise FTE_FREIGHT_PRICING_UTIL.g_MDC_handle_MDC;
7788 END IF;
7789 END IF;
7790
7791
7792 IF p_save_flag = 'M' THEN
7793
7794 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'CHARGE');
7795 print_fc_main_rows (
7796 p_fc_main_rows => l_freight_cost_main_charge,
7797 x_return_status => l_return_status );
7798
7799 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'BASE PRICE');
7800 print_fc_main_rows (
7801 p_fc_main_rows => l_freight_cost_main_price,
7802 x_return_status => l_return_status );
7803
7804 ELSE
7805
7806 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'CHARGE');
7807 print_fc_temp_rows (
7808 p_fc_temp_rows => l_freight_cost_temp_charge,
7809 x_return_status => l_return_status );
7810
7811 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'BASE PRICE');
7812 print_fc_temp_rows (
7813 p_fc_temp_rows => l_freight_cost_temp_price,
7814 x_return_status => l_return_status );
7815
7816 END IF;
7817
7818
7819 -- Insert one row at a time and get back the freight cost id
7820 -- create a table indexed on delivery detail id which stores the freight cost ids for the base price lines
7821 -- This table will then be used to populate applied_to_charge id for the charge record
7822
7823 IF p_save_flag = 'T' THEN -- Means either lane/schedule has been passed in
7824
7825 k := l_freight_cost_temp_price.FIRST;
7826 IF k is NOT NULL THEN
7827 LOOP
7828 l_freight_cost_temp_price(k).creation_date := SYSDATE;
7829 l_freight_cost_temp_price(k).created_by := FND_GLOBAL.USER_ID;
7830 l_freight_cost_temp_price(k).last_update_date := sysdate;
7831 l_freight_cost_temp_price(k).last_updated_by := FND_GLOBAL.USER_ID;
7832 l_freight_cost_temp_price(k).last_update_login := FND_GLOBAL.LOGIN_ID;
7833 l_freight_cost_temp_price(k).comparison_request_id := p_request_id;
7834
7835 IF p_schedule_id IS NULL THEN
7836 l_freight_cost_temp_price(k).lane_id := p_lane_id; -- Need to insert schedule_id/lane_id
7840
7837 ELSIF p_lane_id IS NULL THEN
7838 l_freight_cost_temp_price(k).schedule_id := p_schedule_id;
7839 END IF;
7841 l_freight_cost_temp_price(k).moved_to_main_flag := 'N';
7842 -- added for bug2741467
7843 l_freight_cost_temp_price(k).service_type_code := l_service_type;
7844
7845
7846 -- pack J enhancement for FPA --
7847 IF ( l_freight_cost_temp_price(k).delivery_detail_id IS NOT NULL
7848 AND g_rolledup_lines.EXISTS(l_freight_cost_temp_price(k).delivery_detail_id)
7849 AND g_rolledup_lines(l_freight_cost_temp_price(k).delivery_detail_id).category_id
7850 <> g_default_category_id )
7851 THEN
7852 l_freight_cost_temp_price(k).commodity_category_id
7853 := g_rolledup_lines(l_freight_cost_temp_price(k).delivery_detail_id).category_id;
7854 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
7855 'delivery_detail_id='||l_freight_cost_temp_price(k).delivery_detail_id
7856 ||' commodity_category_id ='||l_freight_cost_temp_price(k).commodity_category_id);
7857 END IF;
7858
7859
7860
7861 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Reprinting BASE PRICE');
7862 print_fc_temp_rows (
7863 p_fc_temp_rows => l_freight_cost_temp_price,
7864 x_return_status => l_return_status );
7865
7866
7867
7868 Create_Freight_Cost_Temp(
7869 p_freight_cost_temp_info => l_freight_cost_temp_price(k),
7870 x_freight_cost_temp_id => l_freight_cost_temp_id,
7871 x_return_status => l_return_status);
7872
7873 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7874 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7875 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Create_Freight_Cost_Temp Price');
7876 raise FTE_FREIGHT_PRICING_UTIL.g_create_fc_temp_failed;
7877 END IF;
7878 END IF;
7879
7880 IF l_freight_cost_temp_price(k).line_type_code <> 'SUMMARY' THEN
7881 l_freight_cost_temp_ids(l_freight_cost_temp_price(k).delivery_detail_id) := l_freight_cost_temp_id;
7882 END IF;
7883
7884 EXIT WHEN k=l_freight_cost_temp_price.LAST;
7885 k := l_freight_cost_temp_price.NEXT(k);
7886 END LOOP;
7887 ELSE
7888 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Temp fc base price record got created');
7889 END IF;
7890
7891 n := l_freight_cost_temp_charge.FIRST;
7892 IF n IS NOT NULL THEN
7893 LOOP
7894 l_freight_cost_temp_charge(n).creation_date := SYSDATE;
7895 l_freight_cost_temp_charge(n).created_by := FND_GLOBAL.USER_ID;
7896 l_freight_cost_temp_charge(n).last_update_date := sysdate;
7897 l_freight_cost_temp_charge(n).last_updated_by := FND_GLOBAL.USER_ID;
7898 l_freight_cost_temp_charge(n).last_update_login := FND_GLOBAL.LOGIN_ID;
7899 l_freight_cost_temp_charge(n).comparison_request_id := p_request_id;
7900
7901 IF p_schedule_id IS NULL THEN
7902 l_freight_cost_temp_charge(n).lane_id := p_lane_id; -- Need to insert schedule_id/lane_id
7903 ELSIF p_lane_id IS NULL THEN
7904 l_freight_cost_temp_charge(n).schedule_id := p_schedule_id;
7905 END IF;
7906
7907 l_freight_cost_temp_charge(n).applied_to_charge_id := l_freight_cost_temp_ids(l_freight_cost_temp_charge(n).delivery_detail_id);
7908 l_freight_cost_temp_charge(n).moved_to_main_flag := 'N';
7909 -- added for bug2741467
7910 l_freight_cost_temp_charge(n).service_type_code := l_service_type;
7911
7912 -- pack J enhancement for FPA --
7913 IF ( l_freight_cost_temp_charge(n).delivery_detail_id IS NOT NULL
7914 AND g_rolledup_lines.EXISTS(l_freight_cost_temp_charge(n).delivery_detail_id)
7915 AND g_rolledup_lines(l_freight_cost_temp_charge(n).delivery_detail_id).category_id
7916 <> g_default_category_id )
7917 THEN
7918 l_freight_cost_temp_charge(n).commodity_category_id
7919 := g_rolledup_lines(l_freight_cost_temp_charge(n).delivery_detail_id).category_id;
7920 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
7921 'delivery_detail_id='||l_freight_cost_temp_charge(n).delivery_detail_id
7922 ||' commodity_category_id ='||l_freight_cost_temp_charge(n).commodity_category_id);
7923 END IF;
7924
7925
7926 Create_Freight_Cost_Temp(
7927 p_freight_cost_temp_info => l_freight_cost_temp_charge(n),
7928 x_freight_cost_temp_id => l_freight_cost_temp_id,
7929 x_return_status => l_return_status);
7930
7931 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7932 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7933 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Create_Freight_Cost_Temp Charge');
7934 raise FTE_FREIGHT_PRICING_UTIL.g_create_fc_temp_failed;
7935 END IF;
7936 END IF;
7937
7938 EXIT WHEN n=l_freight_cost_temp_charge.LAST;
7939 n := l_freight_cost_temp_charge.NEXT(n);
7940 END LOOP;
7941 ELSE
7942 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Temp fc charge record got created');
7946
7943 END IF;
7944
7945 ELSIF p_save_flag = 'M' THEN
7947 l := l_fc_main_update_rows.FIRST;
7948 IF l IS NOT NULL THEN
7949 LOOP
7950 -- For now
7951 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Update row delivery leg id : '||l_fc_main_update_rows(l).delivery_leg_id);
7952
7953 l_fc_main_update_rows(l).last_update_date := sysdate;
7954 l_fc_main_update_rows(l).last_updated_by := FND_GLOBAL.USER_ID;
7955 l_fc_main_update_rows(l).last_update_login := FND_GLOBAL.LOGIN_ID;
7956 WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost(
7957 p_rowid => l_rowid,
7958 p_freight_cost_info => l_fc_main_update_rows(l),
7959 x_return_status => l_return_status);
7960
7961 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7962 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7963 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Update_Freight_Cost');
7964 raise FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed;
7965 ELSE
7966 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_WRN,'Update_Freight_Cost returned warning ');
7967 END IF;
7968 END IF;
7969
7970 EXIT WHEN l=l_fc_main_update_rows.LAST;
7971 l := l_fc_main_update_rows.NEXT(l);
7972 END LOOP;
7973 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Done Update_Freight_Cost ');
7974 ELSE
7975 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Main fc update record got created');
7976 END IF;
7977
7978 m := l_freight_cost_main_price.FIRST;
7979 IF m IS NOT NULL THEN
7980 LOOP
7981 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Create base price delivery detail id : '||l_freight_cost_main_price(m).delivery_detail_id);
7982 l_freight_cost_main_price(m).creation_date := SYSDATE;
7983 l_freight_cost_main_price(m).created_by := FND_GLOBAL.USER_ID;
7984 l_freight_cost_main_price(m).last_update_date := sysdate;
7985 l_freight_cost_main_price(m).last_updated_by := FND_GLOBAL.USER_ID;
7986 l_freight_cost_main_price(m).last_update_login := FND_GLOBAL.LOGIN_ID;
7987
7988 -- pack J enhancement for FPA --
7989 IF ( l_freight_cost_main_price(m).delivery_detail_id IS NOT NULL
7990 AND g_rolledup_lines.EXISTS(l_freight_cost_main_price(m).delivery_detail_id)
7991 AND g_rolledup_lines(l_freight_cost_main_price(m).delivery_detail_id).category_id
7992 <> g_default_category_id )
7993 THEN
7994 l_freight_cost_main_price(m).commodity_category_id
7995 := g_rolledup_lines(l_freight_cost_main_price(m).delivery_detail_id).category_id;
7996 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
7997 'delivery_detail_id='||l_freight_cost_main_price(m).delivery_detail_id
7998 ||' commodity_category_id ='||l_freight_cost_main_price(m).commodity_category_id);
7999 END IF;
8000
8001 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
8002 p_freight_cost_info => l_freight_cost_main_price(m),
8003 x_rowid => l_rowid,
8004 x_freight_cost_id => l_freight_cost_id,
8005 x_return_status => l_return_status);
8006
8007 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
8008 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
8009 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Create_Freight_Cost Main Price');
8010 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
8011 END IF;
8012 END IF;
8013
8014 IF l_freight_cost_main_price(m).line_type_code <> 'SUMMARY' THEN
8015 l_freight_cost_main_ids(l_freight_cost_main_price(m).delivery_detail_id) := l_freight_cost_id;
8016 END IF;
8017
8018 EXIT WHEN m=l_freight_cost_main_price.LAST;
8019 m := l_freight_cost_main_price.NEXT(m);
8020 END LOOP;
8021 ELSE
8022 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Main fc base price record got created');
8023 END IF;
8024
8025 o := l_freight_cost_main_charge.FIRST;
8026 IF o IS NOT NULL THEN
8027 LOOP
8028 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Create charge delivery detail id : '||l_freight_cost_main_charge(o).delivery_detail_id);
8029 l_freight_cost_main_charge(o).creation_date := SYSDATE;
8030 l_freight_cost_main_charge(o).created_by := FND_GLOBAL.USER_ID;
8031 l_freight_cost_main_charge(o).last_update_date := sysdate;
8032 l_freight_cost_main_charge(o).last_updated_by := FND_GLOBAL.USER_ID;
8033 l_freight_cost_main_charge(o).last_update_login := FND_GLOBAL.LOGIN_ID;
8034 l_freight_cost_main_charge(o).applied_to_charge_id := l_freight_cost_main_ids(l_freight_cost_main_charge(o).delivery_detail_id); -- For a delivery detail there is only one base price to which any charge gets applied to
8035
8036 -- pack J enhancement for FPA --
8037 IF ( l_freight_cost_main_charge(o).delivery_detail_id IS NOT NULL
8038 AND g_rolledup_lines.EXISTS(l_freight_cost_main_charge(o).delivery_detail_id)
8039 AND g_rolledup_lines(l_freight_cost_main_charge(o).delivery_detail_id).category_id
8040 <> g_default_category_id )
8041 THEN
8042 l_freight_cost_main_charge(o).commodity_category_id
8046 ||' commodity_category_id ='||l_freight_cost_main_charge(o).commodity_category_id);
8043 := g_rolledup_lines(l_freight_cost_main_charge(o).delivery_detail_id).category_id;
8044 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
8045 'delivery_detail_id='||l_freight_cost_main_charge(o).delivery_detail_id
8047 END IF;
8048
8049 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
8050 p_freight_cost_info => l_freight_cost_main_charge(o),
8051 x_rowid => l_rowid,
8052 x_freight_cost_id => l_freight_cost_id,
8053 x_return_status => l_return_status);
8054
8055 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
8056 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
8057 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Create_Freight_Cost Main Charge');
8058 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
8059 END IF;
8060 END IF;
8061
8062 EXIT WHEN o=l_freight_cost_main_charge.LAST;
8063 o := l_freight_cost_main_charge.NEXT(o);
8064 END LOOP;
8065 ELSE
8066 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Main fc charge record got created');
8067 END IF;
8068
8069 ELSIF p_save_flag = 'P' THEN -- pl/sql table (OM est)
8070
8071 k := l_freight_cost_temp_price.FIRST;
8072 IF k is NOT NULL THEN
8073 LOOP
8074 -- pack J enhancement for FPA --
8075 IF ( l_freight_cost_temp_price(k).delivery_detail_id IS NOT NULL
8076 AND g_rolledup_lines.EXISTS(l_freight_cost_temp_price(k).delivery_detail_id)
8077 AND g_rolledup_lines(l_freight_cost_temp_price(k).delivery_detail_id).category_id
8078 <> g_default_category_id )
8079 THEN
8080 l_freight_cost_temp_price(k).commodity_category_id
8081 := g_rolledup_lines(l_freight_cost_temp_price(k).delivery_detail_id).category_id;
8082 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
8083 'delivery_detail_id='||l_freight_cost_temp_price(k).delivery_detail_id
8084 ||' commodity_category_id ='||l_freight_cost_temp_price(k).commodity_category_id);
8085 END IF;
8086
8087 EXIT WHEN k=l_freight_cost_temp_price.LAST;
8088 k := l_freight_cost_temp_price.NEXT(k);
8089 END LOOP;
8090 ELSE
8091 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Temp fc base price record got created');
8092 END IF;
8093
8094 n := l_freight_cost_temp_charge.FIRST;
8095 IF n IS NOT NULL THEN
8096 LOOP
8097 -- pack J enhancement for FPA --
8098 IF ( l_freight_cost_temp_charge(n).delivery_detail_id IS NOT NULL
8099 AND g_rolledup_lines.EXISTS(l_freight_cost_temp_charge(n).delivery_detail_id)
8100 AND g_rolledup_lines(l_freight_cost_temp_charge(n).delivery_detail_id).category_id
8101 <> g_default_category_id )
8102 THEN
8103 l_freight_cost_temp_charge(n).commodity_category_id
8104 := g_rolledup_lines(l_freight_cost_temp_charge(n).delivery_detail_id).category_id;
8105 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
8106 'delivery_detail_id='||l_freight_cost_temp_charge(n).delivery_detail_id
8107 ||' commodity_category_id ='||l_freight_cost_temp_charge(n).commodity_category_id);
8108 END IF;
8109
8110 EXIT WHEN n=l_freight_cost_temp_charge.LAST;
8111 n := l_freight_cost_temp_charge.NEXT(n);
8112 END LOOP;
8113 ELSE
8114 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'No Temp fc charge record got created');
8115 END IF;
8116
8117 END IF;
8118
8119 x_freight_cost_temp_price := l_freight_cost_temp_price;
8120 x_freight_cost_temp_charge := l_freight_cost_temp_charge;
8121
8122 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8123
8124 EXCEPTION
8125 WHEN FND_API.G_EXC_ERROR THEN
8126 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8127 FTE_FREIGHT_PRICING_UTIL.set_exception('process_shipment_pattern',FTE_FREIGHT_PRICING_UTIL.G_ERR,'FND_API.G_EXC_ERROR');
8128 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8129
8130
8131
8132 WHEN FTE_FREIGHT_PRICING_UTIL.g_MDC_handle_MDC THEN
8133 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8134 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_MDC_handle_MDC');
8135 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8136
8137 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg THEN
8138 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8139 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_lanesched_seg');
8140 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8141 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_lane_info THEN
8142 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8143 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_lane_info');
8144 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8145 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_segment_service_type THEN
8146 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8150 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8147 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_segment_service_type');
8148 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8149 WHEN FTE_FREIGHT_PRICING_UTIL.g_currency_code_failed THEN
8151 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_currency_code_failed');
8152 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8153 WHEN FTE_FREIGHT_PRICING_UTIL.g_shipment_pattern_failed THEN
8154 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8155 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_shipment_pattern_failed');
8156 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8157 WHEN FTE_FREIGHT_PRICING_UTIL.g_special_conditions_failed THEN
8158 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8159 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_special_conditions_failed');
8160 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8161 WHEN FTE_FREIGHT_PRICING_UTIL.g_process_qp_output_failed THEN
8162 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8163 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_process_qp_output_failed');
8164 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8165 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_fc_temp_failed THEN
8166 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8167 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_create_fc_temp_failed');
8168 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8169 WHEN FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed THEN
8170 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8171 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_update_freight_cost_failed');
8172 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8173 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed THEN
8174 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8175 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_create_freight_cost_failed');
8176 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8177 WHEN others THEN
8178 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8179 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_pricing',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8180 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8181 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8182 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_pricing');
8183
8184 END shipment_pricing;
8185
8186 -- This procedure looks up the delivery lines in g_shipment_line_rows and
8187 -- creates a table of delivery lines after flattening out the hierarchy to
8188 -- only one level under the delivery
8189
8190 PROCEDURE flatten_shipment (
8191 p_delivery_leg_id IN NUMBER DEFAULT NULL, -- Not required
8192 x_first_level_rows OUT NOCOPY shpmnt_content_tab_type, -- Will get indexed on delivery_detail_id
8193 x_return_status OUT NOCOPY VARCHAR2 )
8194 IS
8195 CURSOR c_get_msi_attribs(c_inv_item_id IN NUMBER) IS
8196 SELECT unit_length,unit_width,unit_height,dimension_uom_code,
8197 unit_weight,weight_uom_code,unit_volume,volume_uom_code
8198 FROM mtl_system_items
8199 WHERE inventory_item_id = c_inv_item_id;
8200
8201 -- Bug 2980373 (Front port from 115.27.1158.2) --
8202 CURSOR c_get_def_uoms (c_organization_id IN NUMBER) IS
8203 SELECT uomw.uom_code weight_uom, uomv.uom_code volume_uom
8204 FROM mtl_units_of_measure uomw,
8205 mtl_units_of_measure uomv,
8206 wsh_shipping_parameters wsp
8207 WHERE wsp.weight_uom_class = uomw.uom_class
8208 AND wsp.volume_uom_class = uomv.uom_class
8209 AND uomw.base_uom_flag='Y'
8210 AND uomv.base_uom_flag='Y'
8211 AND wsp.organization_id = c_organization_id;
8212
8213 i NUMBER;
8214 l_msi_attrib_rec c_get_msi_attribs%rowtype;
8215
8216 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8217
8218 BEGIN
8219 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8220 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8221 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'flatten_shipment','start');
8222
8223 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'g_shipment_line_rows COUNT : '||g_shipment_line_rows.COUNT);
8224
8225 i := g_shipment_line_rows.FIRST;
8226 LOOP
8227
8228 -- Bug 2980373 (front port) --
8229 -- clear out record before every iteration
8230 l_msi_attrib_rec.unit_weight := null;
8231 l_msi_attrib_rec.weight_uom_code := null;
8232 l_msi_attrib_rec.unit_volume := null;
8233 l_msi_attrib_rec.volume_uom_code := null;
8234 l_msi_attrib_rec.dimension_uom_code := null;
8235 l_msi_attrib_rec.unit_length := null;
8236 l_msi_attrib_rec.unit_width := null;
8237 l_msi_attrib_rec.unit_height := null;
8238
8239
8240 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Delivery leg Id : '||g_shipment_line_rows(i).delivery_leg_id);
8241
8245
8242 IF (p_delivery_leg_id IS NOT NULL) AND (g_shipment_line_rows(i).delivery_leg_id <> p_delivery_leg_id) THEN
8243 goto nextpass;
8244 END IF;
8246 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Delivery leg Id : '||g_shipment_line_rows(i).delivery_leg_id);
8247 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Delivery Detail Id : '||g_shipment_line_rows(i).delivery_detail_id);
8248
8249 -- inventory_item_id can be null on delivery details for various reasons :
8250 -- 1) FTE J estimate rate
8251 -- 2) FTE J one-time items (OKE, inbound)
8252 -- 3) WMS containers (logical groupings) - bug 2980373
8253
8254 IF g_shipment_line_rows(i).parent_delivery_detail_id IS NULL THEN -- Top level delivery line
8255 x_first_level_rows(i).content_id := g_shipment_line_rows(i).delivery_detail_id;
8256 x_first_level_rows(i).delivery_leg_id := g_shipment_line_rows(i).delivery_leg_id;
8257 x_first_level_rows(i).container_type_code := g_shipment_line_rows(i).container_type_code;
8258 x_first_level_rows(i).wdd_weight_uom_code := g_shipment_line_rows(i).weight_uom_code;
8259 x_first_level_rows(i).wdd_volume_uom_code := g_shipment_line_rows(i).volume_uom_code;
8260 x_first_level_rows(i).wdd_net_weight := g_shipment_line_rows(i).net_weight;
8261 x_first_level_rows(i).wdd_gross_weight := g_shipment_line_rows(i).gross_weight;
8262 x_first_level_rows(i).wdd_volume := g_shipment_line_rows(i).volume;
8263
8264 IF g_shipment_line_rows(i).gross_weight is NULL
8265 or g_shipment_line_rows(i).net_weight is NULL THEN
8266 x_first_level_rows(i).wdd_tare_weight := 0;
8267 ELSIF g_shipment_line_rows(i).gross_weight <= g_shipment_line_rows(i).net_weight THEN
8268 x_first_level_rows(i).wdd_tare_weight := 0;
8269 ELSE
8270 x_first_level_rows(i).wdd_tare_weight :=
8271 g_shipment_line_rows(i).gross_weight - g_shipment_line_rows(i).net_weight;
8272 END IF;
8273
8274 -- branching added to handle null inventory_item_id
8275 IF (g_shipment_line_rows(i).inventory_item_id IS NOT NULL ) THEN
8276 OPEN c_get_msi_attribs(g_shipment_line_rows(i).inventory_item_id);
8277 FETCH c_get_msi_attribs INTO l_msi_attrib_rec;
8278 CLOSE c_get_msi_attribs;
8279 IF (l_msi_attrib_rec.unit_weight is null) THEN
8280 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Warning : Item weight is null ');
8281 END IF;
8282 ELSE
8283 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Inventory_item_id is null');
8284 END IF;
8285
8286 -- Following fields are obtained from msi
8287 x_first_level_rows(i).dim_uom := l_msi_attrib_rec.dimension_uom_code;
8288 x_first_level_rows(i).length := l_msi_attrib_rec.unit_length;
8289 x_first_level_rows(i).width := l_msi_attrib_rec.unit_width;
8290 x_first_level_rows(i).height := l_msi_attrib_rec.unit_height;
8291
8292 IF g_shipment_line_rows(i).container_flag = 'N' THEN -- Loose item
8293
8294 x_first_level_rows(i).container_flag := 'N';
8295 --x_first_level_rows(i).gross_weight := g_shipment_line_rows(i).gross_weight;
8296 x_first_level_rows(i).gross_weight := nvl(g_shipment_line_rows(i).net_weight,g_shipment_line_rows(i).gross_weight);
8297 x_first_level_rows(i).weight_uom := g_shipment_line_rows(i).weight_uom_code;
8298 x_first_level_rows(i).volume := g_shipment_line_rows(i).volume;
8299 x_first_level_rows(i).volume_uom := g_shipment_line_rows(i).volume_uom_code;
8300
8301 ELSE -- Top level container
8302
8303 x_first_level_rows(i).container_flag := 'Y';
8304 IF (g_shipment_line_rows(i).inventory_item_id IS NOT NULL ) THEN
8305 x_first_level_rows(i).gross_weight := l_msi_attrib_rec.unit_weight; -- Container Item's unit weight
8306 x_first_level_rows(i).weight_uom := l_msi_attrib_rec.weight_uom_code;
8307 x_first_level_rows(i).volume := l_msi_attrib_rec.unit_volume;
8308 x_first_level_rows(i).volume_uom := l_msi_attrib_rec.volume_uom_code;
8309 ELSE
8310 -- Bug 2980373 (front port) --
8311 -- get default uoms for the organization and set weight/volume to 0
8312 OPEN c_get_def_uoms (g_shipment_line_rows(i).organization_id);
8313 FETCH c_get_def_uoms INTO l_msi_attrib_rec.weight_uom_code,
8314 l_msi_attrib_rec.volume_uom_code;
8315 CLOSE c_get_def_uoms;
8316
8317 IF (l_msi_attrib_rec.weight_uom_code IS NULL
8318 OR l_msi_attrib_rec.weight_uom_code IS NULL ) THEN
8319 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Warning : Shipping parameters - default weight / volume class missing');
8320 END IF;
8321 x_first_level_rows(i).gross_weight := 0;
8322 x_first_level_rows(i).weight_uom := l_msi_attrib_rec.weight_uom_code;
8323 x_first_level_rows(i).volume := 0;
8324 x_first_level_rows(i).volume_uom := l_msi_attrib_rec.volume_uom_code;
8325 END IF;
8326
8327 END IF;
8328
8329 END IF;
8330
8331 <<nextpass>>
8332
8333 EXIT WHEN i=g_shipment_line_rows.LAST;
8334 i := g_shipment_line_rows.NEXT(i);
8335
8336 END LOOP;
8337 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Exit loop ');
8338 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'flatten_shipment');
8339
8340 EXCEPTION
8344 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8341 WHEN others THEN
8342 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8343 FTE_FREIGHT_PRICING_UTIL.set_exception('flatten_shipment',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8345 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8346 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'flatten_shipment');
8347 END flatten_shipment;
8348
8349 PROCEDURE get_top_level_charges (
8350 p_first_level_rows IN shpmnt_content_tab_type, -- Will get indexed on delivery_detail_id
8351 x_shpmnt_toplevel_charges OUT NOCOPY addl_services_tab_type, -- Top level additional services
8352 x_return_status OUT NOCOPY VARCHAR2 )
8353 IS
8354 CURSOR c_get_services(c_delivery_detail_id IN NUMBER) IS
8355 SELECT DISTINCT wfct.freight_cost_type_code,wfct.freight_cost_type_id
8356 FROM wsh_freight_cost_types wfct,
8357 wsh_freight_costs wfc
8358 WHERE wfc.delivery_detail_id = c_delivery_detail_id
8359 AND wfc.charge_source_code = 'REQUESTED'
8360 AND wfc.freight_cost_type_id = wfct.freight_cost_type_id;
8361
8362 i NUMBER:=0;
8363 l_service_line_index NUMBER:=0;
8364 l_freight_cost_type_id NUMBER:=0;
8365 l_freight_cost_type_code VARCHAR2(200);
8366
8367 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8368
8369 BEGIN
8370
8371 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8372 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8373 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_top_level_charges','start');
8374
8375 i := p_first_level_rows.FIRST;
8376 LOOP
8377
8378 OPEN c_get_services(p_first_level_rows(i).content_id);
8379 LOOP
8380 FETCH c_get_services INTO l_freight_cost_type_code,l_freight_cost_type_id;
8381 EXIT WHEN c_get_services%NOTFOUND;
8382
8383 l_service_line_index := l_service_line_index + 1;
8384 x_shpmnt_toplevel_charges(l_service_line_index).service_line_index := l_service_line_index;
8385 x_shpmnt_toplevel_charges(l_service_line_index).content_id := p_first_level_rows(i).content_id;
8386 x_shpmnt_toplevel_charges(l_service_line_index).freight_cost_type_code := l_freight_cost_type_code;
8387 x_shpmnt_toplevel_charges(l_service_line_index).freight_cost_type_id := l_freight_cost_type_id;
8388
8389 END LOOP;
8390 CLOSE c_get_services;
8391
8392 EXIT WHEN i=p_first_level_rows.LAST;
8393 i := p_first_level_rows.NEXT(i);
8394 END LOOP;
8395 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_top_level_charges');
8396
8397 EXCEPTION
8398 WHEN others THEN
8399 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8400 FTE_FREIGHT_PRICING_UTIL.set_exception('get_top_level_charges',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8401 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8402 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8403 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_top_level_charges');
8404 END get_top_level_charges;
8405
8406 -- Public Procedures
8407
8408 FUNCTION is_consolidated (
8409 p_segment_id IN NUMBER ) RETURN BOOLEAN
8410 IS
8411 -- CURSOR c_get_consolidate_flag IS
8412 -- SELECT nvl(consolidation_allowed,'N')
8413 -- FROM wsh_trips
8414 -- WHERE trip_id = p_segment_id;
8415
8416 CURSOR c_get_lane_function IS
8417 SELECT nvl(value_from, 'NONE')
8418 FROM wsh_trips a, fte_prc_parameters b
8419 WHERE a.trip_id = p_segment_id
8420 AND a.lane_id = b.lane_id
8421 AND b.parameter_id = 1;
8422
8423 l_consolidation_allowed VARCHAR2(1);
8424 l_lane_function FTE.FTE_PRC_PARAMETERS.VALUE_FROM%TYPE;
8425 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8426
8427 BEGIN
8428
8429 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8430 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'is_consolidated','start');
8431
8432 -- OPEN c_get_consolidate_flag;
8433 -- FETCH c_get_consolidate_flag INTO l_consolidation_allowed;
8434 -- CLOSE c_get_consolidate_flag;
8435
8436 -- IF l_consolidation_allowed = 'Y' THEN
8437 -- FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'is_consolidated');
8438 -- RETURN TRUE;
8439 -- ELSE
8440 -- FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'is_consolidated');
8441 -- RETURN FALSE;
8442 -- END IF;
8443
8444 -- *** FTE J --
8445 -- Always return TRUE
8446 -- original code to look at trips commented out
8447
8448 -- J+ delivery flat rating
8449
8450 OPEN c_get_lane_function;
8451 FETCH c_get_lane_function INTO l_lane_function;
8452 CLOSE c_get_lane_function;
8453
8454 IF l_lane_function = 'FLAT' THEN
8455 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'is_consolidated');
8456 RETURN FALSE;
8457 ELSE
8458 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'is_consolidated');
8459 RETURN TRUE;
8460 END IF;
8461 EXCEPTION
8462 WHEN others THEN
8463 --x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8464 FTE_FREIGHT_PRICING_UTIL.set_exception('is_consolidated',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8465 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8469
8466 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8467 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'is_consolidated');
8468 END is_consolidated;
8470 FUNCTION get_segment_from_dleg (
8471 p_delivery_leg_id IN NUMBER ) RETURN NUMBER
8472 IS
8473 CURSOR c_get_segment IS
8474 SELECT wt.trip_id
8475 FROM wsh_trips wt,
8476 wsh_delivery_legs wdl,
8477 wsh_trip_stops wts1,
8478 wsh_trip_stops wts2
8479 WHERE wts1.stop_id = wdl.pick_up_stop_id
8480 AND wts2.stop_id = wdl.drop_off_stop_id
8481 AND wts1.trip_id = wt.trip_id
8482 and wts2.trip_id = wt.trip_id
8483 AND wdl.delivery_leg_id = p_delivery_leg_id;
8484
8485 l_segment_id NUMBER;
8486
8487 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8488
8489 BEGIN
8490
8491 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8492 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_segment_from_dleg','start');
8493 OPEN c_get_segment;
8494 FETCH c_get_segment INTO l_segment_id;
8495 CLOSE c_get_segment;
8496
8497 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_segment_from_dleg');
8498 RETURN l_segment_id;
8499
8500 EXCEPTION
8501 WHEN others THEN
8502 --x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8503 FTE_FREIGHT_PRICING_UTIL.set_exception('get_segment_from_dleg',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8504 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8505 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8506 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_segment_from_dleg');
8507 END get_segment_from_dleg;
8508
8509 FUNCTION get_delivery_from_dleg (
8510 p_delivery_leg_id IN NUMBER ) RETURN NUMBER
8511 IS
8512 CURSOR c_get_delivery IS
8513 SELECT delivery_id
8514 FROM wsh_delivery_legs
8515 WHERE delivery_leg_id = p_delivery_leg_id;
8516
8517 l_delivery_id NUMBER;
8518
8519 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8520
8521 BEGIN
8522
8523 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8524 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_delivery_from_dleg','start');
8525
8526 OPEN c_get_delivery;
8527 FETCH c_get_delivery INTO l_delivery_id;
8528 CLOSE c_get_delivery;
8529
8530 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_delivery_from_dleg');
8531 RETURN l_delivery_id;
8532
8533 EXCEPTION
8534 WHEN others THEN
8535 --x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8536 FTE_FREIGHT_PRICING_UTIL.set_exception('get_delivery_from_dleg',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8537 --FTE_FREIGHT_PRICING_UTIL.print_debug('Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8538 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8539 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_delivery_from_dleg');
8540 END get_delivery_from_dleg;
8541
8542 FUNCTION get_fc_id_from_dleg (
8543 p_delivery_leg_id IN NUMBER ) RETURN NUMBER
8544 IS
8545
8546 CURSOR c_get_freight_cost_id IS
8547 SELECT freight_cost_id
8548 FROM wsh_freight_costs
8549 WHERE delivery_leg_id = p_delivery_leg_id
8550 AND delivery_detail_id IS NULL
8551 AND line_type_code = 'SUMMARY';
8552
8553 l_freight_cost_id NUMBER;
8554
8555 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8556
8557 BEGIN
8558
8559 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8560 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_fc_id_from_dleg','start');
8561
8562
8563 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'DLEG ID:'||p_delivery_leg_id);
8564
8565 OPEN c_get_freight_cost_id;
8566 FETCH c_get_freight_cost_id INTO l_freight_cost_id;
8567 CLOSE c_get_freight_cost_id;
8568
8569 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'FC ID:'||l_freight_cost_id);
8570
8571 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_fc_id_from_dleg');
8572 RETURN l_freight_cost_id;
8573
8574 EXCEPTION
8575 WHEN others THEN
8576 --x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8577 FTE_FREIGHT_PRICING_UTIL.set_exception('get_fc_id_from_dleg',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8578 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8579 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_fc_id_from_dleg');
8580 END get_fc_id_from_dleg;
8581
8582 PROCEDURE delete_invalid_fc_recs (
8583 p_segment_id IN NUMBER DEFAULT NULL,
8584 p_delivery_leg_id IN NUMBER DEFAULT NULL,
8585 x_return_status OUT NOCOPY VARCHAR2 )
8586 IS
8587
8588 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8589
8590
8591
8592 CURSOR c_lock_wfc_1(c_segment_id NUMBER)
8593 IS
8594
8595 SELECT wfc.freight_cost_id
8596 FROM wsh_freight_costs wfc,
8597 wsh_delivery_legs dl ,
8598 wsh_trip_stops s
8599 WHERE wfc.delivery_leg_id = dl.delivery_leg_id
8600 and dl.pick_up_stop_id=s.stop_id
8601 and s.trip_id=c_segment_id
8605 CURSOR c_lock_wfc_2(c_delivery_leg_id NUMBER)
8602 and wfc.charge_source_code='PRICING_ENGINE'
8603 FOR UPDATE OF wfc.freight_cost_id NOWAIT;
8604
8606 IS
8607 SELECT wfc.freight_cost_id
8608 FROM wsh_freight_costs wfc
8609 WHERE wfc.delivery_leg_id = c_delivery_leg_id
8610 AND charge_source_code = 'PRICING_ENGINE'
8611 FOR UPDATE NOWAIT;
8612
8613
8614 l_wfc_detail_ids DBMS_UTILITY.NUMBER_ARRAY;
8615 l_wfc_dleg_ids DBMS_UTILITY.NUMBER_ARRAY;
8616
8617
8618 BEGIN
8619
8620 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8621 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8622 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'delete_invalid_fc_recs','start');
8623
8624 -- Here determine if a trip has been passed or a delivery leg
8625
8626 IF p_segment_id IS NULL AND p_delivery_leg_id IS NULL THEN
8627
8628 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8629 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_invalid_fc_recs');
8630 RETURN;
8631
8632 ELSIF p_delivery_leg_id IS NULL THEN
8633
8634 OPEN c_lock_wfc_1(p_segment_id);
8635 FETCH c_lock_wfc_1 BULK COLLECT INTO l_wfc_detail_ids;
8636 CLOSE c_lock_wfc_1;
8637
8638 IF (l_wfc_detail_ids.FIRST IS NOT NULL)
8639 THEN
8640
8641 FORALL i IN l_wfc_detail_ids.FIRST..l_wfc_detail_ids.LAST
8642 DELETE
8643 FROM wsh_freight_costs wfc
8644 WHERE wfc.freight_cost_id = l_wfc_detail_ids(i)
8645 AND (line_type_code <> 'SUMMARY'
8646 OR (line_type_code = 'SUMMARY' AND delivery_detail_id IS NOT NULL));
8647
8648 FORALL i IN l_wfc_detail_ids.FIRST..l_wfc_detail_ids.LAST
8649
8650 UPDATE wsh_freight_costs wfc
8651 SET unit_amount=NULL,
8652 total_amount=NULL,
8653 currency_code=NULL
8654 WHERE wfc.freight_cost_id=l_wfc_detail_ids(i)
8655 AND line_type_code = 'SUMMARY'
8656 AND delivery_detail_id IS NULL;
8657
8658 END IF;
8659
8660 ELSIF p_segment_id IS NULL THEN
8661
8662 OPEN c_lock_wfc_2(p_delivery_leg_id);
8663 FETCH c_lock_wfc_2 BULK COLLECT INTO l_wfc_dleg_ids;
8664 CLOSE c_lock_wfc_2;
8665
8666 IF ( l_wfc_dleg_ids.FIRST IS NOT NULL)
8667 THEN
8668
8669 FORALL i IN l_wfc_dleg_ids.FIRST..l_wfc_dleg_ids.LAST
8670 DELETE
8671 FROM wsh_freight_costs wfc
8672 WHERE wfc.freight_cost_id=l_wfc_dleg_ids(i)
8673 AND (line_type_code <> 'SUMMARY'
8674 OR (line_type_code = 'SUMMARY' AND delivery_detail_id IS NOT NULL));
8675
8676
8677 FORALL i IN l_wfc_dleg_ids.FIRST..l_wfc_dleg_ids.LAST
8678 UPDATE wsh_freight_costs wfc
8679 SET unit_amount=NULL,
8680 total_amount=NULL,
8681 currency_code=NULL
8682 WHERE wfc.freight_cost_id=l_wfc_dleg_ids(i)
8683 AND line_type_code = 'SUMMARY'
8684 AND delivery_detail_id IS NULL;
8685
8686
8687
8688 END IF;
8689
8690
8691
8692 END IF;
8693 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_invalid_fc_recs');
8694
8695 EXCEPTION
8696 WHEN others THEN
8697 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8698 FTE_FREIGHT_PRICING_UTIL.set_exception('delete_invalid_fc_recs',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8699 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8700 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_invalid_fc_recs');
8701 END delete_invalid_fc_recs;
8702
8703 PROCEDURE unmark_reprice_required (
8704 p_segment_id IN NUMBER DEFAULT NULL,
8705 p_delivery_leg_id IN NUMBER DEFAULT NULL,
8706 x_return_status OUT NOCOPY VARCHAR2 )
8707 IS
8708
8709 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
8710
8711 BEGIN
8712
8713 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8714 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8715 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'unmark_reprice_required','start');
8716
8717 -- Here determine if a trip has been passed or a delivery leg
8718
8719 IF p_segment_id IS NULL AND p_delivery_leg_id IS NULL THEN
8720
8721 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8722 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'unmark_reprice_required');
8723 RETURN;
8724
8725 ELSIF p_delivery_leg_id IS NULL THEN
8726
8727 UPDATE wsh_delivery_legs
8728 SET reprice_required = 'N'
8729 WHERE delivery_leg_id IN (
8730 SELECT wdl.delivery_leg_id
8731 FROM wsh_delivery_legs wdl,
8732 wsh_trips wt,
8733 wsh_trip_stops wts1,
8734 wsh_trip_stops wts2
8735 WHERE wt.trip_id = wts1.trip_id
8736 AND wt.trip_id = wts2.trip_id
8737 AND wts1.stop_id = wdl.pick_up_stop_id
8738 AND wts2.stop_id = wdl.drop_off_stop_id
8739 AND wt.trip_id = p_segment_id );
8740
8741 ELSIF p_segment_id IS NULL THEN
8742
8743 UPDATE wsh_delivery_legs
8744 SET reprice_required = 'N'
8745 WHERE delivery_leg_id = p_delivery_leg_id;
8746
8747 END IF;
8751 WHEN others THEN
8748 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'unmark_reprice_required');
8749
8750 EXCEPTION
8752 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8753 FTE_FREIGHT_PRICING_UTIL.set_exception('unmark_reprice_required',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
8754 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
8755 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'unmark_reprice_required');
8756 END unmark_reprice_required;
8757
8758 PROCEDURE shipment_price_consolidate (
8759 p_delivery_leg_id IN NUMBER DEFAULT NULL, -- Gets either Dleg or wsh trip
8760 p_segment_id IN NUMBER DEFAULT NULL,
8761 p_check_reprice_flag IN VARCHAR2 DEFAULT 'N',
8762 x_return_status OUT NOCOPY VARCHAR2 )
8763 IS
8764
8765 CURSOR c_delivery_from_trip(c_trip_id IN NUMBER) IS
8766 Select wdd.delivery_detail_id,
8767 wda.delivery_id,
8768 wdl.delivery_leg_id,
8769 nvl(wdl.reprice_required,'N') as reprice_required, -- Added AG 05/10
8770 wda.parent_delivery_detail_id,
8771 wdd.customer_id ,
8772 wdd.sold_to_contact_id ,
8773 wdd.inventory_item_id ,
8774 wdd.item_description ,
8775 wdd.hazard_class_id ,
8776 wdd.country_of_origin ,
8777 wdd.classification ,
8778 wdd.requested_quantity ,
8779 wdd.requested_quantity_uom ,
8780 wdd.master_container_item_id ,
8781 wdd.detail_container_item_id ,
8782 wdd.customer_item_id ,
8783 wdd.net_weight ,
8784 wdd.organization_id ,
8785 wdd.container_flag ,
8786 wdd.container_type_code ,
8787 wdd.container_name ,
8788 wdd.fill_percent ,
8789 wdd.gross_weight ,
8790 wdd.currency_code ,
8791 wdd.freight_class_cat_id ,
8792 wdd.commodity_code_cat_id ,
8793 wdd.weight_uom_code ,
8794 wdd.volume ,
8795 wdd.volume_uom_code ,
8796 wdd.tp_attribute_category ,
8797 wdd.tp_attribute1 ,
8798 wdd.tp_attribute2 ,
8799 wdd.tp_attribute3 ,
8800 wdd.tp_attribute4 ,
8801 wdd.tp_attribute5 ,
8802 wdd.tp_attribute6 ,
8803 wdd.tp_attribute7 ,
8804 wdd.tp_attribute8 ,
8805 wdd.tp_attribute9 ,
8806 wdd.tp_attribute10 ,
8807 wdd.tp_attribute11 ,
8808 wdd.tp_attribute12 ,
8809 wdd.tp_attribute13 ,
8810 wdd.tp_attribute14 ,
8811 wdd.tp_attribute15 ,
8812 wdd.attribute_category ,
8813 wdd.attribute1 ,
8814 wdd.attribute2 ,
8815 wdd.attribute3 ,
8816 wdd.attribute4 ,
8817 wdd.attribute5 ,
8818 wdd.attribute6 ,
8819 wdd.attribute7 ,
8820 wdd.attribute8 ,
8821 wdd.attribute9 ,
8822 wdd.attribute10 ,
8823 wdd.attribute11 ,
8824 wdd.attribute12 ,
8825 wdd.attribute13 ,
8826 wdd.attribute14,
8827 wdd.attribute15,
8828 'FTE', -- source_type
8829 NULL, -- source_line_id
8830 NULL, -- source_header_id
8831 NULL, -- source_consolidation_id
8832 NULL, -- ship_date
8833 NULL, -- arrival_date
8834 NULL, -- comm_category_id
8835 wda.type,
8836 wda.parent_delivery_id,
8837 wdl.parent_delivery_leg_id
8838 from wsh_delivery_details wdd, wsh_delivery_assignments wda,
8839 wsh_new_deliveries wd,
8840 wsh_delivery_legs wdl, wsh_trip_stops wts1, wsh_trip_stops wts2,wsh_trips wt
8841 where wdd.delivery_detail_id = wda.delivery_detail_id
8842 and wda.delivery_id = wdl.delivery_id
8843 and wdl.delivery_id = wd.delivery_id
8844 and wdl.pick_up_stop_id = wts1.stop_id
8845 and wdl.drop_off_stop_id = wts2.stop_id
8846 --and wdl.reprice_required = 'Y' -- Not required AG 05/10
8847 and wts1.trip_id = wt.trip_id
8848 and wts2.trip_id = wt.trip_id
8849 and (wda.type IS null OR wda.type <> 'O')--MDC
8850 and wt.trip_id = c_trip_id;
8851
8852 CURSOR c_delivery_leg(c_delivery_leg_id IN NUMBER) IS
8853 Select wdd.delivery_detail_id,
8854 wda.delivery_id,
8855 wdl.delivery_leg_id,
8856 nvl(wdl.reprice_required,'N') as reprice_required, -- Added AG 05/10
8857 wda.parent_delivery_detail_id,
8858 wdd.customer_id ,
8859 wdd.sold_to_contact_id ,
8860 wdd.inventory_item_id ,
8861 wdd.item_description ,
8862 wdd.hazard_class_id ,
8863 wdd.country_of_origin ,
8864 wdd.classification ,
8865 wdd.requested_quantity ,
8869 wdd.customer_item_id ,
8866 wdd.requested_quantity_uom ,
8867 wdd.master_container_item_id ,
8868 wdd.detail_container_item_id ,
8870 wdd.net_weight ,
8871 wdd.organization_id ,
8872 wdd.container_flag ,
8873 wdd.container_type_code ,
8874 wdd.container_name ,
8875 wdd.fill_percent ,
8876 wdd.gross_weight ,
8877 wdd.currency_code ,
8878 wdd.freight_class_cat_id ,
8879 wdd.commodity_code_cat_id ,
8880 wdd.weight_uom_code ,
8881 wdd.volume ,
8882 wdd.volume_uom_code ,
8883 wdd.tp_attribute_category ,
8884 wdd.tp_attribute1 ,
8885 wdd.tp_attribute2 ,
8886 wdd.tp_attribute3 ,
8887 wdd.tp_attribute4 ,
8888 wdd.tp_attribute5 ,
8889 wdd.tp_attribute6 ,
8890 wdd.tp_attribute7 ,
8891 wdd.tp_attribute8 ,
8892 wdd.tp_attribute9 ,
8893 wdd.tp_attribute10 ,
8894 wdd.tp_attribute11 ,
8895 wdd.tp_attribute12 ,
8896 wdd.tp_attribute13 ,
8897 wdd.tp_attribute14 ,
8898 wdd.tp_attribute15 ,
8899 wdd.attribute_category ,
8900 wdd.attribute1 ,
8901 wdd.attribute2 ,
8902 wdd.attribute3 ,
8903 wdd.attribute4 ,
8904 wdd.attribute5 ,
8905 wdd.attribute6 ,
8906 wdd.attribute7 ,
8907 wdd.attribute8 ,
8908 wdd.attribute9 ,
8909 wdd.attribute10 ,
8910 wdd.attribute11 ,
8911 wdd.attribute12 ,
8912 wdd.attribute13 ,
8913 wdd.attribute14,
8914 wdd.attribute15,
8915 'FTE', -- source_type
8916 NULL, -- source_line_id
8917 NULL, -- source_header_id
8918 NULL, -- source_consolidation_id
8919 NULL, -- ship_date
8920 NULL, -- arrival_date
8921 NULL, -- comm_category_id
8922 wda.type,
8923 wda.parent_delivery_id,
8924 wdl.parent_delivery_leg_id
8925 from wsh_delivery_details wdd, wsh_delivery_assignments wda, wsh_delivery_legs wdl,
8926 wsh_new_deliveries wd
8927 where wdd.delivery_detail_id = wda.delivery_detail_id
8928 and wda.delivery_id = wdl.delivery_id
8929 and wdl.delivery_id = wd.delivery_id
8930 and ((wdl.reprice_required = 'Y' AND p_check_reprice_flag = 'Y') OR (p_check_reprice_flag = 'N'))
8931 and (wda.type IS null OR wda.type <> 'O')--MDC
8932 and wdl.delivery_leg_id = c_delivery_leg_id;
8933
8934 CURSOR c_trip_first_stop(c_trip_id NUMBER)
8935 IS
8936 SELECT planned_departure_date
8937 FROM wsh_trip_stops
8938 WHERE trip_id = c_trip_id
8939 AND stop_sequence_number =
8940 (SELECT min(stop_sequence_number)
8941 FROM wsh_trip_stops
8942 WHERE trip_id = c_trip_id);
8943
8944 CURSOR c_trip_last_stop(c_trip_id NUMBER)
8945 IS
8946 SELECT planned_arrival_date
8947 FROM wsh_trip_stops
8948 WHERE trip_id = c_trip_id
8949 AND stop_sequence_number =
8950 (SELECT max(stop_sequence_number)
8951 FROM wsh_trip_stops
8952 WHERE trip_id = c_trip_id);
8953 --
8954 l_return_status VARCHAR2(1);
8955 l_return_code NUMBER;
8956 l_delvy_det_rec shipment_line_rec_type;
8957 l_dlvy WSH_UTIL_CORE.id_tab_type;
8958 l_first_level_rows shpmnt_content_tab_type;
8959 l_first_level_charges addl_services_tab_type;
8960
8961 l_dummy_summary NUMBER;
8962 l_dummy_summary_uom VARCHAR2(40);
8963 l_segment_id NUMBER;
8964 l_reprice_reqd_count NUMBER:=0;
8965 l_delivery_id NUMBER;
8966 i NUMBER;
8967 j NUMBER;
8968 l_dummy_fc_temp_price Freight_Cost_Temp_Tab_Type;
8969 l_dummy_fc_temp_charge Freight_Cost_Temp_Tab_Type;
8970
8971 l_initial_pickup_date DATE;
8972 l_ultimate_dropoff_date DATE;
8973
8974 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
8975
8976 BEGIN
8977
8978 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8979 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
8980 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_price_consolidate','start');
8981
8982 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_delivery_leg_id='||p_delivery_leg_id);
8983 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_segment_id='||p_segment_id);
8984 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_check_reprice_flag='||p_check_reprice_flag);
8985
8986 IF p_segment_id IS NULL AND p_delivery_leg_id IS NULL THEN
8987
8988 raise FTE_FREIGHT_PRICING_UTIL.g_noleg_segment;
8989
8990 ELSIF p_segment_id IS NOT NULL THEN
8991 validate_nontl_trip(
8992 p_trip_id => p_segment_id,
8993 x_return_code => l_return_code);
8994
8995 IF l_return_code = G_RC_ERROR THEN
8999 OR l_return_code = G_RC_NOT_RATE_MANIFESTING) THEN
8996 RAISE FND_API.G_EXC_ERROR;
8997 ELSIF (l_return_code = G_RC_REPRICE_NOT_REQUIRED
8998 OR l_return_code = G_RC_NOT_RATE_FREIGHT_TERM
9000 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9001 raise g_finished_warning;
9002 END IF;
9003 ELSE
9004
9005 OPEN c_get_delivery_id(p_delivery_leg_id);
9006 FETCH c_get_delivery_id INTO l_delivery_id;
9007 CLOSE c_get_delivery_id;
9008
9009 validate_delivery(
9010 p_delivery_id => l_delivery_id,
9011 x_return_code => l_return_code);
9012
9013 IF l_return_code = G_RC_ERROR THEN
9014 RAISE FND_API.G_EXC_ERROR;
9015 ELSIF (l_return_code = G_RC_REPRICE_NOT_REQUIRED
9016 OR l_return_code = G_RC_NOT_RATE_FREIGHT_TERM
9017 OR l_return_code = G_RC_NOT_RATE_MANIFESTING) THEN
9018 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9019 raise g_finished_warning;
9020 END IF;
9021 END IF;
9022
9023 g_shipment_line_rows.DELETE;
9024
9025 SAVEPOINT before_pricing;
9026
9027 -- Here determine if a trip has been passed or a delivery leg
9028
9029 IF p_segment_id IS NOT NULL THEN
9030
9031 IF p_check_reprice_flag = 'Y' THEN
9032
9033 OPEN c_count_reprice_reqd(p_segment_id);
9034 FETCH c_count_reprice_reqd INTO l_reprice_reqd_count;
9035 CLOSE c_count_reprice_reqd;
9036
9037 END IF;
9038
9039 IF (p_check_reprice_flag = 'Y' AND l_reprice_reqd_count > 0) OR
9040 p_check_reprice_flag = 'N' THEN
9041
9042 OPEN c_delivery_from_trip(p_segment_id);
9043
9044 LOOP
9045 FETCH c_delivery_from_trip INTO l_delvy_det_rec;
9046 EXIT WHEN c_delivery_from_trip%NOTFOUND;
9047 g_shipment_line_rows(l_delvy_det_rec.delivery_detail_id) := l_delvy_det_rec;
9048 END LOOP;
9049 IF c_delivery_from_trip%ROWCOUNT = 0 THEN
9050 CLOSE c_delivery_from_trip;
9051 --raise FTE_FREIGHT_PRICING_UTIL.g_pricing_not_required;
9052 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9053 --raise others; -- Should not happen ie. unexpected error
9054 ELSE
9055 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matching number of delivery lines : '||c_delivery_from_trip%ROWCOUNT);
9056 END IF;
9057
9058 CLOSE c_delivery_from_trip;
9059
9060
9061 IF is_consolidated(p_segment_id) THEN -- New API
9062 -- If atleast one delivery leg for this segment has reprice required flag = 'Y'
9063 -- then all the delivery legs need to be repriced irrespective of their flags
9064
9065 -- Need to delete existing freight cost records
9066 -- for all delivery legs in this trip segment
9067
9068 delete_invalid_fc_recs (
9069 p_segment_id => p_segment_id,
9070 x_return_status => l_return_status ) ;
9071
9072 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9073 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9074 ROLLBACK to before_pricing;
9075 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment:delete_invalid_fc_recs ');
9076 raise FTE_FREIGHT_PRICING_UTIL.g_delete_invalid_fc_failed;
9077 END IF;
9078 ELSE
9079 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,p_segment_id||' : Existing freight cost records deleted ');
9080 END IF;
9081
9082 flatten_shipment (
9083 x_first_level_rows => l_first_level_rows,
9084 x_return_status => l_return_status );
9085
9086 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9087 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9088 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment:Consolidate=Y:flatten_shipment ');
9089 ROLLBACK to before_pricing;
9090 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
9091 END IF;
9092 ELSE -- What happens if no first level rows are created
9093 -- raise FTE_FREIGHT_PRICING_UTIL.g_an exception
9094 -- Should never happen AG 05/10
9095 IF l_first_level_rows.COUNT = 0 THEN
9096 ROLLBACK to before_pricing;
9097 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9098 END IF;
9099 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'No. of top level lines 2 : '||l_first_level_rows.COUNT);
9100 END IF;
9101
9102 -- Scoped out for patch H
9103 /*
9104 get_top_level_charges (
9105 p_first_level_rows => l_first_level_rows,
9106 x_shpmnt_toplevel_charges => l_first_level_charges,
9107 x_return_status => l_return_status );
9108 */
9109
9110 OPEN c_trip_first_stop(p_segment_id);
9111 FETCH c_trip_first_stop INTO l_initial_pickup_date;
9112 CLOSE c_trip_first_stop;
9113
9114 OPEN c_trip_last_stop(p_segment_id);
9115 FETCH c_trip_last_stop INTO l_ultimate_dropoff_date;
9116 CLOSE c_trip_last_stop;
9117
9118 shipment_pricing (
9119 p_segment_id => p_segment_id,-- Input either Lane or the trip segment
9120 p_shpmnt_toplevel_rows => l_first_level_rows,
9121 p_shpmnt_toplevel_charges => l_first_level_charges,
9122 p_ship_date => l_initial_pickup_date,
9126 x_summary_lanesched_price_uom => l_dummy_summary_uom,
9123 p_arrival_date => l_ultimate_dropoff_date,
9124 p_save_flag => 'M', -- Whether to save to TEMP table or MAIN table
9125 x_summary_lanesched_price => l_dummy_summary,
9127 x_freight_cost_temp_price => l_dummy_fc_temp_price,
9128 x_freight_cost_temp_charge => l_dummy_fc_temp_charge,
9129 x_return_status => l_return_status ) ;
9130
9131 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9132 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9133 ROLLBACK to before_pricing;
9134 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment:Consolidate=Y:shipment_pricing ');
9135 raise FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed;
9136 END IF;
9137 ELSE -- What happens if no first level rows are created
9138 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment pricing successful ');
9139 END IF;
9140
9141 -- Here the reprice required flag for all the delivery legs for this segment should be marked as 'N'
9142 unmark_reprice_required (
9143 p_segment_id => p_segment_id,
9144 x_return_status => l_return_status ) ;
9145
9146 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9147 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9148 ROLLBACK to before_pricing;
9149 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment:unmark_reprice_required ');
9150 raise FTE_FREIGHT_PRICING_UTIL.g_unmark_reprice_req_failed;
9151 END IF;
9152 ELSE -- What happens if no first level rows are created
9153 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,p_segment_id||' : reprice required flag unmarked ');
9154 END IF;
9155
9156 ELSE -- Need to call separately for each different delivery leg in the segment
9157 -- if it's reprice_required flag = 'Y'
9158 i := g_shipment_line_rows.FIRST;
9159 LOOP
9160 IF NOT l_dlvy.EXISTS(g_shipment_line_rows(i).delivery_leg_id) THEN
9161 -- If the delivery leg has reprice required flag = 'Y'
9162 --IF g_shipment_line_rows(i).reprice_required = 'Y' THEN
9163
9164 IF (p_check_reprice_flag = 'Y' AND g_shipment_line_rows(i).reprice_required = 'Y') OR
9165 p_check_reprice_flag = 'N' THEN
9166
9167 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,'Adding delivery leg id :'||g_shipment_line_rows(i).delivery_leg_id||' to l_dlvy');
9168 l_dlvy(g_shipment_line_rows(i).delivery_leg_id) := g_shipment_line_rows(i).delivery_leg_id;
9169 END IF;
9170 END IF;
9171 EXIT WHEN i=g_shipment_line_rows.LAST;
9172 i := g_shipment_line_rows.NEXT(i);
9173
9174 END LOOP;
9175
9176 IF l_dlvy.COUNT > 0 THEN
9177 j := l_dlvy.FIRST;
9178 LOOP
9179
9180 l_first_level_rows.delete;
9181 l_first_level_charges.delete;
9182
9183 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_dlvy(j)||' : First level lines initialized ');
9184
9185 -- Need to delete existing freight cost records
9186 -- for this delivery leg
9187
9188 delete_invalid_fc_recs (
9189 p_delivery_leg_id => l_dlvy(j),
9190 x_return_status => l_return_status ) ;
9191
9192 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9193 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9194 ROLLBACK to before_pricing;
9195 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:consolidate:N:delete_invalid_fc_recs ');
9196 raise FTE_FREIGHT_PRICING_UTIL.g_delete_invalid_fc_failed;
9197 END IF;
9198 ELSE
9199 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_dlvy(j)||' : Existing freight cost records deleted ');
9200 END IF;
9201
9202 flatten_shipment (
9203 p_delivery_leg_id => l_dlvy(j),
9204 x_first_level_rows => l_first_level_rows,
9205 x_return_status => l_return_status );
9206
9207 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9208 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9209 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment:Consolidate=N:flatten_shipment ');
9210 ROLLBACK to before_pricing;
9211 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
9212 END IF;
9213 ELSE -- What happens if no first level rows are created
9214 -- raise FTE_FREIGHT_PRICING_UTIL.g_an exception
9215 -- Should not ever happen AG 05/10
9216 IF l_first_level_rows.COUNT = 0 THEN
9217 ROLLBACK to before_pricing;
9218 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9219 END IF;
9220 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'No. of top level lines 3 : '||l_first_level_rows.COUNT);
9221 END IF;
9222
9223 /*
9227 x_return_status => l_return_status );
9224 get_top_level_charges (
9225 p_first_level_rows => l_first_level_rows,
9226 x_shpmnt_toplevel_charges => l_first_level_charges,
9228 */
9229
9230 shipment_pricing (
9231 p_segment_id => p_segment_id,-- Input either Lane or the trip segment
9232 p_shpmnt_toplevel_rows => l_first_level_rows,
9233 p_shpmnt_toplevel_charges => l_first_level_charges,
9234 p_save_flag => 'M', -- Whether to save to TEMP table or MAIN table
9235 x_summary_lanesched_price => l_dummy_summary,
9236 x_summary_lanesched_price_uom => l_dummy_summary_uom,
9237 x_freight_cost_temp_price => l_dummy_fc_temp_price,
9238 x_freight_cost_temp_charge => l_dummy_fc_temp_charge,
9239 x_return_status => l_return_status ) ;
9240
9241 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9242 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9243 ROLLBACK to before_pricing;
9244 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment:Consolidate=N:shipment_pricing ');
9245 raise FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed;
9246 END IF;
9247 ELSE -- What happens if no first level rows are created
9248 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment pricing successful ');
9249 END IF;
9250
9251 -- Here the reprice required flag for this delivery leg should be marked as 'N'
9252 unmark_reprice_required (
9253 p_delivery_leg_id => l_dlvy(j),
9254 x_return_status => l_return_status ) ;
9255
9256 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9257 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9258 ROLLBACK to before_pricing;
9259 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:consolidate:N:unmark_reprice_required ');
9260 raise FTE_FREIGHT_PRICING_UTIL.g_unmark_reprice_req_failed;
9261 END IF;
9262 ELSE
9263 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_dlvy(j)||' : reprice required flag unmarked ');
9264 END IF;
9265
9266 EXIT WHEN j=l_dlvy.LAST;
9267 j := l_dlvy.NEXT(j);
9268
9269 END LOOP;
9270 ELSE
9271 -- Even though reprice_required count > 0
9272 -- No g_shipment_line_rows got created with reprice_required = 'Y'
9273 -- which can arise out of the concerning delivery leg being empty
9274 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9275 END IF;
9276
9277 END IF;
9278
9279 ELSE
9280 raise FTE_FREIGHT_PRICING_UTIL.g_pricing_not_required;
9281 END IF; -- reprice required count > 0
9282
9283 ELSIF p_delivery_leg_id IS NOT NULL THEN
9284
9285 l_segment_id := get_segment_from_dleg(p_delivery_leg_id); -- New API
9286
9287 IF is_consolidated(l_segment_id) THEN
9288
9289 IF p_check_reprice_flag = 'Y' THEN
9290
9291 OPEN c_count_reprice_reqd(l_segment_id);
9292 FETCH c_count_reprice_reqd INTO l_reprice_reqd_count;
9293 CLOSE c_count_reprice_reqd;
9294
9295 END IF;
9296
9297 IF (p_check_reprice_flag = 'Y' AND l_reprice_reqd_count > 0) OR
9298 p_check_reprice_flag = 'N' THEN
9299
9300 --IF l_reprice_reqd_count > 0 THEN
9301
9302 OPEN c_delivery_from_trip(l_segment_id);
9303
9304 LOOP
9305 FETCH c_delivery_from_trip INTO l_delvy_det_rec;
9306 EXIT WHEN c_delivery_from_trip%NOTFOUND;
9307 g_shipment_line_rows(l_delvy_det_rec.delivery_detail_id) := l_delvy_det_rec;
9308 END LOOP;
9309 IF c_delivery_from_trip%ROWCOUNT = 0 THEN
9310 CLOSE c_delivery_from_trip;
9311 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9312 --raise FTE_FREIGHT_PRICING_UTIL.g_pricing_not_required;
9313 ELSE
9314 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matching number of delivery lines : '||c_delivery_from_trip%ROWCOUNT);
9315 END IF;
9316
9317 CLOSE c_delivery_from_trip;
9318
9319 -- Need to delete existing freight cost records
9320 -- for all delivery legs in this trip segment
9321
9322 delete_invalid_fc_recs (
9323 p_segment_id => l_segment_id,
9324 x_return_status => l_return_status ) ;
9325
9326 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9327 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9328 ROLLBACK to before_pricing;
9329 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:consolidate:Y:delete_invalid_fc_recs ');
9330 raise FTE_FREIGHT_PRICING_UTIL.g_delete_invalid_fc_failed;
9331 END IF;
9332 ELSE
9333 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_segment_id||' : Existing freight cost records deleted ');
9334 END IF;
9335
9336 flatten_shipment (
9340 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9337 x_first_level_rows => l_first_level_rows,
9338 x_return_status => l_return_status );
9339
9341 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9342 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:Consolidate=Y:flatten_shipment ');
9343 ROLLBACK to before_pricing;
9344 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
9345 END IF;
9346 ELSE -- What happens if no first level rows are created
9347 -- raise FTE_FREIGHT_PRICING_UTIL.g_an exception
9348 -- Should never happen AG 5/10
9349 IF l_first_level_rows.COUNT = 0 THEN
9350 ROLLBACK to before_pricing;
9351 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9352 END IF;
9353 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'No. of top level lines 4 : '||l_first_level_rows.COUNT);
9354 END IF;
9355
9356 /*
9357 get_top_level_charges (
9358 p_first_level_rows => l_first_level_rows,
9359 x_shpmnt_toplevel_charges => l_first_level_charges,
9360 x_return_status => l_return_status );
9361 */
9362
9363 OPEN c_trip_first_stop(l_segment_id);
9364 FETCH c_trip_first_stop INTO l_initial_pickup_date;
9365 CLOSE c_trip_first_stop;
9366
9367 OPEN c_trip_last_stop(l_segment_id);
9368 FETCH c_trip_last_stop INTO l_ultimate_dropoff_date;
9369 CLOSE c_trip_last_stop;
9370
9371 shipment_pricing (
9372 p_segment_id => l_segment_id,-- Input either Lane or the trip segment
9373 p_shpmnt_toplevel_rows => l_first_level_rows,
9374 p_shpmnt_toplevel_charges => l_first_level_charges,
9375 p_ship_date => l_initial_pickup_date,
9376 p_arrival_date => l_ultimate_dropoff_date,
9377 p_save_flag => 'M', -- Whether to save to TEMP table or MAIN table
9378 x_summary_lanesched_price => l_dummy_summary,
9379 x_summary_lanesched_price_uom => l_dummy_summary_uom,
9380 x_freight_cost_temp_price => l_dummy_fc_temp_price,
9381 x_freight_cost_temp_charge => l_dummy_fc_temp_charge,
9382 x_return_status => l_return_status ) ;
9383
9384 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9385 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9386 ROLLBACK to before_pricing;
9387 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:Consolidate=Y:shipment_pricing ');
9388 raise FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed;
9389 END IF;
9390 ELSE -- What happens if no first level rows are created
9391 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment pricing successful ');
9392 END IF;
9393
9394 -- Here the reprice required flag for all the delivery legs for this segment should be marked as 'N'
9395 unmark_reprice_required (
9396 p_segment_id => l_segment_id,
9397 x_return_status => l_return_status ) ;
9398
9399 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9400 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9401 ROLLBACK to before_pricing;
9402 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:consolidate:Y:unmark_reprice_required ');
9403 raise FTE_FREIGHT_PRICING_UTIL.g_unmark_reprice_req_failed;
9404 END IF;
9405 ELSE -- What happens if no first level rows are created
9406 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,l_segment_id||' : reprice required flag unmarked ');
9407 END IF;
9408
9409 ELSE
9410 raise FTE_FREIGHT_PRICING_UTIL.g_pricing_not_required;
9411 END IF; -- reprice required count > 0
9412
9413 ELSE
9414
9415 OPEN c_delivery_leg(p_delivery_leg_id);
9416
9417 LOOP
9418 FETCH c_delivery_leg INTO l_delvy_det_rec;
9419 EXIT WHEN c_delivery_leg%NOTFOUND;
9420 g_shipment_line_rows(l_delvy_det_rec.delivery_detail_id) := l_delvy_det_rec;
9421 END LOOP;
9422 IF c_delivery_leg%ROWCOUNT = 0 THEN
9423 CLOSE c_delivery_leg;
9424 ROLLBACK to before_pricing;
9425 raise FTE_FREIGHT_PRICING_UTIL.g_pricing_not_required;
9426 ELSE
9427 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matching number of delivery lines : '||c_delivery_leg%ROWCOUNT);
9428 END IF;
9429
9430 CLOSE c_delivery_leg;
9431
9432 -- Need to delete existing freight cost records
9433 -- for this delivery leg
9434
9435 delete_invalid_fc_recs (
9436 p_delivery_leg_id => p_delivery_leg_id,
9437 x_return_status => l_return_status ) ;
9438
9439 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9440 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9441 ROLLBACK to before_pricing;
9442 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:consolidate:N:delete_invalid_fc_recs ');
9443 raise FTE_FREIGHT_PRICING_UTIL.g_delete_invalid_fc_failed;
9447 END IF;
9444 END IF;
9445 ELSE
9446 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,p_delivery_leg_id||' : Existing freight cost records deleted ');
9448
9449 flatten_shipment (
9450 -- p_delivery_leg_id => p_delivery_leg_id, -- Not required
9451 x_first_level_rows => l_first_level_rows,
9452 x_return_status => l_return_status );
9453
9454 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9455 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9456 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:Consolidate=N:flatten_shipment ');
9457 ROLLBACK to before_pricing;
9458 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
9459 END IF;
9460 ELSE -- What happens if no first level rows are created
9461 -- raise FTE_FREIGHT_PRICING_UTIL.g_an exception
9462 -- Should never happen AG 5/10
9463 IF l_first_level_rows.COUNT = 0 THEN
9464 ROLLBACK to before_pricing;
9465 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
9466 END IF;
9467 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'No. of top level lines 5: '||l_first_level_rows.COUNT);
9468 END IF;
9469
9470 /*
9471 get_top_level_charges (
9472 p_first_level_rows => l_first_level_rows,
9473 x_shpmnt_toplevel_charges => l_first_level_charges,
9474 x_return_status => l_return_status );
9475 */
9476
9477 shipment_pricing (
9478 p_segment_id => l_segment_id,-- Input either Lane or the trip segment
9479 p_shpmnt_toplevel_rows => l_first_level_rows,
9480 p_shpmnt_toplevel_charges => l_first_level_charges,
9481 p_save_flag => 'M', -- Whether to save to TEMP table or MAIN table
9482 x_summary_lanesched_price => l_dummy_summary,
9483 x_summary_lanesched_price_uom => l_dummy_summary_uom,
9484 x_freight_cost_temp_price => l_dummy_fc_temp_price,
9485 x_freight_cost_temp_charge => l_dummy_fc_temp_charge,
9486 x_return_status => l_return_status ) ;
9487
9488 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9489 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9490 ROLLBACK to before_pricing;
9491 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:Consolidate=N:shipment_pricing ');
9492 raise FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed;
9493 END IF;
9494 ELSE -- What happens if no first level rows are created
9495 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment pricing successful ');
9496 END IF;
9497
9498 -- Here the reprice required flag for this delivery leg should be marked as 'N'
9499 unmark_reprice_required (
9500 p_delivery_leg_id => p_delivery_leg_id,
9501 x_return_status => l_return_status ) ;
9502
9503 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9504 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9505 ROLLBACK to before_pricing;
9506 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'dleg:consolidate:N:unmark_reprice_required ');
9507 raise FTE_FREIGHT_PRICING_UTIL.g_unmark_reprice_req_failed;
9508 END IF;
9509 ELSE -- What happens if no first level rows are created
9510 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_INF,p_delivery_leg_id||' : reprice required flag unmarked ');
9511 END IF;
9512
9513 END IF;
9514
9515 END IF;
9516 --FTE_FREIGHT_PRICING_UTIL.close_logs;
9517 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9518
9519 EXCEPTION
9520 WHEN g_finished_warning THEN
9521 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9522 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9523 WHEN FND_API.G_EXC_ERROR THEN
9524 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9525 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'FND_API.G_EXC_ERROR');
9526 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9527 WHEN FTE_FREIGHT_PRICING_UTIL.g_noleg_segment THEN
9528 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9529 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_noleg_segment');
9530 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9531 WHEN FTE_FREIGHT_PRICING_UTIL.g_pricing_not_required THEN
9532 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9533 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_pricing_not_required');
9534 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9535 WHEN FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed THEN
9536 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9537 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_flatten_shipment_failed');
9538 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9542 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9539 WHEN FTE_FREIGHT_PRICING_UTIL.g_empty_delivery THEN
9540 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9541 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_empty_delivery');
9543 WHEN FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed THEN
9544 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9545 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_shipment_pricing_failed');
9546 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9547 WHEN FTE_FREIGHT_PRICING_UTIL.g_unmark_reprice_req_failed THEN
9548 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9549 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_unmark_reprice_req_failed');
9550 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9551 WHEN FTE_FREIGHT_PRICING_UTIL.g_delete_invalid_fc_failed THEN
9552 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9553 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_delete_invalid_fc_failed');
9554 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9555 WHEN others THEN
9556 ROLLBACK to before_pricing;
9557 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9558 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_consolidate',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
9559 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
9560 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate');
9561
9562 END shipment_price_consolidate;
9563
9564 PROCEDURE shipment_price_consolidate (
9565 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
9566 p_in_attributes IN FtePricingInRecType,
9567 x_return_status OUT NOCOPY VARCHAR2,
9568 x_msg_count OUT NOCOPY NUMBER,
9569 x_msg_data OUT NOCOPY VARCHAR2 )
9570 IS
9571
9572 l_return_status VARCHAR2(1);
9573
9574 l_trip_id NUMBER;
9575 l_mode VARCHAR2(30);
9576 l_output_tab FTE_FREIGHT_PRICING.Freight_Cost_Temp_Tab_Type;
9577 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
9578
9579 BEGIN
9580
9581 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9582
9583 -- Initialize message list if p_init_msg_list is set to TRUE.
9584 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9585
9586 FTE_FREIGHT_PRICING_UTIL.initialize_logging( p_init_msg_list => p_init_msg_list,
9587 x_return_status => l_return_status );
9588
9589 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9590 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9591 x_return_status := l_return_status;
9592 RETURN;
9593 END IF;
9594 ELSE
9595 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
9596 END IF;
9597
9598 END IF;
9599
9600 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
9601 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_price_consolidate_standard','start');
9602
9603
9604 l_trip_id:=NULL;
9605 l_mode:=NULL;
9606
9607
9608 IF(p_in_attributes.segment_id IS NOT NULL)
9609 THEN
9610
9611 Get_Trip_Mode(
9612 p_trip_id=>p_in_attributes.segment_id,
9613 p_dleg_id=>NULL,
9614 x_trip_id=>l_trip_id,
9615 x_mode_of_transport=>l_mode,
9616 x_return_status=>l_return_status);
9617
9618 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9619 THEN
9620 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9621 THEN
9622 raise FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail;
9623 END IF;
9624 END IF;
9625 ELSIF(p_in_attributes.delivery_leg_id IS NOT NULL)
9626 THEN
9627
9628 Get_Trip_Mode(
9629 p_trip_id=>NULL,
9630 p_dleg_id=>p_in_attributes.delivery_leg_id,
9631 x_trip_id=>l_trip_id,
9632 x_mode_of_transport=>l_mode,
9633 x_return_status=>l_return_status);
9634
9635 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9636 THEN
9637 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9638 THEN
9639 raise FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail;
9640 END IF;
9641 END IF;
9642
9643
9644 END IF;
9645
9646 IF ((l_mode IS NOT NULL) AND (l_mode='TRUCK'))
9647 THEN
9648 FTE_TL_RATING.TL_Rate_Trip (
9649 p_trip_id=>l_trip_id ,
9650 p_output_type=>'M',
9651 p_check_reprice_flag=>'Y',
9652 x_output_cost_tab=>l_output_tab,
9653 x_return_status=>l_return_status);
9654
9655 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9656 THEN
9657 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9658 THEN
9659 raise FTE_FREIGHT_PRICING_UTIL.g_tl_rate_trip_fail;
9660 END IF;
9661 END IF;
9662
9663
9664
9665 ELSE
9666
9667
9668
9672 p_check_reprice_flag => 'Y',
9669 shipment_price_consolidate (
9670 p_delivery_leg_id => p_in_attributes.delivery_leg_id,
9671 p_segment_id => p_in_attributes.segment_id,
9673 x_return_status => l_return_status );
9674
9675 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9676 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful ');
9677 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9678 x_return_status := l_return_status;
9679 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful with warning ');
9680 ELSE
9681 raise FTE_FREIGHT_PRICING_UTIL.g_price_consolidate_failed;
9682 END IF;
9683 END IF;
9684
9685 -- Standard call to get message count and if count is 1,
9686 -- get message info.
9687 FND_MSG_PUB.Count_And_Get (
9688 p_count => x_msg_count,
9689 p_data => x_msg_data );
9690
9691 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate_standard');
9692 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9693 FTE_FREIGHT_PRICING_UTIL.close_logs;
9694 END IF;
9695
9696 EXCEPTION
9697
9698 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail THEN
9699 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9700 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('shipment_price_consolidate_standard','g_get_trip_mode_fail');
9701 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate_standard');
9702 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9703 FTE_FREIGHT_PRICING_UTIL.close_logs;
9704 END IF;
9705
9706
9707 WHEN FTE_FREIGHT_PRICING_UTIL.g_tl_rate_trip_fail THEN
9708 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9709 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('shipment_price_consolidate_standard','g_tl_rate_trip_fail');
9713 END IF;
9710 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate_standard');
9711 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9712 FTE_FREIGHT_PRICING_UTIL.close_logs;
9714
9715
9716 WHEN FTE_FREIGHT_PRICING_UTIL.g_price_consolidate_failed THEN
9717 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9718 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('shipment_price_consolidate_standard','g_price_consolidate_failed');
9719 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate_standard');
9720 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9721 FTE_FREIGHT_PRICING_UTIL.close_logs;
9722 END IF;
9723 WHEN others THEN
9724 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9725 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('shipment_price_consolidate_standard','g_others');
9726 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
9727 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_consolidate_standard');
9728 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9729 FTE_FREIGHT_PRICING_UTIL.close_logs;
9730 END IF;
9731 END shipment_price_consolidate;
9732
9733 PROCEDURE shipment_price_compare (
9734 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
9735 p_delivery_id IN NUMBER,
9736 -- JDBC Thin driver can not support PL/SQL tables having one column (OCI driver supports) types
9737 -- thats why we are goint with this clumsy way of comma separated list
9738 p_lane_rows IN VARCHAR2 DEFAULT NULL,
9739 p_schedule_rows IN VARCHAR2 DEFAULT NULL,
9740 p_service_lane IN VARCHAR2 DEFAULT NULL,
9741 p_service_sched IN VARCHAR2 DEFAULT NULL,
9742 p_dep_date IN DATE DEFAULT sysdate,
9743 p_arr_date IN DATE DEFAULT sysdate,
9744 x_summary_lane_price OUT NOCOPY VARCHAR2,
9745 x_summary_lane_price_uom OUT NOCOPY VARCHAR2,
9746 x_summary_sched_price OUT NOCOPY VARCHAR2,
9747 x_summary_sched_price_uom OUT NOCOPY VARCHAR2,
9748 x_request_id OUT NOCOPY NUMBER,
9749 x_return_status OUT NOCOPY VARCHAR2 )
9750 IS
9751
9752
9753 BEGIN
9754
9755 NULL;
9756
9757 END shipment_price_compare;
9758
9759 PROCEDURE shipment_reprice (
9760 errbuf OUT NOCOPY VARCHAR2,
9761 retcode OUT NOCOPY VARCHAR2,
9762 p_fte_trip_id IN NUMBER DEFAULT NULL, -- Input only ONE of the following FOUR
9763 p_segment_id IN NUMBER DEFAULT NULL,
9764 p_delivery_id IN NUMBER DEFAULT NULL,
9765 p_delivery_leg_id IN NUMBER DEFAULT NULL )
9766 IS
9767
9768 l_return_status VARCHAR2(1);
9769 l_status VARCHAR2(10);
9770 l_temp BOOLEAN;
9771
9772 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
9773
9774 BEGIN
9775 FTE_FREIGHT_PRICING_UTIL.initialize_logging(p_debug_mode => 'CONC',
9776 x_return_status => l_return_status );
9777
9778 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
9779 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_reprice_conc','start');
9780
9781 shipment_reprice2 (
9782 p_fte_trip_id => p_fte_trip_id,
9783 p_segment_id => p_segment_id,
9784 p_delivery_id => p_delivery_id,
9785 p_delivery_leg_id => p_delivery_leg_id,
9786 x_return_status => l_return_status );
9787
9788 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9789 l_status := 'NORMAL';
9790 errbuf := 'Shipment Reprice is completed successfully';
9791 retcode := '0';
9792 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9793 l_status := 'WARNING';
9794 errbuf := 'Shipment Reprice is completed with warning';
9795 retcode := '1';
9796 ELSE
9797 l_status := 'ERROR';
9798 errbuf := 'Shipment Reprice is completed with error';
9799 retcode := '2';
9800 END IF;
9801
9802 l_temp := FND_CONCURRENT.SET_COMPLETION_STATUS(l_status,'');
9803 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice_conc');
9804
9805 EXCEPTION
9806 WHEN OTHERS THEN
9807 l_temp := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR','');
9808 errbuf := 'Shipment Reprice is completed with an Unexpected error';
9809 retcode := '2';
9810 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice_conc');
9811
9812 END shipment_reprice;
9813
9814 PROCEDURE shipment_reprice2 (
9815 p_init_prc_log IN VARCHAR2 DEFAULT 'Y',
9816 p_fte_trip_id IN NUMBER DEFAULT NULL,
9817 p_segment_id IN NUMBER DEFAULT NULL,
9818 p_delivery_id IN NUMBER DEFAULT NULL,
9819 p_delivery_leg_id IN NUMBER DEFAULT NULL,
9820 x_return_status OUT NOCOPY VARCHAR2 )
9821 IS
9822 l_segment_id NUMBER;
9823 l_delivery_leg_id NUMBER;
9824 l_return_status VARCHAR2(1);
9825 /*
9826 CURSOR c_segment_from_fte_trip IS
9827 SELECT fwt.wsh_trip_id
9828 FROM fte_trips ft, fte_wsh_trips fwt
9829 WHERE ft.fte_trip_id = fwt.fte_trip_id
9830 AND ft.fte_trip_id = p_fte_trip_id;
9831 */
9832 CURSOR c_delivery_leg_from_dlvy IS
9833 SELECT delivery_leg_id
9834 FROM wsh_delivery_legs
9835 WHERE delivery_id = p_delivery_id;
9836
9837
9838 l_output_tab FTE_FREIGHT_PRICING.Freight_Cost_Temp_Tab_Type;
9842 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
9839 l_mode VARCHAR2(30);
9840 l_trip_id NUMBER;
9841
9843
9844 BEGIN
9845
9846 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9847
9848 IF p_init_prc_log = 'Y' THEN
9849 FTE_FREIGHT_PRICING_UTIL.initialize_logging(x_return_status => l_return_status);
9850
9851 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9852 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9853 x_return_status := l_return_status;
9854 RETURN;
9855 END IF;
9856 ELSE
9857 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
9858 END IF;
9859 END IF;
9860 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
9861 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_reprice2','start');
9862
9863 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Input : FTE Trip Id - '||p_fte_trip_id||' Trip Segment Id -'||p_segment_id||' Delivery Id - '||p_delivery_id||' Delivery Leg Id - '||p_delivery_leg_id);
9864
9865 IF p_fte_trip_id IS NULL AND p_segment_id IS NULL AND p_delivery_id IS NULL AND p_delivery_leg_id IS NULL
9866 THEN
9867 raise FTE_FREIGHT_PRICING_UTIL.g_no_input;
9868 ELSIF p_segment_id IS NOT NULL THEN
9869
9870 Get_Trip_Mode(
9871 p_trip_id=>p_segment_id,
9872 p_dleg_id=>NULL,
9873 x_trip_id=>l_trip_id,
9874 x_mode_of_transport=>l_mode,
9875 x_return_status=>l_return_status);
9876
9877 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9878 THEN
9879 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9880 THEN
9881 raise FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail;
9882 END IF;
9883 END IF;
9884
9885 IF ((l_mode IS NOT NULL) AND (l_mode='TRUCK'))
9886 THEN
9887 FTE_TL_RATING.TL_Rate_Trip (
9888 p_trip_id=>p_segment_id ,
9889 p_output_type=>'M',
9890 p_check_reprice_flag=>'N',
9891 x_output_cost_tab=>l_output_tab,
9892 x_return_status=>l_return_status);
9893
9894 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9895 THEN
9896 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9897 THEN
9898 raise FTE_FREIGHT_PRICING_UTIL.g_tl_rate_trip_fail;
9899 END IF;
9900 END IF;
9901
9902
9903
9904 ELSE
9905
9906 shipment_price_consolidate (
9907 p_segment_id => p_segment_id,
9908 x_return_status => l_return_status );
9909
9910 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9911 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful for segment : '||p_segment_id);
9912 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9913 x_return_status := l_return_status;
9914 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful with warning for segment : '||p_segment_id);
9915 ELSE
9916 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'segment: '||p_segment_id||' shipment_price_consolidate ');
9917 raise FTE_FREIGHT_PRICING_UTIL.g_price_consolidate_failed;
9918 END IF;
9919
9920
9921 END IF;
9922
9923
9924
9925 ELSIF p_delivery_id IS NOT NULL THEN
9926 -- Need to call for all delivery legs belonging to this delivery
9927
9928 OPEN c_delivery_leg_from_dlvy;
9929 LOOP
9930 FETCH c_delivery_leg_from_dlvy INTO l_delivery_leg_id;
9931 EXIT WHEN c_delivery_leg_from_dlvy%NOTFOUND;
9932
9933
9934
9935 Get_Trip_Mode(
9936 p_trip_id=>NULL,
9937 p_dleg_id=>l_delivery_leg_id,
9938 x_trip_id=>l_trip_id,
9939 x_mode_of_transport=>l_mode,
9940 x_return_status=>l_return_status);
9941
9942 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9943 THEN
9944 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9945 THEN
9946 raise FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail;
9947 END IF;
9948 END IF;
9949
9950 IF ((l_mode IS NOT NULL) AND (l_mode='TRUCK'))
9951 THEN
9952 FTE_TL_RATING.TL_Rate_Trip (
9953 p_trip_id=>l_trip_id ,
9954 p_output_type=>'M',
9955 p_check_reprice_flag=>'N',
9956 x_output_cost_tab=>l_output_tab,
9957 x_return_status=>l_return_status);
9958
9959 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
9960 THEN
9961 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
9962 THEN
9963 raise FTE_FREIGHT_PRICING_UTIL.g_tl_rate_trip_fail;
9964 END IF;
9965 END IF;
9966
9967
9968
9969 ELSE
9970
9971
9972 shipment_price_consolidate (
9973 p_delivery_leg_id => l_delivery_leg_id,
9974 x_return_status => l_return_status );
9975
9976 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9977 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful for delivery leg : '||l_delivery_leg_id);
9978 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
9979 x_return_status := l_return_status;
9980 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful for segment : '||p_segment_id);
9981 ELSE
9982 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Delivery leg: '||l_delivery_leg_id||' shipment_price_consolidate ');
9983 raise FTE_FREIGHT_PRICING_UTIL.g_price_consolidate_failed;
9984 END IF;
9985 END IF;
9986
9987 END LOOP;
9988 CLOSE c_delivery_leg_from_dlvy;
9989
9990 ELSIF p_delivery_leg_id IS NOT NULL THEN
9991
9992 Get_Trip_Mode(
9993 p_trip_id=>NULL,
9997 x_return_status=>l_return_status);
9994 p_dleg_id=>p_delivery_leg_id,
9995 x_trip_id=>l_trip_id,
9996 x_mode_of_transport=>l_mode,
9998
9999 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
10000 THEN
10001 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
10002 THEN
10003 raise FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail;
10004 END IF;
10005 END IF;
10006
10007 IF ((l_mode IS NOT NULL) AND (l_mode='TRUCK'))
10008 THEN
10009 FTE_TL_RATING.TL_Rate_Trip (
10010 p_trip_id=>l_trip_id ,
10011 p_output_type=>'M',
10012 p_check_reprice_flag=>'N',
10013 x_output_cost_tab=>l_output_tab,
10014 x_return_status=>l_return_status);
10015
10016 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
10017 THEN
10018 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
10019 THEN
10020 raise FTE_FREIGHT_PRICING_UTIL.g_tl_rate_trip_fail;
10021 END IF;
10022 END IF;
10023
10024
10025 ELSE
10026
10027 shipment_price_consolidate (
10028 p_delivery_leg_id => p_delivery_leg_id,
10029 x_return_status => l_return_status );
10030
10031 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10032 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment price consolidate successful for delivery leg : '||p_delivery_leg_id);
10033 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
10034 x_return_status := l_return_status;
10035 ELSE
10036 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'delivery leg: '||p_delivery_leg_id||' shipment_price_consolidate ');
10037 raise FTE_FREIGHT_PRICING_UTIL.g_price_consolidate_failed;
10038 END IF;
10039 END IF;
10040
10041 END IF;
10042 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
10043 IF p_init_prc_log = 'Y' THEN
10044 FTE_FREIGHT_PRICING_UTIL.close_logs;
10045 END IF;
10046
10047 EXCEPTION
10048 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_input THEN
10049 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10050 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_input');
10051 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
10052 IF p_init_prc_log = 'Y' THEN
10053 FTE_FREIGHT_PRICING_UTIL.close_logs;
10054 END IF;
10055
10056 WHEN FTE_FREIGHT_PRICING_UTIL.g_get_trip_mode_fail THEN
10057 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10058 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_get_trip_mode_fail');
10059 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
10060 IF p_init_prc_log = 'Y' THEN
10061 FTE_FREIGHT_PRICING_UTIL.close_logs;
10062 END IF;
10063
10064 WHEN FTE_FREIGHT_PRICING_UTIL.g_tl_rate_trip_fail THEN
10065 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10066 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_tl_rate_trip_fail');
10067 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
10068 IF p_init_prc_log = 'Y' THEN
10069 FTE_FREIGHT_PRICING_UTIL.close_logs;
10070 END IF;
10071
10072
10073 WHEN FTE_FREIGHT_PRICING_UTIL.g_price_consolidate_failed THEN
10074 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10075 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_price_consolidate_failed');
10076 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
10077 IF p_init_prc_log = 'Y' THEN
10078 FTE_FREIGHT_PRICING_UTIL.close_logs;
10079 END IF;
10080
10081 WHEN others THEN
10082 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10083 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
10084 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
10085 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
10086 IF p_init_prc_log = 'Y' THEN
10087 FTE_FREIGHT_PRICING_UTIL.close_logs;
10088 END IF;
10089 END shipment_reprice2;
10090
10091
10092 --PROCEDURE validate_rerate_delivery(p_delv_list IN FTE_ID_TAB_TYPE,
10093
10094 -- Added for R12 to get Delivery Legs for all the deliveries.
10095 -- This is added to allow multi leg rating in case of rerating.
10096 -- In addition to this , this delivery needs to find out all the
10097 -- delivery legs for it's child deliveries in case it's console delivery.
10098
10099 PROCEDURE get_delivery_legs(
10100 p_deliveries_list IN FTE_ID_TAB_TYPE,
10101 x_delivery_legs OUT NOCOPY DELIVERY_LEG_TAB_TYPE,
10102 x_return_status OUT NOCOPY VARCHAR2)
10103 IS
10104
10105 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
10106 l_delvy_tab DELIVERY_LEG_TAB_TYPE;
10107 l_delv_leg_rec delivery_leg_rec_type;
10108 i NUMBER := 0;
10109 l_index NUMBER := 0;
10110
10111 CURSOR c_get_delivery_legs_detail(c_delivery_id IN NUMBER) IS
10112 SELECT wdl.delivery_id,delivery_leg_id,wnd.name
10113 FROM wsh_delivery_legs wdl, wsh_new_deliveries wnd
10114 WHERE wdl.delivery_id= c_delivery_id
10115 AND wnd.delivery_id = wdl.delivery_id;
10116
10117 BEGIN
10118
10119 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
10120 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'get_delivery_legs','start');
10121
10122 FOR i in p_deliveries_list.FIRST..p_deliveries_list.LAST LOOP
10123 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'looping through Delivery ids in get_delivery_legs... ');
10124 OPEN c_get_delivery_legs_detail(p_deliveries_list(i));
10125 LOOP
10129 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_delv_leg_rec.delivery_leg_id. ' ||l_delv_leg_rec.delivery_leg_id );
10126 FETCH c_get_delivery_legs_detail INTO l_delv_leg_rec;
10127 EXIT WHEN c_get_delivery_legs_detail%NOTFOUND;
10128 l_index := l_index +1;
10130 --l_delvy_tab(l_delv_leg_rec.delivery_leg_id) := l_delv_leg_rec;
10131 l_delvy_tab(l_index) := l_delv_leg_rec;
10132 END LOOP;
10133 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Total Leg Count for Delivery. ' || p_deliveries_list(i) || ' is '|| l_delvy_tab.COUNT );
10134 CLOSE c_get_delivery_legs_detail ;
10135 END LOOP;
10136
10137 FOR i IN l_delvy_tab.FIRST..l_delvy_tab.LAST LOOP
10138 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' Leg is='|| l_delvy_tab(i).delivery_leg_id);
10139 END LOOP;
10140
10141 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Out of loop for Delivery ids in get_delivery_legs... ');
10142
10143 x_delivery_legs := l_delvy_tab;
10144
10145 EXCEPTION
10146 WHEN others THEN
10147 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10148 FTE_FREIGHT_PRICING_UTIL.set_exception('get_delivery_legs',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
10149 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
10150 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_delivery_legs');
10151 END get_delivery_legs;
10152
10153 -- Internal procedure to get distinct trip_ids for a given
10154 -- delivery legs table.
10155 -- Added for R12. Used in rerate_shipment_online.
10156
10157 PROCEDURE get_distinct_trip_ids( p_dleg_list IN FTE_ID_TAB_TYPE,
10158 x_trip_ids OUT NOCOPY DELIVERY_TRIP_TAB_TYPE,
10159 x_all_trips OUT NOCOPY DELIVERY_TRIP_TAB_TYPE,
10160 x_return_status OUT NOCOPY VARCHAR2)
10161
10162 IS
10163
10164 CURSOR c_get_distinct_trip_ids(c_dleg_id IN VARCHAR2) IS
10165 SELECT DISTINCT wdl.delivery_id,wts1.trip_id ,wdl.delivery_leg_id,wnd.name
10166 FROM wsh_delivery_legs wdl ,
10167 wsh_trip_stops wts1,
10168 wsh_trip_stops wts2,
10169 wsh_trips wt,
10170 wsh_new_deliveries wnd
10171 WHERE wdl.pick_up_stop_id = wts1.stop_id
10172 AND wdl.drop_off_stop_id = wts2.stop_id
10173 AND wdl.delivery_leg_id = c_dleg_id
10174 AND wt.trip_id = wts1.trip_id
10175 AND wnd.delivery_id = wdl.delivery_id;
10176
10177 i NUMBER := 0;
10178 l_dleg_ids VARCHAR2(32767);
10179 l_trip_ids VARCHAR2(32767);
10180 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
10181 l_api_name CONSTANT VARCHAR2(30) := 'get_distinct_trip_ids';
10182 l_trip_id NUMBER;
10183 l_is_first BOOLEAN := TRUE ;
10184 --l_del_trip_tab DELIVERY_TRIP_TAB_TYPE;
10185 l_del_trip_rec DELIVERY_TRIP_REC_TYPE;
10186 j NUMBER := 0;
10187 trip_exists BOOLEAN := FALSE;
10188 l_trip_index NUMBER := 0;
10189
10190 BEGIN
10191
10192 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
10193 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
10194 --x_trip_ids := FTE_ID_TAB_TYPE();
10195
10196 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,p_dleg_list.COUNT);
10197
10198 FOR i IN p_dleg_list.FIRST..p_dleg_list.COUNT LOOP
10199 OPEN c_get_distinct_trip_ids(p_dleg_list(i));
10200 FETCH c_get_distinct_trip_ids INTO l_del_trip_rec;
10201 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'After Fetch');
10202 -- Only store unique trips in trips table.
10203 IF x_trip_ids.COUNT > 0 THEN
10204 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'x_trip_ids.COUNT > 0');
10205 FOR j IN x_trip_ids.FIRST..x_trip_ids.COUNT LOOP
10206 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'x_trip_ids(j).trip_id = ' || x_trip_ids(j).trip_id);
10207 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_del_trip_rec.trip_id = ' || l_del_trip_rec.trip_id);
10208 IF x_trip_ids(j).trip_id = l_del_trip_rec.trip_id THEN
10209 trip_exists := true;
10210 EXIT WHEN trip_exists;
10211 -- break the loop
10212 ELSE
10213 trip_exists := false;
10214 END IF;
10215 END LOOP;
10216 END IF;
10217 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'After Unique trip loop ');
10218 --FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'trip_exists = ' || to_char(trip_exists));
10219
10220 IF NOT trip_exists then
10221 l_trip_index := l_trip_index +1;
10222 x_trip_ids(l_trip_index) := l_del_trip_rec;
10223 END IF;
10224
10225 x_all_trips(i) := l_del_trip_rec;
10226
10227 CLOSE c_get_distinct_trip_ids;
10228 END LOOP;
10229
10230 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Trip Ids Count=' || x_trip_ids.COUNT);
10231 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_distinct_trip_ids');
10232
10233
10234 EXCEPTION
10235 WHEN others THEN
10236 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10237 FTE_FREIGHT_PRICING_UTIL.set_exception('get_distinct_trip_ids',FTE_FREIGHT_PRICING_UTIL.G_ERR,'get distinct trips failed');
10238 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'get_distinct_trip_ids');
10239 END get_distinct_trip_ids;
10240
10241 --This API is written for R12. It does the following validation
10242 -- 1) Delivery type is Outbound/Internal Orders and status is Open
10243 -- 2) Or Delivery type is Inbound/Drop Ship
10244 -- If a delivery doesnt meet this criteria, it;s removed from the deliveries list
10245 -- which need rerating
10246 -- For Deliveries which fail validation a new message is written in log file.
10250 x_deliveries_list OUT NOCOPY FTE_ID_TAB_TYPE
10247
10248 PROCEDURE validate_delv_for_rerating
10249 ( p_deliveries_list IN FTE_ID_TAB_TYPE,
10251 )
10252
10253 IS
10254
10255 l_new_delv_list FTE_ID_TAB_TYPE;
10256 l_api_name CONSTANT VARCHAR2(30) := 'validate_delv_for_rerating';
10257 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
10258 i NUMBER := 0;
10259 l_var VARCHAR2(1);
10260
10261 CURSOR check_delivery_type (c_delivery_id IN NUMBER)
10262 IS
10263 SELECT 'X' FROM WSH_NEW_DELIVERIES
10264 WHERE ( shipment_direction IN ('O','IO') AND status_code = 'OP')
10265 OR ( shipment_direction IN ('D','I') )
10266 AND delivery_id = c_delivery_id ;
10267
10268 BEGIN
10269 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
10270 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
10271 l_new_delv_list := FTE_ID_TAB_TYPE();
10272
10273 FOR i IN p_deliveries_list.FIRST..p_deliveries_list.LAST
10274 LOOP
10275 OPEN check_delivery_type(p_deliveries_list(i));
10276 FETCH check_delivery_type INTO l_var;
10277 IF check_delivery_type%NOTFOUND THEN
10278 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Delv='|| p_deliveries_list(i) || ' doesnt meet criteria of direction 0/IO with Status OP OR Direction D/I');
10279 ELSE
10280 l_new_delv_list.EXTEND;
10281 l_new_delv_list(i) := p_deliveries_list(i);
10282 END IF;
10283 CLOSE check_delivery_type;
10284 END LOOP;
10285
10286 x_deliveries_list := l_new_delv_list;
10287
10288 EXCEPTION
10289
10290 WHEN OTHERS THEN
10291 FTE_FREIGHT_PRICING_UTIL.set_exception('validate_delv_for_rerating',FTE_FREIGHT_PRICING_UTIL.G_ERR,'validate_delv_for_rerating failed');
10292 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'validate_delv_for_rerating');
10293
10294 END validate_delv_for_rerating;
10295
10296 --This API is written for R12. It does the following validation
10297 -- 1) Delivery leg has a rate
10298 -- If a delivery leg doesnt have existing rates, it removes it from
10299 -- the list of dlegs which need to be rerated.
10300 -- For Dlegs which fail validation a new message is written in log file.
10301 PROCEDURE validate_delivery_legs(p_dlegs_list IN FTE_ID_TAB_TYPE,
10302 x_dleg_list OUT NOCOPY FTE_ID_TAB_TYPE,
10303 x_failed_dleg_list OUT NOCOPY FTE_ID_TAB_TYPE,
10304 x_return_status OUT NOCOPY VARCHAR2
10305 )
10306
10307 IS
10308 l_new_dleg_list FTE_ID_TAB_TYPE;
10309 l_failed_dleg_list FTE_ID_TAB_TYPE;
10310 l_api_name CONSTANT VARCHAR2(30) := 'validate_delivery_legs';
10311 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
10312 i NUMBER := 0;
10313 l_var NUMBER;--VARCHAR2(1);
10314 dleg_rates_not_found EXCEPTION;
10315
10316
10317 CURSOR check_freight_cost_exist (c_delivery_leg_id IN NUMBER)
10318 IS
10319 SELECT total_amount FROM wsh_freight_costs
10320 WHERE line_type_code='SUMMARY'
10321 AND delivery_detail_id is null
10322 AND freight_cost_type_id is not null
10323 AND delivery_leg_id= c_delivery_leg_id;
10324
10325 BEGIN
10326 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
10327 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
10328 l_new_dleg_list := FTE_ID_TAB_TYPE();
10329 l_failed_dleg_list := FTE_ID_TAB_TYPE();
10330
10331 FOR i IN p_dlegs_list.FIRST..p_dlegs_list.LAST
10332 LOOP
10333 OPEN check_freight_cost_exist(p_dlegs_list(i));
10334 FETCH check_freight_cost_exist INTO l_var;
10335 IF check_freight_cost_exist%NOTFOUND THEN
10336 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' No existing rates found for dleg='|| p_dlegs_list(i) || ' Required for rerating ');
10337 l_failed_dleg_list.EXTEND;
10338 l_failed_dleg_list(l_failed_dleg_list.LAST) := p_dlegs_list(i);
10339 ELSIF l_var IS NULL THEN
10340 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' Total amt. Null for dleg='|| p_dlegs_list(i) || ' Required for rerating ');
10341 l_failed_dleg_list.EXTEND;
10342 l_failed_dleg_list(l_failed_dleg_list.LAST) := p_dlegs_list(i);
10343 ELSE
10344 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' Existing rates found for dleg='|| p_dlegs_list(i) || ' Required for rerating ');
10345 l_new_dleg_list.EXTEND;
10346 l_new_dleg_list(l_new_dleg_list.LAST) := p_dlegs_list(i);
10347 END IF;
10348 CLOSE check_freight_cost_exist;
10349 END LOOP;
10350
10351 x_dleg_list := l_new_dleg_list;
10352 x_failed_dleg_list := l_failed_dleg_list;
10353
10354 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'validate_delivery_legs');
10355
10356
10357 EXCEPTION
10358
10359 --WHEN dleg_rates_not_found THEN
10360 -- x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10361 -- FTE_FREIGHT_PRICING_UTIL.set_exception('validate_delivery_legs',FTE_FREIGHT_PRICING_UTIL.G_ERR,'dleg_rates_not_found');
10362 -- FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'validate_delivery_legs');
10363 WHEN OTHERS THEN
10364 FTE_FREIGHT_PRICING_UTIL.set_exception('validate_delivery_legs',FTE_FREIGHT_PRICING_UTIL.G_ERR,'validate_delivery_legs failed');
10365 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
10366 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'validate_delivery_legs');
10367 END validate_delivery_legs;
10368
10369
10373 x_closed_trips_list OUT NOCOPY WSH_UTIL_CORE.id_tab_type)
10370 PROCEDURE validate_trips(p_trip_id_list IN WSH_UTIL_CORE.id_tab_type,
10371 x_failed_trips_list OUT NOCOPY WSH_UTIL_CORE.id_tab_type,
10372 x_success_trips_list OUT NOCOPY WSH_UTIL_CORE.id_tab_type,
10374
10375 IS
10376
10377 CURSOR c_trip_info(c_trip_id NUMBER)
10378 IS
10379 SELECT wt.trip_id,
10380 wt.name,
10381 wt.planned_flag,
10382 wt.status_code,
10383 wt.carrier_id,
10384 wt.ship_method_code,
10385 wt.service_level,
10386 wt.mode_of_transport,
10387 wt.consolidation_allowed,
10388 wt.lane_id,
10389 wt.schedule_id,
10390 wt.load_tender_status
10391 FROM wsh_trips wt
10392 WHERE wt.trip_id = c_trip_id;
10393
10394 CURSOR c_get_trip_direction(c_trip_id NUMBER)
10395 IS
10396 SELECT shipments_type_flag
10397 FROM wsh_trips
10398 WHERE trip_id = c_trip_id;
10399
10400 l_trip_info trip_info_rec;
10401 i NUMBER;
10402 l_fail_index NUMBER := 0;
10403 l_success_index NUMBER := 0;
10404 l_closed_index NUMBER := 0;
10405 l_api_name CONSTANT VARCHAR2(30) := 'validate_trips';
10406 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
10407 l_trip_direction VARCHAR2(30);
10408 l_valid_trip VARCHAR2(1) := 'Y';
10409
10410 BEGIN
10411 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
10412 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
10413
10414 FOR i IN p_trip_id_list.FIRST..p_trip_id_list.LAST
10415 LOOP
10416 OPEN c_trip_info(p_trip_id_list(i));
10417 FETCH c_trip_info INTO l_trip_info;
10418 CLOSE c_trip_info;
10419
10420 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' Trip Id is ='|| p_trip_id_list(i));
10421 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Trip status is ='|| l_trip_info.status_code);
10422
10423 -- In CASE OF closed trips, only allow re-rating of
10424 -- Inbound or Mixed trips. Do not allow rerating of
10425 -- closed outbound trips.
10426 IF l_trip_info.status_code = 'CL' THEN
10427 OPEN c_get_trip_direction(p_trip_id_list(i));
10428 FETCH c_get_trip_direction INTO l_trip_direction;
10429 CLOSE c_get_trip_direction;
10430 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_trip_direction ='|| l_trip_direction);
10431 IF (l_trip_direction = 'O' ) OR (l_trip_direction IS NULL) THEN
10432 l_valid_trip := 'N';
10433 ELSE
10434 l_valid_trip := 'Y';
10435 END IF;
10436 END IF;
10437
10438 IF l_valid_trip = 'Y' THEN
10439
10440 IF l_trip_info.carrier_id is null OR l_trip_info.mode_of_transport is null
10441 OR l_trip_info.service_level is null THEN
10442 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'should have full ship method to rerate a trip !!! Trip Id ='|| p_trip_id_list(i));
10443 l_fail_index := l_fail_index + 1;
10444 x_failed_trips_list(l_fail_index) := p_trip_id_list(i);
10445 ELSE
10446 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Trip has full ship method !!! Trip Id ='|| p_trip_id_list(i));
10447 l_success_index := l_success_index + 1;
10448 x_success_trips_list(l_success_index) := p_trip_id_list(i);
10449 END IF;
10450 ELSE
10451 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Trip Direction/Status combination is not elegible for rarating ');
10452 l_closed_index := l_closed_index + 1;
10453 x_closed_trips_list(l_closed_index) := p_trip_id_list(i);
10454 END IF;
10455 END LOOP;
10456
10457 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Failed Trips = '|| x_failed_trips_list.COUNT);
10458 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Success Trips = '|| x_success_trips_list.COUNT);
10459
10460 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
10461
10462 EXCEPTION
10463
10464 WHEN OTHERS THEN
10465 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'validate_trips failed');
10466 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
10467
10468 END validate_trips;
10469 -- This API is called directly from DWB
10470 -- Modified the signature for 12i. p_delivery_leg_list can contain list of Delivery Ids or Delivery Legs
10471 -- Based on p_deliveries_list_type , it'll call different rating modules.
10472 -- In R12 behavior of rerating will change as in case of a delivery/dleg , with more
10473 -- delivery legs on the same trip we'll call rerating of the complete trip.
10474 -- So in case of rerating Trip level rating will be called always instead of individual delivery leg
10475
10476 PROCEDURE rerate_shipment_online(
10477 p_api_version IN NUMBER DEFAULT 1.0,
10478 p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE,
10479 p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
10480 p_deliveries_list IN FTE_ID_TAB_TYPE,
10481 p_delivery_name_list IN FTE_NAME_TAB_TYPE,
10482 p_deliveries_list_type IN VARCHAR2 , -- This will have 'DEL' for Delivery IDs or 'DLEG' for Delivery Leg Ids.
10483 x_success_list OUT NOCOPY FTE_ID_TAB_TYPE,
10484 x_warning_list OUT NOCOPY FTE_ID_TAB_TYPE,
10485 x_fail_list OUT NOCOPY FTE_ID_TAB_TYPE,
10486 x_return_status OUT NOCOPY VARCHAR2,
10487 x_msg_count OUT NOCOPY NUMBER,
10488 x_msg_data OUT NOCOPY VARCHAR2)
10489 IS
10490 l_dleg_list_empty EXCEPTION;
10491 l_del_name_mismatch EXCEPTION;
10492 l_delv_list_empty EXCEPTION;
10496
10493 l_trip_rating_failed EXCEPTION;
10494 l_dleg_validation_failed EXCEPTION;
10495 l_delivery_validation_failed EXCEPTION;
10497 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
10498 l_api_version CONSTANT NUMBER := 1.0;
10499 l_api_name CONSTANT VARCHAR2(30) := 'rerate_shipment_online';
10500 --l_return_status VARCHAR2(1);
10501 l_msg_count NUMBER := 0;
10502 l_msg_data VARCHAR2(32767);
10503 l_fail_delivery_name_list VARCHAR2(32767);
10504 l_warn_delivery_name_list VARCHAR2(32767);
10505 i NUMBER;
10506 l_failed_leg_list FTE_ID_TAB_TYPE;
10507 l_success_leg_list FTE_ID_TAB_TYPE;
10508 l_warning_leg_list FTE_ID_TAB_TYPE;
10509 l_dleg_list FTE_ID_TAB_TYPE;
10510 --l_trip_ids FTE_ID_TAB_TYPE;
10511 l_new_deliveries_list FTE_ID_TAB_TYPE;
10512 l_new_dleg_list FTE_ID_TAB_TYPE;
10513 l_delv_legs DELIVERY_LEG_TAB_TYPE;
10514 l_index NUMBER := 0;
10515 l_trip_id NUMBER;
10516 l_failed_list FTE_ID_TAB_TYPE;
10517 l_success_list FTE_ID_TAB_TYPE;
10518 l_warning_list FTE_ID_TAB_TYPE;
10519 l_trip_ids DELIVERY_TRIP_TAB_TYPE;
10520 j NUMBER;
10521 l_all_trips DELIVERY_TRIP_TAB_TYPE;
10522 j1 NUMBER;
10523 l_service_failed VARCHAR2(1) ;
10524 l_service_failed_delv_ids VARCHAR2(32767);
10525 l_closed_trips_delv_ids VARCHAR2(32767);
10526 l_fail_val_dleg_list FTE_ID_TAB_TYPE;
10527 l_action_params FTE_TRIP_RATING_GRP.action_param_rec;
10528 l_trip_id_list WSH_UTIL_CORE.id_tab_type;
10529 l_failed_trips WSH_UTIL_CORE.id_tab_type;
10530 l_success_trips WSH_UTIL_CORE.id_tab_type;
10531 l_temp_trips_tab WSH_UTIL_CORE.id_tab_type;
10532 l_closed_trips WSH_UTIL_CORE.id_tab_type;
10533 l_number_of_warnings NUMBER;
10534 l_number_of_errors NUMBER;
10535 l_return_status VARCHAR2(32767);
10536 l_no_rates_delv_ids VARCHAR2(32767);
10537 l_status VARCHAR2(30);
10538 l_message VARCHAR2(32767);
10539 l_delv_with_multlegs_names VARCHAR2(32767);
10540 l_delv_srv_failed_names VARCHAR2(32767);
10541 l_close_trdelv_name_list VARCHAR2(32767);
10542
10543 CURSOR c_get_status_meaning
10544 IS
10545 SELECT meaning
10546 FROM wsh_lookups
10547 WHERE lookup_code = 'CL'
10548 AND lookup_type = 'TRIP_STATUS';
10549
10550
10551
10552
10553 BEGIN
10554 SAVEPOINT rerate_shipment_online;
10555 --
10556 -- Standard call to check for call compatibility.
10557 IF NOT FND_API.Compatible_API_Call
10558 (
10559 l_api_version,
10560 p_api_version,
10561 l_api_name,
10562 G_PKG_NAME
10563 )
10564 THEN
10565 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10566 END IF;
10567
10568
10569 -- Initialize message list if p_init_msg_list is set to TRUE.
10570 IF FND_API.to_Boolean( p_init_msg_list )
10571 THEN
10572 FND_MSG_PUB.initialize;
10573 END IF;
10574
10575 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10576
10577 FTE_FREIGHT_PRICING_UTIL.initialize_logging(x_return_status => l_return_status);
10578
10579 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10580 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
10581 x_return_status := l_return_status;
10582 RETURN;
10583 END IF;
10584 ELSE
10585 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Initialize Logging successful ');
10586 END IF;
10587
10588 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
10589 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
10590
10591 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_api_version='||p_api_version);
10592 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_init_msg_list='||p_init_msg_list);
10593 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_commit='||p_commit);
10594 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_deliveries_list_type='||p_deliveries_list_type);
10595 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_deliveries_name_list.count='||p_delivery_name_list.count);
10596
10597
10598 IF p_deliveries_list.COUNT <= 0 THEN
10599 IF p_deliveries_list_type = 'DEL' THEN
10600 raise l_delv_list_empty;
10601 ELSE
10602 raise l_dleg_list_empty;
10603 END IF;
10604 END IF;
10605
10606
10607 IF p_deliveries_list.COUNT <> p_delivery_name_list.COUNT THEN
10608 raise l_del_name_mismatch;
10609 END IF;
10610
10611 -- If deliveries are passed for re-rating.
10612 -- get all the delivery legs for those deliveries. Done for R12
10613
10614 l_dleg_list := FTE_ID_TAB_TYPE();
10615 l_failed_list := FTE_ID_TAB_TYPE();
10616 l_success_list := FTE_ID_TAB_TYPE();
10617 l_warning_list := FTE_ID_TAB_TYPE();
10618
10619
10620 IF p_deliveries_list_type = 'DEL' THEN
10621
10622 validate_delv_for_rerating( p_deliveries_list => p_deliveries_list,
10623 x_deliveries_list => l_new_deliveries_list
10624 );
10625 get_delivery_legs( p_deliveries_list => l_new_deliveries_list,
10626 x_delivery_legs => l_delv_legs,
10627 x_return_status => x_return_status);
10628
10629 FOR l_index IN p_deliveries_list.FIRST..p_deliveries_list.LAST LOOP
10633 ELSE
10630 IF ( hasMultipleLegs(p_deliveries_list(l_index)) = 'Y') THEN
10631 IF l_delv_with_multlegs_names IS NOT NULL THEN
10632 l_delv_with_multlegs_names := l_delv_with_multlegs_names ||' '|| p_delivery_name_list(l_index);
10634 l_delv_with_multlegs_names := p_delivery_name_list(l_index);
10635 END IF;
10636 l_warning_list.EXTEND;
10637 l_warning_list(l_warning_list.LAST) := p_deliveries_list(l_index);
10638 END IF;
10639 END LOOP;
10640 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_delv_legs.count=' || l_delv_legs.count);
10641 l_index := 0;
10642 FOR l_index IN l_delv_legs.FIRST..l_delv_legs.LAST LOOP
10643 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_index=' || l_index);
10644 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_delv_legs(l_index).delivery_leg_id' || l_delv_legs(l_index).delivery_leg_id);
10645 l_dleg_list.EXTEND;
10646 l_dleg_list(l_dleg_list.LAST) := l_delv_legs(l_index).delivery_leg_id;
10647 END LOOP;
10648 ELSE
10649 For l_index IN p_deliveries_list.FIRST..p_deliveries_list.LAST
10650 LOOP
10651 l_dleg_list.EXTEND;
10652 l_dleg_list(l_dleg_list.LAST) := p_deliveries_list(l_index);
10653 END LOOP;
10654 END IF;
10655
10656
10657 validate_delivery_legs(p_dlegs_list => l_dleg_list,
10658 x_dleg_list => l_new_dleg_list,
10659 x_failed_dleg_list => l_fail_val_dleg_list,
10660 x_return_status => x_return_status
10661 );
10662
10663 -- Get distinct trips from these delivery legs so that
10664 -- rating is not performed for same trips multiple times
10665 -- Add validation failed delivery legs also to failed list
10666 -- And raise Exception
10667 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' No rates failed list::= '||l_fail_val_dleg_list.COUNT);
10668
10669 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' Total Delivery Legs list l_delv_legs::= '||l_delv_legs.COUNT);
10670
10671 l_index := 0;
10672
10673 IF l_fail_val_dleg_list.COUNT > 0 THEN
10674 FOR j1 IN l_fail_val_dleg_list.FIRST..l_fail_val_dleg_list.LAST LOOP
10675 IF p_deliveries_list_type = 'DEL' THEN
10676 FOR l_index IN l_delv_legs.FIRST..l_delv_legs.LAST LOOP
10677 IF l_delv_legs(l_index).delivery_leg_id = l_fail_val_dleg_list(j1) THEN
10678 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Failed Delivery Name :='||l_delv_legs(l_index).delivery_name);
10679 IF l_fail_delivery_name_list IS NOT NULL THEN
10680 l_fail_delivery_name_list := l_delv_legs(l_index).delivery_name;
10681 ELSE
10682 l_fail_delivery_name_list := l_fail_delivery_name_list ||' '||l_delv_legs(l_index).delivery_name;
10683 END IF;
10684 END IF;
10685 END LOOP;
10686 ELSE
10687 FOR l_index IN l_dleg_list.FIRST..l_dleg_list.LAST LOOP
10688 IF l_dleg_list(l_index) = l_fail_val_dleg_list(j1) THEN
10689 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Failed Delivery Name :='||p_delivery_name_list(l_index));
10690 IF l_fail_delivery_name_list IS NOT NULL THEN
10691 l_fail_delivery_name_list := p_delivery_name_list(l_index);
10692 ELSE
10693 l_fail_delivery_name_list := l_fail_delivery_name_list ||' '||p_delivery_name_list(l_index);
10694 END IF;
10695 END IF;
10696 END LOOP;
10697 END IF;
10698 END LOOP;
10699 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' No rates failed list::= '||l_no_rates_delv_ids);
10700 FND_MESSAGE.SET_NAME('FTE','FTE_PRC_RERATE_NORATES');
10701 FND_MESSAGE.SET_TOKEN('DEL_NAMES',l_fail_delivery_name_list);
10702 --FND_MESSAGE.SET_TOKEN('LOGFILE',FTE_FREIGHT_PRICING_UTIL.get_log_file_name());
10703 FND_MSG_PUB.ADD;
10704 raise l_delivery_validation_failed;
10705 END IF;
10706
10707
10708
10709 IF (l_new_dleg_list IS NOT NULL ) OR (l_new_dleg_list.COUNT > 0 )
10710 THEN
10711 get_distinct_trip_ids( p_dleg_list => l_new_dleg_list,
10712 x_trip_ids => l_trip_ids ,
10713 x_all_trips => l_all_trips,
10714 x_return_status => x_return_status) ;
10715 l_index := 0;
10716 -- Call Trip rating for all the trips.
10717 j := 1;
10718 FOR l_index IN l_trip_ids.FIRST..l_trip_ids.LAST LOOP
10719 l_trip_id_list (j) := l_trip_ids(l_index).trip_id;
10720 j := j+1;
10721 END LOOP;
10722 validate_trips(p_trip_id_list => l_trip_id_list,
10723 x_failed_trips_list => l_failed_trips,
10724 x_success_trips_list => l_success_trips,
10725 x_closed_trips_list => l_closed_trips);
10726 -- For trips which failed to validate for full ship_method
10727 -- Get the deliveries/Dlegs and add them to failed list.
10728 j := 0;
10729 IF l_failed_trips.COUNT > 0 THEN
10730 FOR j IN l_failed_trips.FIRST..l_failed_trips.LAST LOOP
10731 FOR j1 IN l_failed_trips.FIRST..l_failed_trips.LAST LOOP
10732 IF l_all_trips(j1).trip_id = l_failed_trips(j) THEN
10733 --IF l_service_failed_delv_ids is null THEN
10734 -- l_service_failed_delv_ids := l_all_trips(j1).delivery_id;
10735 --ELSE
10739 IF p_deliveries_list_type = 'DEL' THEN
10736 -- l_service_failed_delv_ids := l_service_failed_delv_ids ||' '||l_all_trips(j1).delivery_id;
10737 --END IF;
10738 l_failed_list.EXTEND;
10740 l_failed_list(l_failed_list.LAST) := l_all_trips(j1).delivery_id;
10741 ELSE
10742 l_failed_list(l_failed_list.LAST) := l_all_trips(j1).delivery_leg_id;
10743 END IF;
10744 IF l_delv_srv_failed_names IS NOT NULL THEN
10745 l_delv_srv_failed_names := l_all_trips(j1).delivery_name;
10746 ELSE
10747 l_delv_srv_failed_names := l_delv_srv_failed_names ||' '||l_all_trips(j1).delivery_name;
10748 END IF;
10749 END IF;
10750 END LOOP;
10751 END LOOP;
10752 END IF;
10753
10754
10755 -- Handle Closed trips information for Error Messages and Warning.
10756 -- Trips which failed to validate for status/direction
10757 -- Get the deliveries/Dlegs and add them to failed list.
10758 j := 0;
10759 j1 := 0;
10760 IF l_closed_trips.COUNT > 0 THEN
10761
10762 OPEN c_get_status_meaning;
10763 FETCH c_get_status_meaning INTO l_status;
10764 CLOSE c_get_status_meaning;
10765 FOR j IN l_closed_trips.FIRST..l_closed_trips.LAST LOOP
10766 FOR j1 IN l_all_trips.FIRST..l_all_trips.LAST LOOP
10767 IF l_all_trips(j1).trip_id = l_closed_trips(j) THEN
10768 --IF l_closed_trips_delv_ids is null THEN
10769 -- l_closed_trips_delv_ids := l_all_trips(j1).delivery_id;
10770 --ELSE
10771 -- l_closed_trips_delv_ids := l_closed_trips_delv_ids ||' '||l_all_trips(j1).delivery_id;
10772 --END IF;
10773 l_failed_list.EXTEND;
10774 IF p_deliveries_list_type = 'DEL' THEN
10775 l_failed_list(l_failed_list.LAST) := l_all_trips(j1).delivery_id;
10776 ELSE
10777 l_failed_list(l_failed_list.LAST) := l_all_trips(j1).delivery_leg_id;
10778 END IF;
10779 IF l_close_trdelv_name_list IS NOT NULL THEN
10780 l_close_trdelv_name_list := l_all_trips(j1).delivery_name;
10781 ELSE
10782 l_close_trdelv_name_list := l_close_trdelv_name_list ||' '||l_all_trips(j1).delivery_name;
10783 END IF;
10784 END IF;
10785 END LOOP;
10786 END LOOP;
10787 END IF;
10788
10789 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Failed Service Deliveries= '||l_service_failed_delv_ids);
10790
10791
10792
10793 l_index := 0;
10794
10795 IF l_success_trips.COUNT > 0 THEN
10796 FOR l_index IN l_success_trips.FIRST..l_success_trips.LAST LOOP
10797 l_action_params.caller := 'FTE';
10798 l_action_params.event := 'RE-RATING';
10799 l_action_params.action := 'RATE';
10800 l_temp_trips_tab(1) := l_success_trips(l_index);
10801 l_action_params.trip_id_list := l_temp_trips_tab;
10802
10803 FTE_TRIP_RATING_GRP.Rate_Trip
10804 (
10805 p_api_version => 1.0,
10806 p_init_msg_list => FND_API.G_FALSE,
10807 p_action_params => l_action_params,
10808 p_commit => FND_API.G_FALSE,
10809 p_init_prc_log => 'N',
10810 x_return_status => l_return_status,
10811 x_msg_count => l_msg_count,
10812 x_msg_data => l_msg_data
10813 );
10814 j1 := 0;
10815 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10816 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Trip Re-Rating successful for trip_id : '||l_trip_ids(l_index).trip_id);
10817 FOR j1 IN l_all_trips.FIRST..l_all_trips.LAST LOOP
10818 IF l_all_trips(j1).trip_id = l_trip_ids(l_index).trip_id THEN
10819 l_success_list.EXTEND;
10820 IF p_deliveries_list_type = 'DEL' THEN
10821 l_success_list(l_success_list.LAST) := l_all_trips(j1).delivery_id;
10822 ELSE
10823 l_success_list(l_success_list.LAST) := l_all_trips(j1).delivery_leg_id;
10824 END IF;
10825 END IF;
10826 END LOOP;
10827 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
10828 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Trip Re-Rating with Warnings for trip_id : '||l_trip_ids(l_index).trip_id);
10829 x_return_status := l_return_status;
10830
10831 FND_MSG_PUB.Count_And_Get
10832 (
10833 p_count => l_msg_count,
10834 p_data => l_message,
10835 p_encoded => FND_API.G_FALSE
10836 );
10837 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Warning : '||l_message);
10838 FOR j1 IN l_all_trips.FIRST..l_all_trips.LAST LOOP
10839 IF l_all_trips(j1).trip_id = l_trip_ids(l_index).trip_id THEN
10840 IF l_warn_delivery_name_list is null THEN
10841 l_warn_delivery_name_list := l_all_trips(j1).delivery_id;
10842 ELSE
10843 l_warn_delivery_name_list := l_warn_delivery_name_list ||' '||l_all_trips(j1).delivery_id;
10844 END IF;
10845 l_warning_list.EXTEND;
10849 l_warning_list(l_warning_list.LAST) := l_all_trips(j1).delivery_leg_id;
10846 IF p_deliveries_list_type = 'DEL' THEN
10847 l_warning_list(l_warning_list.LAST) := l_all_trips(j1).delivery_id;
10848 ELSE
10850 END IF;
10851 END IF;
10852 END LOOP;
10853 ELSE
10854 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'trip id: '|| l_trip_ids(l_index).trip_id || ' rate_trip2 ');
10855 x_return_status := l_return_status;
10856 FND_MSG_PUB.Count_And_Get
10857 (
10858 p_count => l_msg_count,
10859 p_data => l_message,
10860 p_encoded => FND_API.G_FALSE
10861 );
10862 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Error : '||l_message);
10863 FOR j1 IN l_all_trips.FIRST..l_all_trips.LAST LOOP
10864 IF l_all_trips(j1).trip_id = l_trip_ids(l_index).trip_id THEN
10865 IF l_fail_delivery_name_list is null THEN
10866 l_fail_delivery_name_list := l_all_trips(j1).delivery_id;
10867 ELSE
10868 l_fail_delivery_name_list := l_fail_delivery_name_list ||' '||l_all_trips(j1).delivery_id;
10869 END IF;
10870 l_failed_list.EXTEND;
10871 IF p_deliveries_list_type = 'DEL' THEN
10872 l_failed_list(l_failed_list.LAST) := l_all_trips(j1).delivery_id;
10873 ELSE
10874 l_failed_list(l_failed_list.LAST) := l_all_trips(j1).delivery_leg_id;
10875 END IF;
10876 END IF;
10877 END LOOP;
10878 END IF;
10879 END LOOP; -- End Loop for l_trip_ids. Trip rating.
10880 END IF;
10881
10882 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_trip_ids.COUNT=' || l_trip_ids.COUNT);
10883 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_failed_list.COUNT='|| l_failed_list.COUNT);
10884 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_warning_list.COUNT='|| l_warning_list.COUNT);
10885 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_success_list.COUNT='|| l_success_list.COUNT);
10886
10887 FND_MSG_PUB.Delete_Msg ( p_msg_index => null);
10888
10889 IF l_success_list.COUNT > 0 THEN
10890 IF l_success_list.COUNT = l_dleg_list.COUNT THEN
10891 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10892 END IF;
10893 END IF;
10894
10895 IF l_warning_list.COUNT > 0 THEN
10896 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10897 IF l_delv_with_multlegs_names IS NOT NULL THEN
10898 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' Delv with MulipleLegs::= '||l_delv_with_multlegs_names);
10899 FND_MESSAGE.SET_NAME('FTE','FTE_PRC_RERATE_MULTILEG_WARN');
10900 FND_MESSAGE.SET_TOKEN('DEL_NAMES',l_delv_with_multlegs_names);
10901 FND_MSG_PUB.ADD;
10902 END IF;
10903 FND_MESSAGE.SET_NAME('FTE','FTE_PRC_RERATE_SHIPMENT_WARNIN');
10904 FND_MESSAGE.SET_TOKEN('DEL_NAMES',l_warn_delivery_name_list);
10905 FND_MESSAGE.SET_TOKEN('LOGFILE',FTE_FREIGHT_PRICING_UTIL.get_log_file_name());
10906 FND_MSG_PUB.ADD;
10907 END IF;
10908
10909
10910 IF l_failed_list.COUNT >0 THEN
10911 IF l_delv_srv_failed_names IS NOT NULL THEN
10912 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Service failed list::= '||l_delv_srv_failed_names);
10913 FND_MESSAGE.SET_NAME('FTE','FTE_PRC_RERATE_SERVICE_FAILED');
10914 FND_MESSAGE.SET_TOKEN('DEL_NAMES',l_delv_srv_failed_names);
10915 --FND_MESSAGE.SET_TOKEN('LOGFILE',FTE_FREIGHT_PRICING_UTIL.get_log_file_name());
10916 FND_MSG_PUB.ADD;
10917 END IF;
10918 IF l_closed_trips_delv_ids IS NOT NULL THEN
10919 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Deliveries with Closed Trips list::= '||l_close_trdelv_name_list);
10920 FND_MESSAGE.SET_NAME('FTE','FTE_MLS_CANNOT_UPD_RATE');
10921 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME',l_close_trdelv_name_list);
10922 FND_MESSAGE.SET_TOKEN('DELIVERY_STATUS',l_status);
10923 --FND_MESSAGE.SET_TOKEN('LOGFILE',FTE_FREIGHT_PRICING_UTIL.get_log_file_name());
10924 FND_MSG_PUB.ADD;
10925 END IF;
10926 IF l_fail_delivery_name_list IS NOT NULL THEN
10927 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,' failed list::= '||l_fail_delivery_name_list);
10928 FND_MESSAGE.SET_NAME('FTE','FTE_PRC_RERATE_SHIPMENT_FAIL');
10929 FND_MESSAGE.SET_TOKEN('DEL_NAMES',l_fail_delivery_name_list);
10930 FND_MESSAGE.SET_TOKEN('LOGFILE',FTE_FREIGHT_PRICING_UTIL.get_log_file_name());
10931 FND_MSG_PUB.ADD;
10932 END IF;
10933 IF l_success_list.COUNT > 0 OR l_warning_list.COUNT > 0 THEN
10934 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10935 ELSE
10936 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10937 END IF;
10938 END IF;
10939 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'x_return_status='||x_return_status);
10940
10941 x_success_list := l_success_list;
10942 x_warning_list := l_warning_list;
10943 x_fail_list := l_failed_list;
10944 ELSE
10945 RAISE l_dleg_validation_failed;
10946 END IF;
10947
10948
10949 IF FND_API.To_Boolean( p_commit ) THEN
10950
10951 COMMIT WORK;
10952
10953 END IF;
10954
10955 FND_MSG_PUB.Count_And_Get
10956 (
10957 p_count => x_msg_count,
10958 p_data => x_msg_data,
10959 p_encoded => FND_API.G_FALSE
10960 );
10961
10962
10963
10967 FTE_FREIGHT_PRICING_UTIL.close_logs;
10964 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Msg Count'||x_msg_count||' Msg data:'||x_msg_data);
10965
10966 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
10968
10969 EXCEPTION
10970 WHEN l_delivery_validation_failed THEN
10971 ROLLBACK TO rerate_shipment_online;
10972 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10973 --FND_MSG_PUB.Count_And_Get
10974 -- (
10975 -- p_count => x_msg_count,
10976 -- p_data => x_msg_data,
10977 -- p_encoded => FND_API.G_FALSE
10978 -- );
10979 -- FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'msg count is ='||x_msg_count);
10980 -- FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'msg data is ='||x_msg_data);
10981 FTE_FREIGHT_PRICING_UTIL.set_exit_exception(l_api_name,'l_delivery_validation_failed');
10982 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
10983 FTE_FREIGHT_PRICING_UTIL.close_logs;
10984 WHEN l_dleg_list_empty THEN
10985 ROLLBACK TO rerate_shipment_online;
10986 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10987 FND_MSG_PUB.Count_And_Get
10988 (
10989 p_count => x_msg_count,
10990 p_data => x_msg_data,
10991 p_encoded => FND_API.G_FALSE
10992 );
10993 FTE_FREIGHT_PRICING_UTIL.set_exit_exception(l_api_name,'l_dleg_list_empty');
10994 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
10995 FTE_FREIGHT_PRICING_UTIL.close_logs;
10996
10997 WHEN l_delv_list_empty THEN
10998 ROLLBACK TO rerate_shipment_online;
10999 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11000 FND_MSG_PUB.Count_And_Get
11001 (
11002 p_count => x_msg_count,
11003 p_data => x_msg_data,
11004 p_encoded => FND_API.G_FALSE
11005 );
11006 FTE_FREIGHT_PRICING_UTIL.set_exit_exception(l_api_name,'l_delv_list_empty');
11007 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11008 FTE_FREIGHT_PRICING_UTIL.close_logs;
11009
11010 WHEN l_del_name_mismatch THEN
11011 ROLLBACK TO rerate_shipment_online;
11012 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11013 FND_MSG_PUB.Count_And_Get
11014 (
11015 p_count => x_msg_count,
11016 p_data => x_msg_data,
11017 p_encoded => FND_API.G_FALSE
11018 );
11019 FTE_FREIGHT_PRICING_UTIL.set_exit_exception(l_api_name,'l_del_name_mismatch');
11020 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11021 FTE_FREIGHT_PRICING_UTIL.close_logs;
11022 WHEN l_dleg_validation_failed THEN
11023 ROLLBACK TO rerate_shipment_online;
11024 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11025 FND_MSG_PUB.Count_And_Get
11026 (
11027 p_count => x_msg_count,
11028 p_data => x_msg_data,
11029 p_encoded => FND_API.G_FALSE
11030 );
11031 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'l_dleg_validation_failed');
11032 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
11033 FTE_FREIGHT_PRICING_UTIL.close_logs;
11034 WHEN l_trip_rating_failed THEN
11035 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11036 FND_MSG_PUB.Count_And_Get
11037 (
11038 p_count => x_msg_count,
11039 p_data => x_msg_data,
11040 p_encoded => FND_API.G_FALSE
11041 );
11042 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_reprice2',FTE_FREIGHT_PRICING_UTIL.G_ERR,'l_delivery_leg_rating_failed');
11043 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_reprice2');
11044 FTE_FREIGHT_PRICING_UTIL.close_logs;
11045 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11046 ROLLBACK TO rerate_shipment_online;
11047 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11048 FND_MSG_PUB.Count_And_Get
11049 (
11050 p_count => x_msg_count,
11051 p_data => x_msg_data,
11052 p_encoded => FND_API.G_FALSE
11053 );
11054
11055 FTE_FREIGHT_PRICING_UTIL.set_exit_exception(l_api_name,'FND_API.G_EXC_UNEXPECTED_ERROR');
11056 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11057 FTE_FREIGHT_PRICING_UTIL.close_logs;
11058 WHEN others THEN
11059 ROLLBACK TO rerate_shipment_online;
11060 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11061 FND_MSG_PUB.Count_And_Get
11062 (
11063 p_count => x_msg_count,
11064 p_data => x_msg_data,
11065 p_encoded => FND_API.G_FALSE
11066 );
11067 FTE_FREIGHT_PRICING_UTIL.set_exit_exception(l_api_name,'g_others');
11068 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
11069 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11070 FTE_FREIGHT_PRICING_UTIL.close_logs;
11071 END rerate_shipment_online;
11072
11073
11074 PROCEDURE delete_fc_temp_pvt (
11075 p_request_id IN NUMBER, -- Comparison Request ID to move to main
11076 p_initialized IN BOOLEAN DEFAULT TRUE,
11077 p_lane_id IN NUMBER DEFAULT NULL,
11078 p_schedule_id IN NUMBER DEFAULT NULL,
11079 x_return_status OUT NOCOPY VARCHAR2)
11080 IS
11081
11082 l_return_status VARCHAR2(1);
11083 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
11084
11085 BEGIN
11086
11087 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11088 IF p_initialized THEN
11089 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
11090 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'delete_fc_temp_pvt','start');
11091 END IF;
11092
11093 DELETE
11094 FROM fte_freight_costs_temp
11098 AND nvl(schedule_id,-9999) <> nvl(p_schedule_id,-19999);
11095 WHERE comparison_request_id = p_request_id
11096 --AND nvl(lane_id,-9999) <> nvl(p_lane_id,-19999)
11097 AND nvl(lane_id,-9999) <> nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-19999)
11099
11100 IF p_initialized THEN
11101 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_fc_temp_pvt');
11102 END IF;
11103
11104 EXCEPTION
11105 WHEN others THEN
11106 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11107 IF p_initialized THEN
11108 FTE_FREIGHT_PRICING_UTIL.set_exception('delete_fc_temp_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
11109 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
11110 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_fc_temp_pvt');
11111 END IF;
11112 END delete_fc_temp_pvt;
11113
11114 -- This API is called by Rate_Delivery of LCSS project
11115 -- To move freight costs from pl/sql table to wsh_freight_costs
11116 -- for non-TL rates, dleg_id is not populated in freight_cost_temp
11117
11118 PROCEDURE Move_fc_temp_to_main (
11119 p_delivery_leg_id IN NUMBER,
11120 p_freight_cost_temp_price IN Freight_Cost_Temp_Tab_Type,
11121 p_freight_cost_temp_charge IN Freight_Cost_Temp_Tab_Type,
11122 x_return_status OUT NOCOPY VARCHAR2)
11123 IS
11124 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
11125 l_api_name CONSTANT VARCHAR2(30) := 'MOVE_FC_TEMP_TO_MAIN';
11126 l_return_status VARCHAR2(1);
11127 l_msg_count NUMBER := 0;
11128 l_msg_data VARCHAR2(240);
11129
11130 l_empty_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11131 l_freight_cost_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11132 l_freight_cost_main_charge WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11133 l_price_fc_ids WSH_UTIL_CORE.id_tab_type;
11134 l_rowid VARCHAR2(30);
11135 l_update_rowid VARCHAR2(30);
11136 l_freight_cost_id NUMBER;
11137
11138 BEGIN
11139 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11140
11141 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
11142 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
11143
11144 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_delivery_leg_id='||p_delivery_leg_id);
11145
11146 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_freight_cost_temp_price.COUNT=' || p_freight_cost_temp_price.COUNT );
11147
11148 IF (p_delivery_leg_id IS NULL) THEN
11149 raise FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg;
11150 END IF;
11151
11152 --IF p_freight_cost_temp_price.COUNT = 0 THEN
11153 -- raise FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move;
11154 --END IF;
11155
11156 SAVEPOINT before_fc_creation;
11157
11158 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'looping through p_freight_cost_temp_price...');
11159 IF p_freight_cost_temp_price.COUNT > 0 THEN
11160
11161 FOR i in p_freight_cost_temp_price.FIRST..p_freight_cost_temp_price.LAST LOOP
11162 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'i='||i);
11163
11164 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_freight_cost_temp_price(i).TOTAL_AMOUNT=' || p_freight_cost_temp_price(i).TOTAL_AMOUNT);
11165
11166 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_freight_cost_temp_price(i).BILLABLE_QUANTITY=' || p_freight_cost_temp_price(i).BILLABLE_QUANTITY);
11167
11168 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'p_freight_cost_temp_price(i).UNIT_AMOUNT=' || p_freight_cost_temp_price(i).UNIT_AMOUNT);
11169
11170 --ensures no spill overs from earlier rows
11171 l_freight_cost_main_row:=l_empty_main_row;
11172
11173 l_freight_cost_main_row.FREIGHT_COST_TYPE_ID := p_freight_cost_temp_price(i).FREIGHT_COST_TYPE_ID;
11174 l_freight_cost_main_row.UNIT_AMOUNT := p_freight_cost_temp_price(i).UNIT_AMOUNT;
11175 l_freight_cost_main_row.UOM := p_freight_cost_temp_price(i).UOM;
11176 l_freight_cost_main_row.QUANTITY := p_freight_cost_temp_price(i).QUANTITY;
11177 l_freight_cost_main_row.TOTAL_AMOUNT := p_freight_cost_temp_price(i).TOTAL_AMOUNT;
11178 l_freight_cost_main_row.CURRENCY_CODE := p_freight_cost_temp_price(i).CURRENCY_CODE;
11179 l_freight_cost_main_row.DELIVERY_ID := p_freight_cost_temp_price(i).DELIVERY_ID;
11180
11181 IF (p_freight_cost_temp_price(i).DELIVERY_LEG_ID IS NULL)
11182 THEN
11183
11184 l_freight_cost_main_row.DELIVERY_LEG_ID := p_delivery_leg_id;
11185 ELSE
11186 l_freight_cost_main_row.DELIVERY_LEG_ID := p_freight_cost_temp_price(i).DELIVERY_LEG_ID;
11187 END IF;
11188
11189 l_freight_cost_main_row.DELIVERY_DETAIL_ID := p_freight_cost_temp_price(i).DELIVERY_DETAIL_ID;
11190 --l_freight_cost_main_row.FREIGHT_CODE := p_freight_cost_temp_price(i).FREIGHT_CODE;
11191 l_freight_cost_main_row.LINE_TYPE_CODE := p_freight_cost_temp_price(i).LINE_TYPE_CODE;
11192 l_freight_cost_main_row.CHARGE_UNIT_VALUE := p_freight_cost_temp_price(i).CHARGE_UNIT_VALUE;
11193 l_freight_cost_main_row.CHARGE_SOURCE_CODE := p_freight_cost_temp_price(i).CHARGE_SOURCE_CODE;
11194 --l_freight_cost_main_row.ESTIMATED_FLAG := p_freight_cost_temp_price(i).ESTIMATED_FLAG;
11195 l_freight_cost_main_row.ESTIMATED_FLAG := 'Y';
11196 l_freight_cost_main_row.LAST_UPDATE_DATE := SYSDATE;
11197 l_freight_cost_main_row.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
11198 l_freight_cost_main_row.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
11199 l_freight_cost_main_row.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
11200 l_freight_cost_main_row.BILLABLE_UOM := p_freight_cost_temp_price(i).BILLABLE_UOM;
11204 --l_freight_cost_main_row.PROGRAM_UPDATE_DATE := SYSDATE;
11201 l_freight_cost_main_row.BILLABLE_BASIS := p_freight_cost_temp_price(i).BILLABLE_BASIS;
11202 l_freight_cost_main_row.BILLABLE_QUANTITY := p_freight_cost_temp_price(i).BILLABLE_QUANTITY;
11203 --l_freight_cost_main_row.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
11205
11206 -- pack J Enhancement for FPA
11207 l_freight_cost_main_row.COMMODITY_CATEGORY_ID
11208 := p_freight_cost_temp_price(i).COMMODITY_CATEGORY_ID;
11209 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
11210 '(FPA)l_freight_cost_main_row.COMMODITY_CATEGORY_ID='||l_freight_cost_main_row.COMMODITY_CATEGORY_ID);
11211
11212 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.line_type_code='||l_freight_cost_main_row.line_type_code);
11213 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.delivery_detail_id='||l_freight_cost_main_row.delivery_detail_id);
11214 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.delivery_leg_id='||l_freight_cost_main_row.delivery_leg_id);
11215
11216 IF l_freight_cost_main_row.line_type_code = 'SUMMARY'
11217 AND l_freight_cost_main_row.delivery_detail_id IS NULL
11218 AND l_freight_cost_main_row.delivery_leg_id is not null THEN
11219
11220 -- To update the delivery leg summary row
11221 -- Get the delivery leg id as input and get the freight cost id for that
11222 -- The lane level summary amount becomes the delivery leg level summary amount
11223
11224 l_freight_cost_main_row.FREIGHT_COST_ID := get_fc_id_from_dleg(l_freight_cost_main_row.delivery_leg_id);
11225 l_freight_cost_main_row.DELIVERY_LEG_ID := l_freight_cost_main_row.delivery_leg_id;
11226
11227 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.FREIGHT_COST_ID='||l_freight_cost_main_row.FREIGHT_COST_ID);
11228
11229 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Calling WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost...');
11230 WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost(
11231 p_rowid => l_update_rowid,
11232 p_freight_cost_info => l_freight_cost_main_row,
11233 x_return_status => l_return_status);
11234
11235 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11236 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11237 ROLLBACK to before_fc_creation;
11238 raise FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed;
11239 END IF;
11240 END IF;
11241 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Update_Freight_Cost ');
11242
11243 ELSE
11244
11245 l_freight_cost_main_row.CREATION_DATE := SYSDATE;
11246 l_freight_cost_main_row.CREATED_BY := FND_GLOBAL.USER_ID;
11247
11248 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Calling WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost...');
11249 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
11250 p_freight_cost_info => l_freight_cost_main_row,
11251 x_rowid => l_rowid,
11252 x_freight_cost_id => l_freight_cost_id,
11253 x_return_status => l_return_status);
11254
11255 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11256 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11257 ROLLBACK to before_fc_creation;
11258 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Base price');
11259 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
11260 END IF;
11261 END IF;
11262 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
11263
11264 END IF;
11265
11266 END LOOP; -- p_freight_cost_temp_price loop
11267 END IF;
11268
11269 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'looping through p_freight_cost_temp_charge...');
11270 IF p_freight_cost_temp_charge.COUNT > 0 THEN
11271 FOR i in p_freight_cost_temp_charge.FIRST..p_freight_cost_temp_charge.LAST LOOP
11272 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'i='||i);
11273
11274 --ensures no spill overs from earlier rows
11275 l_freight_cost_main_charge:=l_empty_main_row;
11276
11277 l_freight_cost_main_charge.FREIGHT_COST_TYPE_ID := p_freight_cost_temp_charge(i).FREIGHT_COST_TYPE_ID;
11278 l_freight_cost_main_charge.UNIT_AMOUNT := p_freight_cost_temp_charge(i).UNIT_AMOUNT;
11279 l_freight_cost_main_charge.UOM := p_freight_cost_temp_charge(i).UOM;
11280 l_freight_cost_main_charge.QUANTITY := p_freight_cost_temp_charge(i).QUANTITY;
11281 l_freight_cost_main_charge.TOTAL_AMOUNT := p_freight_cost_temp_charge(i).TOTAL_AMOUNT;
11282 l_freight_cost_main_charge.CURRENCY_CODE := p_freight_cost_temp_charge(i).CURRENCY_CODE;
11283 l_freight_cost_main_charge.DELIVERY_ID := p_freight_cost_temp_charge(i).DELIVERY_ID;
11284
11285 IF (p_freight_cost_temp_charge(i).DELIVERY_LEG_ID IS NULL)
11286 THEN
11287
11288 l_freight_cost_main_charge.DELIVERY_LEG_ID := p_delivery_leg_id;
11289 ELSE
11290 l_freight_cost_main_charge.DELIVERY_LEG_ID := p_freight_cost_temp_charge(i).DELIVERY_LEG_ID;
11291 END IF;
11292 l_freight_cost_main_charge.DELIVERY_DETAIL_ID := p_freight_cost_temp_charge(i).DELIVERY_DETAIL_ID;
11293 --l_freight_cost_main_charge.FREIGHT_CODE := p_freight_cost_temp_charge(i).FREIGHT_CODE;
11294 l_freight_cost_main_charge.LINE_TYPE_CODE := p_freight_cost_temp_charge(i).LINE_TYPE_CODE;
11295 l_freight_cost_main_charge.CHARGE_UNIT_VALUE := p_freight_cost_temp_charge(i).CHARGE_UNIT_VALUE;
11296 l_freight_cost_main_charge.CHARGE_SOURCE_CODE := p_freight_cost_temp_charge(i).CHARGE_SOURCE_CODE;
11300 l_freight_cost_main_charge.CREATED_BY := FND_GLOBAL.USER_ID;
11297 --l_freight_cost_main_charge.ESTIMATED_FLAG := p_freight_cost_temp_charge(i).ESTIMATED_FLAG;
11298 l_freight_cost_main_charge.ESTIMATED_FLAG := 'Y';
11299 l_freight_cost_main_charge.CREATION_DATE := SYSDATE;
11301 l_freight_cost_main_charge.LAST_UPDATE_DATE := SYSDATE;
11302 l_freight_cost_main_charge.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
11303 l_freight_cost_main_charge.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
11304 l_freight_cost_main_charge.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
11305 l_freight_cost_main_row.BILLABLE_UOM := p_freight_cost_temp_charge(i).BILLABLE_UOM;
11306 l_freight_cost_main_row.BILLABLE_BASIS := p_freight_cost_temp_charge(i).BILLABLE_BASIS;
11307 l_freight_cost_main_row.BILLABLE_QUANTITY := p_freight_cost_temp_charge(i).BILLABLE_QUANTITY;
11308
11309 --l_freight_cost_main_charge.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
11310 --l_freight_cost_main_charge.PROGRAM_UPDATE_DATE := SYSDATE;
11311
11312 -- pack J Enhancement for FPA
11313 l_freight_cost_main_charge.COMMODITY_CATEGORY_ID
11314 := p_freight_cost_temp_charge(i).COMMODITY_CATEGORY_ID;
11315 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
11316 '(FPA)l_freight_cost_main_charge.COMMODITY_CATEGORY_ID='||l_freight_cost_main_charge.COMMODITY_CATEGORY_ID);
11317
11318 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
11319 p_freight_cost_info => l_freight_cost_main_charge,
11320 x_rowid => l_rowid,
11321 x_freight_cost_id => l_freight_cost_id,
11322 x_return_status => l_return_status);
11323
11324 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11325 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11326 ROLLBACK to before_fc_creation;
11327 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Charge');
11328 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
11329 END IF;
11330 END IF;
11331 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
11332
11333 END LOOP; -- p_freight_cost_temp_charge loop
11334 END IF;
11335
11336 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11337
11338 EXCEPTION
11339 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move THEN
11340 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11341 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_temp_fc_to_move');
11342 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11343 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed THEN
11344 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11345 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_create_freight_cost_failed');
11346 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11347 WHEN FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed THEN
11348 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11349 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_update_freight_cost_failed');
11350 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11351 WHEN others THEN
11352 ROLLBACK to before_fc_creation;
11353 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11354 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
11355 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
11356 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11357 END;
11358
11359 -- This API is called by Rate_Delivery of LCSS project
11360 -- To move freight costs from pl/sql table to wsh_freight_costs
11361 -- for TL rates, tl cost allocation will populate dleg_id in freight_cost_temp
11362
11363 PROCEDURE Move_fc_temp_to_main (
11364 p_freight_cost_temp IN Freight_Cost_Temp_Tab_Type,
11365 x_return_status OUT NOCOPY VARCHAR2)
11366 IS
11367 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
11368 l_api_name CONSTANT VARCHAR2(30) := 'MOVE_FC_TEMP_TO_MAIN';
11369 l_return_status VARCHAR2(1);
11370 l_msg_count NUMBER := 0;
11371 l_msg_data VARCHAR2(240);
11372 l_empty_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11373 l_freight_cost_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11374 l_rowid VARCHAR2(30);
11375 l_update_rowid VARCHAR2(30);
11376 l_freight_cost_id NUMBER;
11377
11378 BEGIN
11379 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11380
11381 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
11382 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,l_api_name);
11383
11384 -- IF p_freight_cost_temp.COUNT = 0 THEN
11385 -- raise FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move;
11386 -- END IF;
11387
11388 SAVEPOINT before_fc_creation;
11389
11390 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'looping through p_freight_cost_temp...');
11391 IF p_freight_cost_temp.COUNT > 0 THEN
11392 FOR i in p_freight_cost_temp.FIRST..p_freight_cost_temp.LAST LOOP
11393 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'i='||i);
11394
11395 --ensures no spill overs from earlier rows
11396 l_freight_cost_main_row:=l_empty_main_row;
11397
11398
11399 l_freight_cost_main_row.FREIGHT_COST_TYPE_ID := p_freight_cost_temp(i).FREIGHT_COST_TYPE_ID;
11400 l_freight_cost_main_row.UNIT_AMOUNT := p_freight_cost_temp(i).UNIT_AMOUNT;
11401 l_freight_cost_main_row.UOM := p_freight_cost_temp(i).UOM;
11405 l_freight_cost_main_row.TRIP_ID := p_freight_cost_temp(i).TRIP_ID;
11402 l_freight_cost_main_row.QUANTITY := p_freight_cost_temp(i).QUANTITY;
11403 l_freight_cost_main_row.TOTAL_AMOUNT := p_freight_cost_temp(i).TOTAL_AMOUNT;
11404 l_freight_cost_main_row.CURRENCY_CODE := p_freight_cost_temp(i).CURRENCY_CODE;
11406 l_freight_cost_main_row.STOP_ID := p_freight_cost_temp(i).STOP_ID;
11407 l_freight_cost_main_row.DELIVERY_ID := p_freight_cost_temp(i).DELIVERY_ID;
11408 l_freight_cost_main_row.DELIVERY_LEG_ID := p_freight_cost_temp(i).DELIVERY_LEG_ID;
11409 l_freight_cost_main_row.DELIVERY_DETAIL_ID := p_freight_cost_temp(i).DELIVERY_DETAIL_ID;
11410 --l_freight_cost_main_row.FREIGHT_CODE := p_freight_cost_temp(i).FREIGHT_CODE;
11411 l_freight_cost_main_row.LINE_TYPE_CODE := p_freight_cost_temp(i).LINE_TYPE_CODE;
11412 l_freight_cost_main_row.CHARGE_UNIT_VALUE := p_freight_cost_temp(i).CHARGE_UNIT_VALUE;
11413 l_freight_cost_main_row.CHARGE_SOURCE_CODE := p_freight_cost_temp(i).CHARGE_SOURCE_CODE;
11414 --l_freight_cost_main_row.ESTIMATED_FLAG := p_freight_cost_temp(i).ESTIMATED_FLAG;
11415 l_freight_cost_main_row.ESTIMATED_FLAG := 'Y';
11416 l_freight_cost_main_row.LAST_UPDATE_DATE := SYSDATE;
11417 l_freight_cost_main_row.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
11418 l_freight_cost_main_row.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
11419 l_freight_cost_main_row.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
11420 --l_freight_cost_main_row.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
11421 --l_freight_cost_main_row.PROGRAM_UPDATE_DATE := SYSDATE;
11422
11423 -- pack J Enhancement for FPA
11424 l_freight_cost_main_row.COMMODITY_CATEGORY_ID
11425 := p_freight_cost_temp(i).COMMODITY_CATEGORY_ID;
11426 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
11427 '(FPA)l_freight_cost_main_row.COMMODITY_CATEGORY_ID='||l_freight_cost_main_row.COMMODITY_CATEGORY_ID);
11428
11429 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.line_type_code='||l_freight_cost_main_row.line_type_code);
11430 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.delivery_detail_id='||l_freight_cost_main_row.delivery_detail_id);
11431 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.delivery_leg_id='||l_freight_cost_main_row.delivery_leg_id);
11432
11433 IF l_freight_cost_main_row.line_type_code = 'SUMMARY'
11434 AND l_freight_cost_main_row.delivery_detail_id IS NULL
11435 AND l_freight_cost_main_row.delivery_leg_id is not null THEN
11436
11437 -- To update the delivery leg summary row
11438 -- Get the delivery leg id as input and get the freight cost id for that
11439 -- The lane level summary amount becomes the delivery leg level summary amount
11440
11441 l_freight_cost_main_row.FREIGHT_COST_ID := get_fc_id_from_dleg(l_freight_cost_main_row.delivery_leg_id);
11442
11443 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'l_freight_cost_main_row.FREIGHT_COST_ID='||l_freight_cost_main_row.FREIGHT_COST_ID);
11444
11445 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Calling WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost...');
11446 WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost(
11447 p_rowid => l_update_rowid,
11448 p_freight_cost_info => l_freight_cost_main_row,
11449 x_return_status => l_return_status);
11450
11451 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11452 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11453 ROLLBACK to before_fc_creation;
11454 raise FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed;
11455 END IF;
11456 END IF;
11457 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Update_Freight_Cost ');
11458
11459 ELSE
11460
11461 l_freight_cost_main_row.CREATION_DATE := SYSDATE;
11462 l_freight_cost_main_row.CREATED_BY := FND_GLOBAL.USER_ID;
11463
11464 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,'Calling WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost...');
11465 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
11466 p_freight_cost_info => l_freight_cost_main_row,
11467 x_rowid => l_rowid,
11468 x_freight_cost_id => l_freight_cost_id,
11469 x_return_status => l_return_status);
11470
11471 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11472 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11473 ROLLBACK to before_fc_creation;
11474 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Base price');
11475 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
11476 END IF;
11477 END IF;
11478 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
11479
11480 END IF;
11481
11482 END LOOP; -- p_freight_cost_temp_price loop
11483 END IF;
11484
11485 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11486
11487 EXCEPTION
11488 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move THEN
11489 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11490 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_no_temp_fc_to_move');
11491 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11492 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed THEN
11493 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11494 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_create_freight_cost_failed');
11495 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11496 WHEN FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed THEN
11500 WHEN others THEN
11497 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11498 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_update_freight_cost_failed');
11499 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11501 ROLLBACK to before_fc_creation;
11502 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11503 FTE_FREIGHT_PRICING_UTIL.set_exception(l_api_name,FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
11504 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
11505 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,l_api_name);
11506 END;
11507
11508 -- todo take care of applied_to_charge_id
11509 PROCEDURE Move_fc_temp_to_main (
11510 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
11511 p_init_prc_log IN VARCHAR2 DEFAULT 'Y',
11512 p_request_id IN NUMBER, -- Comparison Request ID to move to main
11513 p_delivery_leg_id IN NUMBER,
11514 p_lane_id IN NUMBER DEFAULT NULL,
11515 p_schedule_id IN NUMBER DEFAULT NULL,
11516 p_service_type_code IN VARCHAR2 DEFAULT NULL,
11517 x_return_status OUT NOCOPY VARCHAR2)
11518 IS
11519
11520 -- bug : 2763791 : added p_service_type_code
11521
11522 CURSOR c_move_fc_temp IS
11523 SELECT *
11524 FROM FTE_FREIGHT_COSTS_TEMP
11525 WHERE comparison_request_id = p_request_id
11526 --AND nvl(lane_id,-9999) = nvl(p_lane_id,-9999)
11527 AND nvl(lane_id,-9999) = nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-9999)
11528 AND nvl(schedule_id,-9999) = nvl(p_schedule_id,-9999)
11529 AND moved_to_main_flag = 'N'
11530 AND nvl(service_type_code,'X') = nvl(p_service_type_code,'X')
11531 AND line_type_code NOT IN ('CHARGE','DISCOUNT');
11532
11533 CURSOR c_move_fc_temp_charge IS
11534 SELECT *
11535 FROM FTE_FREIGHT_COSTS_TEMP
11536 WHERE comparison_request_id = p_request_id
11537 --AND nvl(lane_id,-9999) = nvl(p_lane_id,-9999)
11538 AND nvl(lane_id,-9999) = nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-9999)
11539 AND nvl(schedule_id,-9999) = nvl(p_schedule_id,-9999)
11540 AND moved_to_main_flag = 'N'
11541 AND nvl(service_type_code,'X') = nvl(p_service_type_code,'X')
11542 AND line_type_code IN ('CHARGE','DISCOUNT');
11543
11544
11545 CURSOR c_get_lane_mode(c_lane_id IN NUMBER)
11546 IS
11547 SELECT mode_of_transportation_code
11548 FROM fte_lanes
11549 WHERE lane_id = c_lane_id;
11550
11551
11552 CURSOR c_get_sched_mode(c_schedule_id IN NUMBER)
11553 IS
11554 SELECT mode_of_transportation_code
11555 FROM fte_lanes l, fte_schedules s
11556 WHERE l.lane_id = s.lane_id
11557 AND s.schedules_id = c_schedule_id;
11558
11559 l_mode VARCHAR2(30);
11560 l_freight_cost_temp_row c_move_fc_temp%ROWTYPE;
11561 l_empty_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11562 l_freight_cost_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11563 l_freight_cost_temp_charge c_move_fc_temp_charge%ROWTYPE;
11564 l_freight_cost_main_charge WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11565 l_price_fc_ids WSH_UTIL_CORE.id_tab_type;
11566 l_rowid VARCHAR2(30);
11567 l_update_rowid VARCHAR2(30);
11568 l_freight_cost_id NUMBER;
11569 l_return_status VARCHAR2(1);
11570
11571 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
11572
11573 BEGIN
11574
11575 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11576 IF (p_init_prc_log = 'Y') THEN
11577 FTE_FREIGHT_PRICING_UTIL.initialize_logging( p_init_msg_list => p_init_msg_list,
11578 x_return_status => l_return_status );
11579 END IF;
11580
11581 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11582 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11583 x_return_status := l_return_status;
11584 RETURN;
11585 END IF;
11586 ELSE
11587 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
11588 END IF;
11589 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
11590 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Move_fc_temp_to_main','start');
11591
11592 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Input : Request Id - '||p_request_id||' Delivery Leg Id - '||p_delivery_leg_id||' Lane id - '||p_lane_id||' Schedule Id - '||p_schedule_id
11593 ||' Service type - '||p_service_type_code );
11594
11595 IF (p_delivery_leg_id IS NULL) OR (p_lane_id IS NULL AND p_schedule_id IS NULL) OR (p_request_id IS NULL)THEN
11596 raise FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg;
11597 END IF;
11598
11599 SAVEPOINT before_fc_creation;
11600
11601 l_mode:=NULL;
11602 IF (p_schedule_id IS NOT NULL)
11603 THEN
11604 OPEN c_get_sched_mode(p_schedule_id);
11605 FETCH c_get_sched_mode INTO l_mode;
11606 CLOSE c_get_sched_mode;
11607 ELSE
11608
11609 OPEN c_get_lane_mode(p_lane_id);
11610 FETCH c_get_lane_mode INTO l_mode;
11611 CLOSE c_get_lane_mode;
11612
11613 END IF;
11614
11615
11616 IF ((l_mode IS NOT NULL) AND (l_mode='TRUCK'))
11617 THEN
11618
11619 FTE_TL_RATING.Move_Dlv_Records_To_Main(
11620 p_dleg_id=>p_delivery_leg_id,
11621 p_lane_id=>p_lane_id,
11622 p_schedule_id=>p_schedule_id,
11623 p_comparison_request_id=>p_request_id,
11624 x_return_status=>l_return_status);
11625
11626 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11627 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11631
11628 raise FTE_FREIGHT_PRICING_UTIL.g_tl_move_dlv_rec_fail;
11629 END IF;
11630 END IF;
11632
11633
11634
11635 ELSE
11636
11637
11638 OPEN c_move_fc_temp;
11639 LOOP
11640 FETCH c_move_fc_temp INTO l_freight_cost_temp_row;
11641 EXIT WHEN c_move_fc_temp%NOTFOUND;
11642
11643 --ensures no spill overs from earlier rows
11644 l_freight_cost_main_row:=l_empty_main_row;
11645
11646
11647 -- When does estimated flag get updated ?
11648
11649 l_freight_cost_main_row.FREIGHT_COST_TYPE_ID := l_freight_cost_temp_row.FREIGHT_COST_TYPE_ID;
11650 l_freight_cost_main_row.UNIT_AMOUNT := l_freight_cost_temp_row.UNIT_AMOUNT;
11651 l_freight_cost_main_row.UOM := l_freight_cost_temp_row.UOM;
11652 l_freight_cost_main_row.QUANTITY := l_freight_cost_temp_row.QUANTITY;
11653 l_freight_cost_main_row.TOTAL_AMOUNT := l_freight_cost_temp_row.TOTAL_AMOUNT;
11654 l_freight_cost_main_row.CURRENCY_CODE := l_freight_cost_temp_row.CURRENCY_CODE;
11655 l_freight_cost_main_row.DELIVERY_ID := l_freight_cost_temp_row.DELIVERY_ID;
11656
11657 IF (l_freight_cost_temp_row.DELIVERY_LEG_ID IS NULL)
11658 THEN
11659 l_freight_cost_main_row.DELIVERY_LEG_ID := p_delivery_leg_id;
11660 ELSE
11661 l_freight_cost_main_row.DELIVERY_LEG_ID := l_freight_cost_temp_row.DELIVERY_LEG_ID;
11662 END IF;
11663 l_freight_cost_main_row.DELIVERY_DETAIL_ID := l_freight_cost_temp_row.DELIVERY_DETAIL_ID;
11664 --l_freight_cost_main_row.FREIGHT_CODE := l_freight_cost_temp_row.FREIGHT_CODE;
11665 l_freight_cost_main_row.LINE_TYPE_CODE := l_freight_cost_temp_row.LINE_TYPE_CODE;
11666 l_freight_cost_main_row.CHARGE_UNIT_VALUE := l_freight_cost_temp_row.CHARGE_UNIT_VALUE;
11667 l_freight_cost_main_row.CHARGE_SOURCE_CODE := l_freight_cost_temp_row.CHARGE_SOURCE_CODE;
11668 --l_freight_cost_main_row.ESTIMATED_FLAG := l_freight_cost_temp_row.ESTIMATED_FLAG;
11669 l_freight_cost_main_row.ESTIMATED_FLAG := 'Y';
11670 l_freight_cost_main_row.LAST_UPDATE_DATE := SYSDATE;
11671 l_freight_cost_main_row.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
11672 l_freight_cost_main_row.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
11673 l_freight_cost_main_row.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
11674 -- Added for R12
11675 l_freight_cost_main_row.BILLABLE_QUANTITY := l_freight_cost_temp_row.BILLABLE_QUANTITY;
11676 l_freight_cost_main_row.BILLABLE_UOM := l_freight_cost_temp_row.BILLABLE_UOM;
11677 l_freight_cost_main_row.BILLABLE_BASIS := l_freight_cost_temp_row.BILLABLE_BASIS;
11678
11679 --l_freight_cost_main_row.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
11680 --l_freight_cost_main_row.PROGRAM_UPDATE_DATE := SYSDATE;
11681
11682 -- pack J Enhancement for FPA
11683 l_freight_cost_main_row.COMMODITY_CATEGORY_ID
11684 := l_freight_cost_temp_row.COMMODITY_CATEGORY_ID;
11688 IF l_freight_cost_main_row.line_type_code <> 'SUMMARY'
11685 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
11686 '(FPA)l_freight_cost_main_row.COMMODITY_CATEGORY_ID='||l_freight_cost_main_row.COMMODITY_CATEGORY_ID);
11687
11692 l_freight_cost_main_row.CREATION_DATE := SYSDATE;
11689 OR (l_freight_cost_main_row.line_type_code = 'SUMMARY'
11690 AND l_freight_cost_main_row.delivery_detail_id IS NOT NULL) THEN
11691
11693 l_freight_cost_main_row.CREATED_BY := FND_GLOBAL.USER_ID;
11694
11695 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
11696 p_freight_cost_info => l_freight_cost_main_row,
11697 x_rowid => l_rowid,
11698 x_freight_cost_id => l_freight_cost_id,
11699 x_return_status => l_return_status);
11700
11701 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11702 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11703 ROLLBACK to before_fc_creation;
11704 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Base price');
11705 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
11706 END IF;
11707 END IF;
11708 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
11709
11710 IF l_freight_cost_main_row.line_type_code <> 'SUMMARY' THEN
11711 l_price_fc_ids(l_freight_cost_main_row.delivery_detail_id) := l_freight_cost_id;
11712 END IF;
11713
11714
11715 ELSE
11716 -- To update the delivery leg summary row
11717 -- Get the delivery leg id as input and get the freight cost id for that
11718 -- The lane level summary amount becomes the delivery leg level summary amount
11719
11720 l_freight_cost_main_row.FREIGHT_COST_ID := get_fc_id_from_dleg(l_freight_cost_main_row.DELIVERY_LEG_ID);
11721 --l_freight_cost_main_row.DELIVERY_LEG_ID := p_delivery_leg_id;
11722
11723 WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost(
11724 p_rowid => l_update_rowid,
11725 p_freight_cost_info => l_freight_cost_main_row,
11726 x_return_status => l_return_status);
11727
11728 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11729 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11730 ROLLBACK to before_fc_creation;
11731 raise FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed;
11732 END IF;
11733 END IF;
11734 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Update_Freight_Cost ');
11735
11736 END IF;
11737
11738
11739 END LOOP;
11740 -- IF c_move_fc_temp%ROWCOUNT = 0 THEN
11741 -- raise FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move;
11742 -- END IF;
11743
11744 OPEN c_move_fc_temp_charge;
11745 LOOP
11746 FETCH c_move_fc_temp_charge INTO l_freight_cost_temp_charge;
11747 EXIT WHEN c_move_fc_temp_charge%NOTFOUND;
11748
11749 --ensures no spill overs from earlier rows
11750 l_freight_cost_main_charge:=l_empty_main_row;
11751
11752 l_freight_cost_main_charge.FREIGHT_COST_TYPE_ID := l_freight_cost_temp_charge.FREIGHT_COST_TYPE_ID;
11753 l_freight_cost_main_charge.UNIT_AMOUNT := l_freight_cost_temp_charge.UNIT_AMOUNT;
11754 l_freight_cost_main_charge.UOM := l_freight_cost_temp_charge.UOM;
11755 l_freight_cost_main_charge.QUANTITY := l_freight_cost_temp_charge.QUANTITY;
11756 l_freight_cost_main_charge.TOTAL_AMOUNT := l_freight_cost_temp_charge.TOTAL_AMOUNT;
11757 l_freight_cost_main_charge.CURRENCY_CODE := l_freight_cost_temp_charge.CURRENCY_CODE;
11758 l_freight_cost_main_charge.DELIVERY_ID := l_freight_cost_temp_charge.DELIVERY_ID;
11759
11760 IF (l_freight_cost_temp_charge.DELIVERY_LEG_ID IS NULL)
11761 THEN
11762
11763 l_freight_cost_main_charge.DELIVERY_LEG_ID := p_delivery_leg_id;
11764 ELSE
11765 l_freight_cost_main_charge.DELIVERY_LEG_ID := l_freight_cost_temp_charge.DELIVERY_LEG_ID;
11766 END IF;
11767
11768 l_freight_cost_main_charge.DELIVERY_DETAIL_ID := l_freight_cost_temp_charge.DELIVERY_DETAIL_ID;
11769 --l_freight_cost_main_charge.FREIGHT_CODE := l_freight_cost_temp_charge.FREIGHT_CODE;
11770 l_freight_cost_main_charge.LINE_TYPE_CODE := l_freight_cost_temp_charge.LINE_TYPE_CODE;
11771 l_freight_cost_main_charge.CHARGE_UNIT_VALUE := l_freight_cost_temp_charge.CHARGE_UNIT_VALUE;
11772 l_freight_cost_main_charge.CHARGE_SOURCE_CODE := l_freight_cost_temp_charge.CHARGE_SOURCE_CODE;
11773 --l_freight_cost_main_charge.ESTIMATED_FLAG := l_freight_cost_temp_charge.ESTIMATED_FLAG;
11774 l_freight_cost_main_charge.ESTIMATED_FLAG := 'Y';
11775 l_freight_cost_main_charge.CREATION_DATE := SYSDATE;
11776 l_freight_cost_main_charge.CREATED_BY := FND_GLOBAL.USER_ID;
11777 l_freight_cost_main_charge.LAST_UPDATE_DATE := SYSDATE;
11778 l_freight_cost_main_charge.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
11779 l_freight_cost_main_charge.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
11780 l_freight_cost_main_charge.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
11781 --l_freight_cost_main_charge.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
11782 --l_freight_cost_main_charge.PROGRAM_UPDATE_DATE := SYSDATE;
11783
11784
11785
11786 -- pack J Enhancement for FPA
11787 l_freight_cost_main_charge.COMMODITY_CATEGORY_ID
11788 := l_freight_cost_temp_charge.COMMODITY_CATEGORY_ID;
11789 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
11790 '(FPA)l_freight_cost_main_charge.COMMODITY_CATEGORY_ID='||l_freight_cost_main_charge.COMMODITY_CATEGORY_ID);
11791
11792 l_freight_cost_main_charge.applied_to_charge_id := l_price_fc_ids(l_freight_cost_main_charge.delivery_detail_id);
11793
11794 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
11795 p_freight_cost_info => l_freight_cost_main_charge,
11796 x_rowid => l_rowid,
11797 x_freight_cost_id => l_freight_cost_id,
11798 x_return_status => l_return_status);
11799
11803 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Charge');
11800 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11801 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11802 ROLLBACK to before_fc_creation;
11804 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
11805 END IF;
11806 END IF;
11807 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
11808
11809 END LOOP;
11810
11811 BEGIN -- anonymous block to make sure transaction goes through even if the
11812 -- enclosed update statement fails
11813
11814 UPDATE fte_freight_costs_temp
11815 SET moved_to_main_flag = 'Y'
11816 WHERE comparison_request_id = p_request_id
11817 --AND nvl(lane_id,-9999) = nvl(p_lane_id,-9999)
11818 AND nvl(lane_id,-9999) = nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-9999)
11819 AND nvl(schedule_id,-9999) = nvl(p_schedule_id,-9999)
11820 AND nvl(service_type_code,'X') = nvl(p_service_type_code,'X')
11821 AND moved_to_main_flag = 'N';
11822
11823 EXCEPTION
11824 WHEN others THEN
11825 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Updating freight_costs_temp moved_to_main_flag failed');
11826 null;
11827 END;
11828
11829 delete_fc_temp_pvt (
11830 p_request_id => p_request_id, -- Comparison Request ID to move to main
11831 p_lane_id => p_lane_id,
11832 p_schedule_id => p_schedule_id,
11833 x_return_status => l_return_status);
11834
11835 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11836 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11837 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'delete_fc_temp failed ');
11838 raise FTE_FREIGHT_PRICING_UTIL.g_delete_fc_temp_failed;
11839 END IF;
11840 ELSE
11841 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'delete_fc_temp successful ');
11842 END IF;
11843
11844 END IF;
11845
11846 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11847 IF (p_init_prc_log = 'Y') THEN
11848 FTE_FREIGHT_PRICING_UTIL.close_logs;
11849 END IF;
11850
11851 EXCEPTION
11852
11853 WHEN FTE_FREIGHT_PRICING_UTIL.g_tl_move_dlv_rec_fail THEN
11854 ROLLBACK to before_fc_creation;
11855 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11856 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_tl_move_dlv_rec_fail');
11857 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11858 IF (p_init_prc_log = 'Y') THEN
11859 FTE_FREIGHT_PRICING_UTIL.close_logs;
11860 END IF;
11861
11862 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg THEN
11863 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11864 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_no_lanesched_seg');
11865 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11866 IF (p_init_prc_log = 'Y') THEN
11867 FTE_FREIGHT_PRICING_UTIL.close_logs;
11868 END IF;
11869 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move THEN
11870 --ROLLBACK to before_fc_creation;
11871 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11872 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_no_temp_fc_to_move');
11873 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11874 IF (p_init_prc_log = 'Y') THEN
11875 FTE_FREIGHT_PRICING_UTIL.close_logs;
11876 END IF;
11877 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed THEN
11878 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11879 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_create_freight_cost_failed');
11880 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11881 IF (p_init_prc_log = 'Y') THEN
11882 FTE_FREIGHT_PRICING_UTIL.close_logs;
11883 END IF;
11884 WHEN FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed THEN
11885 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11886 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_update_freight_cost_failed');
11887 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11888 IF (p_init_prc_log = 'Y') THEN
11889 FTE_FREIGHT_PRICING_UTIL.close_logs;
11890 END IF;
11891 WHEN FTE_FREIGHT_PRICING_UTIL.g_delete_fc_temp_failed THEN
11892 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
11893 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_delete_fc_temp_failed');
11894 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11895 IF (p_init_prc_log = 'Y') THEN
11896 FTE_FREIGHT_PRICING_UTIL.close_logs;
11897 END IF;
11898 WHEN others THEN
11899 ROLLBACK to before_fc_creation;
11900 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11901 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_others');
11902 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
11903 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
11904 IF (p_init_prc_log = 'Y') THEN
11905 FTE_FREIGHT_PRICING_UTIL.close_logs;
11906 END IF;
11907 END Move_fc_temp_to_main;
11908
11909
11910 PROCEDURE Move_fc_temp_to_main (
11911 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
11912 p_init_prc_log IN VARCHAR2 DEFAULT 'Y',
11913 p_request_id IN NUMBER, -- Comparison Request ID to move to main
11914 p_trip_id IN NUMBER,
11918 x_return_status OUT NOCOPY VARCHAR2)
11915 p_lane_id IN NUMBER DEFAULT NULL,
11916 p_schedule_id IN NUMBER DEFAULT NULL,
11917 p_service_type_code IN VARCHAR2 DEFAULT NULL,
11919
11920 IS
11921
11922 -- bug : 2763791 : added p_service_type_code
11923
11924 CURSOR c_move_fc_temp IS
11925 SELECT *
11926 FROM FTE_FREIGHT_COSTS_TEMP
11927 WHERE comparison_request_id = p_request_id
11928 --AND nvl(lane_id,-9999) = nvl(p_lane_id,-9999)
11929 AND nvl(lane_id,-9999) = nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-9999)
11930 AND nvl(schedule_id,-9999) = nvl(p_schedule_id,-9999)
11931 AND moved_to_main_flag = 'N'
11932 AND nvl(service_type_code,'X') = nvl(p_service_type_code,'X')
11933 AND line_type_code NOT IN ('CHARGE','DISCOUNT');
11934
11935 CURSOR c_move_fc_temp_charge IS
11936 SELECT *
11937 FROM FTE_FREIGHT_COSTS_TEMP
11938 WHERE comparison_request_id = p_request_id
11939 --AND nvl(lane_id,-9999) = nvl(p_lane_id,-9999)
11940 AND nvl(lane_id,-9999) = nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-9999)
11941 AND nvl(schedule_id,-9999) = nvl(p_schedule_id,-9999)
11942 AND moved_to_main_flag = 'N'
11943 AND nvl(service_type_code,'X') = nvl(p_service_type_code,'X')
11944 AND line_type_code IN ('CHARGE','DISCOUNT');
11945
11946
11947 CURSOR c_get_dlegs_from_trip(c_trip_id IN NUMBER) IS
11948 SELECT dl.delivery_leg_id,dl.delivery_id
11949 FROM wsh_delivery_legs dl ,
11950 wsh_trip_stops s
11951 WHERE dl.pick_up_stop_id = s.stop_id
11952 and s.trip_id=c_trip_id;
11953
11954 l_empty_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11955 l_freight_cost_temp_row c_move_fc_temp%ROWTYPE;
11956 l_freight_cost_main_row WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11957 l_freight_cost_temp_charge c_move_fc_temp_charge%ROWTYPE;
11958 l_freight_cost_main_charge WSH_FREIGHT_COSTS_PVT.Freight_Cost_Rec_Type;
11959 l_price_fc_ids WSH_UTIL_CORE.id_tab_type;
11960 l_rowid VARCHAR2(30);
11961 l_update_rowid VARCHAR2(30);
11962 l_dleg_ids DBMS_UTILITY.NUMBER_ARRAY;
11963 l_delivery_id NUMBER;
11964 l_dleg_id NUMBER;
11965 l_init_msg_list VARCHAR2(30) :=FND_API.G_FALSE;
11966 l_freight_cost_id NUMBER;
11967 l_return_status VARCHAR2(1);
11968
11969 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
11970
11971 BEGIN
11972
11973 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11974 IF (p_init_prc_log = 'Y') THEN
11975 FTE_FREIGHT_PRICING_UTIL.initialize_logging( p_init_msg_list => p_init_msg_list,
11976 x_return_status => l_return_status );
11977 END IF;
11978
11979 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11980 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11981 x_return_status := l_return_status;
11982 RETURN;
11983 END IF;
11984 ELSE
11985 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
11986 END IF;
11987 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
11988 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'Move_fc_temp_to_main','start');
11989
11990 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Input : Request Id - '||p_request_id||' Trip Id - '||p_trip_id||' Lane id - '||p_lane_id||' Schedule Id - '||p_schedule_id
11991 ||' Service type - '||p_service_type_code );
11992
11993 IF (p_trip_id IS NULL) OR (p_lane_id IS NULL AND p_schedule_id IS NULL) THEN
11994 raise FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg;
11995 END IF;
11996
11997
11998 --Gather mapping from delivery to dleg id. Since this is for a single trip
11999 --There is only one dleg for a delivery
12000 l_delivery_id:=NULL;
12001 l_dleg_id:=NULL;
12002 l_dleg_ids.delete;
12003
12004 OPEN c_get_dlegs_from_trip(p_trip_id);
12005 FETCH c_get_dlegs_from_trip INTO l_dleg_id,l_delivery_id;
12006 WHILE(c_get_dlegs_from_trip%FOUND)
12007 LOOP
12008 IF ((l_dleg_id IS NOT NULL) AND (l_delivery_id IS NOT NULL))
12009 THEN
12010
12011 l_dleg_ids(l_delivery_id):=l_dleg_id;
12012
12013 ELSE
12014 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Null dleg/delivery '||l_dleg_id||' '||l_delivery_id);
12015
12016 END IF;
12017
12018 FETCH c_get_dlegs_from_trip INTO l_dleg_id,l_delivery_id;
12019
12020 END LOOP;
12021 CLOSE c_get_dlegs_from_trip;
12022
12023
12024 SAVEPOINT before_fc_creation;
12025
12026 OPEN c_move_fc_temp;
12027 LOOP
12028 FETCH c_move_fc_temp INTO l_freight_cost_temp_row;
12029 EXIT WHEN c_move_fc_temp%NOTFOUND;
12030
12031 --ensures no spill overs from earlier rows
12032 l_freight_cost_main_row:=l_empty_main_row;
12033
12034
12035 -- When does estimated flag get updated ?
12036
12037 l_freight_cost_main_row.FREIGHT_COST_TYPE_ID := l_freight_cost_temp_row.FREIGHT_COST_TYPE_ID;
12038 l_freight_cost_main_row.UNIT_AMOUNT := l_freight_cost_temp_row.UNIT_AMOUNT;
12039 l_freight_cost_main_row.UOM := l_freight_cost_temp_row.UOM;
12040 l_freight_cost_main_row.QUANTITY := l_freight_cost_temp_row.QUANTITY;
12041 l_freight_cost_main_row.TOTAL_AMOUNT := l_freight_cost_temp_row.TOTAL_AMOUNT;
12042 l_freight_cost_main_row.CURRENCY_CODE := l_freight_cost_temp_row.CURRENCY_CODE;
12043 l_freight_cost_main_row.DELIVERY_ID := l_freight_cost_temp_row.DELIVERY_ID;
12044
12048 THEN
12045 l_freight_cost_main_row.FREIGHT_COST_ID:=NULL;-- To avoid this from bein retained from earlier
12046
12047 IF (l_freight_cost_temp_row.DELIVERY_LEG_ID IS NULL)
12049
12050 IF ((l_freight_cost_main_row.DELIVERY_ID IS NOT NULL)
12051 AND (l_dleg_ids.EXISTS(l_freight_cost_main_row.DELIVERY_ID)))
12052 THEN
12053
12054 l_freight_cost_main_row.DELIVERY_LEG_ID := l_dleg_ids(l_freight_cost_main_row.DELIVERY_ID);
12055
12056 ELSE
12057 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'No dleg for delivery '||l_freight_cost_main_row.DELIVERY_ID);
12058 ROLLBACK to before_fc_creation;
12059 raise FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg;
12060 END IF;
12061
12062 ELSE
12063 l_freight_cost_main_row.DELIVERY_LEG_ID := l_freight_cost_temp_row.DELIVERY_LEG_ID;
12064 END IF;
12065
12066 l_freight_cost_main_row.DELIVERY_DETAIL_ID := l_freight_cost_temp_row.DELIVERY_DETAIL_ID;
12067 --l_freight_cost_main_row.FREIGHT_CODE := l_freight_cost_temp_row.FREIGHT_CODE;
12068 l_freight_cost_main_row.LINE_TYPE_CODE := l_freight_cost_temp_row.LINE_TYPE_CODE;
12069 l_freight_cost_main_row.CHARGE_UNIT_VALUE := l_freight_cost_temp_row.CHARGE_UNIT_VALUE;
12070 l_freight_cost_main_row.CHARGE_SOURCE_CODE := l_freight_cost_temp_row.CHARGE_SOURCE_CODE;
12071 --l_freight_cost_main_row.ESTIMATED_FLAG := l_freight_cost_temp_row.ESTIMATED_FLAG;
12072 l_freight_cost_main_row.ESTIMATED_FLAG := 'Y';
12073 l_freight_cost_main_row.LAST_UPDATE_DATE := SYSDATE;
12074 l_freight_cost_main_row.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
12075 l_freight_cost_main_row.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
12076 l_freight_cost_main_row.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
12077 --l_freight_cost_main_row.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
12078 --l_freight_cost_main_row.PROGRAM_UPDATE_DATE := SYSDATE;
12079
12080 -- Added for R12
12081 l_freight_cost_main_row.BILLABLE_QUANTITY := l_freight_cost_temp_row.BILLABLE_QUANTITY;
12082 l_freight_cost_main_row.BILLABLE_UOM := l_freight_cost_temp_row.BILLABLE_UOM;
12083 l_freight_cost_main_row.BILLABLE_BASIS := l_freight_cost_temp_row.BILLABLE_BASIS;
12084
12085 -- pack J Enhancement for FPA
12086 l_freight_cost_main_row.COMMODITY_CATEGORY_ID
12087 := l_freight_cost_temp_row.COMMODITY_CATEGORY_ID;
12088 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
12089 '(FPA)l_freight_cost_main_row.COMMODITY_CATEGORY_ID='||l_freight_cost_main_row.COMMODITY_CATEGORY_ID);
12090
12091 IF l_freight_cost_main_row.line_type_code <> 'SUMMARY'
12092 OR (l_freight_cost_main_row.line_type_code = 'SUMMARY'
12093 AND l_freight_cost_main_row.delivery_detail_id IS NOT NULL) THEN
12094
12095 l_freight_cost_main_row.CREATION_DATE := SYSDATE;
12096 l_freight_cost_main_row.CREATED_BY := FND_GLOBAL.USER_ID;
12097
12098 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
12099 p_freight_cost_info => l_freight_cost_main_row,
12100 x_rowid => l_rowid,
12101 x_freight_cost_id => l_freight_cost_id,
12102 x_return_status => l_return_status);
12103
12104 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12105 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12106 ROLLBACK to before_fc_creation;
12107 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Base price');
12108 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
12109 END IF;
12110 END IF;
12111 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
12112
12113 IF l_freight_cost_main_row.line_type_code <> 'SUMMARY' THEN
12114 l_price_fc_ids(l_freight_cost_main_row.delivery_detail_id) := l_freight_cost_id;
12115 END IF;
12116
12117
12118 ELSE
12119 -- To update the delivery leg summary row
12120 -- Get the delivery leg id as input and get the freight cost id for that
12121 -- The lane level summary amount becomes the delivery leg level summary amount
12122
12123 l_freight_cost_main_row.FREIGHT_COST_ID := get_fc_id_from_dleg(l_freight_cost_main_row.DELIVERY_LEG_ID);
12124
12125
12126 WSH_FREIGHT_COSTS_PVT.Update_Freight_Cost(
12127 p_rowid => l_update_rowid,
12128 p_freight_cost_info => l_freight_cost_main_row,
12129 x_return_status => l_return_status);
12130
12131 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12132 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12133 ROLLBACK to before_fc_creation;
12134 raise FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed;
12135 END IF;
12136 END IF;
12137 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Update_Freight_Cost ');
12138
12139 END IF;
12140
12141
12142 END LOOP;
12143 -- IF c_move_fc_temp%ROWCOUNT = 0 THEN
12144 -- raise FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move;
12145 -- END IF;
12146 CLOSE c_move_fc_temp;
12147
12148 OPEN c_move_fc_temp_charge;
12149 LOOP
12150 FETCH c_move_fc_temp_charge INTO l_freight_cost_temp_charge;
12151 EXIT WHEN c_move_fc_temp_charge%NOTFOUND;
12152
12153 --ensures no spill overs from earlier rows
12154 l_freight_cost_main_charge:=l_empty_main_row;
12155
12156
12157 l_freight_cost_main_charge.FREIGHT_COST_TYPE_ID := l_freight_cost_temp_charge.FREIGHT_COST_TYPE_ID;
12158 l_freight_cost_main_charge.UNIT_AMOUNT := l_freight_cost_temp_charge.UNIT_AMOUNT;
12162 l_freight_cost_main_charge.CURRENCY_CODE := l_freight_cost_temp_charge.CURRENCY_CODE;
12159 l_freight_cost_main_charge.UOM := l_freight_cost_temp_charge.UOM;
12160 l_freight_cost_main_charge.QUANTITY := l_freight_cost_temp_charge.QUANTITY;
12161 l_freight_cost_main_charge.TOTAL_AMOUNT := l_freight_cost_temp_charge.TOTAL_AMOUNT;
12163 l_freight_cost_main_charge.DELIVERY_ID := l_freight_cost_temp_charge.DELIVERY_ID;
12164
12165 l_freight_cost_main_row.FREIGHT_COST_ID:=NULL;-- To avoid this from bein retained from earlier
12166
12167 IF(l_freight_cost_temp_charge.DELIVERY_LEG_ID IS NULL)
12168 THEN
12169
12170
12171 IF ((l_freight_cost_main_charge.DELIVERY_ID IS NOT NULL)
12172 AND (l_dleg_ids.EXISTS(l_freight_cost_main_charge.DELIVERY_ID)))
12173 THEN
12174
12175 l_freight_cost_main_charge.DELIVERY_LEG_ID := l_dleg_ids(l_freight_cost_main_charge.DELIVERY_ID);
12176
12177 ELSE
12178
12179 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'No dleg for delivery '||l_freight_cost_main_charge.DELIVERY_ID);
12180
12181 END IF;
12182
12183 ELSE
12184 l_freight_cost_main_charge.DELIVERY_LEG_ID :=l_freight_cost_temp_charge.DELIVERY_LEG_ID;
12185 END IF;
12186
12187 l_freight_cost_main_charge.DELIVERY_DETAIL_ID := l_freight_cost_temp_charge.DELIVERY_DETAIL_ID;
12188 --l_freight_cost_main_charge.FREIGHT_CODE := l_freight_cost_temp_charge.FREIGHT_CODE;
12189 l_freight_cost_main_charge.LINE_TYPE_CODE := l_freight_cost_temp_charge.LINE_TYPE_CODE;
12190 l_freight_cost_main_charge.CHARGE_UNIT_VALUE := l_freight_cost_temp_charge.CHARGE_UNIT_VALUE;
12191 l_freight_cost_main_charge.CHARGE_SOURCE_CODE := l_freight_cost_temp_charge.CHARGE_SOURCE_CODE;
12192 --l_freight_cost_main_charge.ESTIMATED_FLAG := l_freight_cost_temp_charge.ESTIMATED_FLAG;
12193 l_freight_cost_main_charge.ESTIMATED_FLAG := 'Y';
12194 l_freight_cost_main_charge.CREATION_DATE := SYSDATE;
12195 l_freight_cost_main_charge.CREATED_BY := FND_GLOBAL.USER_ID;
12196 l_freight_cost_main_charge.LAST_UPDATE_DATE := SYSDATE;
12197 l_freight_cost_main_charge.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
12198 l_freight_cost_main_charge.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
12199 l_freight_cost_main_charge.PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
12200 --l_freight_cost_main_charge.PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
12201 --l_freight_cost_main_charge.PROGRAM_UPDATE_DATE := SYSDATE;
12202
12203
12204 -- pack J Enhancement for FPA
12205 l_freight_cost_main_charge.COMMODITY_CATEGORY_ID
12206 := l_freight_cost_temp_charge.COMMODITY_CATEGORY_ID;
12207 FTE_FREIGHT_PRICING_UTIL.print_msg(l_log_level,
12208 '(FPA)l_freight_cost_main_charge.COMMODITY_CATEGORY_ID='||l_freight_cost_main_charge.COMMODITY_CATEGORY_ID);
12209
12210 l_freight_cost_main_charge.applied_to_charge_id := l_price_fc_ids(l_freight_cost_main_charge.delivery_detail_id);
12211
12212 WSH_FREIGHT_COSTS_PVT.Create_Freight_Cost(
12213 p_freight_cost_info => l_freight_cost_main_charge,
12214 x_rowid => l_rowid,
12215 x_freight_cost_id => l_freight_cost_id,
12216 x_return_status => l_return_status);
12217
12218 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12219 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12220 ROLLBACK to before_fc_creation;
12221 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'Charge');
12222 raise FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed;
12223 END IF;
12224 END IF;
12225 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'After Create_Freight_Cost id : '||l_freight_cost_id);
12226
12227 END LOOP;
12228 CLOSE c_move_fc_temp_charge;
12229
12230 BEGIN -- anonymous block to make sure transaction goes through even if the
12231 -- enclosed update statement fails
12232
12233 UPDATE fte_freight_costs_temp
12234 SET moved_to_main_flag = 'Y'
12235 WHERE comparison_request_id = p_request_id
12236 --AND nvl(lane_id,-9999) = nvl(p_lane_id,-9999)
12237 AND nvl(lane_id,-9999) = nvl(decode(p_schedule_id,NULL,p_lane_id,NULL),-9999)
12238 AND nvl(schedule_id,-9999) = nvl(p_schedule_id,-9999)
12239 AND nvl(service_type_code,'X') = nvl(p_service_type_code,'X')
12240 AND moved_to_main_flag = 'N';
12241
12242 EXCEPTION
12243 WHEN others THEN
12244 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Updating freight_costs_temp moved_to_main_flag failed');
12245 null;
12246 END;
12247
12248 delete_fc_temp_pvt (
12249 p_request_id => p_request_id, -- Comparison Request ID to move to main
12250 p_lane_id => p_lane_id,
12251 p_schedule_id => p_schedule_id,
12252 x_return_status => l_return_status);
12253
12254 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12255 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12256 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'delete_fc_temp failed ');
12257 raise FTE_FREIGHT_PRICING_UTIL.g_delete_fc_temp_failed;
12258 END IF;
12259 ELSE
12260 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'delete_fc_temp successful ');
12261 END IF;
12262
12263 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12264 IF (p_init_prc_log = 'Y') THEN
12265 FTE_FREIGHT_PRICING_UTIL.close_logs;
12266 END IF;
12267
12268 EXCEPTION
12269 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_lanesched_seg THEN
12273 IF (p_init_prc_log = 'Y') THEN
12270 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12271 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_no_lanesched_seg');
12272 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12274 FTE_FREIGHT_PRICING_UTIL.close_logs;
12275 END IF;
12276 WHEN FTE_FREIGHT_PRICING_UTIL.g_no_temp_fc_to_move THEN
12277 --ROLLBACK to before_fc_creation;
12278 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12279 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_no_temp_fc_to_move');
12280 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12281 IF (p_init_prc_log = 'Y') THEN
12282 FTE_FREIGHT_PRICING_UTIL.close_logs;
12283 END IF;
12284 WHEN FTE_FREIGHT_PRICING_UTIL.g_create_freight_cost_failed THEN
12285 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12286 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_create_freight_cost_failed');
12287 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12288 IF (p_init_prc_log = 'Y') THEN
12289 FTE_FREIGHT_PRICING_UTIL.close_logs;
12290 END IF;
12291 WHEN FTE_FREIGHT_PRICING_UTIL.g_update_freight_cost_failed THEN
12292 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12293 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_update_freight_cost_failed');
12294 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12295 IF (p_init_prc_log = 'Y') THEN
12296 FTE_FREIGHT_PRICING_UTIL.close_logs;
12297 END IF;
12298 WHEN FTE_FREIGHT_PRICING_UTIL.g_delete_fc_temp_failed THEN
12299 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12300 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_delete_fc_temp_failed');
12301 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12302 IF (p_init_prc_log = 'Y') THEN
12303 FTE_FREIGHT_PRICING_UTIL.close_logs;
12304 END IF;
12305 WHEN others THEN
12306 ROLLBACK to before_fc_creation;
12307 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12308 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('Move_fc_temp_to_main','g_others');
12309 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
12310 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'Move_fc_temp_to_main');
12311 IF (p_init_prc_log = 'Y') THEN
12312 FTE_FREIGHT_PRICING_UTIL.close_logs;
12313 END IF;
12314 END Move_fc_temp_to_main;
12315
12316
12317 PROCEDURE delete_fc_temp (
12318 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
12319 p_request_id IN NUMBER, -- Comparison Request ID to move to main
12320 x_return_status OUT NOCOPY VARCHAR2)
12321 IS
12322
12323 l_initialized BOOLEAN := TRUE;
12324 l_return_status VARCHAR2(1);
12325 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_DBG;
12326
12327 PRAGMA AUTONOMOUS_TRANSACTION;
12328
12329 BEGIN
12330 SAVEPOINT DELETE_FC_TEMP;
12331
12332 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12333
12334 FTE_FREIGHT_PRICING_UTIL.initialize_logging( p_init_msg_list => p_init_msg_list,
12335 x_return_status => l_return_status );
12336
12337 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12338 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12339 l_initialized := FALSE;
12340 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12341 END IF;
12342 ELSE
12343 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
12344 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
12345 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'delete_fc_temp','start');
12346 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Input : Request Id - '||p_request_id);
12347 END IF;
12348
12349 delete_fc_temp_pvt (
12350 p_request_id => p_request_id, -- Comparison Request ID to move to main
12351 p_initialized => l_initialized,
12352 x_return_status => l_return_status);
12353
12354 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12355 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12356 IF l_initialized THEN
12357 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'delete_fc_temp failed ');
12358 END IF;
12359 ROLLBACK TO DELETE_FC_TEMP;
12360 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12361 END IF;
12362 ELSE
12363 IF l_initialized THEN
12364 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'delete_fc_temp successful ');
12365 END IF;
12366 COMMIT;
12367 END IF;
12368
12369 IF l_initialized THEN
12370 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_fc_temp');
12371 FTE_FREIGHT_PRICING_UTIL.close_logs;
12372 END IF;
12373
12374 EXCEPTION
12375
12376 WHEN others THEN
12377 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12378 IF l_initialized THEN
12379 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('delete_fc_temp','g_others');
12380 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
12381 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'delete_fc_temp');
12382 FTE_FREIGHT_PRICING_UTIL.close_logs;
12383 END IF;
12384 END delete_fc_temp;
12385
12386
12390 -- Can accept delivery or trip. Can generate its own comparison request id
12387 --
12388 -- API: SHIPMENT_PRICE_COMPARE_PVT
12389 -- Internal api for price comparison for LTL and PARCEL
12391 -- or can be passed in.
12392 -- Not to be called from outside rating
12393 -- Does not initialize the log file
12394 -- Introduced for pack J
12395 --
12396 -- Parameters :
12397 -- p_delivery_id -> Input either delivery_id or trip_id (not both)
12398 -- p_trip_id -> Input either delivery_id or trip_id (not both)
12399 -- p_lane_id_tab -> table of lane ids
12400 -- p_schedule_id_tab -> table of schedule ids
12401 -- Note : p_lane_id_tab and p_schedule_id_tab can have overlapping indices
12402 -- For this API both tables are assumed to be independent of each
12403 -- other
12404 -- p_dep_date -> departure date
12405 -- p_arr_date -> arrival date
12406 -- x_sum_lane_price_tab ->
12407 -- x_sum_lane_price_curr_tab ->
12408 -- x_sum_sched_price_tab ->
12409 -- x_sum_sched_price_curr_tab ->
12410 -- x_request_id -> Can generate its own id if not passed in
12411 -- x_return_status -> return status
12412 --
12413
12414 PROCEDURE shipment_price_compare_pvt (
12415 p_delivery_id IN NUMBER DEFAULT NULL,
12416 p_trip_id IN NUMBER DEFAULT NULL,
12417 p_lane_id_tab IN WSH_UTIL_CORE.id_tab_type,
12418 p_sched_id_tab IN WSH_UTIL_CORE.id_tab_type,
12419 p_service_lane_tab IN WSH_UTIL_CORE.Column_Tab_Type,
12420 p_service_sched_tab IN WSH_UTIL_CORE.Column_Tab_Type,
12421 p_dep_date IN DATE DEFAULT sysdate,
12422 p_arr_date IN DATE DEFAULT sysdate,
12423 x_sum_lane_price_tab OUT NOCOPY WSH_UTIL_CORE.id_tab_type,
12424 x_sum_lane_price_curr_tab OUT NOCOPY WSH_UTIL_CORE.Column_tab_type,
12425 x_sum_sched_price_tab OUT NOCOPY WSH_UTIL_CORE.id_tab_type,
12426 x_sum_sched_price_curr_tab OUT NOCOPY WSH_UTIL_CORE.Column_tab_type,
12427 x_request_id IN OUT NOCOPY NUMBER,
12428 x_return_status OUT NOCOPY VARCHAR2 )
12429 IS
12430
12431 CURSOR c_delivery(c_delivery_id IN NUMBER) IS
12432 Select wdd.delivery_detail_id,
12433 wda.delivery_id,
12434 NULL, -- No delivery leg here
12435 NULL, -- No reprice_required flag here
12436 wda.parent_delivery_detail_id,
12437 wdd.customer_id ,
12438 wdd.sold_to_contact_id ,
12439 wdd.inventory_item_id ,
12440 wdd.item_description ,
12441 wdd.hazard_class_id ,
12442 wdd.country_of_origin ,
12443 wdd.classification ,
12444 wdd.requested_quantity ,
12445 wdd.requested_quantity_uom ,
12446 wdd.master_container_item_id ,
12447 wdd.detail_container_item_id ,
12448 wdd.customer_item_id ,
12449 wdd.net_weight ,
12450 wdd.organization_id ,
12451 wdd.container_flag ,
12452 wdd.container_type_code ,
12453 wdd.container_name ,
12454 wdd.fill_percent ,
12455 wdd.gross_weight ,
12456 wdd.currency_code ,
12457 wdd.freight_class_cat_id ,
12458 wdd.commodity_code_cat_id ,
12459 wdd.weight_uom_code ,
12460 wdd.volume ,
12461 wdd.volume_uom_code ,
12462 wdd.tp_attribute_category ,
12463 wdd.tp_attribute1 ,
12464 wdd.tp_attribute2 ,
12465 wdd.tp_attribute3 ,
12466 wdd.tp_attribute4 ,
12467 wdd.tp_attribute5 ,
12468 wdd.tp_attribute6 ,
12469 wdd.tp_attribute7 ,
12470 wdd.tp_attribute8 ,
12471 wdd.tp_attribute9 ,
12472 wdd.tp_attribute10 ,
12473 wdd.tp_attribute11 ,
12474 wdd.tp_attribute12 ,
12475 wdd.tp_attribute13 ,
12476 wdd.tp_attribute14 ,
12477 wdd.tp_attribute15 ,
12478 wdd.attribute_category ,
12479 wdd.attribute1 ,
12480 wdd.attribute2 ,
12481 wdd.attribute3 ,
12482 wdd.attribute4 ,
12483 wdd.attribute5 ,
12484 wdd.attribute6 ,
12485 wdd.attribute7 ,
12486 wdd.attribute8 ,
12487 wdd.attribute9 ,
12488 wdd.attribute10 ,
12489 wdd.attribute11 ,
12490 wdd.attribute12 ,
12491 wdd.attribute13 ,
12492 wdd.attribute14,
12493 wdd.attribute15,
12494 'FTE', -- source_type
12495 NULL, -- source_line_id
12496 NULL, -- source_header_id
12497 NULL, -- source_consolidation_id
12498 NULL, -- ship_date
12499 NULL, -- arrival_date
12500 NULL, -- comm_category_id
12501 wda.type,
12502 wda.parent_delivery_id,
12503 NULL--wdl.parent_delivery_leg_id
12504 from wsh_delivery_details wdd, wsh_delivery_assignments wda,
12505 wsh_new_deliveries wd
12506 where wdd.delivery_detail_id = wda.delivery_detail_id
12507 and wda.delivery_id = c_delivery_id
12511 CURSOR c_delivery_from_trip(c_trip_id IN NUMBER) IS
12508 and (wda.type IS null OR wda.type <> 'O')--MDC
12509 and wda.delivery_id = wd.delivery_id;
12510
12512 Select wdd.delivery_detail_id,
12513 wda.delivery_id,
12514 wdl.delivery_leg_id,
12515 nvl(wdl.reprice_required,'N') as reprice_required, -- Added AG 05/10
12516 wda.parent_delivery_detail_id,
12517 wdd.customer_id ,
12518 wdd.sold_to_contact_id ,
12519 wdd.inventory_item_id ,
12520 wdd.item_description ,
12521 wdd.hazard_class_id ,
12522 wdd.country_of_origin ,
12523 wdd.classification ,
12524 wdd.requested_quantity ,
12525 wdd.requested_quantity_uom ,
12526 wdd.master_container_item_id ,
12527 wdd.detail_container_item_id ,
12528 wdd.customer_item_id ,
12529 wdd.net_weight ,
12530 wdd.organization_id ,
12531 wdd.container_flag ,
12532 wdd.container_type_code ,
12533 wdd.container_name ,
12534 wdd.fill_percent ,
12535 wdd.gross_weight ,
12536 wdd.currency_code ,
12537 wdd.freight_class_cat_id ,
12538 wdd.commodity_code_cat_id ,
12539 wdd.weight_uom_code ,
12540 wdd.volume ,
12541 wdd.volume_uom_code ,
12542 wdd.tp_attribute_category ,
12543 wdd.tp_attribute1 ,
12544 wdd.tp_attribute2 ,
12545 wdd.tp_attribute3 ,
12546 wdd.tp_attribute4 ,
12547 wdd.tp_attribute5 ,
12548 wdd.tp_attribute6 ,
12549 wdd.tp_attribute7 ,
12550 wdd.tp_attribute8 ,
12551 wdd.tp_attribute9 ,
12552 wdd.tp_attribute10 ,
12553 wdd.tp_attribute11 ,
12554 wdd.tp_attribute12 ,
12555 wdd.tp_attribute13 ,
12556 wdd.tp_attribute14 ,
12557 wdd.tp_attribute15 ,
12558 wdd.attribute_category ,
12559 wdd.attribute1 ,
12560 wdd.attribute2 ,
12561 wdd.attribute3 ,
12562 wdd.attribute4 ,
12563 wdd.attribute5 ,
12564 wdd.attribute6 ,
12565 wdd.attribute7 ,
12566 wdd.attribute8 ,
12567 wdd.attribute9 ,
12568 wdd.attribute10 ,
12569 wdd.attribute11 ,
12570 wdd.attribute12 ,
12571 wdd.attribute13 ,
12572 wdd.attribute14,
12573 wdd.attribute15,
12574 'FTE', -- source_type
12575 NULL, -- source_line_id
12576 NULL, -- source_header_id
12577 NULL, -- source_consolidation_id
12578 NULL, -- ship_date
12579 NULL, -- arrival_date
12580 NULL, -- comm_category_id
12581 wda.type,
12582 wda.parent_delivery_id,
12583 wdl.parent_delivery_leg_id
12584 from wsh_delivery_details wdd, wsh_delivery_assignments wda,
12585 wsh_new_deliveries wd,
12586 wsh_delivery_legs wdl, wsh_trip_stops wts1, wsh_trip_stops wts2,wsh_trips wt
12587 where wdd.delivery_detail_id = wda.delivery_detail_id
12588 and wda.delivery_id = wdl.delivery_id
12589 and wdl.delivery_id = wd.delivery_id
12590 and wdl.pick_up_stop_id = wts1.stop_id
12591 and wdl.drop_off_stop_id = wts2.stop_id
12592 and wts1.trip_id = wt.trip_id
12593 and wts2.trip_id = wt.trip_id
12594 and (wda.type IS null OR wda.type <> 'O')--MDC
12595 and wt.trip_id = c_trip_id;
12596
12597
12598 CURSOR c_get_req_id IS
12599 SELECT fte_pricing_comp_request_s.nextval
12600 FROM sys.dual;
12601
12602 CURSOR c_get_carrier_for_lane(c_lane_id IN NUMBER) IS
12603 SELECT carrier_id
12604 FROM fte_lanes
12605 WHERE lane_id = c_lane_id;
12606
12607 l_return_status VARCHAR2(1);
12608 l_return_code NUMBER;
12609 l_delvy_det_rec shipment_line_rec_type;
12610 l_first_level_rows shpmnt_content_tab_type;
12611 l_first_level_charges addl_services_tab_type;
12612 l_request_id NUMBER:=0;
12613 l_lane_summary NUMBER:=0;
12614 l_lane_summary_uom VARCHAR2(40);
12615 l_sched_summary NUMBER:=0;
12616 l_sched_summary_uom VARCHAR2(40);
12617 l_lane_num VARCHAR2(100);
12618 l_sched_num VARCHAR2(100);
12619 i NUMBER:=0;
12620 j NUMBER:=0;
12621 l_dummy_fc_temp_price Freight_Cost_Temp_Tab_Type;
12622 l_dummy_fc_temp_charge Freight_Cost_Temp_Tab_Type;
12623 l_currency_code VARCHAR2(10);
12624 l_carrier_id NUMBER;
12625
12626 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
12627
12628
12629 BEGIN
12630
12631 SAVEPOINT SHIPMENT_PRICE_COMPARE_PVT;
12632
12633 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12634
12635 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
12636 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_price_compare_pvt','start');
12637
12638 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_delivery_id ='||p_delivery_id);
12642 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_dep_date ='||p_dep_date);
12639 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_trip_id ='||p_trip_id);
12640 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_lane_id_tab.COUNT ='||p_lane_id_tab.COUNT);
12641 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_sched_id_tab.COUNT ='||p_sched_id_tab.COUNT);
12643 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_arr_date ='||p_arr_date);
12644 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'x_request_id ='||x_request_id);
12645
12646 IF p_trip_id IS NOT NULL THEN
12650
12647 validate_nontl_trip(
12648 p_trip_id => p_trip_id,
12649 x_return_code => l_return_code);
12651 IF l_return_code = G_RC_ERROR THEN
12652 RAISE FND_API.G_EXC_ERROR;
12653 ELSIF (l_return_code = G_RC_REPRICE_NOT_REQUIRED
12654 OR l_return_code = G_RC_NOT_RATE_FREIGHT_TERM
12655 OR l_return_code = G_RC_NOT_RATE_MANIFESTING) THEN
12656 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12657 raise g_finished_warning;
12658 END IF;
12659
12660
12661
12662 ELSIF p_delivery_id IS NOT NULL THEN
12663
12664 validate_delivery(
12665 p_delivery_id => p_delivery_id,
12666 x_return_code => l_return_code);
12667
12668 IF l_return_code = G_RC_ERROR THEN
12669 RAISE FND_API.G_EXC_ERROR;
12670 ELSIF (l_return_code = G_RC_REPRICE_NOT_REQUIRED
12671 OR l_return_code = G_RC_NOT_RATE_FREIGHT_TERM
12672 OR l_return_code = G_RC_NOT_RATE_MANIFESTING) THEN
12673 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12674 raise g_finished_warning;
12675 END IF;
12676 END IF;
12677
12678 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12679 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12680 raise FTE_FREIGHT_PRICING_UTIL.g_currency_code_failed;
12681 END IF;
12682 END IF;
12683
12684
12685
12686
12687 -- Important : must delete global table
12688 g_shipment_line_rows.DELETE;
12689
12690 -- Generate comparison request_id here and populate it into l_request_id
12691
12692 IF (x_request_id IS NULL OR x_request_id = 0) THEN
12693
12694 OPEN c_get_req_id;
12695 FETCH c_get_req_id INTO l_request_id;
12696 CLOSE c_get_req_id;
12697
12698 x_request_id := l_request_id;
12699
12700 ELSE
12701 l_request_id := x_request_id;
12702
12703 END IF;
12704
12705 fte_freight_pricing_util.print_msg(p_msg => 'Comparison request_id is ' || l_request_id);
12706
12707 IF (p_delivery_id IS NOT NULL) THEN
12708
12709 OPEN c_delivery(p_delivery_id);
12710
12711 LOOP
12712 FETCH c_delivery INTO l_delvy_det_rec;
12713 EXIT WHEN c_delivery%NOTFOUND;
12714 g_shipment_line_rows(l_delvy_det_rec.delivery_detail_id) := l_delvy_det_rec;
12715 END LOOP;
12716
12717 IF c_delivery%ROWCOUNT = 0 THEN
12718 CLOSE c_delivery;
12719 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
12720 ELSE
12721 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matching number of delivery lines : '||c_delivery%ROWCOUNT);
12722 END IF;
12723
12724 CLOSE c_delivery;
12725
12726 ELSIF (p_trip_id IS NOT NULL) THEN
12727
12728 OPEN c_delivery_from_trip(p_trip_id);
12729
12730 LOOP
12731 FETCH c_delivery_from_trip INTO l_delvy_det_rec;
12732 EXIT WHEN c_delivery_from_trip%NOTFOUND;
12733 g_shipment_line_rows(l_delvy_det_rec.delivery_detail_id) := l_delvy_det_rec;
12734 END LOOP;
12735
12736 IF c_delivery_from_trip%ROWCOUNT = 0 THEN
12737 CLOSE c_delivery_from_trip;
12738 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
12739 ELSE
12740 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Matching number of delivery lines : '||c_delivery_from_trip%ROWCOUNT);
12741 END IF;
12742
12743 CLOSE c_delivery_from_trip;
12744
12745 ELSE
12746 raise FTE_FREIGHT_PRICING_UTIL.g_invalid_parameters;
12747 END IF;
12748
12749
12750 flatten_shipment (
12751 x_first_level_rows => l_first_level_rows,
12752 x_return_status => l_return_status );
12753
12754 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12755 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12756 raise FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed;
12757 END IF;
12758 ELSE
12759 IF l_first_level_rows.COUNT = 0 THEN
12760 raise FTE_FREIGHT_PRICING_UTIL.g_empty_delivery;
12761 END IF;
12762 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'No. of top level lines 6 : '||l_first_level_rows.COUNT);
12763 END IF;
12764
12765
12766 IF (p_lane_id_tab.COUNT > 0) THEN
12767
12768 IF p_lane_id_tab.COUNT <> p_service_lane_tab.COUNT THEN
12769 ROLLBACK TO SHIPMENT_PRICE_COMPARE_PVT;
12770 raise FTE_FREIGHT_PRICING_UTIL.g_missing_service_type;
12771 END IF;
12772
12773 i := p_lane_id_tab.FIRST;
12774 LOOP
12775
12776 OPEN c_get_carrier_for_lane(p_lane_id_tab(i));
12777 FETCH c_get_carrier_for_lane INTO l_carrier_id;
12778 CLOSE c_get_carrier_for_lane;
12779
12780 IF p_trip_id IS NOT NULL THEN
12781 FTE_FREIGHT_PRICING_UTIL.get_currency_code
12782 (
12783 p_trip_id => p_trip_id,
12784 p_carrier_id => l_carrier_id,
12785 x_currency_code => l_currency_code,
12786 x_return_status => l_return_status
12787 );
12788 ELSE
12789 FTE_FREIGHT_PRICING_UTIL.get_currency_code
12790 (
12791 p_delivery_id => p_delivery_id,
12792 p_carrier_id => l_carrier_id,
12793 x_currency_code => l_currency_code,
12794 x_return_status => l_return_status
12795 );
12796
12797 END IF;
12798
12799 shipment_pricing (
12800 p_lane_id => p_lane_id_tab(i),
12801 p_service_type => p_service_lane_tab(i),
12802 -- service type is required with lane/schedule
12803 p_ship_date => p_dep_date,
12804 p_arrival_date => p_arr_date,
12805 p_shpmnt_toplevel_rows => l_first_level_rows,
12806 p_shpmnt_toplevel_charges => l_first_level_charges,
12807 p_save_flag => 'T',
12808 p_request_id => l_request_id,
12809 p_currency_code => l_currency_code,
12810 x_summary_lanesched_price => l_lane_summary,
12811 x_summary_lanesched_price_uom => l_lane_summary_uom,
12812 x_freight_cost_temp_price => l_dummy_fc_temp_price,
12813 x_freight_cost_temp_charge => l_dummy_fc_temp_charge,
12814 x_return_status => l_return_status ) ;
12815
12816 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'After shipment_pricing - p_lane_id = '||p_lane_id_tab(i));
12817 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_return_status='||l_return_status);
12818 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12819 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12820 x_sum_lane_price_tab(i) := -1;
12821 x_sum_lane_price_curr_tab(i) := 'NULL';
12822 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'lane: '||p_lane_id_tab(i)||' shipment_pricing ');
12823 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12827
12824 END IF;
12825 ELSE
12826 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment pricing successful for lane : '||p_lane_id_tab(i));
12828 x_sum_lane_price_tab(i) := nvl(l_lane_summary,0);
12829 x_sum_lane_price_curr_tab(i) := l_lane_summary_uom;
12830
12831 END IF;
12832
12833 EXIT WHEN i = p_lane_id_tab.LAST;
12834 i := p_lane_id_tab.NEXT(i);
12835 END LOOP;
12836
12837 END IF;
12838
12839
12840 IF (p_sched_id_tab.COUNT > 0) THEN
12841
12842 IF p_sched_id_tab.COUNT <> p_service_sched_tab.COUNT THEN
12843 ROLLBACK TO SHIPMENT_PRICE_COMPARE_PVT;
12844 raise FTE_FREIGHT_PRICING_UTIL.g_missing_service_type;
12845 END IF;
12846
12847 i := p_sched_id_tab.FIRST;
12848 LOOP
12849
12850 shipment_pricing (
12851 p_schedule_id => p_sched_id_tab(i),
12852 p_service_type => p_service_sched_tab(i),
12853 -- service type is required with lane/schedule
12854 p_ship_date => p_dep_date,
12855 p_arrival_date => p_arr_date,
12856 p_shpmnt_toplevel_rows => l_first_level_rows,
12857 p_shpmnt_toplevel_charges => l_first_level_charges,
12858 p_save_flag => 'T',
12859 p_request_id => l_request_id,
12860 x_summary_lanesched_price => l_sched_summary,
12861 x_summary_lanesched_price_uom => l_sched_summary_uom,
12862 x_freight_cost_temp_price => l_dummy_fc_temp_price,
12863 x_freight_cost_temp_charge => l_dummy_fc_temp_charge,
12864 x_return_status => l_return_status ) ;
12865
12866 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12867 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12868 x_sum_sched_price_tab(i) := -1;
12869 x_sum_sched_price_curr_tab(i) := 'NULL';
12870 FTE_FREIGHT_PRICING_UTIL.set_location(p_loc => 'sched: '||p_sched_id_tab(i)||' shipment_pricing ');
12871 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12872 END IF;
12873 ELSE
12874 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'Shipment pricing successful for sched : '||p_sched_id_tab(i));
12875
12876 x_sum_sched_price_tab(i) := nvl(l_sched_summary,0);
12877 x_sum_sched_price_curr_tab(i) := l_sched_summary_uom;
12878
12879 END IF;
12880
12881 EXIT WHEN i = p_sched_id_tab.LAST;
12882 i := p_sched_id_tab.NEXT(i);
12883 END LOOP;
12884
12885 END IF;
12886
12887 x_request_id := l_request_id;
12888
12889 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12890
12891 EXCEPTION
12892 WHEN g_finished_warning THEN
12893 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12894 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12895 WHEN FND_API.G_EXC_ERROR THEN
12896 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12897 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'FND_API.G_EXC_ERROR');
12898 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12899 WHEN FTE_FREIGHT_PRICING_UTIL.g_delivery_not_found THEN
12900 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12901 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_delivery_not_found');
12902 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12903 WHEN FTE_FREIGHT_PRICING_UTIL.g_flatten_shipment_failed THEN
12904 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12905 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_flatten_shipment_failed');
12906 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12907 WHEN FTE_FREIGHT_PRICING_UTIL.g_empty_delivery THEN
12908 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12909 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_empty_delivery');
12910 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12911 WHEN FTE_FREIGHT_PRICING_UTIL.g_missing_service_type THEN
12912 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12913 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_missing_service_type');
12914 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12915 WHEN FTE_FREIGHT_PRICING_UTIL.g_shipment_pricing_failed THEN
12916 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12917 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_shipment_pricing_failed');
12918 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12919 WHEN others THEN
12920 ROLLBACK TO SHIPMENT_PRICE_COMPARE_PVT;
12921 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12922 FTE_FREIGHT_PRICING_UTIL.set_exception('shipment_price_compare_pvt',FTE_FREIGHT_PRICING_UTIL.G_ERR,'g_others');
12923 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
12924 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare_pvt');
12925
12926 END shipment_price_compare_pvt;
12927
12928
12929 PROCEDURE FPA_total_commodity_weight(
12930 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
12931 p_delivery_id IN NUMBER,
12935 x_msg_count OUT NOCOPY NUMBER,
12932 x_total_comm_wt OUT NOCOPY NUMBER,
12933 x_wt_uom OUT NOCOPY VARCHAR2,
12934 x_return_status OUT NOCOPY VARCHAR2,
12936 x_msg_data OUT NOCOPY VARCHAR2 )
12937 IS
12938
12939 l_return_status VARCHAR2(1);
12940 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
12941
12942 CURSOR c_delivery_details(c_delivery_id IN NUMBER) IS
12943 SELECT wdd.delivery_detail_id,
12944 wdd.gross_weight ,
12945 wdd.weight_uom_code
12946 from wsh_delivery_details wdd, wsh_delivery_assignments wda
12947 where wdd.delivery_detail_id = wda.delivery_detail_id
12948 and wdd.container_flag = 'N'
12949 and (wda.type IS null OR wda.type <> 'O')--MDC
12950 and wda.delivery_id = c_delivery_id;
12951
12952 CURSOR c_delivery_wt_uom(c_delivery_id IN NUMBER) IS
12953 SELECT weight_uom_code
12954 FROM wsh_new_deliveries
12955 WHERE delivery_id = c_delivery_id;
12956
12957 l_target_wt_uom VARCHAR2(30);
12958 l_cum_wt NUMBER;
12959 l_temp_wt NUMBER;
12960
12961 BEGIN
12962
12963 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12964
12965 -- Initialize message list if p_init_msg_list is set to TRUE.
12966
12967 FTE_FREIGHT_PRICING_UTIL.initialize_logging( p_init_msg_list => p_init_msg_list,
12968 x_return_status => l_return_status );
12969
12970 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12971 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12972 x_return_status := l_return_status;
12973 RETURN;
12974 END IF;
12975 ELSE
12976 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
12977 END IF;
12978
12979
12980 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
12981 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'FPA_total_commodity_weight','start');
12982
12983 OPEN c_delivery_wt_uom(p_delivery_id);
12984 FETCH c_delivery_wt_uom INTO l_target_wt_uom;
12985 CLOSE c_delivery_wt_uom;
12986
12987 IF (l_target_wt_uom IS NULL) THEN
12988 raise fte_freight_pricing_util.g_weight_uom_not_found;
12989 END IF;
12990
12991 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_target_wt_uom='||l_target_wt_uom);
12992
12993 l_cum_wt :=0;
12994
12995 FOR c_det_rec IN c_delivery_details(p_delivery_id) LOOP
12996
12997 IF (c_det_rec.gross_weight IS NULL OR c_det_rec.weight_uom_code IS NULL) THEN
12998 FTE_FREIGHT_PRICING_UTIL.setmsg (p_api =>'FPA_total_commodity_weight',
12999 p_exc =>'g_tl_dtl_no_gross_weight',
13000 p_msg_name =>'FTE_INVALID_DEL_DET_WT',
13001 p_delivery_detail_id =>c_det_rec.delivery_detail_id);
13002 raise fte_freight_pricing_util.g_tl_dtl_no_gross_weight;
13003 END IF;
13004
13005 IF (c_det_rec.weight_uom_code <> l_target_wt_uom) THEN
13006 l_temp_wt := WSH_WV_UTILS.convert_uom(c_det_rec.weight_uom_code,
13007 l_target_wt_uom,
13008 c_det_rec.gross_weight,
13009 0); -- Within same UOM class
13010
13011 l_cum_wt := l_cum_wt + l_temp_wt;
13012 ELSE
13013 l_cum_wt := l_cum_wt + c_det_rec.gross_weight;
13014 END IF;
13015
13016 END LOOP;
13017
13018 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_cum_wt='||l_cum_wt);
13019 x_total_comm_wt := l_cum_wt;
13020 x_wt_uom := l_target_wt_uom;
13021
13022 -- Standard call to get message count and if count is 1,
13023 -- get message info.
13024 FND_MSG_PUB.Count_And_Get (
13025 p_count => x_msg_count,
13026 p_data => x_msg_data );
13027
13028 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'FPA_total_commodity_weight');
13029 FTE_FREIGHT_PRICING_UTIL.close_logs;
13030
13031 EXCEPTION
13032 WHEN FTE_FREIGHT_PRICING_UTIL.g_tl_dtl_no_gross_weight THEN
13033 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13034 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('FPA_total_commodity_weight','g_tl_dtl_no_gross_weight');
13035 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'FPA_total_commodity_weight');
13036 FTE_FREIGHT_PRICING_UTIL.close_logs;
13037 WHEN FTE_FREIGHT_PRICING_UTIL.g_weight_uom_not_found THEN
13038 FTE_FREIGHT_PRICING_UTIL.setmsg (p_api =>'FPA_total_commodity_weight',
13039 p_exc =>'g_tl_dtl_no_gross_weight',
13040 p_msg_name =>'FTE_INVALID_DEL_WT_UOM',
13041 p_delivery_id =>p_delivery_id);
13042 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13043 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('FPA_total_commodity_weight','g_weight_uom_not_found');
13044 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'FPA_total_commodity_weight');
13045 FTE_FREIGHT_PRICING_UTIL.close_logs;
13046 WHEN others THEN
13047 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13048 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('FPA_total_commodity_weight','g_others');
13049 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
13050 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'FPA_total_commodity_weight');
13051 FTE_FREIGHT_PRICING_UTIL.close_logs;
13052 END FPA_total_commodity_weight;
13053
13054
13055
13056
13060 -- It returns PL/SQL tables (dense) of summary price in the same sequence as the input
13057 -- This API is called from the Multi-leg UI for price comparison across lanes/schedules
13058 -- It stores frieght cost details in WSH_FREIGHT_COSTS_TEMP table for all the lanes
13059 -- for display purpose.
13061 -- Calls shipment hierarchy flattening API
13062
13063 PROCEDURE shipment_price_compare (
13064 p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_true,
13065 p_init_prc_log IN VARCHAR2 DEFAULT 'Y',
13066 p_delivery_id IN NUMBER,
13067 p_trip_id IN NUMBER,
13068 p_lane_sched_id_tab IN FTE_ID_TAB_TYPE, -- lane_ids or schedule_ids
13069 p_lane_sched_tab IN FTE_CODE_TAB_TYPE, -- 'L' or 'S' (Lane or Schedule)
13070 p_mode_tab IN FTE_CODE_TAB_TYPE,
13071 p_service_type_tab IN FTE_CODE_TAB_TYPE,
13072 p_vehicle_type_tab IN FTE_ID_TAB_TYPE,
13073 p_dep_date IN DATE DEFAULT sysdate,
13074 p_arr_date IN DATE DEFAULT sysdate,
13075 p_pickup_location_id IN NUMBER,
13076 p_dropoff_location_id IN NUMBER,
13077 x_lane_sched_id_tab OUT NOCOPY FTE_ID_TAB_TYPE, -- lane_ids or schedule_ids
13078 x_lane_sched_tab OUT NOCOPY FTE_CODE_TAB_TYPE, -- 'L' or 'S' (Lane or Schedule)
13079 x_vehicle_type_tab OUT NOCOPY FTE_ID_TAB_TYPE,--Vehicle Type ID
13080 x_mode_tab OUT NOCOPY FTE_CODE_TAB_TYPE,
13081 x_service_type_tab OUT NOCOPY FTE_CODE_TAB_TYPE,
13082 x_sum_rate_tab OUT NOCOPY FTE_ID_TAB_TYPE,
13083 x_sum_rate_curr_tab OUT NOCOPY FTE_CODE_TAB_TYPE,
13084 x_request_id OUT NOCOPY NUMBER, -- One request ID per comparison request
13085 x_return_status OUT NOCOPY VARCHAR2 )
13086 IS
13087
13088
13089 CURSOR c_get_req_id IS
13090 SELECT fte_pricing_comp_request_s.nextval
13091 FROM sys.dual;
13092
13093
13094
13095 l_return_status VARCHAR2(1);
13096 l_request_id NUMBER;
13097 i NUMBER;
13098 j NUMBER;
13099 k NUMBER;
13100 l NUMBER;
13101 s NUMBER;
13102
13103
13104 l_lane_id_tab WSH_UTIL_CORE.id_tab_type;
13105 l_sched_id_tab WSH_UTIL_CORE.id_tab_type;
13106 l_service_lane_tab WSH_UTIL_CORE.Column_Tab_Type;
13107 l_service_sched_tab WSH_UTIL_CORE.Column_Tab_Type;
13108
13109 l_sum_lane_price_tab WSH_UTIL_CORE.id_tab_type;
13110 l_sum_lane_price_curr_tab WSH_UTIL_CORE.Column_tab_type;
13111 l_sum_sched_price_tab WSH_UTIL_CORE.id_tab_type;
13112 l_sum_sched_price_curr_tab WSH_UTIL_CORE.Column_tab_type;
13113
13114 l_tl_lane_rows dbms_utility.number_array;
13115 l_tl_schedule_rows dbms_utility.number_array;
13116 l_tl_vehicle_rows dbms_utility.number_array;
13117 l_tl_lane_sched_sum_rows dbms_utility.number_array;
13118 l_tl_lane_sched_curr_rows dbms_utility.name_array;
13119 l_tl_xref dbms_utility.number_array;
13120
13121 l_exploded_lane_rows dbms_utility.number_array;
13122 l_exploded_schedule_rows dbms_utility.number_array;
13123 l_exploded_vehicle_rows dbms_utility.number_array;
13124 l_exploded_ref_rows dbms_utility.number_array;
13125
13126 l_output_count NUMBER;
13127 l_ref NUMBER;
13128 l_warn_flag VARCHAR2(1);
13129 l_tl_ref dbms_utility.number_array;
13130 l_lane_xref dbms_utility.number_array;
13131 l_sched_xref dbms_utility.number_array;
13132
13133 l_log_level NUMBER := FTE_FREIGHT_PRICING_UTIL.G_LOG;
13134
13135 l_ret_stat VARCHAR2(1); -- used only for returning log file name
13136
13137 PRAGMA AUTONOMOUS_TRANSACTION;
13138
13139 BEGIN
13140
13141 SAVEPOINT SHIPMENT_PRICE_COMPARE;
13142
13143 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13144
13145 IF(p_init_prc_log='Y')
13146 THEN
13147
13148
13149
13150
13151 FTE_FREIGHT_PRICING_UTIL.initialize_logging( p_init_msg_list => p_init_msg_list,
13152 x_return_status => l_return_status );
13153
13154 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
13155 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
13156 x_return_status := l_return_status;
13157 RETURN;
13158 END IF;
13159 ELSE
13160 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Initialize Logging successful ');
13161 END IF;
13162
13163 END IF;
13164
13165 FTE_FREIGHT_PRICING_UTIL.reset_dbg_vars;
13166 FTE_FREIGHT_PRICING_UTIL.set_method(l_log_level,'shipment_price_compare','start');
13167
13168 FTE_FREIGHT_PRICING_UTIL.print_msg(p_msg => 'p_delivery_id='||p_delivery_id);
13169
13170
13171 l_warn_flag := 'N';
13172
13173 j:=1;
13174 k:=1;
13175 l:=1;
13176 i:=p_lane_sched_tab.FIRST;
13177 WHILE( i IS NOT NULL)
13178 LOOP
13179 IF((p_lane_sched_tab(i)='L') AND (p_mode_tab(i) IS NOT NULL) AND (p_mode_tab(i)='TRUCK'))
13180 THEN
13181 l_tl_lane_rows(j):=p_lane_sched_id_tab(i);
13182 l_tl_schedule_rows(j):=NULL;
13183 l_tl_vehicle_rows(j):=p_vehicle_type_tab(i);
13184 l_tl_ref(j):=i;
13185 j:=j+1;
13186
13187
13188 ELSIF((p_lane_sched_tab(i)='S') AND (p_mode_tab(i) IS NOT NULL) AND (p_mode_tab(i)='TRUCK'))
13189 THEN
13190
13191 l_tl_lane_rows(j):=NULL;
13192 l_tl_schedule_rows(j):=p_lane_sched_id_tab(i);
13193 l_tl_vehicle_rows(j):=p_vehicle_type_tab(i);
13194 l_tl_ref(j):=i;
13195 j:=j+1;
13196
13197
13198 ELSIF(p_lane_sched_tab(i)='L')
13199 THEN
13200
13201 l_lane_id_tab(k) := p_lane_sched_id_tab(i);
13205
13202 l_service_lane_tab(k) := p_service_type_tab(i);
13203 l_lane_xref(k) := i; -- xref to input index
13204 k:=k+1;
13206
13207 ELSIF(p_lane_sched_tab(i)='S')
13208 THEN
13209
13210 l_sched_id_tab(l) := p_lane_sched_id_tab(i);
13211 l_service_sched_tab(l) := p_service_type_tab(i);
13212 l_sched_xref(l) := i; -- xref to input index
13213 l:=l+1;
13214
13215 END IF;
13216
13217 i:=p_lane_sched_tab.NEXT(i);
13218 END LOOP;
13219
13220 OPEN c_get_req_id;
13221 FETCH c_get_req_id INTO l_request_id;
13222 CLOSE c_get_req_id;
13223 x_request_id := l_request_id;
13224
13225
13226 -- Call new internal API
13227
13228
13229 shipment_price_compare_pvt (
13230 p_delivery_id => p_delivery_id,
13231 p_trip_id => NULL,
13232 p_lane_id_tab => l_lane_id_tab,
13233 p_sched_id_tab => l_sched_id_tab,
13234 p_service_lane_tab => l_service_lane_tab,
13235 p_service_sched_tab => l_service_sched_tab,
13236 p_dep_date => p_dep_date,
13237 p_arr_date => p_arr_date,
13238 x_sum_lane_price_tab => l_sum_lane_price_tab,
13239 x_sum_lane_price_curr_tab => l_sum_lane_price_curr_tab,
13240 x_sum_sched_price_tab => l_sum_sched_price_tab,
13241 x_sum_sched_price_curr_tab => l_sum_sched_price_curr_tab,
13242 x_request_id => l_request_id,
13243 x_return_status => l_return_status );
13244
13245 x_request_id := l_request_id;
13246
13247 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_return_status='||l_return_status);
13248
13249 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
13250 raise fte_freight_pricing_util.g_unexp_err;
13251 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
13252 --raise fte_freight_pricing_util.g_ship_prc_compare_fail;
13253 --In case of expected errors in shipment_price_compare_pvt
13254 ---Allow this procedure to continue to TL if necessary
13255 x_return_status := l_return_status;
13256 l_warn_flag := 'Y';
13257
13258 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING ) THEN
13259
13260 x_return_status := l_return_status;
13261 l_warn_flag := 'Y';
13262 END IF;
13263
13264
13265
13266 IF (l_tl_lane_rows.COUNT > 0)
13267 THEN
13268
13269 --Delivery validation is already handled by shipment_price_compare_pvt
13270
13271
13272 FTE_TL_RATING.Get_Vehicles_For_LaneSchedules(
13273 p_trip_id =>NULL,
13274 p_lane_rows =>l_tl_lane_rows,
13275 p_schedule_rows =>l_tl_schedule_rows,
13276 p_vehicle_rows =>l_tl_vehicle_rows,
13277 x_vehicle_rows =>l_exploded_vehicle_rows,
13278 x_lane_rows =>l_exploded_lane_rows,
13279 x_schedule_rows =>l_exploded_schedule_rows,
13280 x_ref_rows =>l_exploded_ref_rows,
13281 x_return_status =>l_return_status);
13282
13283 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
13284 THEN
13285 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
13286 THEN
13287 raise FTE_FREIGHT_PRICING_UTIL.g_unexp_err;
13288 END IF;
13289 END IF;
13290
13291
13292
13293
13294
13295 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'>>6');
13296
13297 FTE_TL_RATING.TL_DELIVERY_PRICE_COMPARE(
13298 p_wsh_delivery_id=>p_delivery_id,
13299 p_lane_rows=>l_exploded_lane_rows,
13300 p_schedule_rows=>l_exploded_schedule_rows,
13301 p_vehicle_rows=>l_exploded_vehicle_rows,
13302 p_dep_date=>p_dep_date,
13303 p_arr_date=>p_arr_date,
13304 p_pickup_location_id=>p_pickup_location_id,
13305 p_dropoff_location_id=>p_dropoff_location_id,
13306 x_request_id=>l_request_id,
13307 x_lane_sched_sum_rows=>l_tl_lane_sched_sum_rows,
13308 x_lane_sched_curr_rows=>l_tl_lane_sched_curr_rows,
13309 x_return_status=>l_return_status);
13310
13311
13312 -- Error checking here
13313 -- For now only unexpected errors returned cause this procedure to fail
13314 -- However, we can go more granular, and fail even on certain
13315 -- errors caused in the child procedures
13316
13317 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'>>l_return_status='||l_return_status);
13318 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS
13319 THEN
13320 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
13321 THEN
13322 raise FTE_FREIGHT_PRICING_UTIL.g_unexp_err;
13323 ELSE
13324 --In case of expected errors
13325 ---Allow this procedure to continue if necessary
13326 l_warn_flag := 'Y';
13327 END IF;
13328 END IF;
13329 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'>>l_tl_lane_sched_sum_rows.COUNT='||l_tl_lane_sched_sum_rows.COUNT);
13330
13331
13332 END IF;
13333
13334
13335 ---Recombine results
13336
13337
13338
13339
13340
13341 l_output_count:=p_lane_sched_id_tab.COUNT;
13342 IF (l_tl_lane_rows.COUNT > 0)
13343 THEN
13344 l_output_count:=l_output_count+ l_exploded_ref_rows.COUNT-l_tl_lane_rows.COUNT;
13345 END IF;
13346
13347 -- initialize output nested tables
13348 IF (p_lane_sched_id_tab.COUNT > 0 )
13349 THEN
13350
13351 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Init op tables');
13352
13356
13353 x_sum_rate_tab := FTE_ID_TAB_TYPE(0);
13354 x_sum_rate_curr_tab := FTE_CODE_TAB_TYPE('NULL');
13355 -- init all elements the tables with 0 and 'NULL' resp.
13357 x_lane_sched_id_tab:=FTE_ID_TAB_TYPE(0);
13358 x_lane_sched_tab:=FTE_CODE_TAB_TYPE('NULL');
13359 x_vehicle_type_tab:=FTE_ID_TAB_TYPE(0);
13360 x_mode_tab:=FTE_CODE_TAB_TYPE('NULL');
13361 x_service_type_tab:=FTE_CODE_TAB_TYPE('NULL');
13362
13363
13364 x_sum_rate_tab.EXTEND(l_output_count-1,1);
13365 x_sum_rate_curr_tab.EXTEND(l_output_count-1,1);
13366
13367 x_lane_sched_id_tab.EXTEND(l_output_count-1,1);
13368 x_lane_sched_tab.EXTEND(l_output_count-1,1);
13369 x_vehicle_type_tab.EXTEND(l_output_count-1,1);
13370 x_mode_tab.EXTEND(l_output_count-1,1);
13371 x_service_type_tab.EXTEND(l_output_count-1,1);
13372
13373 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Init op tables End');
13374
13375 END IF;
13376
13377
13378
13379 L :=l_sum_lane_price_tab.FIRST;
13380 S:=l_sum_sched_price_tab.FIRST;
13381 j:=l_tl_lane_rows.FIRST;
13382 i:=p_lane_sched_id_tab.FIRST;
13383 k:=x_sum_rate_tab.FIRST;
13384 l_ref:=l_exploded_ref_rows.FIRST;
13385
13386 WHILE(k<=l_output_count)
13387 LOOP
13388 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Op index:'||k);
13389
13390 IF (p_mode_tab(i) <> 'TRUCK' )
13391 THEN
13392 IF (p_lane_sched_tab(i) = 'L')
13393 THEN
13394
13395 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Non TL Lane:');
13396 IF ((l_sum_lane_price_tab.EXISTS(L)) AND (l_sum_lane_price_curr_tab.EXISTS(L)))
13397 THEN
13398 x_sum_rate_tab(k) := l_sum_lane_price_tab(L);
13399 x_sum_rate_curr_tab(k) := l_sum_lane_price_curr_tab(L);
13400 END IF;
13401
13402 x_lane_sched_id_tab(k):=p_lane_sched_id_tab(i);
13403 x_lane_sched_tab(k):=p_lane_sched_tab(i);
13404 x_vehicle_type_tab(k):=p_vehicle_type_tab(i);
13405 x_mode_tab(k):=p_mode_tab(i);
13406 x_service_type_tab(k):=p_service_type_tab(i);
13407
13408
13409 L := L + 1;
13410 k:=k+1;
13411
13412 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Non TL Lane ENd:');
13413
13414 ELSIF (p_lane_sched_tab(i) = 'S')
13415 THEN
13416
13417 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Non TL Schedule:');
13418
13419 IF ((l_sum_sched_price_tab.EXISTS(S)) AND (l_sum_sched_price_curr_tab.EXISTS(S)))
13420 THEN
13421
13422 x_sum_rate_tab(k) := l_sum_sched_price_tab(S);
13423 x_sum_rate_curr_tab(k) := l_sum_sched_price_curr_tab(S);
13424 END IF;
13425
13426 x_lane_sched_id_tab(k):=p_lane_sched_id_tab(i);
13427 x_lane_sched_tab(k):=p_lane_sched_tab(i);
13428 x_vehicle_type_tab(k):=p_vehicle_type_tab(i);
13429 x_mode_tab(k):=p_mode_tab(i);
13430 x_service_type_tab(k):=p_service_type_tab(i);
13431
13432
13433
13434 S := S + 1;
13435 k:=k+1;
13436
13437 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'Non TL Schedule End:');
13438
13439 END IF;
13440
13441 ELSIF (p_mode_tab(i) = 'TRUCK' )
13442 THEN
13443
13444 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL :');
13445 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_ref'||l_ref);
13446 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'j'||j);
13447 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_exploded_ref_rows count'||l_exploded_ref_rows.COUNT);
13448
13449 WHILE(l_exploded_ref_rows.EXISTS(l_ref) AND l_exploded_ref_rows(l_ref)=j)
13450 LOOP
13451
13452 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_exploded_ref_rows(l_ref)'||l_exploded_ref_rows(l_ref));
13453
13454 --FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'l_tl_lane_sched_sum_rows(l_ref)'||l_tl_lane_sched_sum_rows(l_ref));
13455
13456 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 1:');
13457 x_sum_rate_tab(k):=-1;
13458 IF (l_tl_lane_sched_sum_rows.EXISTS(l_ref))
13459 THEN
13460 x_sum_rate_tab(k) := nvl(l_tl_lane_sched_sum_rows(l_ref),-1);
13461 END IF;
13462
13463 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 2:');
13464 x_sum_rate_curr_tab(k):='NULL';
13465 IF(l_tl_lane_sched_curr_rows.EXISTS(l_ref))
13466 THEN
13467 x_sum_rate_curr_tab(k) := nvl(l_tl_lane_sched_curr_rows(l_ref),'NULL');
13468 END IF;
13469 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 3:');
13470
13471 x_lane_sched_id_tab(k):=p_lane_sched_id_tab(i);
13472 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 4:');
13473 x_lane_sched_tab(k):=p_lane_sched_tab(i);
13474 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 5:');
13475 IF (l_exploded_vehicle_rows.EXISTS(l_ref))
13476 THEN
13477 x_vehicle_type_tab(k):=l_exploded_vehicle_rows(l_ref);
13478 END IF;
13479 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 6:');
13480 x_mode_tab(k):=p_mode_tab(i);
13481 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 7:');
13482 x_service_type_tab(k):=p_service_type_tab(i);
13483 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL 8:');
13484
13485 --FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
13486 --' '||l_ref||'-'||i||'-'||l_lane_sched_sum_rows(l_ref)||'-'||l_lane_sched_curr_rows(l_ref));
13487
13488
13489 k:=k+1;
13490
13491 l_ref:=l_ref+1;
13492 END LOOP;
13493
13494 j := j + 1;
13495
13496 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'TL End:');
13497
13498 END IF;
13499
13500
13501 i:=i+1;
13502 END LOOP;
13503
13504
13505
13506 IF (x_sum_rate_tab.COUNT > 0) THEN
13507 FOR i IN x_sum_rate_tab.FIRST .. x_sum_rate_tab.LAST
13508 LOOP
13509 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,
13510 ' '||x_lane_sched_id_tab(i)||' '||x_lane_sched_tab(i)||' '||x_mode_tab(i)||' '||x_service_type_tab(i)||' '
13511 ||x_vehicle_type_tab(i)||' '||x_sum_rate_tab(i)||' '||x_sum_rate_curr_tab(i) );
13512 END LOOP;
13513 END IF;
13514
13515
13516 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'warn flag'||l_warn_flag);
13517
13518 IF (l_warn_flag = 'Y' ) THEN
13519 -- bug 2762257
13520 FTE_FREIGHT_PRICING_UTIL.set_price_comp_exit_warn;
13521 --Added to ensure return status is warning if l_warn_flag=Y
13522 x_return_status :=WSH_UTIL_CORE.G_RET_STS_WARNING;
13523 END IF;
13524
13525 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'DBg.2');
13526 x_request_id := l_request_id;
13527 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'DBg.3');
13528
13529 COMMIT; -- Commit Autonomous transaction
13530
13531 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_DBG,'DBg.4');
13532 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare');
13533 IF(p_init_prc_log='Y')
13534 THEN
13535 FTE_FREIGHT_PRICING_UTIL.close_logs;
13536 END IF;
13537
13538
13539
13540
13541 EXCEPTION
13542
13543
13544
13545 WHEN FTE_FREIGHT_PRICING_UTIL.g_ship_prc_compare_fail THEN
13546 ROLLBACK; -- TO SHIPMENT_PRICE_COMPARE;
13547 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13548 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare');
13549 IF(p_init_prc_log='Y')
13550 THEN
13551 FTE_FREIGHT_PRICING_UTIL.close_logs;
13552 END IF;
13553
13554
13555 WHEN FTE_FREIGHT_PRICING_UTIL.g_unexp_err THEN
13556 ROLLBACK; -- TO SHIPMENT_PRICE_COMPARE;
13557 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13558 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('shipment_price_compare','g_others');
13559 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare');
13560 IF(p_init_prc_log='Y')
13561 THEN
13562 FTE_FREIGHT_PRICING_UTIL.close_logs;
13563 END IF;
13564
13565 WHEN others THEN
13566 ROLLBACK; -- TO SHIPMENT_PRICE_COMPARE;
13567 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13568 FTE_FREIGHT_PRICING_UTIL.set_exit_exception('shipment_price_compare','g_others');
13569 FTE_FREIGHT_PRICING_UTIL.print_msg(FTE_FREIGHT_PRICING_UTIL.G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
13570 FTE_FREIGHT_PRICING_UTIL.unset_method(l_log_level,'shipment_price_compare');
13571 IF(p_init_prc_log='Y')
13572 THEN
13573 FTE_FREIGHT_PRICING_UTIL.close_logs;
13574 END IF;
13575
13576
13577 END shipment_price_compare;
13578
13579
13580 END FTE_FREIGHT_PRICING;
13581