DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_FREIGHT_RATING_PVT

Source


1 PACKAGE BODY OE_FREIGHT_RATING_PVT AS
2 /* $Header: OEXVFRRB.pls 115.15 2003/10/20 07:23:14 appldev ship $ */
3 
4 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'OE_FREIGHT_RATING_PVT';
5 
6 PROCEDURE Print_Time(p_msg   IN  VARCHAR2);
7 
8 PROCEDURE Prepare_Adj_Detail
9  (p_header_id              IN   NUMBER
10  ,p_line_id                IN   NUMBER
11  ,p_adj_index              IN   NUMBER
12  ,p_fte_rates_rec          IN   FTE_PROCESS_REQUESTS.Fte_Source_Line_Rates_Rec
13  ,x_line_adj_rec           OUT NOCOPY OE_Order_PUB.Line_Adj_Rec_Type
14 
15  ,x_return_status          OUT NOCOPY VARCHAR2
16 
17 );
18 
19 
20 FUNCTION Get_List_Line_Type_Code
21 (   p_key	IN NUMBER)
22 RETURN VARCHAR2
23 IS
24 
25 l_list_line_type_code	VARCHAR2(30);
26 l_list_line_type_code_rec   List_Line_Type_Code_Rec_Type;
27 
28 --
29 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
30 --
31 BEGIN
32 
33     IF l_debug_level  > 0 THEN
34         oe_debug_pub.add(  'ENTERING OE_FREIGHT_RATING_PVT.GET_LIST_LINE_TYPE_CODE' , 1 ) ;
35     END IF;
36 
37     IF 	p_key IS NOT NULL THEN
38 
39         -- list_line_type_code is already cached.
40         IF g_list_line_type_code_tbl.Exists(p_key) THEN
41 
42          l_list_line_type_code
43             := g_list_line_type_code_tbl(p_key).list_line_type_code;
44 
45             IF l_debug_level  > 0 THEN
46                 oe_debug_pub.add(  'LIST LINE TYPE CODE FOR HEADER: ' || P_KEY ||' IS: ' || L_LIST_LINE_TYPE_CODE , 3 ) ;
47             END IF;
48 
49         ELSE
50 
51            BEGIN
52            SELECT  list_line_type_code
53            INTO   l_list_line_type_code
54            FROM   oe_price_adjustments
55            WHERE  header_id = p_key
56            AND    list_header_id = p_key * (-1);
57 
58            EXCEPTION WHEN NO_DATA_FOUND THEN
59              l_list_line_type_code := NULL;
60            END;
61 
62            IF l_list_line_type_code IS NOT NULL THEN
63            l_list_line_type_code_rec.list_line_type_code
64                  := l_list_line_type_code;
65            g_list_line_type_code_tbl(p_key)
66                  := l_list_line_type_code_rec;
67 
68             IF l_debug_level  > 0 THEN
69                 oe_debug_pub.add(  'LOADING LIST LINE TYPE CODE FOR HEADER: ' || P_KEY ||' IS: ' || L_LIST_LINE_TYPE_CODE , 3 ) ;
70             END IF;
71            END IF;
72 
73 
74 
75         END IF;
76 
77     END IF;
78 
79     IF l_debug_level  > 0 THEN
80         oe_debug_pub.add(  'EXITING OE_FREIGHT_RATING_PVT.GET_LIST_LINE_TYPE_CODE' , 1 ) ;
81     END IF;
82 
83     RETURN l_list_line_type_code;
84 
85 EXCEPTION
86     WHEN NO_DATA_FOUND THEN
87       NULL;
88 
89     WHEN OTHERS THEN
90 
91     	IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
92 	THEN
93     	    OE_MSG_PUB.Add_Exc_Msg
94     	    (	G_PKG_NAME  	    ,
95     	        'Get_List_Line_Type_Code'
96 	    );
97     	END IF;
98 
99 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
100 END Get_List_Line_Type_Code;
101 
102 
103 /*--------------------------------------------------------------+
104  | Name        :   Print_Time                                   |
105  | Parameters  :   IN  p_msg                                    |
106  |                                                              |
107  | Description :   This Procedure will print Current time along |
108  |                 with the Debug Message Passed as input.      |
109  |                 This Procedure will be called from Main      |
110  |                 Procedures to print Entering and Leaving Msg |
111  +--------------------------------------------------------------*/
112 PROCEDURE Print_Time(p_msg   IN  VARCHAR2)
113 IS
114   l_time    VARCHAR2(100);
115   --
116   l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
117   --
118 BEGIN
119     l_time := to_char (new_time (sysdate, 'PST', 'EST'),
120                                  'DD-MON-YY HH24:MI:SS');
121     IF l_debug_level  > 0 THEN
122         oe_debug_pub.add(  P_MSG || ': '|| L_TIME , 1 ) ;
123     END IF;
124 END Print_Time;
125 
126 PROCEDURE Prepare_Adj_Detail
127 ( p_header_id       IN   NUMBER
128  ,p_line_id         IN   NUMBER
129  ,p_adj_index       IN   NUMBER
130  ,p_fte_rates_rec   IN   FTE_PROCESS_REQUESTS.Fte_Source_Line_Rates_rec
131  ,x_line_adj_rec    OUT NOCOPY OE_Order_PUB.Line_Adj_Rec_Type
132 
133  ,x_return_status   OUT NOCOPY VARCHAR2
134 
135 ) IS
136 
137   l_price_adjustment_id     number := 0;
138 
139   --
140   l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
141   --
142 BEGIN
143 
144     IF l_debug_level  > 0 THEN
145         oe_debug_pub.add(  'ENTERING PROCEDURE PREPARE_ADJ_DETAIL.' , 3 ) ;
146     END IF;
147     x_return_status   := FND_API.G_RET_STS_SUCCESS;
148 
149     select oe_price_adjustments_s.nextval into l_price_adjustment_id
150     from dual;
151 
152                       IF l_debug_level  > 0 THEN
153                           oe_debug_pub.add(  'PRICE ADJUSTMENT ID IN PREPARE_ADJ_DETAIL IS: ' ||L_PRICE_ADJUSTMENT_ID , 1 ) ;
154                       END IF;
155                       IF l_debug_level  > 0 THEN
156                           oe_debug_pub.add(  'LINE_ID IN PREPARE_ADJ_DETAIL IS: ' ||P_LINE_ID , 1 ) ;
157                       END IF;
158 
159     x_line_adj_rec.header_id := p_header_id;
160     x_line_adj_rec.line_id := p_line_id;
161     x_line_adj_rec.price_adjustment_id := l_price_adjustment_id;
162     x_line_adj_rec.creation_date := sysdate;
163     x_line_adj_rec.last_update_date := sysdate;
164     x_line_adj_rec.created_by := 1;
165     x_line_adj_rec.last_updated_by := 1;
166     x_line_adj_rec.last_update_login := 1;
167 
168     x_line_adj_rec.automatic_flag := 'N';
169     x_line_adj_rec.adjusted_amount := p_fte_rates_rec.adjusted_price;
170     x_line_adj_rec.charge_type_code := p_fte_rates_rec.cost_type;
171     x_line_adj_rec.list_line_type_code := 'COST';
172     x_line_adj_rec.estimated_flag := 'Y';
173     x_line_adj_rec.source_system_code := 'FTE';
174 
175     IF l_debug_level  > 0 THEN
176         oe_debug_pub.add(  'EXITING PROCEDURE PREPARE_ADJ_DETAIL.' , 3 ) ;
177     END IF;
178 
179 EXCEPTION
180     WHEN OTHERS THEN
181       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
182       IF l_debug_level  > 0 THEN
183           oe_debug_pub.add(  'ERROR IN PROCEDURE PREPARE_ADJ_DETAIL: '||SUBSTR ( SQLERRM , 1 , 240 ) , 3 ) ;
184       END IF;
185       IF l_debug_level  > 0 THEN
186           oe_debug_pub.add(  'UNEXPECTED ERROR IN PREPRARE_ADJ_DETAIL :'||SQLERRM , 3 ) ;
187       END IF;
188       IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
189         THEN
190             OE_MSG_PUB.Add_Exc_Msg
191             (   G_PKG_NAME,
192               'Prepare_Adj_Detail');
193       END IF;
194 
195 
196 
197 END Prepare_Adj_Detail;
198 
199 
200 PROCEDURE Process_FTE_Output
201 ( p_header_id              IN  NUMBER
202  ,p_x_fte_source_line_tab  IN  OUT NOCOPY FTE_PROCESS_REQUESTS.Fte_Source_Line_Tab
203  ,p_x_line_tbl             IN  OUT NOCOPY OE_ORDER_PUB.line_tbl_type
204  ,p_fte_rates_tab          IN  FTE_PROCESS_REQUESTS.Fte_Source_Line_Rates_Tab
205  ,p_config_count           IN  NUMBER
206  ,p_ui_flag                IN  VARCHAR2
207  ,p_call_pricing_for_FR    IN  VARCHAR2
208  ,x_return_status          OUT NOCOPY VARCHAR2 )
209 
210 IS
211   l_fte_count    	NUMBER   :=  1;
212   l_index          	NUMBER   :=  0;
213   l_adj_index      	NUMBER   :=  1;
214   l_line_id          	NUMBER;
215   l_ato_line_id       	NUMBER;
216   l_price_adjustment_id NUMBER;
217   l_price_control_rec 	OE_ORDER_PRICE_PVT.control_rec_type;
218   l_request_rec        	oe_order_pub.request_rec_type;
219   l_line_adj_rec    	OE_Order_PUB.Line_Adj_Rec_Type;
220   l_line_adj_tbl 	oe_order_pub.line_adj_tbl_type;
221   l_fte_rates_rec      	FTE_PROCESS_REQUESTS.Fte_Source_Line_Rates_rec;
222   l_bulk_adj_rec      	Bulk_Line_Adj_Rec_Type;
223   l_return_status       VARCHAR2(1);
224   I                 	pls_integer;
225   J                 	pls_integer;
226   k                 	pls_integer;
227   l_pricing_event       VARCHAR2(30);
228   l_line_id_tbl         Number_Type;
229 
230   CURSOR   C_CONFIG_ITEM_PARENTS(p_ato_line_id IN NUMBER) IS
231            SELECT  opa.price_adjustment_id,ool.line_id,
232                    opa.adjusted_amount, opa.list_line_type_code,
233                    opa.charge_type_code
234            FROM    oe_order_lines ool
235                   ,oe_price_adjustments opa
236            WHERE   opa.charge_type_code IN ('FTEPRICE','FTECHARGE')
237            AND     ool.line_id = opa.line_id
238            AND     ool.item_type_code <> OE_GLOBALS.G_ITEM_CONFIG
239            AND     ool.ato_line_id = p_ato_line_id;
240 
241 --
242 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
243 --
244 BEGIN
245 
246   Print_Time('Entering OE_Freight_Rating_PVT.Process_FTE_Output..');
247 
248   x_return_status   := FND_API.G_RET_STS_SUCCESS;
249 
250 
251   -- delete the old records from previous FTE call.
252   DELETE FROM OE_PRICE_ADJUSTMENTS
253   WHERE HEADER_ID = P_HEADER_ID
254   AND   CHARGE_TYPE_CODE IN ('FTEPRICE','FTECHARGE')
255   AND   list_line_type_code = 'COST'
256   AND   ESTIMATED_FLAG = 'Y'
257   RETURNING line_id bulk collect into l_line_id_tbl;
258 
259   k := l_line_id_tbl.FIRST;
260   WHILE k is not null LOOP
261 
262     OE_LINE_ADJ_UTIL.Register_Changed_Lines
263       (p_line_id         => l_line_id_tbl(k),
264        p_header_id       => p_header_id,
265        p_operation       => OE_GLOBALS.G_OPR_UPDATE);
266     k := l_line_id_tbl.NEXT(k);
267   END LOOP;
268 
269   IF l_debug_level  > 0 THEN
270       oe_debug_pub.add(  'TOTAL NUMBER OF CONFIG LINES:'||P_CONFIG_COUNT , 3 ) ;
271   END IF;
272 
273   -- initialize these values for FTE rates.
274   l_index := 1;
275 
276   -- insert the FTE output to database table.
277   I := p_fte_rates_tab.FIRST;
278   WHILE I IS NOT NULL LOOP
279     IF l_debug_level  > 0 THEN
280         oe_debug_pub.add(  '============ FTE RESULTS ============' , 3 ) ;
281     END IF;
282 
283                       IF l_debug_level  > 0 THEN
284                           oe_debug_pub.add(  'SOURCE LINE :'|| P_FTE_RATES_TAB ( I ) .SOURCE_LINE_ID , 3 ) ;
285                       END IF;
286                       IF l_debug_level  > 0 THEN
287                           oe_debug_pub.add(  'COST TYPE :'|| P_FTE_RATES_TAB ( I ) .COST_TYPE , 3 ) ;
288                       END IF;
289                       IF l_debug_level  > 0 THEN
290                           oe_debug_pub.add(  'COST SUB TYPE :'|| P_FTE_RATES_TAB ( I ) .COST_SUB_TYPE , 3 ) ;
291                       END IF;
292                       IF l_debug_level  > 0 THEN
293                           oe_debug_pub.add(  'PRICED QUANTITY :'|| P_FTE_RATES_TAB ( I ) .PRICED_QUANTITY , 3 ) ;
294                       END IF;
295                       IF l_debug_level  > 0 THEN
296                           oe_debug_pub.add(  'PRICED UOM :'|| P_FTE_RATES_TAB ( I ) .PRICED_UOM , 3 ) ;
297                       END IF;
298                       IF l_debug_level  > 0 THEN
299                           oe_debug_pub.add(  'UNIT PRICE :'|| P_FTE_RATES_TAB ( I ) .UNIT_PRICE , 3 ) ;
300                       END IF;
301                       IF l_debug_level  > 0 THEN
302                           oe_debug_pub.add(  'BASE PRICE :'|| P_FTE_RATES_TAB ( I ) .BASE_PRICE , 3 ) ;
303                       END IF;
304                       IF l_debug_level  > 0 THEN
305                           oe_debug_pub.add(  'ADJUSTED UNIT PRICE :'|| P_FTE_RATES_TAB ( I ) .ADJUSTED_UNIT_PRICE , 3 ) ;
306                       END IF;
307                       IF l_debug_level  > 0 THEN
308                           oe_debug_pub.add(  'ADJUSTED PRICE :'|| P_FTE_RATES_TAB ( I ) .ADJUSTED_PRICE , 3 ) ;
309                       END IF;
310                       IF l_debug_level  > 0 THEN
311                           oe_debug_pub.add(  'CURRENCY :'|| P_FTE_RATES_TAB ( I ) .CURRENCY , 3 ) ;
312                       END IF;
313 
314     Prepare_Adj_Detail
315        (p_header_id => p_header_id
316        ,p_line_id   => p_fte_rates_tab(I).source_line_id
317        ,p_adj_index  => l_adj_index
318        ,p_fte_rates_rec => p_fte_rates_tab(I)
319        ,x_line_adj_rec  => l_line_adj_rec
320        ,x_return_status => x_return_status
321        );
322 
323 
324     l_line_adj_tbl(l_adj_index) := l_line_adj_rec;
325 
326     OE_LINE_ADJ_UTIL.INSERT_ROW(l_line_adj_rec);
327 
328     -- to register changed line so that repricing for this line
329     -- would happen.
330     oe_debug_pub.add('Register changed line: '||p_fte_rates_tab(I).source_line_id,1);
331     OE_LINE_ADJ_UTIL.Register_Changed_Lines
332       (p_line_id         => p_fte_rates_tab(I).source_line_id,
333        p_header_id       => p_header_id,
334        p_operation       => OE_GLOBALS.G_OPR_UPDATE);
335 
336     l_adj_index :=  l_adj_index  + 1;
337     I := p_fte_rates_tab.NEXT(I);
338 
339   END LOOP;
340 
341   -- cascade the estimated charges from parent lines to config item lines
342   -- and insert into database.
343   l_adj_index := 1;
344   WHILE l_index <= p_config_count LOOP
345 
346     l_line_id := p_x_line_tbl(l_index).line_id;
347     IF l_debug_level  > 0 THEN
348         oe_debug_pub.add(  'CASCADING ADJUSTMENT LINES TO CONFIG LINES. ' , 3 ) ;
349     END IF;
350 
351     OPEN C_CONFIG_ITEM_PARENTS(p_x_line_tbl(l_index).ato_line_id);
352     FETCH C_CONFIG_ITEM_PARENTS BULK COLLECT INTO
353          l_bulk_adj_rec.price_adjustment_id
354          ,l_bulk_adj_rec.line_id
355          ,l_bulk_adj_rec.adjusted_amount
356          ,l_bulk_adj_rec.list_line_type_code
357          ,l_bulk_adj_rec.charge_type_code
358          ;
359 
360     CLOSE C_CONFIG_ITEM_PARENTS;
361 
362 
363     FOR i in 1..l_bulk_adj_rec.price_adjustment_id.COUNT LOOP
364 
365       l_fte_rates_rec.cost_type := l_bulk_adj_rec.charge_type_code(i);
366       l_fte_rates_rec.adjusted_price := l_bulk_adj_rec.adjusted_amount(i);
367 
368 
369       Prepare_Adj_Detail
370          (p_header_id => p_header_id
371          ,p_line_id   => l_line_id
372          ,p_adj_index   => l_adj_index
373          ,p_fte_rates_rec =>  l_fte_rates_rec
374          ,x_line_adj_rec  => l_line_adj_rec
375          ,x_return_status => x_return_status
376           );
377 
378       l_line_adj_tbl(l_adj_index) := l_line_adj_rec;
379 
380       -- inserting for the config line
381       OE_LINE_ADJ_UTIL.INSERT_ROW(l_line_adj_rec);
382 
383       -- register changed line for config item line.
384       OE_LINE_ADJ_UTIL.Register_Changed_Lines
385       (p_line_id         => l_line_id,
386        p_header_id       => p_header_id,
387        p_operation       => OE_GLOBALS.G_OPR_UPDATE);
388 
389       -- deleting the parents of the config line.
390       -- these deleted parent lines have been registered in
391       -- previous loop looping through p_fte_rates_tab, so
392       -- no need to register changed line again for these lines.
393       DELETE FROM oe_price_adjustments
394       WHERE price_adjustment_id = l_bulk_adj_rec.price_adjustment_id(i);
395 
396       l_adj_index :=  l_adj_index  + 1;
397 
398     END LOOP;
399 
400     l_index := l_index + 1;
401 
402   END LOOP;
403 
404   -- for ATO lines, only send config lines to Pricing.
405   J := p_x_line_tbl.FIRST;
406   WHILE J IS NOT NULL LOOP
407     -- delete those non-shippable ATO parent lines
408     IF p_x_line_tbl(J).ato_line_id IS NOT NULL
409        AND p_x_line_tbl(J).item_type_code <> OE_GLOBALS.G_ITEM_CONFIG THEN
410        p_x_line_tbl.delete(J);
411     END IF;
412 
413     J := p_x_line_tbl.NEXT(J);
414 
415   END LOOP;
416 
417   -- Calling Pricing Engine to calculate freight charges
418   -- if being called from Action button.
419    IF NVL(p_ui_flag, 'N') = 'Y' THEN
420      IF l_debug_level  > 0 THEN
421          oe_debug_pub.add(  'CALLING PRICING ENGINE FOR FREIGHT FOR: '||P_HEADER_ID , 1 ) ;
422      END IF;
423 
424      l_price_control_rec.p_request_type_code:='ONT';
425      l_Price_control_rec.p_write_to_db:=TRUE;
426      l_price_control_rec.p_honor_price_flag:='Y';
427      l_price_control_rec.p_multiple_events:='N';
428      l_price_control_rec.p_get_freight_flag:='Y';
429 
430      oe_order_price_pvt.price_line
431                  (p_Header_id        => p_header_id
432                  ,p_Line_id          => null
433                  ,px_line_Tbl        => p_x_line_tbl
434                  ,p_Control_Rec      => l_price_control_rec
435                  ,p_action_code      => 'PRICE_ORDER'
436                  ,p_Pricing_Events   => 'BATCH'
437                  ,x_Return_Status    => l_return_status
438                  );
439 
440   END IF;
441 
442 
443   -- if this is called from Action button and it is the first time
444   -- FTE being called.
445   IF NVL(OE_FREIGHT_RATING_UTIL.get_list_line_type_code(p_header_id),'N')
446          <> 'OM_CALLED_FREIGHT_RATES' THEN
447 
448     select oe_price_adjustments_s.nextval
449     into   l_price_adjustment_id
450     from   dual;
451     INSERT INTO oe_price_adjustments
452            (PRICE_ADJUSTMENT_ID
453            ,HEADER_ID
454            ,LINE_ID
455            ,PRICING_PHASE_ID
456            ,LIST_LINE_TYPE_CODE
457            ,LIST_HEADER_ID
458            ,LIST_LINE_ID
459            ,ADJUSTED_AMOUNT
460            ,AUTOMATIC_FLAG
461            ,UPDATED_FLAG
462            ,APPLIED_FLAG
463            ,CREATION_DATE
464            ,CREATED_BY
465            ,LAST_UPDATE_DATE
466            ,LAST_UPDATED_BY
467            )
468     VALUES
469           (l_price_adjustment_id
470            ,p_header_id
471            ,NULL
472            ,-1
473            ,'OM_CALLED_FREIGHT_RATES'
474            ,-1*p_header_id
475            ,NULL
476            ,-1
477            ,'N'
478            ,'Y'
479            ,NULL
480            ,sysdate
481            ,1
482            ,sysdate
483            ,1
484           );
485 
486   END IF;
487 
488 
489 
490   Print_Time('Entering OE_Freight_Rating_PVT.Process_FTE_Output..');
491 
492 EXCEPTION
493 
494     WHEN FND_API.G_EXC_ERROR THEN
495 
496         IF l_debug_level  > 0 THEN
497             oe_debug_pub.add(  'EXPECTED ERROR IN PROCESS FTE OUTPUT' , 1 ) ;
498         END IF;
499 
500         x_return_status := FND_API.G_RET_STS_ERROR;
501 
502     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
503 
504                                                             IF l_debug_level  > 0 THEN
505                                                                 oe_debug_pub.add(  'UNEXPECTED ERROR IN PROCESS FTE OUTPUT'|| SQLERRM , 2 ) ;
506                                                             END IF;
507 
508         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
509 
510     WHEN OTHERS THEN
511 
512         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
513 
514         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
515         THEN
516             OE_MSG_PUB.Add_Exc_Msg
517             (   G_PKG_NAME,
518               'Process_FTE_Output');
519         END IF;
520 END Process_FTE_Output;
521 
522 END OE_FREIGHT_RATING_PVT;