DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_INVOICE_PUB

Source


1 PACKAGE BODY OE_Invoice_PUB AS
2 /*  $Header: OEXPINVB.pls 120.53.12010000.7 2009/02/03 12:34:31 aambasth ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME     CONSTANT VARCHAR2(30) := 'OE_Invoice_PUB';
7 G_ITEMTYPE     VARCHAR2(8);
8 
9 --bug5336639 start
10 G_CURRENT_LINE_ID NUMBER := null;
11 G_IS_CURR_LINE_INVOICEABLE BOOLEAN := null;
12 --bug5336639 end
13 
14 inv_num       VARCHAR2(40);
15 -- 3757279
16 TYPE Prf_Rec_Type IS RECORD
17 (   concat_segment        varchar2(240)   := NULL
18   , prf_value         varchar2(240)   := NULL
19 );
20 
21 TYPE  Prf_Tbl_Type IS TABLE OF Prf_Rec_Type
22     INDEX BY BINARY_INTEGER;
23 
24 Prf_Tbl                 Prf_Tbl_Type;
25 
26 TABLE_SIZE    binary_integer := 2147483646; /*Size of the above Table*/
27 
28 FUNCTION find(p_concat_segment IN VARCHAR2)
29 RETURN binary_integer
30 IS
31    l_tab_index  BINARY_INTEGER;
32    l_found      BOOLEAN;
33    l_hash_value NUMBER;
34 
35 BEGIN
36    l_tab_index := dbms_utility.get_hash_value(p_concat_segment,1,TABLE_SIZE);
37    oe_debug_pub.add('Find: hash_value:'||l_tab_index,1);
38    IF Prf_Tbl.EXISTS(l_tab_index) THEN
39       IF Prf_Tbl(l_tab_index).concat_segment = p_concat_segment THEN
40          RETURN l_tab_index;
41       ELSE
42          l_hash_value := l_tab_index;
43           l_found := FALSE;
44           WHILE (l_tab_index < TABLE_SIZE)
45             AND NOT l_found  LOOP
46              IF Prf_Tbl.EXISTS(l_tab_index) THEN
47                 IF Prf_Tbl(l_tab_index).concat_segment = p_concat_segment THEN
48                    l_found := TRUE;
49                 ELSE
50                    l_tab_index := l_tab_index + 1;
51                 END IF;
52              ELSE
53                 RETURN (TABLE_SIZE+1);
54              END IF;
55           END LOOP;
56           IF NOT l_found THEN
57              l_tab_index := 1;
58              WHILE (l_tab_index < l_hash_value)
59                AND NOT l_found  LOOP
60                 IF Prf_Tbl.EXISTS(l_tab_index) THEN
61                    IF Prf_Tbl(l_tab_index).concat_segment = p_concat_segment THEN
62                        l_found := TRUE;
63                    ELSE
64                        l_tab_index := l_tab_index + 1;
65                    END IF;
66                 ELSE
67                    RETURN (TABLE_SIZE+1);
68                 END IF;
69              END LOOP;
70            END IF;
71            IF NOT l_found THEN
72               RETURN (TABLE_SIZE+1);
73            END IF;
74       END IF;
75    ELSE
76       RETURN (TABLE_SIZE+1);
77    END IF;
78    RETURN l_tab_index;
79 EXCEPTION
80    WHEN OTHERS THEN
81       RETURN TABLE_SIZE+1;
82 END find;
83 
84 PROCEDURE put(p_concat_segment IN VARCHAR2,
85               p_user_id        IN NUMBER,
86               p_resp_id        IN NUMBER,
87               p_appl_id        IN NUMBER,
88               x_prof_value OUT NOCOPY VARCHAR2)
89 IS
90    l_tab_index BINARY_INTEGER;
91    l_stored BOOLEAN :=FALSE;
92    l_prof_value VARCHAR2(240);
93    l_hash_value  NUMBER;
94 BEGIN
95    l_tab_index := dbms_utility.get_hash_value(p_concat_segment,1,TABLE_SIZE);
96    --l_prof_value := FND_PROFILE.VALUE_SPECIFIC('AR_ALLOW_TAX_CODE_OVERRIDE',p_user_id,p_resp_id,p_appl_id);
97    l_prof_value := FND_PROFILE.VALUE_SPECIFIC('ZX_ALLOW_TAX_CLASSIF_OVERRIDE',p_user_id,p_resp_id,p_appl_id);
98    oe_debug_pub.add('Put:hash_value:'||l_tab_index,1);
99    IF  Prf_Tbl.EXISTS(l_tab_index) THEN
100        IF Prf_Tbl(l_tab_index).concat_segment =  p_concat_segment THEN
101           Prf_Tbl(l_tab_index).prf_value := l_prof_value;
102           l_stored := TRUE;
103        ELSE
104          l_hash_value := l_tab_index;
105          WHILE l_tab_index < TABLE_SIZE
106            AND NOT l_stored LOOP
107             IF  Prf_Tbl.EXISTS(l_tab_index) THEN
108                 IF  Prf_Tbl(l_tab_index).concat_segment =  p_concat_segment THEN
109                     Prf_Tbl(l_tab_index).prf_value := l_prof_value;
110                     l_stored := TRUE;
111                  ELSE
112                   l_tab_index := l_tab_index +1;
113                END IF;
114             ELSE
115                Prf_Tbl(l_tab_index).prf_value := l_prof_value;
116                Prf_Tbl(l_tab_index).concat_segment := p_concat_segment;
117                l_stored := TRUE;
118             END IF;
119          END LOOP;
120          IF NOT l_stored THEN
121             l_tab_index := 1;
122             WHILE l_tab_index < l_hash_value
123               AND NOT l_stored LOOP
124                IF Prf_Tbl.EXISTS(l_tab_index) THEN
125                   IF Prf_Tbl(l_tab_index).concat_segment =  p_concat_segment THEN
126                       Prf_Tbl(l_tab_index).prf_value := l_prof_value;
127                       l_stored := TRUE;
128                   ELSE
129                      l_tab_index := l_tab_index +1;
130                   END IF;
131                ELSE
132                   Prf_Tbl(l_tab_index).prf_value := l_prof_value;
133                   Prf_Tbl(l_tab_index).concat_segment := p_concat_segment;
134                   l_stored := TRUE;
135                END IF;
136             END LOOP;
137          END IF;
138       END IF;
139    ELSE
140       Prf_Tbl(l_tab_index).prf_value := l_prof_value;
141       Prf_Tbl(l_tab_index).concat_segment := p_concat_segment;
142       l_stored := TRUE;
143    END IF;
144    x_prof_value := l_prof_value;
145 EXCEPTION
146    WHEN OTHERS THEN
147       NULL;
148 END put;
149 -- 3757279
150 
151 FUNCTION Invoice_Balance(
152 P_CUSTOMER_TRX_ID  IN NUMBER )
153 RETURN NUMBER
154 IS
155    v_balance NUMBER := NULL ;
156 BEGIN
157    IF ( P_CUSTOMER_TRX_ID IS NOT NULL )
158    THEN
159         SELECT NVL(SUM(AMOUNT_DUE_REMAINING),0)
160         INTO v_balance
161         FROM AR_PAYMENT_SCHEDULES
162         WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
163    END IF;
164    RETURN(v_balance);
165  EXCEPTION
166    WHEN NO_DATA_FOUND THEN
167         return(NULL);
168 END;  -- INVOICE_BALANCE
169 
170 
171 
172 /*
173 * This procedure is added for bug# 7231974
174 * This proc is exact copy of OE_LINE_FULLFILL.UPDATE_SERVICE_DATES(). Therefore, any changes in oe_line_fullfill.update_service_dates()
175 * should be imported to this proc as well.
176 * This proc is called in case of SERVICE lines, with ORDER reference type, with VARIABLE type accounting rule, with ACCOUNTING_RULE_DURATION field being null
177 * and service_start_date and service_end_Date being null.
178 *
179 */
180 PROCEDURE Update_Service_Dates
181 (
182 p_line_rec  IN OUT NOCOPY     OE_Order_Pub.Line_Rec_Type
183 )
184 IS
185 l_return_status VARCHAR2(1);
186 l_line_rec OE_Order_Pub.Line_Rec_Type;
187 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
188 BEGIN
189 
190 IF l_debug_level  > 0 THEN
191    oe_debug_pub.add('entering oe_invoice_pub . update_service_dates() '
192                                 ||' p_line_rec.line_id  = ' || P_LINE_REC.LINE_ID
193                                 ||' p_line_rec.service_start_date = '||TO_CHAR(P_LINE_REC.SERVICE_START_DATE, 'YYYY/MM/DD' )
194                                 ||' p_line_rec.service_end_date = '|| TO_CHAR ( P_LINE_REC.SERVICE_END_DATE , 'YYYY/MM/DD' )
195                                 ) ;
196 END IF;
197 
198 IF p_line_rec.service_start_date IS NULL OR p_line_rec.service_start_date = FND_API.G_MISS_DATE THEN
199     l_line_rec := p_line_rec;
200     l_line_rec.service_start_date := NULL;
201     l_line_rec.service_reference_type_code := 'GET_SVC_START';
202     OE_SERVICE_UTIL.Get_Service_Duration(
203     p_x_line_rec => l_line_rec,
204     x_return_status => l_return_status
205     );
206 
207     oe_debug_pub.add(' l_line_rec.service_start_date = '|| l_line_rec.service_start_date);
208     oe_debug_pub.add(' l_return_status = '||l_return_status);
209 
210     p_line_rec.service_start_date := l_line_rec.service_start_date;
211 
212     IF p_line_rec.service_start_date IS NOT NULL THEN
213        p_line_rec.service_end_date := NULL;
214        OE_SERVICE_UTIL.Get_Service_Duration(
215        p_x_line_rec => p_line_rec,
216        x_return_status => l_return_status
217        );
218         oe_debug_pub.add(' l_return_status == '||l_return_status);
219     END IF;
220 
221 ELSIF p_line_rec.service_end_date IS NULL OR p_line_rec.service_end_date = FND_API.G_MISS_DATE THEN
222 
223     OE_SERVICE_UTIL.Get_Service_Duration(
224     p_x_line_rec => p_line_rec,
225     x_return_status => l_return_status
226     );
227         oe_debug_pub.add(' l_return_status == >  '||l_return_status);
228 END IF;
229 
230 IF l_debug_level  > 0 THEN
231    oe_debug_pub.add('exiting oe_invoice_pub . update_service_dates() '
232                                 ||' p_line_rec.line_id  = ' || P_LINE_REC.LINE_ID
233                                 ||' p_line_rec.service_start_date = '||TO_CHAR(P_LINE_REC.SERVICE_START_DATE, 'YYYY/MM/DD' )
234                                 ||' p_line_rec.service_end_date = '|| TO_CHAR ( P_LINE_REC.SERVICE_END_DATE , 'YYYY/MM/DD' )
235                                 ) ;
236 END IF;
237 
238 END Update_Service_Dates;
239 
240 
241 
242 FUNCTION Return_Line
243 (p_line_rec IN OE_Order_Pub.Line_Rec_Type
244 )
245 RETURN BOOLEAN
246 IS
247 --
248 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
249 --
250 l_header_id NUMBER;
251 l_line_id NUMBER;
252 
253 BEGIN
254      IF l_debug_level  > 0 THEN
255          oe_debug_pub.add(  'ENTER RETURN_LINE ' , 1 ) ;
256      END IF;
257      IF p_line_rec.line_category_code = 'RETURN' THEN
258         IF l_debug_level  > 0 THEN
259             oe_debug_pub.add(  'EXIT , THIS IS A RETURN LINE' , 1 ) ;
260         END IF;
261         RETURN TRUE;
262      ELSE
263         IF l_debug_level  > 0 THEN
264             oe_debug_pub.add(  'EXIT , THIS IS A REGULAR LINE' , 1 ) ;
265         END IF;
266         RETURN FALSE;
267      END IF;
268 EXCEPTION
269      WHEN OTHERS THEN
270         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
271             IF l_debug_level  > 0 THEN
272                 oe_debug_pub.add(  'RETURN_LINE: WHEN OTHERS EXCEPTION ' , 1 ) ;
273             END IF;
274             OE_MSG_PUB.Add_Exc_Msg
275             (   G_PKG_NAME
276             ,   'Return_Line'
277             );
278         END IF;
279 END Return_Line;
280 
281 Procedure Update_line_flow_status
282 (  p_line_id IN NUMBER
283  , p_flow_status_code IN VARCHAR2
284 ) IS
285 --
286 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
287 --
288 Begin
289    IF l_debug_level  > 0 THEN
290       oe_debug_pub.add(  'Inside Update Line Flow Status');
291       oe_debug_pub.add(  'line id : ' || p_line_id);
292       oe_debug_pub.add(  'flow status code : ' || p_flow_status_code);
293    END IF;
294 	Update oe_order_lines_all
295 	Set flow_status_code = p_flow_status_code
296 	Where line_id = p_line_id;
297 End Update_line_flow_status;
298 
299 Procedure Update_header_flow_status
300 (  p_header_id IN NUMBER
301  , p_flow_status_code IN VARCHAR2
302 ) IS
303 --
304 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
305 --
306 Begin
307    IF l_debug_level  > 0 THEN
308       oe_debug_pub.add(  'Inside Update Header Flow Status');
309    END IF;
310 	Update oe_order_headers_all
311 	Set flow_status_code = p_flow_status_code
312 	Where header_id = p_header_id;
313 End Update_header_flow_status;
314 
315 
316 FUNCTION Shipping_info_Available
317 (  p_line_rec   IN   OE_Order_Pub.Line_Rec_Type
318 )
319 RETURN BOOLEAN
320 IS
321 l_count NUMBER;
322 --
323 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
324 --
325 BEGIN
326      IF l_debug_level  > 0 THEN
327          oe_debug_pub.add(  'ENTER SHIPPING_INFO_AVAILABLE ' , 1 ) ;
328      END IF;
329      -- Fix for bug 2196494
330      IF (p_line_rec.shippable_flag = 'Y' OR p_line_rec.item_type_code in ('MODEL','CLASS','KIT'))
331         AND p_line_rec.line_category_code <> 'RETURN'
332         AND p_line_rec.source_type_code <> 'EXTERNAL' THEN
333 
334         /* Modified the condition clause for bug 4003538 */
335         IF (nvl(p_line_rec.shipped_quantity,0) = 0 AND
336             p_line_rec.model_remnant_flag = 'Y'    AND
337             p_line_rec.item_type_code in ('MODEL','CLASS','KIT')) THEN
338              IF l_debug_level  > 0 THEN
339                 oe_debug_pub.add('Exit Shipping_info_Available (4) Remnant Model',1);
340              END IF;
341              RETURN TRUE;
342         -- If line is shipped, shipped quantity will be filled in otherwise it will be null
343         ELSIF p_line_rec.shipped_quantity IS NULL THEN   -- Changed IF to ELSIF
344            IF l_debug_level  > 0 THEN
345               oe_debug_pub.add('Exit Shipping_info_Available (1) non shippable', 1);
346            END IF;
347            RETURN FALSE;
348         ELSE
349            IF l_debug_level  > 0 THEN
350               oe_debug_pub.add('Exit Shipping_info_Available (2)-shippable', 1);
351            END IF;
352            RETURN TRUE;
353         END IF;
354      ELSE
355         IF l_debug_level  > 0 THEN
356             oe_debug_pub.add(  'EXIT SHIPPING_INFO_AVAILABLE ( 3 ) ' , 1 ) ;
357         END IF;
358         RETURN FALSE;
359      END IF;
360 EXCEPTION
361      WHEN OTHERS THEN
362         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
363         THEN
364             IF l_debug_level  > 0 THEN
365                 oe_debug_pub.add(  'SHIPPPING_INFO_AVAILABLE: WHEN OTHERS EXCEPTION ' , 1 ) ;
366             END IF;
367             OE_MSG_PUB.Add_Exc_Msg
368             (   G_PKG_NAME
369             ,   'Shippping_info_Available'
370             );
371         END IF;
372 END Shipping_info_Available;
373 
374 FUNCTION Line_Invoiceable
375 (  p_line_rec   IN   OE_Order_Pub.Line_Rec_Type
376 )
377 RETURN BOOLEAN
378 IS
379 l_invoiceable_item_flag      VARCHAR2(1);
380 l_invoice_enabled_flag       VARCHAR2(1);
381 l_serviceable_product_flag   VARCHAR2(1);
382 l_order_line_id              NUMBER;
383 l_return_status              VARCHAR2(1);
384 l_service_reference_line_id  NUMBER;
385 l_cancelled_delivery_detail NUMBER;
386 --bug5336639
387 l_master_organization_id NUMBER;
388 --
389 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
390 --
391 BEGIN
392      IF l_debug_level  > 0 THEN
393          oe_debug_pub.add(  'ENTERING LINE_INVOICEABLE' , 1 ) ;
394      END IF;
395 
396      --bug5336639
397      IF G_CURRENT_LINE_ID = p_line_rec.line_id THEN
398 
399         IF l_debug_level > 0 THEN
400 	   oe_debug_pub.add('Returning the cached value..');
401 	   IF G_IS_CURR_LINE_INVOICEABLE THEN
402 	      oe_debug_pub.add('This line is invoiceable');
403 	   ELSE
404 	      oe_debug_pub.add('This line is not invoiceable');
405 	   END IF;
406 	END IF;
407 
408 	RETURN G_IS_CURR_LINE_INVOICEABLE;
409      END IF;
410 
411      /* For internal orders source_document_type_id is 10 */
412      IF p_line_rec.source_document_type_id = 10 THEN
413         IF l_debug_level  > 0 THEN
414             oe_debug_pub.add(  'INTERNAL ORDER , NOT INVOICEABLE' , 1 ) ;
415         END IF;
416 	--bug5336639 start
417 	G_CURRENT_LINE_ID :=  p_line_rec.line_id;
418 	G_IS_CURR_LINE_INVOICEABLE := FALSE;
419 	--bug5336639 end;
420         RETURN FALSE;
421      END IF;
422 
423      -- Begin 4172500
424      IF p_line_rec.shippable_flag = 'Y' AND nvl(p_line_rec.shipped_quantity,0) = 0 THEN
425         BEGIN
426 
427             SELECT COUNT(*)
428             INTO   l_cancelled_delivery_detail
429             FROM   WSH_DELIVERY_DETAILS
430             WHERE  SOURCE_LINE_ID = p_line_rec.line_id
431             AND    SOURCE_CODE='OE'
432             AND    RELEASED_STATUS = 'D';
433             IF NVL(l_cancelled_delivery_detail,0) > 0 THEN
434                IF l_debug_level  > 0 THEN
435                   oe_debug_pub.add('This line not eligible for invoice since shipping within tolerance'||p_line_rec.line_id,1);
436                END IF;
437 	       --bug5336639 start
438 	       G_CURRENT_LINE_ID :=  p_line_rec.line_id;
439 	       G_IS_CURR_LINE_INVOICEABLE := FALSE;
440 	       --bug5336639 end;
441                RETURN FALSE;
442             END IF;
443             EXCEPTION WHEN OTHERS THEN
444                IF l_debug_level  > 0 THEN
445                   oe_debug_pub.add('In Others',1);
446                END IF;
447                NULL;
448         END;
449      END IF;
450      -- End 4172500
451 
452      --bug5336639
453      l_master_organization_id := oe_sys_parameters.value('MASTER_ORGANIZATION_ID', p_line_rec.org_id);
454 
455      BEGIN
456         SELECT INVOICEABLE_ITEM_FLAG, INVOICE_ENABLED_FLAG
457         INTO   l_invoiceable_item_flag, l_invoice_enabled_flag
458         FROM   mtl_system_items
459         WHERE  inventory_item_id = p_line_rec.inventory_item_id
460         AND    organization_id = nvl(p_line_rec.ship_from_org_id,l_master_organization_id); --bug5336639
461 
462      EXCEPTION
463         WHEN NO_DATA_FOUND THEN
464            IF l_debug_level  > 0 THEN
465                  oe_debug_pub.add(  'ITEM DEFINITION DOES NOT EXISTS IN THE SHIP FROM ORG' );
466            END IF;
467            RAISE NO_DATA_FOUND;
468      END;
469      /* If the service reference context is ORDER, then the service_reference
470         line_id is the line_id of the parent. However, if the service ref
471         context is Customer Product then we need to first retrieve the
472         original order line id */
473 
474      IF p_line_rec.item_type_code = 'SERVICE' AND
475         p_line_rec.service_reference_type_code='CUSTOMER_PRODUCT' AND
476         p_line_rec.service_reference_line_id IS NOT NULL THEN
477            IF l_debug_level  > 0 THEN
478                oe_debug_pub.add(  'LINE IS A CUSTOMER PRODUCT' ) ;
479            END IF;
480 /* Commenting for bug# 5032978
481            OE_SERVICE_UTIL.Get_Cust_Product_Line_Id
482            ( x_return_status    => l_return_status
483            , p_reference_line_id => p_line_rec.service_reference_line_id
484            , p_customer_id       => p_line_rec.sold_to_org_id
485            , x_cust_product_line_id => l_order_line_id
486            );
487            IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
488 		      IF l_debug_level  > 0 THEN
489 		          oe_debug_pub.add(  'SERVICE LINE ID IS ' || L_ORDER_LINE_ID ) ;
490 		      END IF;
491               l_service_reference_line_id := l_order_line_id;
492            ELSE
493               IF l_debug_level  > 0 THEN
494                   oe_debug_pub.add(  'NOT ABLE TO RETRIEVE CUST PRODUCT LINE ID' ) ;
495               END IF;
496 	              FND_MESSAGE.SET_NAME('ONT','ONT_NO_CUST_PROD_LINE');
497                       OE_MSG_PUB.ADD;
498 		      RAISE NO_DATA_FOUND;
499            END IF;
500  end commenting for bug# 5032978 */
501         l_service_reference_line_id := NULL;
502 
503      ELSE
504         l_service_reference_line_id := p_line_rec.service_reference_line_id;
505      END IF;
506      IF p_line_rec.item_type_code = 'SERVICE' AND l_service_reference_line_id IS NOT NULL THEN
507         BEGIN
508           /*Bug3261460*/
509           SELECT msi.SERVICEABLE_PRODUCT_FLAG
510           INTO l_serviceable_product_flag
511           FROM oe_order_lines_all ol, mtl_system_items msi
512           WHERE ol.line_id = l_service_reference_line_id
513           AND ol.inventory_item_id = msi.inventory_item_id
514           AND msi.organization_id = nvl(ol.ship_from_org_id, oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ol.org_id));
515         EXCEPTION
516 	   WHEN NO_DATA_FOUND THEN
517               IF l_debug_level  > 0 THEN
518                  oe_debug_pub.add(  'IN NO DATA FOUND WHEN TRYING TO GET SERVICEABLE PRODUCT FLAG' ,5);
519               END IF;
520               l_serviceable_product_flag := 'Y';
521 	   WHEN OTHERS THEN
522                   IF l_debug_level  > 0 THEN
523                       oe_debug_pub.add(  'UNABLE TO DEFINE SERVICEABLE PRODUCT '||SQLERRM , 1 ) ;
524                   END IF;
525                   RAISE NO_DATA_FOUND;
526         END;
527      ELSE
528           l_serviceable_product_flag := 'Y';
529      END IF;
530 
531      IF (l_invoiceable_item_flag = 'N') OR
532         (l_invoice_enabled_flag = 'N') OR
533         (p_line_rec.item_type_code = 'SERVICE' AND l_serviceable_product_flag = 'N') THEN
534            IF l_debug_level  > 0 THEN
535                oe_debug_pub.add(  'ITEM NOT INVOICEABLE ( 2 ) ' , 1 ) ;
536            END IF;
537 	    --bug5336639 start
538 	   G_CURRENT_LINE_ID :=  p_line_rec.line_id;
539 	   G_IS_CURR_LINE_INVOICEABLE := FALSE;
540 	   --bug5336639 end;
541            RETURN FALSE;
542      END IF;
543 
544      IF p_line_rec.item_type_code = 'INCLUDED' THEN
545         IF l_debug_level  > 0 THEN
546             oe_debug_pub.add(  'INCLUDED ITEM , NOT INVOICEABLE ( 3 ) ' , 1 ) ;
547         END IF;
548 	--bug5336639 start
549 	G_CURRENT_LINE_ID :=  p_line_rec.line_id;
550 	G_IS_CURR_LINE_INVOICEABLE := FALSE;
551 	--bug5336639 end;
552         RETURN FALSE;
553      END IF;
554 
555      IF p_line_rec.item_type_code = 'CONFIG' THEN -- for bug# 5224264
556         IF l_debug_level  > 0 THEN
557             oe_debug_pub.add(  'CONFIG ITEM , NOT INVOICEABLE ( 3 ) ' , 1 ) ;
558         END IF;
559 	--bug5336639 start
560 	G_CURRENT_LINE_ID :=  p_line_rec.line_id;
561 	G_IS_CURR_LINE_INVOICEABLE := FALSE;
562 	--bug5336639 end;
563         RETURN FALSE;
564      END IF;
565 
566      IF Return_Line(p_line_rec) THEN
567         IF OE_LINE_UTIL.Get_Return_Item_Type_Code(p_line_rec) = 'CONFIG' OR
568            OE_LINE_UTIL.Get_Return_Item_Type_Code(p_line_rec) = 'INCLUDED' THEN
569            IF l_debug_level  > 0 THEN
570                oe_debug_pub.add(  'ITEM NOT INVOICEABLE ( 4 ) ' , 1 ) ;
571            END IF;
572 	    --bug5336639 start
573 	   G_CURRENT_LINE_ID :=  p_line_rec.line_id;
574 	   G_IS_CURR_LINE_INVOICEABLE := FALSE;
575 	   --bug5336639 end;
576            RETURN FALSE;
577         END IF;
578 
579         --Added for bug # 6945716 start
580         IF p_line_rec.line_category_code = 'RETURN'
581             AND(NVL(FND_PROFILE.VALUE('ONT_GENERATE_CREDIT_REJECTED_RETURNS'), 'N')='N'
582                 AND NVL(p_line_rec.shipped_quantity,0) = 0
583                     AND NVL(p_line_rec.fulfilled_quantity,0) = 0 ) THEN
584 
585                         IF l_debug_level  > 0 THEN
586                             oe_debug_pub.add(  'ITEM was Completely rejected, DO NOT Invoice ' , 1 ) ;
587                         END IF;
588 
589                         RETURN FALSE;
590         END IF;
591         --Added for bug # 6945716 end
592      END IF;
593      IF l_debug_level  > 0 THEN
594          oe_debug_pub.add(  'THIS LINE IS INVOICEABLE ( 5 ) ' , 5 ) ;
595      END IF;
596       --bug5336639 start
597      G_CURRENT_LINE_ID :=  p_line_rec.line_id;
598      G_IS_CURR_LINE_INVOICEABLE := TRUE;
599      --bug5336639 end;
600      RETURN TRUE;
601 
602 EXCEPTION
603      WHEN NO_DATA_FOUND THEN
604         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
605 	--RAISE FND_API.G_EXC_ERROR;
606      WHEN OTHERS THEN
607         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
608         THEN
609             IF l_debug_level  > 0 THEN
610                 oe_debug_pub.add(  'LINE_INVOICEABLE: WHEN OTHERS EXCEPTION '||SQLERRM , 1 ) ;
611             END IF;
612             OE_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME ,'Line_Invoiceable');
613         END IF;
614 END Line_Invoiceable;
615 
616 PROCEDURE Check_Invoicing_Holds
617 (  p_line_rec       IN   OE_Order_Pub.Line_Rec_Type
618 ,  p_itemtype       IN   VARCHAR2
619 ,  x_return_status  OUT NOCOPY VARCHAR2
620 )
621 IS
622 l_hold_result_out     VARCHAR2(30);
623 l_hold_return_status  VARCHAR2(30);
624 l_hold_msg_count      NUMBER;
625 l_hold_msg_data       VARCHAR2(240);
626 --
627 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
628 --
629 BEGIN
630 
631      -- We should honor invoice specific and generic holds
632      -- call to check_hold api to check for holds
633      IF l_debug_level  > 0 THEN
634          oe_debug_pub.add(  'ENTER CHECK_INVOICING_HOLDS ' , 5 ) ;
635      END IF;
636      -- Check for Generic and invoice activity specific holds
637 --   IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
638         OE_HOLDS_PUB.CHECK_HOLDS(p_api_version => 1.0,
639                      p_line_id => p_line_rec.line_id,
640                      p_wf_item => OE_GLOBALS.G_WFI_LIN,
641                      p_wf_activity => 'INVOICE_INTERFACE',
642                      x_result_out => l_hold_result_out,
643                      x_return_status => l_hold_return_status,
644                      x_msg_count => l_hold_msg_count,
645                      x_msg_data => l_hold_msg_data);
646         IF ( l_hold_return_status = FND_API.G_RET_STS_SUCCESS AND
647              l_hold_result_out = FND_API.G_TRUE )
648         THEN
649            FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_HOLD');
650            OE_MSG_PUB.ADD;
651            x_return_status := FND_API.G_RET_STS_ERROR;
652            IF l_debug_level  > 0 THEN
653                oe_debug_pub.add(  'A Line level Invoicing hold or generic hold found ( 1 ) , Return status : '||X_RETURN_STATUS , 1 ) ;
654            END IF;
655            RETURN;
656         ELSE
657 		x_return_status := FND_API.G_RET_STS_SUCCESS;
658         END IF;
659 --   ELSIF p_itemtype = 'OEOH' THEN
660         OE_HOLDS_PUB.CHECK_HOLDS(p_api_version => 1.0,
661                      p_line_id => p_line_rec.line_id,
662                      p_wf_item => OE_GLOBALS.G_WFI_HDR,
663                      p_wf_activity => 'HEADER_INVOICE_INTERFACE',
664                      x_result_out => l_hold_result_out,
665                      x_return_status => l_hold_return_status,
666                      x_msg_count => l_hold_msg_count,
667                      x_msg_data => l_hold_msg_data);
668 
669         IF ( l_hold_return_status = FND_API.G_RET_STS_SUCCESS AND
670              l_hold_result_out = FND_API.G_TRUE )
671         THEN
672           FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_HOLD');
673           OE_MSG_PUB.ADD;
674           x_return_status := FND_API.G_RET_STS_ERROR;
675           IF l_debug_level  > 0 THEN
676               oe_debug_pub.add(  'A Header level Invoicing hold or generic hold found ( 2 ) , Return status '||X_RETURN_STATUS , 1 ) ;
677           END IF;
678           RETURN;
679         ELSE
680 		x_return_status := FND_API.G_RET_STS_SUCCESS;
681         END IF;
682 --   END IF;
683      IF l_debug_level  > 0 THEN
684          oe_debug_pub.add(  'NO HOLDS FOUND FOR THIS LINE ( 3 ) , RETURN STATUS '||X_RETURN_STATUS , 1 ) ;
685      END IF;
686 EXCEPTION
687     WHEN OTHERS THEN
688         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
689         IF  FND_MSG_PUB.Check_Msg_Level
690             (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
691         THEN
692             IF l_debug_level  > 0 THEN
693                 oe_debug_pub.add(  'Check_Invoicing_Holds: WHEN OTHERS EXCEPTION '||SQLERRM , 1 ) ;
694             END IF;
695             OE_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME ,'Check_Invoicing_Holds');
696         END IF;
697 END Check_Invoicing_Holds;
698 
699 FUNCTION Show_Detail_Discounts
700 (  p_line_rec    IN OE_Order_Pub.Line_Rec_Type
701 ) RETURN BOOLEAN IS
702 l_price_adj_tbl   OE_Header_Adj_Util.Line_Adjustments_Tab_Type;
703 --
704 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
705 --
706 l_header_id NUMBER;
707 l_line_id NUMBER;
708 BEGIN
709     IF l_debug_level  > 0 THEN
710         oe_debug_pub.add(  'ENTER SHOW_DETAIL_DISCOUNTS ( ) ' , 5 ) ;
711     END IF;
712     -- We should not depend on list price, selling price to determine if
713     -- there are any discounts. There is bug in pricing now.
714     -- Eventhough the discounts are not actually inserted into oe_price_adj table,
715     -- Selling price is adjusted to discounted price)
716     -- To avoid this look at adj table to see if there are any adjustments
717     --  IF p_line_rec.unit_list_price <> p_line_rec.unit_selling_price AND
718    IF (oe_sys_parameters.value('OE_DISCOUNT_DETAILS_ON_INVOICE',p_line_rec.org_id) = 'Y') THEN --moac
719       -- 3661895 The IF will be true only for return retrobilled RMA, all others will go through else
720       -- RT{
721       IF (p_line_rec.line_category_code = 'RETURN'
722          and p_line_rec.reference_line_id IS NOT NULL
723          and p_line_rec.retrobill_request_id IS NOT NULL) THEN
724 
725          OE_RETROBILL_PVT.Get_Line_Adjustments
726                                   (p_line_rec          =>  p_line_rec
727                                   ,x_line_adjustments  =>  l_price_adj_tbl);
728        ELSE
729 
730          OE_Header_Adj_Util.Get_Line_Adjustments
731 	               (p_header_id         =>   p_line_rec.header_id
732 		       ,p_line_id           =>   p_line_rec.line_id
733 		       ,x_line_adjustments  =>   l_price_adj_tbl);
734        END IF;
735        -- RT}
736         IF l_debug_level  > 0 THEN
737             oe_debug_pub.add(  'HEADER_ID : '||P_LINE_REC.HEADER_ID , 5 ) ;
738             oe_debug_pub.add(  'LINE_ID : '||P_LINE_REC.LINE_ID , 5 ) ;
739             oe_debug_pub.add(  'COUNT IS : '||L_PRICE_ADJ_TBL.COUNT , 5 ) ;
740         END IF;
741         IF l_price_adj_tbl.COUNT <> 0 THEN
742            IF l_debug_level  > 0 THEN
743                oe_debug_pub.add(  'SHOW DETAIL DISCOUNTS IS ON' , 1 ) ;
744            END IF;
745            RETURN TRUE;
746         ELSE
747            IF l_debug_level  > 0 THEN
748                oe_debug_pub.add(  'SHOW DETAIL DISCOUNTS IS OFF ( 1 ) ' , 1 ) ;
749            END IF;
750            RETURN FALSE;
751         END IF;
752     ELSE
753        IF l_debug_level  > 0 THEN
754            oe_debug_pub.add(  'SHOW DETAIL DISCOUNTS IS OFF ( 2 ) ' , 1 ) ;
755        END IF;
756        RETURN FALSE;
757     END IF;
758 END Show_Detail_Discounts;
759 
760 PROCEDURE Rounded_Amount
761 (  p_currency_code      IN   VARCHAR2
762 ,  p_unrounded_amount   IN   NUMBER
763 ,  x_rounded_amount     OUT NOCOPY NUMBER
764 )
765 IS
766 l_precision         NUMBER;
767 l_ext_precision     NUMBER;
768 l_min_acct_unit     NUMBER;
769 --
770 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
771 --
772 BEGIN
773 
774      IF l_debug_level  > 0 THEN
775          oe_debug_pub.add(  'ENTERING ROUNDED_AMOUNT ( ) ' , 5 ) ;
776      END IF;
777      FND_CURRENCY.GET_INFO(Currency_Code => p_currency_code,
778                            precision     => l_precision,
779                            ext_precision => l_ext_precision,
780                            min_acct_unit => l_min_acct_unit);
781 
782      IF (l_min_acct_unit = 0 OR l_min_acct_unit IS NULL) THEN
783           x_rounded_amount := ROUND(p_unrounded_amount, l_precision);
784      ELSE
785           x_rounded_amount := ROUND(p_unrounded_amount/l_min_acct_unit)*l_min_acct_unit;
786      END IF;
787      IF l_debug_level  > 0 THEN
788          oe_debug_pub.add(  'EXITING ROUNDED AMOUNT ( ) WITH AMOUNT : '||X_ROUNDED_AMOUNT , 5 ) ;
789      END IF;
790 END Rounded_Amount;
791 
792 PROCEDURE Return_Credit_Info
793 (  p_line_rec   IN   OE_Order_Pub.Line_Rec_Type
794 ,  x_credit_memo_type_id   OUT NOCOPY  NUMBER
795 ,  x_credit_creation_sign  OUT NOCOPY  VARCHAR2
796 )
797 IS
798 l_inv_cust_trx_type_id NUMBER;
799 --
800 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
801 --
802 BEGIN
803     IF l_debug_level  > 0 THEN
804         oe_debug_pub.add(  ' ENTER RETURN CREDIT INFO ( ) ' , 5 ) ;
805     END IF;
806           --Hierarchy of retrieval:
807           --1)Get cust_trx_type_id from referenced line.
808           --2)Get cust_trx_type_id from referenced order.
809           --3)Get cust_trx_type_id from that line.
810           --4)Get cust_trx_type_id from that order.
811           --5)Get cust_trx_type_id from PROFILE OPTION.
812     IF p_line_rec.return_context = 'INVOICE' THEN
813        IF l_debug_level  > 0 THEN
814            oe_debug_pub.add(  ' RETURN TYPE IS INVOICE ' , 5 ) ;
815        END IF;
816        OE_DEBUG_PUB.DUMPDEBUG;
817        -- Introducing this pl/sql block #3349781
818     BEGIN
819        SELECT nvl(ctt.credit_memo_type_id, 0),
820               ctt_credit.creation_sign
821        INTO x_credit_memo_type_id, x_credit_creation_sign
822        FROM ra_customer_trx_lines_all ctl,
823             ra_customer_trx_all ct,
824             ra_cust_trx_types_all ctt,
825             ra_cust_trx_types_all ctt_credit
826        WHERE ctl.customer_trx_line_id = p_line_rec.reference_customer_trx_line_id
827        AND   ct.customer_trx_id = ctl.customer_trx_id
828        AND   ctt.cust_trx_type_id = ct.cust_trx_type_id
829        AND   ctt_credit.cust_trx_type_id = ctt.credit_memo_type_id
830        AND   NVL(ctt.org_id, -3114) = NVL(ctl.org_id, -3114)
831                        /*   DECODE(ctt.cust_trx_type_id,
832                             1, -3113,
833                             2, -3113,
834                             7, -3113,
835                             8, -3113,
836                             NVL(ctl.org_id, -3114))                 Commented for the bug 3027150 */
837        AND   NVL(ctt_credit.org_id, -3114) =  NVL(ctl.org_id, -3114);
838                        /*   DECODE(ctt_credit.cust_trx_type_id,
839                             1, -3113,
840                             2, -3113,
841                             7, -3113,
842                             8, -3113,
843                             NVL(ctl.org_id, -3114));                Commented for the bug 3027150 */
844        -- cust_trx_type_id 1,2,7,8 (for Invoice, Credit Memo, PA Invoice, PA Credit memo) are seeded with org_id -3113
845     EXCEPTION WHEN NO_DATA_FOUND THEN
846        OE_DEBUG_PUB.add('Unable to derive credit memo type id from referenced order line, verify setup',1);
847        x_credit_memo_type_id:= 0;
848        x_credit_creation_sign := NULL;
849        NULL;
850     END;
851 
852        IF l_debug_level  > 0 THEN
853            oe_debug_pub.add(  'CREDIT_MEMO_TYPE_ID FROM INVOICE : '||X_CREDIT_MEMO_TYPE_ID , 5 ) ;
854        END IF;
855     ELSIF p_line_rec.return_context in ('PO', 'ORDER', 'SERIAL') THEN
856           IF l_debug_level  > 0 THEN
857               oe_debug_pub.add(  ' RETURN TYPE IS PO/ORDER/SERIAL' , 5 ) ;
858           END IF;
859           OE_DEBUG_PUB.DUMPDEBUG;
860           -- Get cust_trx_type_id from line type
861           --Bug2293944 Get information from the reference line or reference order.
862           SELECT NVL(lt.cust_trx_type_id, 0)
863           INTO   l_inv_cust_trx_type_id
864           FROM   oe_line_types_v lt
865           WHERE  lt.line_type_id = (SELECT line_type_id
866                                     FROM   oe_order_lines_all /* MOAC SQL CHANGE */
867                                     WHERE  line_id = p_line_rec.reference_line_id);
868           IF l_debug_level  > 0 THEN
869               oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM REFERENCE LINE TYPE : '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
870           END IF;
871           IF l_inv_cust_trx_type_id = 0 THEN
872              SELECT NVL(ot.cust_trx_type_id,0)
873              INTO   l_inv_cust_trx_type_id
874              FROM   oe_order_types_v ot,
875                     oe_order_headers_all oh  /* MOAC SQL CHANGE */
876             WHERE   ot.order_type_id = oh.order_type_id
877             AND     oh.header_id = (SELECT header_id
878                                     FROM   oe_order_lines_all /* MOAC SQL CHANGE */
879                                     WHERE  line_id = p_line_rec.reference_line_id);
880           END IF;
881           IF l_debug_level  > 0 THEN
882               oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM REFERENCE ORDER TYPE : '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
883           END IF;
884     ELSE
885           IF l_debug_level  > 0 THEN
886               oe_debug_pub.add(  'RETURN TYPE : '||P_LINE_REC.RETURN_CONTEXT , 5 ) ;
887           END IF;
888           x_credit_memo_type_id:= 0;
889           x_credit_creation_sign := NULL;
890     END IF;
891     IF (l_inv_cust_trx_type_id = 0 or x_credit_memo_type_id = 0)THEN
892         --use cache instead of SQL for bug 4200055
893       IF ( p_line_rec.line_type_id is not null
894 		 AND p_line_rec.line_type_id <> FND_API.G_MISS_NUM ) THEN
895            if (OE_Order_Cache.g_line_type_rec.line_type_id <> p_line_rec.Line_Type_id) THEN
896 		  OE_Order_Cache.Load_Line_type(p_line_rec.Line_Type_id) ;
897            end if  ;
898            if (OE_Order_Cache.g_line_type_rec.line_type_id =  p_line_rec.Line_Type_id )
899  	   then
900 		l_inv_cust_trx_type_id := nvl(OE_Order_Cache.g_line_type_rec.cust_trx_type_id,0);
901 	   else
902 	        l_inv_cust_trx_type_id := 0 ;
903            end if ;
904       ELSE
905 		l_inv_cust_trx_type_id := 0 ;
906       END IF ;
907        /*SELECT NVL(lt.cust_trx_type_id,0)
908        INTO   l_inv_cust_trx_type_id
909 	      FROM   oe_line_types_v lt
910 	      WHERE  lt.line_type_id = p_line_rec.line_type_id; */
911 	 -- end bug 4200055
912        IF l_debug_level  > 0 THEN
913            oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM LINE TYPE : '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
914        END IF;
915        IF l_inv_cust_trx_type_id = 0 THEN
916            -- Get cust_trx_type_id from order type
917            SELECT  NVL(ot.cust_trx_type_id, 0)
918            INTO   l_inv_cust_trx_type_id
919            FROM   oe_order_types_v ot,
920                   oe_order_headers_all oh   /* MOAC SQL CHANGE */
921            WHERE  ot.order_type_id = oh.order_type_id
922            AND    oh.header_id = p_line_rec.header_id;
923        END IF;
924        IF l_debug_level  > 0 THEN
925            oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM ORDER TYPE : '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
926        END IF;
927     END IF;
928     IF l_inv_cust_trx_type_id <> 0 THEN -- cust_trx_type_id exists at line/order type
929        IF l_debug_level  > 0 THEN
930            oe_debug_pub.add(  'CUST_TRX_TYPE_ID FROM LINE/ORDER TYPE: '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
931        END IF;
932        -- Introducing this pl/sql block #3349781
933        BEGIN
934           SELECT NVL(ctt.credit_memo_type_id, 0),
935                  ctt_credit.creation_sign
936           INTO x_credit_memo_type_id, x_credit_creation_sign
937           FROM ra_cust_trx_types_all ctt,
938                ra_cust_trx_types_all ctt_credit
939           WHERE ctt.cust_trx_type_id = l_inv_cust_trx_type_id
940           AND   ctt_credit.cust_trx_type_id = ctt.credit_memo_type_id
941           AND   NVL(ctt.org_id, -3114) =  NVL(p_line_rec.org_id, -3114)
942                    /*      DECODE(ctt.cust_trx_type_id,
943                             1, -3113,
944                             2, -3113,
945                             7, -3113,
946                             8, -3113,
947                             NVL(p_line_rec.org_id, -3114))                Commented for the bug 3027150 */
948            AND   NVL(ctt_credit.org_id, -3114) = NVL(p_line_rec.org_id, -3114);
949                  /*        DECODE(ctt_credit.cust_trx_type_id,
950                             1, -3113,
951                             2, -3113,
952                             7, -3113,
953                             8, -3113,
954                             NVL(p_line_rec.org_id, -3114));                Commented for the bug 3027150 */
955        EXCEPTION WHEN NO_DATA_FOUND THEN
956          OE_DEBUG_PUB.add('Unable to derive credit memo type id from order line, verify setup',1);
957          x_credit_memo_type_id:= 0;
958          x_credit_creation_sign := NULL;
959          NULL;
960        END;
961 
962            IF l_debug_level  > 0 THEN
963                oe_debug_pub.add(  'CREDIT MEMO TYPE : '||X_CREDIT_MEMO_TYPE_ID , 5 ) ;
964            END IF;
965            -- cust_trx_type_id 1,2,7,8 (for Invoice, Credit Memo, PA Invoice, PA Credit memo) are seeded with org_id -3113
966     END IF;
967     IF l_inv_cust_trx_type_id = 0 OR x_credit_memo_type_id = 0 THEN
968        -- no cust_trx_type_id at line/order type
969        IF l_debug_level  > 0 THEN
970            oe_debug_pub.add(  'NO CUST TRX TYPE AT ORDER OR LINE TYPE LEVEL' , 5 ) ;
971        END IF;
972        x_credit_memo_type_id := 0;
973        x_credit_creation_sign := NULL;
974     END IF;
975 
976     IF l_debug_level  > 0 THEN
977         oe_debug_pub.add(  'CREDIT MEMO TYPE ID : '||X_CREDIT_MEMO_TYPE_ID , 5 ) ;
978     END IF;
979     IF l_debug_level  > 0 THEN
980         oe_debug_pub.add(  'CREATION_SIGN : '||X_CREDIT_CREATION_SIGN , 5 ) ;
981         oe_debug_pub.add(  ' EXITING RETURN_CREDIT_INFO ( ) ' , 1 ) ;
982     END IF;
983 EXCEPTION
984    WHEN NO_DATA_FOUND THEN
985         IF l_debug_level  > 0 THEN
986             oe_debug_pub.add(  'EXCEPTION. EXITING RETURN_CREDIT_INFO ( 1 ) '||SQLERRM , 1 ) ;
987         END IF;
988         x_credit_memo_type_id := 0;
989         x_credit_creation_sign := NULL;
990    WHEN TOO_MANY_ROWS THEN
991         IF l_debug_level  > 0 THEN
992             oe_debug_pub.add(  'EXCEPTION. EXITING RETURN_CREDIT_INFO ( 2 ) '||SQLERRM , 1 ) ;
993         END IF;
994         x_credit_memo_type_id := 0;
995         x_credit_creation_sign := NULL;
996    WHEN OTHERS THEN
997         IF l_debug_level  > 0 THEN
998             oe_debug_pub.add(  'EXCEPTION. EXITING RETURN_CREDIT_INFO ( 3 ) '||SQLERRM , 1 ) ;
999         END IF;
1000         x_credit_memo_type_id := 0;
1001         x_credit_creation_sign := NULL;
1002 END Return_Credit_Info;
1003 
1004 FUNCTION Get_Credit_Creation_Sign
1005 (  p_line_rec    IN   OE_Order_Pub.Line_Rec_Type
1006 ,  p_cust_trx_type_id   IN  NUMBER)
1007 RETURN VARCHAR2 IS
1008 l_creation_sign      VARCHAR2(30):= NULL;
1009 --
1010 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1011 --
1012 BEGIN
1013    IF l_debug_level  > 0 THEN
1014        oe_debug_pub.add(  'ENTERING GET_CREDIT_CREATION_SIGN' , 5 ) ;
1015    END IF;
1016    IF p_cust_trx_type_id IS NOT NULL AND p_cust_trx_type_id <> 0 THEN
1017 	 SELECT creation_sign
1018 	 INTO l_creation_sign
1019 	 FROM ra_cust_trx_types
1020 	 WHERE cust_trx_type_id = p_Cust_Trx_Type_Id;
1021    END IF;
1022    IF l_debug_level  > 0 THEN
1023        oe_debug_pub.add(  'CREATION_SIGN: '||L_CREATION_SIGN ) ;
1024        oe_debug_pub.add(  'EXITING GET_CREDIT_CREATION_SIGN ( 1 ) '||' SIGN= '||L_CREATION_SIGN , 1 ) ;
1025    END IF;
1026    RETURN(l_creation_sign);
1027 
1028 EXCEPTION
1029    WHEN OTHERS THEN
1030       IF l_debug_level  > 0 THEN
1031           oe_debug_pub.add(  'EXCEPTION. EXITING GET_CREDIT_CREATION_SIGN ( 1 ) '||SQLERRM , 1 ) ;
1032       END IF;
1033       RETURN(NULL);
1034 END Get_Credit_Creation_Sign;
1035 
1036 PROCEDURE Get_Commitment_Info
1037 (  p_line_rec    IN   OE_Order_Pub.Line_Rec_Type
1038 ,  x_commitment_applied     OUT NOCOPY NUMBER
1039 ,  x_commitment_interfaced  OUT NOCOPY NUMBER)
1040 IS
1041 --
1042 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1043 --
1044 BEGIN
1045    IF l_debug_level  > 0 THEN
1046        oe_debug_pub.add(  'ENTERING GET_COMMITMENT_INFO' , 5 ) ;
1047    END IF;
1048    IF p_line_rec.commitment_id IS NOT NULL THEN
1049 --serla begin
1050     IF OE_PrePayment_UTIL.IS_MULTIPLE_PAYMENTS_ENABLED THEN
1051       SELECT nvl(commitment_applied_amount, 0)
1052             ,nvl(commitment_interfaced_amount, 0)
1053       INTO  x_commitment_applied
1054             ,x_commitment_interfaced
1055       FROM oe_payments
1056       WHERE payment_trx_id = p_line_rec.commitment_id
1057       AND   payment_type_code = 'COMMITMENT'
1058       AND   line_id = p_line_rec.line_id;
1059     ELSE
1060 --serla end
1061       SELECT nvl(commitment_applied_amount, 0)
1062             ,nvl(commitment_interfaced_amount, 0)
1063       INTO  x_commitment_applied
1064             ,x_commitment_interfaced
1065       FROM oe_payments
1066       WHERE payment_trx_id = p_line_rec.commitment_id
1067       AND   line_id = p_line_rec.line_id;
1068 --serla begin
1069     END IF;
1070 --serla end
1071    END IF;
1072    IF l_debug_level  > 0 THEN
1073        oe_debug_pub.add(  ' COMMITMENT APPLIED : '||X_COMMITMENT_APPLIED , 1 ) ;
1074        oe_debug_pub.add(  ' COMMITMENT INTERFACED :'||X_COMMITMENT_INTERFACED , 1 ) ;
1075    END IF;
1076 EXCEPTION
1077    WHEN OTHERS THEN
1078         IF l_debug_level  > 0 THEN
1079             oe_debug_pub.add(  'EXCEPTION. EXITING GET_COMMITMENT_INFO ( 1 ) '||SQLERRM , 1 ) ;
1080         END IF;
1081         x_commitment_applied := NULL;
1082         x_commitment_interfaced := NULL;
1083 END Get_Commitment_Info;
1084 
1085 PROCEDURE Get_Item_Description
1086 (  p_line_rec           IN   OE_Order_Pub.Line_Rec_Type
1087 ,  x_item_description   OUT NOCOPY VARCHAR2
1088 ) IS
1089 l_organization_id NUMBER := oe_sys_parameters.value('MASTER_ORGANIZATION_ID', p_line_rec.org_id);
1090 --
1091 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1092 --
1093 l_item_description   VARCHAR2(240) := null ;
1094 BEGIN
1095    IF l_debug_level  > 0 THEN
1096        oe_debug_pub.add(  ' ENTERING GET_ITEM_DESCRIPTION ( ) ' , 5 ) ;
1097        oe_debug_pub.add(  ' Item Identifier Type :'||p_line_rec.item_identifier_type);
1098        oe_debug_pub.add('Inventory Item ID '||p_line_rec.inventory_item_id,5);
1099        oe_debug_pub.add('Organization ID '||l_organization_ID,5);
1100        oe_debug_pub.add('Ordered Item ID '||p_line_rec.ordered_item_id);
1101    END IF;
1102    IF    nvl(p_line_rec.item_identifier_type,'INT') = 'INT' THEN   -- Bug #3684306
1103          SELECT description
1104          INTO  x_item_description
1105          FROM  mtl_system_items_vl
1106          WHERE inventory_item_id =p_line_rec.inventory_item_id
1107          AND organization_id = l_organization_id;
1108    ELSIF nvl(p_line_rec.item_identifier_type,'INT') = 'CUST' THEN   -- Bug #3684306
1109 	-- changes for bug 4237123
1110          /*SELECT nvl(citems.customer_item_desc, sitems.description)
1111          INTO  x_item_description
1112          FROM  mtl_customer_items citems
1113               ,mtl_customer_item_xrefs cxref
1114               ,mtl_system_items_vl sitems
1115          WHERE citems.customer_item_id = cxref.customer_item_id
1116            AND cxref.inventory_item_id = sitems.inventory_item_id
1117            AND sitems.inventory_item_id = p_line_rec.inventory_item_id
1118            AND sitems.organization_id = l_organization_id
1119            AND citems.customer_item_id = p_line_rec.ordered_item_id
1120            AND citems.customer_id = p_line_rec.sold_to_org_id; */
1121 
1122 	SELECT citems.customer_item_desc INTO l_item_description
1123 	FROM mtl_customer_items citems
1124 	WHERE citems.customer_item_id = p_line_rec.ordered_item_id
1125            AND citems.customer_id = p_line_rec.sold_to_org_id;
1126 	if l_item_description is null then
1127 	      SELECT sitems.description INTO l_item_description
1128 	      FROM mtl_system_items_vl sitems
1129 	      WHERE sitems.inventory_item_id = p_line_rec.inventory_item_id
1130   	        and sitems.organization_id = l_organization_id ;
1131 	end if ;
1132 	x_item_description := l_item_description ;
1133    ELSE
1134          SELECT nvl(items.description, sitems.description)
1135          INTO x_item_description
1136          FROM  mtl_cross_reference_types types
1137              , mtl_cross_references items
1138              , mtl_system_items_vl sitems
1139          WHERE types.cross_reference_type = items.cross_reference_type
1140            AND items.inventory_item_id = sitems.inventory_item_id
1141            AND sitems.organization_id = l_organization_id
1142            AND sitems.inventory_item_id = p_line_rec.inventory_item_id
1143            AND items.cross_reference_type = p_line_rec.item_identifier_type
1144            AND items.cross_reference = p_line_rec.ordered_item
1145            AND ROWNUM = 1; -- Bug3333235
1146    END IF;
1147    IF l_debug_level  > 0 THEN
1148        oe_debug_pub.add(  'ITEM_DESCRIPTION : '||X_ITEM_DESCRIPTION ) ;
1149        oe_debug_pub.add(  ' EXITING GET_ITEM_DESCRIPTION: '||X_ITEM_DESCRIPTION , 1 ) ;
1150    END IF;
1151 EXCEPTION
1152    WHEN NO_DATA_FOUND THEN --added for bug 4191624
1153          IF l_debug_level  > 0 THEN
1154              oe_debug_pub.add('When no data found then get desc from system items '||SQLERRM,1);
1155          END IF;
1156 	SELECT sitems.description
1157         INTO x_item_description
1158 	FROM mtl_system_items_vl sitems
1159 	WHERE sitems.inventory_item_id = p_line_rec.inventory_item_id
1160 	  and sitems.organization_id = l_organization_id ;
1161    WHEN OTHERS THEN
1162          IF l_debug_level  > 0 THEN
1163              oe_debug_pub.add(  'EXCEPTION. GET ITEM DESCRIPTION '||SQLERRM , 1 ) ;
1164          END IF;
1165          NULL;
1166 END Get_Item_Description;
1167 
1168 PROCEDURE Get_Service_Item_Description
1169 (  p_line_rec           IN   OE_Order_Pub.Line_Rec_Type
1170 ,  x_item_description   OUT NOCOPY VARCHAR2
1171 ) IS
1172 l_line_rec OE_Order_Pub.Line_Rec_Type;
1173 l_order_line_id              NUMBER;
1174 l_return_status              VARCHAR2(1);
1175 l_service_reference_line_id  NUMBER;
1176 l_service_item_desc          VARCHAR2(240);
1177 l_item_serviced_desc         VARCHAR2(240) := null;
1178 
1179 /*Bug3261460-start*/
1180 l_inventory_item_id          NUMBER;
1181 l_ordered_item_id            NUMBER;
1182 l_sold_to_org_id             NUMBER;
1183 l_item_identifier_type       VARCHAR2(30);
1184 l_ordered_item               VARCHAR2(2000);
1185 l_org_id                     NUMBER;
1186 /*Bug3261460-end*/
1187 
1188 l_organization_id NUMBER := oe_sys_parameters.value('MASTER_ORGANIZATION_ID', p_line_rec.org_id);
1189 --
1190 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1191 --
1192 BEGIN
1193    IF l_debug_level  > 0 THEN
1194        oe_debug_pub.add(  ' ENTERING GET SERVICE ITEM DESCRIPTION ( ) ' , 5 ) ;
1195    END IF;
1196    IF p_line_rec.item_type_code = 'SERVICE' AND
1197       p_line_rec.service_reference_type_code='CUSTOMER_PRODUCT' AND
1198       p_line_rec.service_reference_line_id IS NOT NULL THEN
1199 	       IF l_debug_level  > 0 THEN
1200 	           oe_debug_pub.add(  'REFERENCED BY CUSTOMER PRODUCT' , 5 ) ;
1201 	       END IF;
1202 /* Commenting for bug# 5032978
1203            OE_SERVICE_UTIL.Get_Cust_Product_Line_Id
1204            ( x_return_status    => l_return_status
1205            , p_reference_line_id => p_line_rec.service_reference_line_id
1206            , p_customer_id       => p_line_rec.sold_to_org_id
1207            , x_cust_product_line_id => l_order_line_id
1208            );
1209            IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1210 		      IF l_debug_level  > 0 THEN
1211 		          oe_debug_pub.add(  'SERVICE LINE ID IS : ' || L_ORDER_LINE_ID , 5 ) ;
1212 		      END IF;
1213               l_service_reference_line_id := l_order_line_id;
1214            ELSE
1215               IF l_debug_level  > 0 THEN
1216                   oe_debug_pub.add(  'NOT ABLE TO RETRIEVE CUST PRODUCT LINE ID '||SQLERRM , 1 ) ;
1217               END IF;
1218 		      RAISE NO_DATA_FOUND;
1219            END IF;
1220  end commenting for bug# 5032978 */
1221         l_service_reference_line_id := NULL;
1222    ELSE
1223         l_service_reference_line_id := p_line_rec.service_reference_line_id;
1224    END IF;
1225    Get_Item_Description(p_line_rec, l_service_item_desc);
1226    IF l_service_reference_line_id IS NOT NULL THEN
1227    /*Bug3261460-Changes made to get the serviced item description*/
1228      -- l_line_rec := OE_LINE_UTIL.Query_Row(l_service_reference_line_id);
1229      -- Get_Item_Description(l_line_rec, l_item_serviced_desc);
1230       BEGIN
1231           select inventory_item_id,ordered_item_id,sold_to_org_id,item_identifier_type,ordered_item,org_id
1232           into l_inventory_item_id,l_ordered_item_id,l_sold_to_org_id,l_item_identifier_type,l_ordered_item,l_org_id
1233           from OE_ORDER_LINES_ALL
1234           where line_id = l_service_reference_line_id;
1235       EXCEPTION
1236          WHEN NO_DATA_FOUND THEN
1237             IF l_debug_level  > 0 THEN
1238                oe_debug_pub.add( 'NOT ABLE TO GET SERVICE LINE DETAILS', 1);
1239             END IF;
1240             l_item_identifier_type := NULL;
1241             l_inventory_item_id    := NULL;
1242             l_organization_id      := NULL;
1243       END;
1244           l_organization_id  :=  oe_sys_parameters.value('MASTER_ORGANIZATION_ID', l_org_id);
1245           oe_debug_pub.add('Executed  the first sql',1);
1246 	BEGIN  -- added for bug 4237123
1247           IF    nvl(l_item_identifier_type,'INT') = 'INT' THEN  -- Bug #3684306
1248                 oe_debug_pub.add('Item identifier type is INT',1);
1249              BEGIN
1250                 SELECT description
1251                 INTO l_item_serviced_desc
1252                 FROM  mtl_system_items_vl
1253                 WHERE inventory_item_id =l_inventory_item_id
1254                 AND organization_id = l_organization_id;
1255 	     EXCEPTION
1256                   WHEN NO_DATA_FOUND THEN
1257                     IF l_debug_level  > 0 THEN
1258                        oe_debug_pub.add( 'NO DATA FOUND IN SERVICE ITEM DESCRIPTION');
1259                     END IF;
1260                     l_item_serviced_desc := NULL;
1261                END;
1262           ELSIF nvl(l_item_identifier_type,'INT') = 'CUST' THEN  -- Bug #3684306
1263                 oe_debug_pub.add('Item Identifier typs is CUST',1);
1264 		-- changes for bug 4237123
1265                 /*SELECT nvl(citems.customer_item_desc, sitems.description)
1266                 INTO l_item_serviced_desc
1267                 FROM  mtl_customer_items citems
1268                 ,mtl_customer_item_xrefs cxref
1269                 ,mtl_system_items_vl sitems
1270                 WHERE citems.customer_item_id = cxref.customer_item_id
1271                 AND cxref.inventory_item_id = sitems.inventory_item_id
1272                 AND sitems.inventory_item_id = l_inventory_item_id
1273                 AND sitems.organization_id = l_organization_id
1274                 AND citems.customer_item_id = l_ordered_item_id
1275                 AND citems.customer_id = l_sold_to_org_id; */
1276 
1277 		SELECT citems.customer_item_desc INTO l_item_serviced_desc
1278 		FROM mtl_customer_items citems
1279 		WHERE citems.customer_item_id = l_ordered_item_id
1280         	   AND citems.customer_id = l_sold_to_org_id;
1281 		if l_item_serviced_desc is null then
1282 	      		SELECT sitems.description INTO l_item_serviced_desc
1283 	      		FROM mtl_system_items_vl sitems
1284 	     	 	WHERE sitems.inventory_item_id = l_inventory_item_id
1285   	       		 and sitems.organization_id = l_organization_id ;
1286 		end if ;
1287           ELSE
1288                 oe_debug_pub.add('In else part of item identifier type',1);
1289                 SELECT nvl(items.description, sitems.description)
1290                 INTO l_item_serviced_desc
1291                 FROM  mtl_cross_reference_types types
1292                 , mtl_cross_references items
1293                 , mtl_system_items_vl sitems
1294                 WHERE types.cross_reference_type = items.cross_reference_type
1295                 AND items.inventory_item_id = sitems.inventory_item_id
1296                 AND sitems.organization_id = l_organization_id
1297                 AND sitems.inventory_item_id = l_inventory_item_id
1298                 AND items.cross_reference_type = l_item_identifier_type
1299                 AND items.cross_reference = l_ordered_item
1300                 AND ROWNUM = 1; -- added for Bug 7583908
1301           END IF;
1302           OE_DEBUG_PUB.ADD('Item_Description of serviced item: '||l_item_serviced_desc);
1303 	EXCEPTION --aded for bug 4237123
1304 	    WHEN NO_DATA_FOUND THEN
1305 	        IF l_debug_level  > 0 THEN
1306 	             oe_debug_pub.add('When no data found then get desc from system items '||SQLERRM,1);
1307                 END IF;
1308 		SELECT sitems.description
1309         	INTO l_item_serviced_desc
1310 		FROM mtl_system_items_vl sitems
1311 		WHERE sitems.inventory_item_id = l_inventory_item_id
1312 		  and sitems.organization_id = l_organization_id ;
1313 	END ;
1314    END IF;
1315    x_item_description := substr(l_service_item_desc,1,90)||' - '||
1316            p_line_rec.ordered_quantity
1317            ||' '||substr(l_item_serviced_desc,1,90)||': '
1318            ||p_line_rec.service_start_date||' - '||p_line_rec.service_end_date ;
1319 
1320    IF l_debug_level  > 0 THEN
1321        oe_debug_pub.add(  'SERVICE ITEM_DESCRIPTION: '||X_ITEM_DESCRIPTION ) ;
1322        oe_debug_pub.add(  ' EXITING GET_SERVICE_ITEM_DESCRIPTION: '||X_ITEM_DESCRIPTION , 1 ) ;
1323    END IF;
1324 EXCEPTION
1325      WHEN OTHERS THEN
1326           IF l_debug_level  > 0 THEN
1327               oe_debug_pub.add(  'EXCEPTION. GET SERVICE ITEM DESCRIPTION ( ) '||SQLERRM , 1 ) ;
1328           END IF;
1329           NULL;
1330 END Get_Service_Item_Description;
1331 
1332 FUNCTION Get_Overship_Invoice_Basis
1333 (p_line_rec IN OE_Order_Pub.Line_Rec_Type)
1334 RETURN VARCHAR2
1335 IS
1336 l_overship_invoice_basis  VARCHAR2(30):= NULL;
1337 --
1338 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1339 --
1340 BEGIN
1341 /*
1342     Get l_overship_invoice_basis from control set
1343      1. Item
1344      2. Ship_to_site
1345      3. Customer
1346      4.Profile
1347 */
1348      IF l_debug_level  > 0 THEN
1349          oe_debug_pub.add(  ' ENTERING GET_OVERSHIP_INVOICE_BASIS' , 5 ) ;
1350      END IF;
1351      IF p_line_rec.ship_to_org_id IS NOT NULL THEN
1352         SELECT invoice_quantity_rule
1353         INTO l_overship_invoice_basis
1354         FROM hz_cust_site_uses
1355         WHERE site_use_id = p_line_rec.ship_to_org_id
1356         AND site_use_code = 'SHIP_TO';
1357         IF l_debug_level  > 0 THEN
1358             oe_debug_pub.add(  'OVERSHIP_INVOICE_BASIS ( 2 ) : '||L_OVERSHIP_INVOICE_BASIS , 5 ) ;
1359         END IF;
1360      END IF;
1361      IF l_overship_invoice_basis IS NULL THEN
1362         IF p_line_rec.sold_to_org_id IS NOT NULL THEN
1363 	       SELECT invoice_quantity_rule
1364 	       INTO l_overship_invoice_basis
1365   	       FROM hz_cust_accounts
1366 	       WHERE cust_account_id = p_line_rec.sold_to_org_id;
1367            IF l_debug_level  > 0 THEN
1368                oe_debug_pub.add(  'OVERSHIP_INVOICE_BASIS ( 1 ) : '||L_OVERSHIP_INVOICE_BASIS , 5 ) ;
1369            END IF;
1370         END IF;
1371      END IF;
1372      IF l_overship_invoice_basis IS NULL THEN
1373         l_overship_invoice_basis := oe_sys_parameters.value('OE_OVERSHIP_INVOICE_BASIS',p_line_rec.org_id); --moac
1374         IF l_debug_level  > 0 THEN
1375             oe_debug_pub.add(  'OVERSHIP_INVOICE_BASIS ( 3 ) : '||L_OVERSHIP_INVOICE_BASIS , 5 ) ;
1376         END IF;
1377      END IF;
1378      IF l_debug_level  > 0 THEN
1379          oe_debug_pub.add(  'OVERSHIP_INVOICE_BASIS: '||L_OVERSHIP_INVOICE_BASIS , 5 ) ;
1380          oe_debug_pub.add(  ' EXITING GET_OVERSHIP_INVOICE_BASIS: '||L_OVERSHIP_INVOICE_BASIS , 5 ) ;
1381      END IF;
1382      RETURN l_overship_invoice_basis;
1383 
1384 END Get_Overship_Invoice_Basis;
1385 
1386 FUNCTION Get_Invoice_Source
1387 (  p_line_rec IN OE_Order_Pub.Line_Rec_Type
1388 ,  p_interface_line_rec  IN  RA_Interface_Lines_Rec_Type
1389 )
1390 RETURN VARCHAR2
1391 IS
1392 l_invoice_source_id    NUMBER := NULL;
1393 l_invoice_source       VARCHAR2(50):= NULL;
1394 --
1395 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1396 --
1397 BEGIN
1398      IF l_debug_level  > 0 THEN
1399          oe_debug_pub.add(  ' ENTERING GET_INVOICE_SOURCE' , 5 ) ;
1400      END IF;
1401      IF FND_PROFILE.VALUE('WSH_INVOICE_NUMBERING_METHOD')=  'D' AND
1402         (Return_Line(p_line_rec) OR NOT Shipping_Info_Available(p_line_rec) OR
1403        (p_interface_line_rec.interface_line_attribute3 = '0')) THEN
1404            SELECT NVL(lt.non_delivery_invoice_source_id,
1405                   ot.non_delivery_invoice_source_id)
1406            INTO l_invoice_source_id
1407            FROM oe_line_types_v lt,
1408             oe_order_types_v ot,
1409             oe_order_headers_all oh /* MOAC SQL CHANGE */
1410            WHERE lt.line_type_id = p_line_rec.line_type_id
1411        AND   ot.order_type_id = oh.order_type_id
1412        AND   oh.header_id = p_line_rec.header_id;
1413        IF   l_invoice_source_id IS NOT NULL THEN
1414             SELECT name
1415             INTO l_invoice_source
1416             FROM ra_batch_sources
1417             WHERE batch_source_id = l_invoice_source_id;
1418             IF l_debug_level  > 0 THEN
1419                 oe_debug_pub.add(  'INVOICE_SOURCE IS ( 1 ) : '||L_INVOICE_SOURCE , 5 ) ;
1420             END IF;
1421             RETURN  l_invoice_source;
1422        ELSE
1423             l_invoice_source := oe_sys_parameters.value('OE_NON_DELIVERY_INVOICE_SOURCE',p_line_rec.org_id); --moac
1424             IF l_debug_level  > 0 THEN
1425                 oe_debug_pub.add(  'INVOICE_SOURCE IS ( 2 ) : '||L_INVOICE_SOURCE , 5 ) ;
1426             END IF;
1427             RETURN l_invoice_source;
1428        END IF;
1429      ELSE  -- Invoice numbering method is 'Automatic' OR 'delivery' with shipping information available
1430         SELECT NVL(lt.invoice_source_id,
1431                    ot.invoice_source_id)
1432 	INTO l_invoice_source_id
1433 	FROM oe_line_types_v lt,
1434              oe_order_types_v ot,
1435              oe_order_headers_all oh  /* MOAC SQL CHANGE */
1436 	    WHERE lt.line_type_id = p_line_rec.line_type_id
1437         AND   ot.order_type_id = oh.order_type_id
1438         AND   oh.header_id = p_line_rec.header_id;
1439         IF l_invoice_source_id IS NOT NULL THEN
1440            SELECT name
1441            INTO l_invoice_source
1442            FROM ra_batch_sources
1443            WHERE batch_source_id = l_invoice_source_id;
1444            IF l_debug_level  > 0 THEN
1445                oe_debug_pub.add(  'INVOICE SOURCE IS ( 3 ) : '||L_INVOICE_SOURCE , 5 ) ;
1446            END IF;
1447            RETURN  l_invoice_source;
1448         ELSE
1449            l_invoice_source := oe_sys_parameters.value('OE_INVOICE_SOURCE',p_line_rec.org_id); --moac
1450            IF l_debug_level  > 0 THEN
1451                oe_debug_pub.add(  'INVOICE_SOURCE IS ( 4 ) : '||L_INVOICE_SOURCE , 5 ) ;
1452            END IF;
1453            RETURN l_invoice_source;
1454         END IF;
1455      END IF;
1456     EXCEPTION
1457       WHEN OTHERS THEN
1458          IF l_debug_level  > 0 THEN
1459             oe_debug_pub.add(  'In Others of Function Get_Invoice_Source', 5);
1460          END IF;
1461          RETURN l_invoice_source;
1462 END Get_Invoice_Source;
1463 
1464 FUNCTION Get_Customer_Transaction_Type
1465 (  p_record IN OE_AK_ORDER_LINES_V%ROWTYPE
1466 ) RETURN NUMBER IS
1467 l_inv_cust_trx_type_id NUMBER;
1468 l_cust_trx_type_id NUMBER;
1469 l_creation_sign  VARCHAR2(30);
1470 l_line_rec OE_Order_Pub.Line_Rec_Type;
1471 --
1472 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1473 --
1474 BEGIN
1475   IF l_debug_level  > 0 THEN
1476       oe_debug_pub.add(  ' ENTER GET_CUSTOMER_TRANSACTION_TYPE' , 5 ) ;
1477   END IF;
1478   IF l_debug_level  > 0 THEN
1479       oe_debug_pub.add(  'Before the call to Rowtype_Rec_To_API_Rec ', 1);
1480   END IF;
1481       OE_Line_Util_Ext.Rowtype_Rec_To_API_Rec(p_record,l_line_rec);
1482   IF l_debug_level  > 0 THEN
1483       oe_debug_pub.add(  'After the call to Rowtype_Rec_To_API_Rec ', 1);
1484   END IF;
1485 
1486   l_cust_trx_type_id := Get_Customer_Transaction_Type(l_line_rec);
1487   RETURN(l_cust_trx_type_id);
1488 
1489 EXCEPTION
1490    WHEN OTHERS THEN
1491         IF l_debug_level  > 0 THEN
1492             oe_debug_pub.add(  'EXCEPTION. EXITING GET_CUSTOMER_TRANSACTION_TYPE ( ) , '||SQLERRM , 1 ) ;
1493         END IF;
1494         return(0);
1495 END Get_Customer_Transaction_Type;
1496 
1497 FUNCTION Get_Customer_Transaction_Type
1498 (  p_line_rec IN OE_Order_Pub.Line_Rec_Type
1499 ) RETURN NUMBER IS
1500 l_inv_cust_trx_type_id NUMBER;
1501 l_cust_trx_type_id NUMBER;
1502 l_creation_sign  VARCHAR2(30);
1503 --
1504 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1505 --
1506 BEGIN
1507   IF l_debug_level  > 0 THEN
1508       oe_debug_pub.add(  ' ENTER GET_CUSTOMER_TRANSACTION_TYPE' , 5 ) ;
1509   END IF;
1510 
1511       --use cache instead of SQL for bug 4200055
1512   IF ( p_line_rec.line_type_id is not null
1513 	    AND p_line_rec.line_type_id <> FND_API.G_MISS_NUM
1514                AND OE_Order_Cache.g_line_type_rec.line_type_id <> p_line_rec.Line_Type_id) THEN
1515 	  OE_Order_Cache.Load_Line_type(p_line_rec.Line_Type_id) ;
1516   END IF  ;   -- end
1517 
1518   IF NOT Return_Line(p_line_rec) THEN  -- Standard Order Line
1519      IF l_debug_level  > 0 THEN
1520          oe_debug_pub.add(  'THIS IA A STANDARD ORDER LINE' , 5 ) ;
1521      END IF;
1522      --use cache instead of SQL for bug 4200055
1523 	if (OE_Order_Cache.g_line_type_rec.line_type_id =  p_line_rec.Line_Type_id ) then
1524       	     l_cust_trx_type_id := nvl(OE_Order_Cache.g_line_type_rec.cust_trx_type_id,0) ;
1525 	else
1526 	     l_cust_trx_type_id := 0 ;
1527 	end if ;
1528      /*SELECT NVL(lt.cust_trx_type_id, 0)
1529      INTO   l_cust_trx_type_id
1530      FROM   oe_line_types_v lt
1531      WHERE  lt.line_type_id = p_line_rec.line_type_id; */
1532      -- end bug 4200055
1533      IF l_debug_level  > 0 THEN
1534          oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM LINE TYPE : '||L_CUST_TRX_TYPE_ID , 5 ) ;
1535      END IF;
1536      IF l_cust_trx_type_id = 0 THEN
1537         SELECT NVL(ot.cust_trx_type_id, 0)
1538         INTO   l_cust_trx_type_id
1539         FROM   oe_order_types_v ot,
1540                oe_order_headers_all oh  /* MOAC SQL CHANGE */
1541         WHERE  ot.order_type_id = oh.order_type_id
1542         AND    oh.header_id = p_line_rec.header_id;
1543         IF l_debug_level  > 0 THEN
1544             oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM ORDER TYPE : '||L_CUST_TRX_TYPE_ID , 5 ) ;
1545         END IF;
1546         IF l_cust_trx_type_id = 0 THEN
1547           SELECT NVL(oe_sys_parameters.value('OE_INVOICE_TRANSACTION_TYPE_ID',p_line_rec.org_id), 0) --moac
1548           INTO l_cust_trx_type_id
1549           FROM DUAL;
1550           IF l_debug_level  > 0 THEN
1551               oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM PROFILE : '||L_CUST_TRX_TYPE_ID , 5 ) ;
1552           END IF;
1553         END IF;
1554      END IF;
1555      IF l_debug_level  > 0 THEN
1556          oe_debug_pub.add(  'GET CUSTOMER TRANSACTION TYPE ( 1 ) : '||L_CUST_TRX_TYPE_ID , 5 ) ;
1557      END IF;
1558      RETURN(l_cust_trx_type_id);
1559   ELSIF p_line_rec.reference_line_id IS NOT NULL THEN -- Referenced Return Line
1560         IF l_debug_level  > 0 THEN
1561             oe_debug_pub.add(  'THIS IA A REFERENCED RETURN LINE' , 5 ) ;
1562         END IF;
1563         -- Get from reference line (Ignore l_creation_sign value here)
1564         Return_Credit_Info(p_line_rec, l_cust_trx_type_id, l_creation_sign);
1565         IF l_cust_trx_type_id = 0 THEN -- no cust_trx_type_id at line/order type
1566            SELECT OE_SYS_PARAMETERS.Value('OE_CREDIT_TRANSACTION_TYPE_ID',p_line_rec.org_id) --moac
1567            INTO l_cust_trx_type_id
1568            FROM DUAL;
1569            IF l_debug_level  > 0 THEN
1570                oe_debug_pub.add(  ' CUSTOMER TRANSACTION TYPE ID FROM PROFILE ' , 5 ) ;
1571            END IF;
1572         END IF;
1573         IF l_debug_level  > 0 THEN
1574             oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID ( 2 ) : '||L_CUST_TRX_TYPE_ID , 5 ) ;
1575         END IF;
1576         RETURN(l_cust_trx_type_id);
1577   ELSE -- Non Referenced Return Line
1578        IF l_debug_level  > 0 THEN
1579            oe_debug_pub.add(  'THIS IS A NON-REFERENCED RETURN LINE ' , 5 ) ;
1580        END IF;
1581         --use cache instead of SQL for bug 4200055
1582 	 if (OE_Order_Cache.g_line_type_rec.line_type_id =  p_line_rec.Line_Type_id ) then
1583              l_inv_cust_trx_type_id := nvl(OE_ORDER_CACHE.g_line_type_rec.cust_trx_type_id,0);
1584 	 else
1585 	     l_inv_cust_trx_type_id := 0 ;
1586 	 end if ;
1587        /*SELECT NVL(lt.cust_trx_type_id, 0)
1588        INTO   l_inv_cust_trx_type_id
1589        FROM   oe_line_types_v lt
1590        WHERE  lt.line_type_id = p_line_rec.line_type_id; */
1591        -- end bug 4200055
1592        IF l_debug_level  > 0 THEN
1593            oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM LINE TYPE : '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
1594        END IF;
1595    --Bug2293944 Removed the decode statement.
1596        IF l_inv_cust_trx_type_id = 0 THEN
1597           SELECT NVL(ot.cust_trx_type_id,0)
1598           INTO   l_inv_cust_trx_type_id
1599           FROM   oe_order_types_v ot,
1600                  oe_order_headers_all oh  /* MOAC SQL CHANGE */
1601           WHERE  ot.order_type_id = oh.order_type_id
1602           AND    oh.header_id = p_line_rec.header_id;
1603           IF l_debug_level  > 0 THEN
1604               oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM ORDER TYPE: '||L_INV_CUST_TRX_TYPE_ID , 5 ) ;
1605           END IF;
1606        END IF;
1607        IF l_inv_cust_trx_type_id <> 0 THEN
1608           IF l_debug_level  > 0 THEN
1609               oe_debug_pub.add(  'GET CREDIT MEMO TYPE ' , 5 ) ;
1610           END IF;
1611           SELECT nvl(ctt.credit_memo_type_id, 0)
1612           INTO l_cust_trx_type_id
1613           FROM ra_cust_trx_types_all ctt
1614           WHERE ctt.cust_trx_type_id = l_inv_cust_trx_type_id
1615           AND NVL(ctt.org_id, -3114) =  NVL(p_line_rec.org_id, -3114);
1616                        /*      DECODE(ctt.cust_trx_type_id,
1617                                        1, -3113,
1618                                        2, -3113,
1619                                        7, -3113,
1620                                        8, -3113,
1621                                        NVL(p_line_rec.org_id, -3114)); Commented for the bug 3027150 */
1622           IF l_debug_level  > 0 THEN
1623               oe_debug_pub.add(  'CREDIT MEMO TYPE FROM LINE TYPE/ORDER TYPE OF CURRENT LINE'||L_CUST_TRX_TYPE_ID , 5 ) ;
1624           END IF;
1625        END IF;
1626        IF l_inv_cust_trx_type_id = 0 OR l_cust_trx_type_id = 0 THEN
1627           SELECT NVL(oe_sys_parameters.value('OE_CREDIT_TRANSACTION_TYPE_ID',p_line_rec.org_id), 0) --moac
1628           INTO l_cust_trx_type_id
1629           FROM DUAL;
1630           IF l_debug_level  > 0 THEN
1631               oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID FROM PROFILE' , 5 ) ;
1632           END IF;
1633        END IF;
1634        IF l_debug_level  > 0 THEN
1635            oe_debug_pub.add(  'CUSTOMER TRANSACTION TYPE ID ( 3 ) : '||L_CUST_TRX_TYPE_ID , 5 ) ;
1636        END IF;
1637        RETURN(l_cust_trx_type_id);
1638   END IF;
1639 EXCEPTION
1640    WHEN OTHERS THEN
1641         IF l_debug_level  > 0 THEN
1642             oe_debug_pub.add(  'EXCEPTION. EXITING GET_CUSTOMER_TRANSACTION_TYPE ( ) , '||SQLERRM , 1 ) ;
1643         END IF;
1644         return(0);
1645 END Get_Customer_Transaction_Type;
1646 
1647 PROCEDURE Get_Credit_Method_Code
1648 (  p_line_rec IN OE_Order_Pub.Line_Rec_Type
1649 ,  x_accting_credit_method_code OUT NOCOPY VARCHAR2
1650 ,  x_invcing_credit_method_code OUT NOCOPY VARCHAR2
1651 ) IS
1652 l_accting_credit_method_code   VARCHAR2(30):= NULL;
1653 l_invcing_credit_method_code   VARCHAR2(30):= NULL;
1654 --
1655 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1656 --
1657 BEGIN
1658         IF l_debug_level  > 0 THEN
1659             oe_debug_pub.add(  'ENTERING GET_CREDIT_METHOD_CODE ( ) ' , 5 ) ;
1660         END IF;
1661         SELECT NVL(lt.accounting_credit_method_code,ot.accounting_credit_method_code),--Bug 5699774
1662                NVL(lt.invoicing_credit_method_code,ot.invoicing_credit_method_code) --Bug 5699774
1663         INTO   l_accting_credit_method_code,
1664                l_invcing_credit_method_code
1665         FROM   oe_line_types_v lt,
1666                oe_order_types_v ot,
1667                oe_order_headers_all oh  /* MOAC SQL CHANGE */
1668         WHERE  lt.line_type_id = p_line_rec.line_type_id
1669         AND    ot.order_type_id = oh.order_type_id
1670         AND    oh.header_id = p_line_rec.header_id;
1671         x_accting_credit_method_code := l_accting_credit_method_code;
1672         x_invcing_credit_method_code := l_invcing_credit_method_code;
1673         IF l_debug_level  > 0 THEN
1674             oe_debug_pub.add(  'ACCOUNTING CREDIT METHOD CODE : '||X_ACCTING_CREDIT_METHOD_CODE , 5 ) ;
1675             oe_debug_pub.add(  'INVOICING CREDIT METHOD CODE : '||X_INVCING_CREDIT_METHOD_CODE , 5 ) ;
1676             oe_debug_pub.add(  'EXITING GET_CREDIT_METHOD_CODE ' , 5 ) ;
1677         END IF;
1678 EXCEPTION
1679    WHEN OTHERS THEN
1680       IF l_debug_level  > 0 THEN
1681           oe_debug_pub.add(  'EXCEPTION. EXITING GET_CREDIT_METHOD_CODE ( ) '||SQLERRM , 1 ) ;
1682       END IF;
1683       x_accting_credit_method_code := 'LIFO';
1684       x_invcing_credit_method_code := 'LIFO';
1685 END Get_Credit_Method_Code;
1686 
1687 -- PTO RFR handling starts here
1688 FUNCTION Is_PTO
1689 (p_line_rec    IN OE_Order_Pub.Line_Rec_Type)
1690 RETURN BOOLEAN
1691 IS
1692 --
1693 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1694 --
1695 BEGIN
1696    IF p_line_rec.model_remnant_flag = 'Y' AND
1697       p_line_rec.item_type_code in ('MODEL', 'CLASS', 'OPTION', 'KIT', 'INCLUDED')
1698    THEN
1699       IF (p_line_rec.item_type_code = 'OPTION' AND
1700           p_line_rec.ato_line_id = p_line_rec.line_id ) OR
1701           p_line_rec.ato_line_id is NULL
1702       THEN
1703           IF l_debug_level  > 0 THEN
1704               oe_debug_pub.add(  'THIS IS A REMNANT PTO ' , 5 ) ;
1705           END IF;
1706           RETURN TRUE;
1707       ELSE
1708           IF l_debug_level  > 0 THEN
1709               oe_debug_pub.add(  'THIS IS NOT A REMNANT PTO ' , 5 ) ;
1710           END IF;
1711           RETURN FALSE;
1712       END IF;
1713    ELSE
1714       IF l_debug_level  > 0 THEN
1715           oe_debug_pub.add(  'THIS IS NOT REMNANT PTO ' , 5 ) ;
1716       END IF;
1717       RETURN FALSE;
1718    END IF;
1719 END Is_PTO;
1720 
1721 FUNCTION Is_Class
1722 (p_line_id IN NUMBER)
1723 RETURN BOOLEAN
1724 IS
1725 l_item_type_code VARCHAR2(30);
1726 --
1727 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1728 --
1729 BEGIN
1730     SELECT item_type_code
1731     INTO   l_item_type_code
1732     FROM   OE_ORDER_LINES
1733     WHERE  line_id = p_line_id;
1734     IF  l_item_type_code = 'CLASS' THEN
1735         IF l_debug_level  > 0 THEN
1736             oe_debug_pub.add(  'ITEM TYPE OF THIS LINE IS CLASS' , 5 ) ;
1737         END IF;
1738         RETURN TRUE;
1739     ELSE
1740         IF l_debug_level  > 0 THEN
1741             oe_debug_pub.add(  ' ITEM TYPE IS NOT CLASS' , 5 ) ;
1742         END IF;
1743         RETURN FALSE;
1744     END IF;
1745 EXCEPTION
1746     WHEN OTHERS THEN
1747          RETURN FALSE;
1748 END Is_Class;
1749 
1750 PROCEDURE RFR_Children
1751 (p_line_id    IN NUMBER,
1752  x_return_code OUT NOCOPY VARCHAR2,
1753  x_RFR_children_tbl OUT NOCOPY Id_Tbl_Type)
1754 IS
1755 Cursor rfr_child is
1756 SELECT line_id
1757 FROM   oe_order_lines Line,
1758        bom_inventory_components bic
1759 WHERE  Line.link_to_line_id = p_line_id
1760 AND    Line.open_flag || '' = 'Y'
1761 AND    bic.component_sequence_id = Line.component_sequence_id
1762 AND    bic.component_item_id = Line.inventory_item_id
1763 AND    bic.required_for_revenue = 1
1764 ORDER BY Line.inventory_item_id;
1765 /* the order by clause is important, do not remove!!! */
1766 I NUMBER := 1;
1767 --
1768 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1769 --
1770 BEGIN
1771    Open rfr_child;
1772    LOOP
1773      Fetch rfr_child into x_RFR_children_tbl(I);
1774      Exit WHEN rfr_child%NOTFOUND;
1775      I := I + 1;
1776    END LOOP;
1777    IF  x_RFR_children_tbl.count <> 0 THEN
1778        x_return_code := 'Y';
1779    ELSE
1780        x_return_code := 'N';
1781    END IF;
1782    Close rfr_child;
1783    IF l_debug_level  > 0 THEN
1784        oe_debug_pub.add(  'RFR CHILDREN , RETURN CODE IS '|| X_RETURN_CODE , 5 ) ;
1785    END IF;
1786 END RFR_Children;
1787 
1788 PROCEDURE RFR_Sibling
1789 (p_link_to_line_id IN NUMBER,
1790  p_line_inventory_item_id IN NUMBER,
1791  x_return_code OUT NOCOPY VARCHAR2,
1792  x_RFR_sibling_tbl OUT NOCOPY Id_Tbl_Type)
1793 IS
1794 
1795 -- we use inventory_item_id to select
1796 -- siblings, to prevent selecting splitted
1797 -- lines
1798 Cursor rfr_sibling is
1799 SELECT line_id
1800 FROM   oe_order_lines Line,
1801        bom_inventory_components bic
1802 WHERE  Line.link_to_line_id = p_link_to_line_id
1803 AND    Line.inventory_item_id <> p_line_inventory_item_id
1804 AND    Line.open_flag || '' = 'Y'
1805 AND    bic.component_sequence_id = Line.component_sequence_id
1806 AND    bic.component_item_id = Line.inventory_item_id
1807 AND    bic.required_for_revenue = 1
1808 order by Line.inventory_item_id;
1809 /* the order by clause is important, do not remove!!! */
1810 I NUMBER := 1;
1811 --
1812 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1813 --
1814 BEGIN
1815    Open rfr_sibling;
1816    LOOP
1817      Fetch rfr_sibling into x_RFR_sibling_tbl(I);
1818      Exit WHEN rfr_sibling%NOTFOUND;
1819      I := I + 1;
1820    END LOOP;
1821 
1822    IF x_RFR_sibling_tbl.count <> 0 THEN
1823       x_return_code := 'Y';
1824    ELSE
1825       x_return_code := 'N';
1826    END IF;
1827    Close rfr_sibling;
1828    IF l_debug_level  > 0 THEN
1829        oe_debug_pub.add(  'RFR SIBLING , RETURN CODE IS '|| X_RETURN_CODE , 1 ) ;
1830    END IF;
1831 END RFR_Sibling;
1832 
1833 FUNCTION Is_RFR
1834 (p_line_id IN NUMBER)
1835 RETURN BOOLEAN
1836 IS
1837 l_rfr VARCHAR2(1) := 'N';
1838 --
1839 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1840 --
1841 BEGIN
1842    SELECT 'Y'
1843    INTO l_rfr
1844    FROM oe_order_lines Line,
1845         bom_inventory_components bic
1846    WHERE Line.line_id = p_line_id
1847    AND Line.open_flag || '' = 'Y'
1848    AND bic.component_sequence_id = Line.component_sequence_id
1849    AND bic.component_item_id = Line.inventory_item_id
1850    AND bic.required_for_revenue = 1;
1851    IF l_rfr = 'Y' THEN
1852      IF l_debug_level  > 0 THEN
1853          oe_debug_pub.add(  'RFR RETURNING TRUE' , 5 ) ;
1854      END IF;
1855      RETURN TRUE;
1856    ELSE
1857      IF l_debug_level  > 0 THEN
1858          oe_debug_pub.add(  'RFR: RETURNING FALSE' , 5 ) ;
1859      END IF;
1860      RETURN FALSE;
1861    END IF;
1862 EXCEPTION
1863     WHEN OTHERS THEN
1864          RETURN FALSE;
1865 END Is_RFR;
1866 
1867 FUNCTION Something_To_Invoice
1868 (p_line_rec   IN OE_Order_Pub.Line_Rec_Type)
1869 RETURN BOOLEAN IS
1870 l_rfr_child_flag              VARCHAR2(1);
1871 l_rfr_sibling_flag            VARCHAR2(1);
1872 l_rfr_children_tbl            Id_Tbl_Type;
1873 l_rfr_sibling_tbl             Id_Tbl_Type;
1874 l_child_rec                   OE_Order_Pub.Line_Rec_type;
1875 l_sibling_rec                 OE_Order_Pub.Line_Rec_type;
1876 l_ratio                       NUMBER;
1877 max_to_invoice                NUMBER;
1878 qty_to_invoice                NUMBER;
1879 x_qty_to_invoice              NUMBER;
1880 i                             NUMBER;
1881 l_child_inventory_item_id     NUMBER := 0;
1882 l_child_total_ordered_qty     NUMBER;
1883 l_child_total_fulfilled_qty   NUMBER;
1884 l_sibling_inventory_item_id   NUMBER := 0;
1885 l_sibling_total_ordered_qty   NUMBER;
1886 l_sibling_total_fulfilled_qty NUMBER;
1887 l_total_ordered_qty           NUMBER;
1888 l_total_invoiced_qty          NUMBER;
1889 l_overship_invoice_basis      VARCHAR2(30);
1890 x_result_code                 VARCHAR2(240);
1891 --
1892 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1893 --
1894 BEGIN
1895          IF l_debug_level  > 0 THEN
1896              oe_debug_pub.add(  'RFR: IN SOMETHING_TO_INVOICE' , 5 ) ;
1897          END IF;
1898          IF (nvl(p_line_rec.ordered_quantity, 0) > nvl(p_line_rec.fulfilled_quantity, 0)) THEN
1899             qty_to_invoice := nvl(p_line_rec.ordered_quantity,0);
1900             x_qty_to_invoice := nvl(p_line_rec.ordered_quantity,0);
1901          ELSE -- initialize for overshipment cases
1902 	        qty_to_invoice := nvl(p_line_rec.fulfilled_quantity,0);
1903             x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0);
1904          END IF;
1905          RFR_Children(p_line_rec.line_id, l_rfr_child_flag, l_rfr_children_tbl);
1906          IF (l_rfr_child_flag = 'Y') THEN
1907             FOR i IN 1..l_rfr_children_tbl.count LOOP
1908                 OE_Line_Util.Query_Row(p_line_id => l_rfr_children_tbl(i), x_line_rec => l_child_rec);
1909                 IF l_child_rec.inventory_item_id <> l_child_inventory_item_id then
1910                    l_child_inventory_item_id := l_child_rec.inventory_item_id;
1911                    select nvl(sum(ordered_quantity), 0), nvl(sum(fulfilled_quantity), 0)
1912                    into   l_child_total_ordered_qty, l_child_total_fulfilled_qty
1913                    from   oe_order_lines
1914                    where  link_to_line_id = p_line_rec.line_id
1915                    and    inventory_item_id = l_child_inventory_item_id;
1916                    l_ratio := nvl(p_line_rec.ordered_quantity,0) / l_child_total_ordered_qty;
1917                    -- ordered_quantity must be according to ratio
1918                    Select Floor(nvl(l_child_total_fulfilled_qty, 0) * nvl(p_line_rec.ordered_quantity,0) / l_child_total_ordered_qty)
1919                    Into   max_to_invoice
1920                    From   dual;
1921                    IF max_to_invoice < qty_to_invoice THEN
1922                       IF l_debug_level  > 0 THEN
1923                           oe_debug_pub.add(  'RFR: MAX_TO_INVOICE < QTY_TO_INVOICE' , 5 ) ;
1924                       END IF;
1925                       qty_to_invoice := max_to_invoice;
1926                    END IF;
1927                   END IF; --if this is a new inventory_item_id
1928                END LOOP;
1929                IF nvl(p_line_rec.fulfilled_quantity,0) <= qty_to_invoice THEN
1930                   x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
1931                ELSIF nvl(p_line_rec.fulfilled_quantity, 0) > qty_to_invoice
1932                      AND qty_to_invoice < p_line_rec.ordered_quantity THEN
1933                      x_qty_to_invoice := qty_to_invoice - nvl(p_line_rec.invoiced_quantity, 0);
1934                ELSE -- full or overshipment
1935                   l_overship_invoice_basis := Get_Overship_Invoice_Basis(p_line_rec);
1936                   IF l_overship_invoice_basis = 'ORDERED' THEN
1937                      x_qty_to_invoice := qty_to_invoice - nvl(p_line_rec.invoiced_quantity, 0);
1938                   ELSE
1939                      x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
1940                   END IF;
1941                END IF;
1942           END IF;
1943           IF l_debug_level  > 0 THEN
1944               oe_debug_pub.add(  'RFR: FINISH CHECK CHILDREN' , 5 ) ;
1945           END IF;
1946           IF IS_CLASS(p_line_rec.link_to_line_id) THEN
1947                RFR_Sibling(p_line_rec.link_to_line_id,
1948                            p_line_rec.inventory_item_id,
1949                            l_rfr_sibling_flag, l_rfr_sibling_tbl);
1950                IF (l_rfr_sibling_flag = 'Y') THEN
1951                    FOR i IN 1..l_rfr_sibling_tbl.count LOOP
1952                       OE_Line_Util.Query_Row(p_line_id => l_rfr_sibling_tbl(i), x_line_rec =>l_sibling_rec );
1953                       IF l_sibling_rec.inventory_item_id <> l_sibling_inventory_item_id THEN
1954                          l_sibling_inventory_item_id := l_sibling_rec.inventory_item_id;
1955                          select nvl(sum(ordered_quantity), 0), nvl(sum(fulfilled_quantity), 0)
1956                          into   l_sibling_total_ordered_qty, l_sibling_total_fulfilled_qty
1957                          from   oe_order_lines
1958                          where  link_to_line_id = p_line_rec.link_to_line_id
1959                          and    inventory_item_id = l_sibling_inventory_item_id;
1960                          -- current line may be splitted from the original line
1961                          -- just like the sibling line may be splitted
1962                          select nvl(sum(ordered_quantity), 0), nvl(sum(invoiced_quantity), 0)
1963                          into   l_total_ordered_qty, l_total_invoiced_qty
1964                          from   oe_order_lines
1965                          where  link_to_line_id = p_line_rec.link_to_line_id
1966                          and    inventory_item_id = p_line_rec.inventory_item_id;
1967                          l_ratio := l_total_ordered_qty / l_sibling_total_ordered_qty;
1968                          -- ordered_quantity must be according to ratio
1969                          Select Floor(nvl(l_sibling_total_fulfilled_qty, 0) * l_total_ordered_qty / l_sibling_total_ordered_qty)
1970                          Into   max_to_invoice
1971                          From   dual;
1972                          IF max_to_invoice < qty_to_invoice THEN
1973                             qty_to_invoice := max_to_invoice;
1974                          END IF;
1975                       END IF; -- new inventory_item_id
1976                    END LOOP;
1977                    IF l_total_invoiced_qty < qty_to_invoice THEN
1978                       IF l_debug_level  > 0 THEN
1979                           oe_debug_pub.add(  'RFR: FULFILL < QTY_TO_INVOICE' , 4 ) ;
1980                       END IF;
1981                       IF (nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0)) <= (qty_to_invoice - l_total_invoiced_qty)
1982                          AND (nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0) < x_qty_to_invoice)  THEN
1983                             x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
1984                       ELSIF (nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0)) > (qty_to_invoice - l_total_invoiced_qty)
1985                       AND (qty_to_invoice - l_total_invoiced_qty < x_qty_to_invoice)
1986                       AND qty_to_invoice < l_total_ordered_qty THEN
1987                           x_qty_to_invoice := qty_to_invoice - l_total_invoiced_qty;
1988                           x_result_code := 'RFR-PENDING';
1989                       ELSIF (nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0)) > (qty_to_invoice - l_total_invoiced_qty)
1990                       AND (qty_to_invoice - l_total_invoiced_qty < x_qty_to_invoice)
1991                       AND qty_to_invoice >= l_total_ordered_qty THEN -- overshipment
1992                           l_overship_invoice_basis := Get_Overship_Invoice_Basis(p_line_rec);
1993                           IF l_overship_invoice_basis = 'ORDERED' THEN
1994                              x_qty_to_invoice := qty_to_invoice - l_total_invoiced_qty;
1995                           ELSE
1996                             x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
1997                           END IF;
1998                       END IF;
1999                   END IF;
2000                END IF;
2001           END IF;
2002           IF    nvl(p_line_rec.fulfilled_quantity, 0) <= qty_to_invoice THEN
2003                 x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
2004           ELSIF nvl(p_line_rec.fulfilled_quantity, 0) > qty_to_invoice
2005                 AND qty_to_invoice < nvl(p_line_rec.ordered_quantity, 0) THEN
2006                 x_qty_to_invoice := qty_to_invoice - nvl(p_line_rec.invoiced_quantity, 0);
2007           ELSE -- full or overshipment
2008                 l_overship_invoice_basis := Get_Overship_Invoice_Basis(p_line_rec);
2009                 IF l_overship_invoice_basis = 'ORDERED' THEN
2010                    x_qty_to_invoice := qty_to_invoice - nvl(p_line_rec.invoiced_quantity, 0);
2011                 ELSE
2012                    x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
2013                 END IF;
2014           END IF;
2015           IF x_qty_to_invoice > 0 THEN
2016               IF l_debug_level  > 0 THEN
2017                   oe_debug_pub.add(  ' SOMETHING_TO_INVOICE: RETURNING TRUE' , 5 ) ;
2018               END IF;
2019               RETURN TRUE;
2020           ELSE
2021               IF l_debug_level  > 0 THEN
2022                   oe_debug_pub.add(  ' SOMETHING_TO_INVOICE: RETURNING FALSE' , 5 ) ;
2023               END IF;
2024               RETURN FALSE;
2025           END IF;
2026 END Something_To_Invoice;
2027 
2028 PROCEDURE Get_Regular_Qty_To_Invoice
2029 (  p_line_rec    IN OE_Order_Pub.Line_Rec_Type
2030 ,  x_regular_qty_to_invoice   OUT NOCOPY NUMBER
2031 )
2032 IS
2033 l_overship_invoice_basis  VARCHAR2(30);
2034 l_fulfilled_qty  NUMBER;
2035 
2036 -- changes for bug 3728587 start
2037 l_unsplit_ordered_qty NUMBER;
2038 l_unsplit_fulfilled_qty NUMBER;
2039 l_unsplit_invoiced_qty NUMBER;
2040 l_temp NUMBER;
2041 l_set_type      VARCHAR2(30);
2042 -- changes for bug 3728587 end
2043 
2044 --
2045 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2046 --
2047 BEGIN
2048     -- This may subject to change based on fulfillment design
2049     -- This may subject to change for required for revenue cases as there are
2050     -- chances for partial invoicing (should be looking at invoiced_quantity)
2051 
2052      -- changes for bug 3728587 start
2053         --check if line is splitted or not
2054         if(p_line_rec.line_set_id is not null) then
2055                 select set_type into l_set_type from oe_sets where set_id = p_line_rec.line_set_id;
2056         end if;
2057         oe_debug_pub.add('l_set_type = '||l_set_type, 5 ) ;
2058 
2059         if(l_set_type = 'SPLIT') then
2060                 -- line is splitted
2061                 -- get the total amounts
2062                 select sum(nvl(ordered_quantity,0)), sum(nvl(fulfilled_quantity,nvl(shipped_quantity,0))), sum(nvl(invoiced_quantity,0))
2063                 into l_unsplit_ordered_qty ,  l_unsplit_fulfilled_qty, l_unsplit_invoiced_qty
2064                 from oe_order_lines_all where header_id = p_line_rec.header_id and line_set_id = p_line_rec.line_set_id;
2065         else
2066                 l_unsplit_ordered_qty := nvl(p_line_rec.ordered_quantity,0);
2067                 l_unsplit_fulfilled_qty := nvl(p_line_rec.fulfilled_quantity,nvl(p_line_rec.shipped_quantity,0));
2068                 l_unsplit_invoiced_qty := nvl(p_line_rec.invoiced_quantity,0);
2069         end if;
2070      -- changes for bug 3728587 end;
2071 
2072     IF l_debug_level  > 0 THEN
2073         oe_debug_pub.add(  'ENTER TO GET REGULAR QUANTITY TO INVOICE ' , 5 ) ;
2074         oe_debug_pub.add(  'FULFILLED QUANTITY = '|| TO_CHAR ( P_LINE_REC.FULFILLED_QUANTITY ) , 5 ) ;
2075         oe_debug_pub.add(  'SHIPPED QUANTITY = '|| TO_CHAR ( P_LINE_REC.SHIPPED_QUANTITY ) , 5 ) ;
2076         oe_debug_pub.add(  'ORDERED QUANTITY = '|| TO_CHAR ( P_LINE_REC.ORDERED_QUANTITY ) , 5 ) ;
2077                  -- changes for bug 3728587 end;
2078         oe_debug_pub.add(  'UNSPLIT ORDERED QUANTITY = '|| TO_CHAR ( l_unsplit_ordered_qty ) , 5 ) ;
2079         oe_debug_pub.add(  'UNSPLIT FULFILLED QUANTITY = '|| TO_CHAR ( l_unsplit_fulfilled_qty ) , 5 ) ;
2080         oe_debug_pub.add(  'UNSPLIT INVOICED QUANTITY = '|| TO_CHAR ( l_unsplit_invoiced_qty ) , 5 ) ;
2081                 -- changes for bug 3728587 end;
2082    END IF;
2083 
2084     IF p_line_rec.shipped_quantity IS NOT NULL THEN
2085       -- calculate quantity to invoice based on ship tolerances
2086       -- If we ship less than ship tolerance below, then the line will be split.
2087       l_fulfilled_qty := NVL(p_line_rec.fulfilled_quantity, NVL(p_line_rec.shipped_quantity, 0));
2088       IF l_debug_level  > 0 THEN
2089           oe_debug_pub.add(  'L_FULFILLED_QUANTITY = '|| L_FULFILLED_QTY , 5 ) ;
2090       END IF;
2091           -- changes for bug 3728587 start
2092       -- IF (l_fulfilled_qty <= nvl(p_line_rec.ordered_quantity, 0)) then
2093       IF (l_unsplit_fulfilled_qty <= nvl(l_unsplit_ordered_qty, 0)) then
2094           -- changes for bug 3728587 end
2095           x_regular_qty_to_invoice := l_fulfilled_qty - NVL(p_line_rec.invoiced_quantity, 0);
2096           IF l_debug_level  > 0 THEN
2097               oe_debug_pub.add(  'EXIT CALCUALTE_QTY_TO_INVOICE ( 1 ) : '||X_REGULAR_QTY_TO_INVOICE , 5 ) ;
2098           END IF;
2099           RETURN;
2100           -- changes for bug 3728587 start
2101       -- ELSIF ( l_fulfilled_qty > NVL(p_line_rec.ordered_quantity, 0)
2102       --		    AND (l_fulfilled_qty < (NVL(p_line_rec.ordered_quantity, 0) + (NVL(p_line_rec.ordered_quantity, 0) * NVL(p_line_rec.ship_tolerance_above, 0)))) ) THEN
2103       ELSIF ( l_unsplit_fulfilled_qty > NVL(l_unsplit_ordered_qty, 0)
2104                  AND (l_unsplit_fulfilled_qty <= (NVL(l_unsplit_ordered_qty, 0) + ((NVL(l_unsplit_ordered_qty, 0) * NVL(p_line_rec.ship_tolerance_above, 0))/100))) ) THEN
2105           -- changes for bug 3728587 end
2106                l_overship_invoice_basis := Get_Overship_Invoice_Basis(p_line_rec);
2107           IF l_overship_invoice_basis = 'ORDERED' THEN
2108              x_regular_qty_to_invoice := NVL(p_line_rec.ordered_quantity, 0) - NVL(p_line_rec.invoiced_quantity, 0);
2109              IF l_debug_level  > 0 THEN
2110                  oe_debug_pub.add(  'EXIT CALCUALTE_QTY_TO_INVOICE ( 2 ) : '||X_REGULAR_QTY_TO_INVOICE , 1 ) ;
2111              END IF;
2112              RETURN;
2113           ELSE   -- 'SHIPPED'
2114              x_regular_qty_to_invoice := l_fulfilled_qty - NVL(p_line_rec.invoiced_quantity, 0);
2115              IF l_debug_level  > 0 THEN
2116                  oe_debug_pub.add(  'EXIT CALCUALTE_QTY_TO_INVOICE ( 3 ) : '||X_REGULAR_QTY_TO_INVOICE , 5 ) ;
2117              END IF;
2118              RETURN;
2119           END IF;
2120        ELSE  -- overshipped (> ordered +tolerance), we only invoice up to the ordered + tolerance. user should manually handle the outstanding qtys
2121              -- changes for bug 3728587 start
2122              -- x_regular_qty_to_invoice := NVL(p_line_rec.ordered_quantity, 0) + (NVL(p_line_rec.ordered_quantity, 0) * NVL(p_line_rec.ship_tolerance_above, 0)) - NVL(p_line_rec.invoiced_quantity, 0);
2123 
2124              l_temp := NVL(l_unsplit_ordered_qty, 0) + ((NVL(l_unsplit_ordered_qty, 0) * NVL(p_line_rec.ship_tolerance_above, 0))/100) - NVL(l_unsplit_invoiced_qty, 0);
2125                          -- select min of l_temp and l_fulfilled_qty
2126                          if(l_temp<l_fulfilled_qty) then
2127                                 x_regular_qty_to_invoice := l_temp;
2128                          else
2129                                 x_regular_qty_to_invoice := l_fulfilled_qty;
2130                          end if;
2131              -- changes for bug 3728587 end
2132              -- Issue Message here. (overshipment above tolerance should be invoiced manually)
2133              IF l_debug_level  > 0 THEN
2134                  oe_debug_pub.add(  'QUANTITY TO INVOICE AT ( 4 ) = ' || TO_CHAR ( X_REGULAR_QTY_TO_INVOICE ) , 5 ) ;
2135              END IF;
2136              FND_MESSAGE.SET_NAME('ONT','OE_MANUAL_INVOICE_OVERSHIP_QTY');
2137              OE_MSG_PUB.ADD;
2138              IF l_debug_level  > 0 THEN
2139                  oe_debug_pub.add(  'EXIT CALCUALTE_QTY_TO_INVOICE ( 4 ) : '||X_REGULAR_QTY_TO_INVOICE , 5 ) ;
2140              END IF;
2141              RETURN;
2142        END IF;
2143     ELSE  -- no ship cycle
2144        l_fulfilled_qty := NVL(p_line_rec.fulfilled_quantity, NVL(p_line_rec.shipped_quantity, NVL(p_line_rec.ordered_quantity, 0)));
2145        x_regular_qty_to_invoice := l_fulfilled_qty - NVL(p_line_rec.invoiced_quantity, 0);
2146        IF l_debug_level  > 0 THEN
2147            oe_debug_pub.add(  'EXIT CALCUALTE_QTY_TO_INVOICE ( 5 ) : '||X_REGULAR_QTY_TO_INVOICE , 5 ) ;
2148        END IF;
2149        RETURN;
2150     END IF;
2151 END Get_Regular_Qty_To_Invoice;
2152 -- new OUT parameter x_return_code
2153 PROCEDURE Get_Qty_To_Invoice
2154 (p_line_rec    IN OE_Order_Pub.Line_Rec_Type
2155 ,  x_qty_to_invoice   OUT NOCOPY NUMBER
2156 ,  x_result_code OUT NOCOPY VARCHAR2
2157 )
2158 IS
2159 l_rfr_child_flag              VARCHAR2(1);
2160 l_rfr_sibling_flag            VARCHAR2(1);
2161 l_rfr_children_tbl            Id_Tbl_Type;
2162 l_rfr_sibling_tbl             Id_Tbl_Type;
2163 l_line_rec                    OE_Order_Pub.Line_Rec_Type;
2164 l_child_rec                   OE_Order_Pub.Line_Rec_Type;
2165 l_sibling_rec                 OE_Order_Pub.Line_Rec_Type;
2166 l_ratio                       NUMBER;
2167 max_to_invoice                NUMBER := 0;
2168 qty_to_invoice                NUMBER := 0;
2169 l_child_inventory_item_id     NUMBER := 0;
2170 l_child_total_ordered_qty     NUMBER := 0;
2171 l_child_total_fulfilled_qty   NUMBER := 0;
2172 l_sibling_inventory_item_id   NUMBER := 0;
2173 l_sibling_total_ordered_qty   NUMBER := 0;
2174 l_sibling_total_fulfilled_qty NUMBER := 0;
2175 l_total_ordered_qty           NUMBER := 0;
2176 l_total_invoiced_qty          NUMBER := 0;
2177 l_total_fulfilled_qty         NUMBER := 0;
2178 l_overship_invoice_basis      VARCHAR2(30);
2179 i                             NUMBER;
2180 l_fulfilled_qty               NUMBER;
2181 
2182 --
2183 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2184 --
2185 BEGIN
2186     IF l_debug_level  > 0 THEN
2187         oe_debug_pub.add(  'ENTER TO GET QUANTITY TO INVOICE ( ) ' , 5 ) ;
2188     END IF;
2189     x_result_code := 'NORMAL';
2190     l_fulfilled_qty := NVL(p_line_rec.fulfilled_quantity, NVL(p_line_rec.shipped_quantity, NVL(p_line_rec.ordered_quantity, 0)));
2191     IF Is_PTO(p_line_rec) THEN
2192          IF (nvl(p_line_Rec.ordered_quantity, 0) > l_fulfilled_qty) THEN
2193              qty_to_invoice := nvl(p_line_rec.ordered_quantity, 0);
2194              x_qty_to_invoice := nvl(p_line_rec.ordered_quantity, 0);
2195          ELSE -- initialize for overshipment cases
2196 	         qty_to_invoice := l_fulfilled_qty;
2197              x_qty_to_invoice := l_fulfilled_qty;
2198          END IF;
2199          RFR_Children(p_line_rec.line_id, l_rfr_child_flag, l_rfr_children_tbl);
2200          IF l_debug_level  > 0 THEN
2201              oe_debug_pub.add(  'RFR: QTY_TO_INVOICE: '||QTY_TO_INVOICE ||' L_RFR_CHILD_FLAG: '|| L_RFR_CHILD_FLAG , 5 ) ;
2202          END IF;
2203            IF (l_rfr_child_flag = 'Y') THEN
2204                FOR i IN 1..l_rfr_children_tbl.count LOOP
2205                    -- l_rfr_children_tbl is ordered by inventory_item_id
2206                    -- so same inventory_item_id will come next to each other
2207                    OE_Line_Util.Query_Row(p_line_id => l_rfr_children_tbl(i), x_line_rec => l_child_rec);
2208                    IF l_debug_level  > 0 THEN
2209                        oe_debug_pub.add(  'RFR: L_CHILD_REC.LINE_ID: '||L_CHILD_REC.LINE_ID ||' L_CHILD_REC.INVENTORY_ITEM_ID: '|| L_CHILD_REC.INVENTORY_ITEM_ID , 5 ) ;
2210                    END IF;
2211                    IF l_child_rec.inventory_item_id <> l_child_inventory_item_id then
2212                       l_child_inventory_item_id := l_child_rec.inventory_item_id;
2213                       select nvl(sum(ordered_quantity), 0), nvl(sum(fulfilled_quantity), 0)
2214                       into   l_child_total_ordered_qty, l_child_total_fulfilled_qty
2215                       from   oe_order_lines
2216                       where  link_to_line_id = p_line_rec.line_id
2217                       and    inventory_item_id = l_child_inventory_item_id;
2218                       IF l_debug_level  > 0 THEN
2219                           oe_debug_pub.add(  'RFR: L_CHILD_TOTAL_ORDERED_QTY: '||L_CHILD_TOTAL_ORDERED_QTY||' L_CHILD_TOTAL_FULFILLED_QTY:'||L_CHILD_TOTAL_FULFILLED_QTY , 5 ) ;
2220                       END IF;
2221                       l_ratio := nvl(p_line_rec.ordered_quantity, 0) / l_child_total_ordered_qty;
2222                       IF l_debug_level  > 0 THEN
2223                           oe_debug_pub.add(  'RFR:L_RATIO :'||L_RATIO , 5 ) ;
2224                       END IF;
2225                       -- ordered_quantity must be according to ratio
2226                       Select Floor(nvl(l_child_total_fulfilled_qty, 0) * nvl(p_line_rec.ordered_quantity, 0) / l_child_total_ordered_qty)
2227                       Into   max_to_invoice
2228                       From   dual;
2229                       IF l_debug_level  > 0 THEN
2230                           oe_debug_pub.add(  'RFR:MAX_TO_INVOICE: '||MAX_TO_INVOICE , 5 ) ;
2231                       END IF;
2232                       IF max_to_invoice < qty_to_invoice THEN
2233                          IF l_debug_level  > 0 THEN
2234                              oe_debug_pub.add(  'RFR: MAX_TO_INVOICE < QTY_TO_INVOICE' , 5 ) ;
2235                          END IF;
2236                          qty_to_invoice := max_to_invoice;
2237                       END IF;
2238                    END IF; -- if this is a new inventory_item_id
2239                END LOOP;
2240                IF l_debug_level  > 0 THEN
2241                    oe_debug_pub.add(  'RFR:FULFILLED_QUANTITY: '||P_LINE_REC.FULFILLED_QUANTITY||' QTY_TO_INVOICE:'||QTY_TO_INVOICE , 4 ) ;
2242                END IF;
2243                IF nvl(p_line_rec.fulfilled_quantity, 0) <= qty_to_invoice THEN
2244                   x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
2245                   IF l_debug_level  > 0 THEN
2246                       oe_debug_pub.add(  ' ( 1 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2247                   END IF;
2248                   IF l_debug_level  > 0 THEN
2249                       oe_debug_pub.add(  ' NOT SETTING TO RFR-PENDING' , 5 ) ;
2250                   END IF;
2251                ELSIF nvl(p_line_rec.fulfilled_quantity, 0) > qty_to_invoice
2252                      AND qty_to_invoice < nvl(p_line_rec.ordered_quantity, 0) THEN
2253                   x_qty_to_invoice := qty_to_invoice - nvl(p_line_rec.invoiced_quantity, 0);
2254                   IF l_debug_level  > 0 THEN
2255                       oe_debug_pub.add(  ' ( 2 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2256                       oe_debug_pub.add(  'SET X_RESULT_CODE -> RFR-PENDING' , 5 ) ;
2257                   END IF;
2258                   x_result_code := 'RFR-PENDING';
2259                ELSE -- full or overshipment
2260                   l_overship_invoice_basis := Get_Overship_Invoice_Basis(p_line_rec);
2261                   IF l_overship_invoice_basis = 'ORDERED' THEN
2262                      x_qty_to_invoice := qty_to_invoice - nvl(p_line_rec.invoiced_quantity, 0);
2263                      IF l_debug_level  > 0 THEN
2264                          oe_debug_pub.add(  ' ( 3 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2265                      END IF;
2266                   ELSE
2267                      x_qty_to_invoice := nvl(p_line_rec.fulfilled_quantity, 0) - nvl(p_line_rec.invoiced_quantity, 0);
2268                      IF l_debug_level  > 0 THEN
2269                          oe_debug_pub.add(  ' ( 4 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2270                      END IF;
2271                   END IF;
2272                END IF;
2273           ELSE -- no rfr children
2274                Get_Regular_Qty_To_Invoice(p_line_rec, x_qty_to_invoice);
2275                IF l_debug_level  > 0 THEN
2276                    oe_debug_pub.add(  ' ( 5 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2277                END IF;
2278           END IF;
2279           IF l_debug_level  > 0 THEN
2280               oe_debug_pub.add(  'RFR: FINISH CHECK CHILDREN' , 5 ) ;
2281           END IF;
2282 
2283           -- fix for bug 2516823
2284           IF IS_CLASS(p_line_rec.link_to_line_id) THEN
2285              RFR_Sibling(p_line_rec.link_to_line_id
2286                         ,p_line_rec.inventory_item_id
2287                         ,l_rfr_sibling_flag
2288                         ,l_rfr_sibling_tbl);
2289              IF l_rfr_sibling_flag = 'Y' THEN
2290                 FOR i IN 1..l_rfr_sibling_tbl.count LOOP
2291                     OE_Line_Util.Query_Row(p_line_id => l_rfr_sibling_tbl(i)
2292                                           ,x_line_rec => l_sibling_rec);
2293                        IF l_debug_level  > 0 THEN
2294                            oe_debug_pub.add(  'RFR:L_SIBLING_REC.LINE_ID: ' ||L_SIBLING_REC.LINE_ID ||' L_SIBLING_REC.INVENTORY_ITEM_ID:' ||L_SIBLING_REC.INVENTORY_ITEM_ID , 3 ) ;
2295                        END IF;
2296                     IF l_sibling_rec.inventory_item_id <> l_sibling_inventory_item_id THEN
2297                        l_sibling_inventory_item_id := l_sibling_rec.inventory_item_id;
2298                        SELECT NVL(SUM(ordered_quantity),0)
2299                              ,NVL(SUM(fulfilled_quantity),0)
2300                        INTO   l_sibling_total_ordered_qty
2301                              ,l_sibling_total_fulfilled_qty
2302                        FROM  oe_order_lines
2303                        WHERE link_to_line_id = p_line_rec.link_to_line_id
2304                        AND   inventory_item_id = l_sibling_inventory_item_id;
2305 
2306                        -- current line may be splitted from the original line
2307                        -- just like the sibling line may be splitted
2308 
2309                        SELECT NVL(SUM(ordered_quantity),0)
2310                              ,NVL(SUM(invoiced_quantity),0)
2311                              ,NVL(SUM(fulfilled_quantity),0)
2312                        INTO  l_total_ordered_qty
2313                             ,l_total_invoiced_qty
2314                             ,l_total_fulfilled_qty
2315                        FROM  oe_order_lines
2316                        WHERE link_to_line_id = p_line_rec.link_to_line_id
2317                        AND   inventory_item_id = p_line_rec.inventory_item_id;
2318 
2319                        l_ratio := l_total_ordered_qty/l_sibling_total_ordered_qty;
2320                         -- ordered_quantity must be according to ratio
2321                        max_to_invoice := FLOOR(nvl(l_sibling_total_fulfilled_qty,0) *l_total_ordered_qty / l_sibling_total_ordered_qty);
2322                        IF l_debug_level  > 0 THEN
2323                            oe_debug_pub.add(  'MAX_TO_INVOICE:'||MAX_TO_INVOICE||':QTY_TO_INVOICE:'||QTY_TO_INVOICE ) ;
2324                        END IF;
2325                        IF max_to_invoice < qty_to_invoice THEN
2326                           qty_to_invoice := max_to_invoice;
2327                        END IF;
2328                      END IF; -- new inventory_item_id
2329                    END LOOP;
2330 
2331                    IF l_debug_level  > 0 THEN
2332                        oe_debug_pub.add(  'L_TOTAL_INVOICED_QTY:'||L_TOTAL_INVOICED_QTY , 5 ) ;
2333                        oe_debug_pub.add(  'L_TOTAL_FULFILLED_QTY:'||L_TOTAL_FULFILLED_QTY , 5 ) ;
2334                        oe_debug_pub.add(  'QTY_TO_INVOICE:'||QTY_TO_INVOICE , 5 ) ;
2335                    END IF;
2336 
2337                    IF l_total_fulfilled_qty <= qty_to_invoice THEN
2338                       x_qty_to_invoice := l_total_fulfilled_qty
2339                                           - l_total_invoiced_qty;
2340                       IF l_debug_level  > 0 THEN
2341                           oe_debug_pub.add(  ' ( 5 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2342                       END IF;
2343                    ELSIF l_total_fulfilled_qty - l_total_invoiced_qty
2344                          > qty_to_invoice
2345                      AND qty_to_invoice <l_total_ordered_qty THEN
2346                          x_qty_to_invoice
2347                            := qty_to_invoice - l_total_invoiced_qty;
2348                          IF l_debug_level  > 0 THEN
2349                              oe_debug_pub.add(  ' ( 6 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2350                          END IF;
2351                          IF l_debug_level  > 0 THEN
2352                              oe_debug_pub.add(  'SET X_RESULT_CODE -> RFR-PENDING' , 5 ) ;
2353                          END IF;
2354                          x_result_code := 'RFR-PENDING';
2355                    ELSE
2356                        l_overship_invoice_basis := Get_Overship_Invoice_Basis(p_line_rec);
2357                        IF l_overship_invoice_basis = 'ORDERED' THEN
2358                          x_qty_to_invoice := qty_to_invoice - l_total_invoiced_qty;
2359                          IF l_debug_level  > 0 THEN
2360                              oe_debug_pub.add(  ' ( 7 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2361                          END IF;
2362                        ELSE
2363                          x_qty_to_invoice := l_total_fulfilled_qty - l_total_invoiced_qty;
2364                          IF l_debug_level  > 0 THEN
2365                              oe_debug_pub.add(  ' ( 8 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2366                          END IF;
2367                        END IF;
2368                     END IF;
2369            --  ELSE -- no siblings
2370            --    Get_Regular_Qty_To_Invoice(p_line_rec, x_qty_to_invoice);
2371              END IF;
2372           END IF;
2373     ELSE -- not pto
2374        Get_Regular_Qty_To_Invoice(p_line_rec, x_qty_to_invoice);
2375        IF l_debug_level  > 0 THEN
2376            oe_debug_pub.add(  ' ( 9 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2377        END IF;
2378     END IF;
2379     IF l_debug_level  > 0 THEN
2380         oe_debug_pub.add(  ' ( 10 ) QUANTITY TO INVOICE : '||X_QTY_TO_INVOICE , 5 ) ;
2381     END IF;
2382 END Get_Qty_To_Invoice;
2383 
2384 FUNCTION Validate_Required_Attributes
2385 (  p_line_rec             IN   OE_Order_Pub.Line_Rec_Type
2386 ,  p_interface_line_rec   IN   RA_Interface_Lines_Rec_Type
2387 )
2388 RETURN BOOLEAN
2389 IS
2390 --
2391 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2392 --
2393 BEGIN
2394    IF l_debug_level  > 0 THEN
2395        oe_debug_pub.add(  'VALIDATING REQUIRED ATTRIBUTES' , 5 ) ;
2396    END IF;
2397    -- Check For all Required Attributes
2398    IF    p_interface_line_rec.Batch_Source_Name IS NULL THEN
2399          FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2400 	     FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Batch_Source_Name');
2401          OE_MSG_PUB.ADD;
2402          IF l_debug_level  > 0 THEN
2403              oe_debug_pub.add(  'REQUIRED ATTRIBUTE BATCH SOURCE NAME IS MISSING' , 1 ) ;
2404          END IF;
2405          RETURN FALSE;
2406    ELSIF p_interface_line_rec.Set_Of_Books_Id IS NULL THEN
2407 	     FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2408 	     FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Set_Of_Books_Id');
2409          OE_MSG_PUB.ADD;
2410          IF l_debug_level  > 0 THEN
2411              oe_debug_pub.add(  'REQUIRED ATTRIBUTE SET OF BOOKS ID IS MISSING ' , 1 ) ;
2412          END IF;
2413          RETURN FALSE;
2414    ELSIF p_interface_line_rec.Line_Type IS NULL THEN
2415 	     FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2416 	     FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Line_Type');
2417          OE_MSG_PUB.ADD;
2418          IF l_debug_level  > 0 THEN
2419              oe_debug_pub.add(  'REQUIRED ATTRIBUTE LINE TYPE IS MISSING' , 1 ) ;
2420          END IF;
2421          RETURN FALSE;
2422    ELSIF p_interface_line_rec.Description IS NULL THEN
2423 	     FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2424 	     FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Description');
2425          OE_MSG_PUB.ADD;
2426          IF l_debug_level  > 0 THEN
2427              oe_debug_pub.add(  'REQUIRED ATTRIBUTE DESCRIPTION IS MISSING' , 1 ) ;
2428          END IF;
2429          RETURN FALSE;
2430    ELSIF p_interface_line_rec.Currency_Code IS NULL THEN
2431 	     FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2432 	     FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Currency_Code');
2433          OE_MSG_PUB.ADD;
2434          IF l_debug_level  > 0 THEN
2435              oe_debug_pub.add(  'REQUIRED ATTRIBUTE CURRENCY CODE IS MISSING' , 1 ) ;
2436          END IF;
2437          RETURN FALSE;
2438    ELSIF p_interface_line_rec.Conversion_Type IS NULL THEN
2439 	     FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2440 	     FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Conversion_Type');
2441          OE_MSG_PUB.ADD;
2442          IF l_debug_level  > 0 THEN
2443              oe_debug_pub.add(  'REQUIRED ATTRIBUTE CONVERSION TYPE IS MISSING' , 1 ) ;
2444          END IF;
2445          RETURN FALSE;
2446    ELSIF p_line_rec.commitment_id IS NULL AND
2447 	    (p_interface_line_rec.Cust_Trx_Type_Id IS NULL OR
2448          p_interface_line_rec.Cust_Trx_Type_Id = 0) THEN
2449          FND_MESSAGE.SET_NAME('ONT','OE_INVOICING_ATTR_REQUIRED');
2450          FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Cust_Trx_Type_Id');
2451          OE_MSG_PUB.ADD;
2452          IF l_debug_level  > 0 THEN
2453              oe_debug_pub.add(  'REQUIRED ATTRIBUTE CUSTOMER TRX TYPE ID IS MISSING' , 1 ) ;
2454          END IF;
2455          RETURN FALSE;
2456    ELSIF p_interface_line_rec.ACCOUNTING_RULE_DURATION = -1 THEN
2457          -- Appropriate message was already posted for bug#4190312
2458          IF l_debug_level  > 0 THEN
2459              oe_debug_pub.add(  'REQUIRED ATTRIBUTE ACCOUNTING RULE DURATION IS MISSING' , 1 ) ;
2460          END IF;
2461          RETURN FALSE;
2462    ELSIF p_interface_line_rec.customer_bank_account_id = -1 THEN
2463          FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_ACCT_NOT_SET');
2464          OE_MSG_PUB.ADD;
2465          IF l_debug_level  > 0 THEN
2466              oe_debug_pub.add(  'REQUIRED ATTRIBUTE CUSTOMER CREDIT CARD BANK ACCOUNT IS MISSING' , 1 ) ;
2467          END IF;
2468          RETURN FALSE;
2469    ELSIF p_interface_line_rec.customer_bank_account_id > 0
2470          AND p_interface_line_rec.receipt_method_id IS NULL THEN
2471 	     FND_MESSAGE.SET_NAME('ONT','OE_VPM_NO_PAY_METHOD');
2472          OE_MSG_PUB.ADD;
2473          IF l_debug_level  > 0 THEN
2474              oe_debug_pub.add(  'REQUIRED ATTRIBUTE PAYMENT METHOD IS MISSING' , 1 ) ;
2475          END IF;
2476          RETURN FALSE;
2477 
2478          /* ELSIF  -- will be updated with list of mandatory and conditionally required attributes
2479            Mandatory Columns:
2480            Batch_Source_Name
2481            Set_Of_Books_Id
2482            Line_Type
2483            Description
2484            Currency_Code
2485            Conversion_Type
2486 
2487            Optional columns:
2488            Term_Id is required for non credit transactions
2489            IF any thing is missing THEN
2490               -- Issue error message here
2491               RETURN FALSE;*/
2492    ELSE
2493           IF l_debug_level  > 0 THEN
2494               oe_debug_pub.add(  'EXIT VALIDATE REQUIRED ATTRIBUTES ( ) ' , 1 ) ;
2495           END IF;
2496           RETURN TRUE;
2497    END IF;
2498 END Validate_Required_Attributes;
2499 
2500 PROCEDURE Header_Invoicing_Validation
2501 (p_header_id  IN NUMBER)
2502 IS
2503 --
2504 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2505 --
2506 BEGIN
2507    /*
2508    -- Following may be a result of wrong workflow setup
2509    if atleast one line is not ready for Invoicing then
2510       issue error message
2511    elsif atleast one line is already invoiced then
2512       issue error message
2513    Add any other validation here
2514    */
2515    IF l_debug_level  > 0 THEN
2516        oe_debug_pub.add(  'ENTERING HEADER_INVOICING_VALIDATION' ) ;
2517    END IF;
2518    NULL;
2519 END Header_Invoicing_Validation;
2520 
2521 PROCEDURE Query_Line_Scredits
2522 ( p_line_id          IN NUMBER
2523 , p_quota_flag       IN VARCHAR2
2524 , x_line_scredit_tbl IN OUT NOCOPY OE_Order_Pub.Line_Scredit_Tbl_Type
2525 , x_total_percent OUT NOCOPY NUMBER --FP bug 3872166
2526 ) IS
2527 l_Line_Scredit_rec OE_Order_PUB.Line_Scredit_Rec_Type;
2528 CURSOR l_Line_Scredit_csr IS
2529     SELECT  SC.ATTRIBUTE1
2530     ,       SC.ATTRIBUTE10
2531     ,       SC.ATTRIBUTE11
2532     ,       SC.ATTRIBUTE12
2533     ,       SC.ATTRIBUTE13
2534     ,       SC.ATTRIBUTE14
2535     ,       SC.ATTRIBUTE15
2536     ,       SC.ATTRIBUTE2
2537     ,       SC.ATTRIBUTE3
2538     ,       SC.ATTRIBUTE4
2539     ,       SC.ATTRIBUTE5
2540     ,       SC.ATTRIBUTE6
2541     ,       SC.ATTRIBUTE7
2542     ,       SC.ATTRIBUTE8
2543     ,       SC.ATTRIBUTE9
2544     ,       SC.CONTEXT
2545     ,       SC.CREATED_BY
2546     ,       SC.CREATION_DATE
2547     ,       SC.DW_UPDATE_ADVICE_FLAG
2548     ,       SC.HEADER_ID
2549     ,       SC.LAST_UPDATED_BY
2550     ,       SC.LAST_UPDATE_DATE
2551     ,       SC.LAST_UPDATE_LOGIN
2552     ,       SC.LINE_ID
2553     ,       SC.PERCENT
2554     ,       SC.SALESREP_ID
2555     ,       SC.sales_credit_type_id
2556     ,       SC.SALES_CREDIT_ID
2557     ,       SC.WH_UPDATE_DATE
2558 --SG{
2559     ,       SC.SALES_GROUP_ID
2560 --SG}
2561     ,       SC.LOCK_CONTROL
2562     FROM    OE_SALES_CREDITS SC
2563     ,       OE_SALES_CREDIT_TYPES SCT
2564     WHERE   SC.sales_credit_type_id = sct.sales_credit_type_id
2565     AND     SCT.quota_flag = p_quota_flag
2566     AND     SC.line_id = p_line_id;
2567 
2568 --
2569 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2570 --
2571 BEGIN
2572     IF l_debug_level  > 0 THEN
2573         oe_debug_pub.add(  'ENTERING QUERY_LINE_SCREDITS' , 5 ) ;
2574     END IF;
2575     -- Initialize table so that it clears previous records
2576     x_line_scredit_tbl.DELETE;
2577 
2578     --FP bug 3872166
2579     x_total_percent := 0;
2580 
2581     --  Loop over fetched records
2582     FOR l_implicit_rec IN l_Line_Scredit_csr LOOP
2583         l_Line_Scredit_rec.attribute1  := l_implicit_rec.ATTRIBUTE1;
2584         l_Line_Scredit_rec.attribute10 := l_implicit_rec.ATTRIBUTE10;
2585         l_Line_Scredit_rec.attribute11 := l_implicit_rec.ATTRIBUTE11;
2586         l_Line_Scredit_rec.attribute12 := l_implicit_rec.ATTRIBUTE12;
2587         l_Line_Scredit_rec.attribute13 := l_implicit_rec.ATTRIBUTE13;
2588         l_Line_Scredit_rec.attribute14 := l_implicit_rec.ATTRIBUTE14;
2589         l_Line_Scredit_rec.attribute15 := l_implicit_rec.ATTRIBUTE15;
2590         l_Line_Scredit_rec.attribute2  := l_implicit_rec.ATTRIBUTE2;
2591         l_Line_Scredit_rec.attribute3  := l_implicit_rec.ATTRIBUTE3;
2592         l_Line_Scredit_rec.attribute4  := l_implicit_rec.ATTRIBUTE4;
2593         l_Line_Scredit_rec.attribute5  := l_implicit_rec.ATTRIBUTE5;
2594         l_Line_Scredit_rec.attribute6  := l_implicit_rec.ATTRIBUTE6;
2595         l_Line_Scredit_rec.attribute7  := l_implicit_rec.ATTRIBUTE7;
2596         l_Line_Scredit_rec.attribute8  := l_implicit_rec.ATTRIBUTE8;
2597         l_Line_Scredit_rec.attribute9  := l_implicit_rec.ATTRIBUTE9;
2598         l_Line_Scredit_rec.context     := l_implicit_rec.CONTEXT;
2599         l_Line_Scredit_rec.created_by  := l_implicit_rec.CREATED_BY;
2600         l_Line_Scredit_rec.creation_date := l_implicit_rec.CREATION_DATE;
2601         l_Line_Scredit_rec.dw_update_advice_flag := l_implicit_rec.DW_UPDATE_ADVICE_FLAG;
2602         l_Line_Scredit_rec.header_id   := l_implicit_rec.HEADER_ID;
2603         l_Line_Scredit_rec.last_updated_by := l_implicit_rec.LAST_UPDATED_BY;
2604         l_Line_Scredit_rec.last_update_date := l_implicit_rec.LAST_UPDATE_DATE;
2605         l_Line_Scredit_rec.last_update_login := l_implicit_rec.LAST_UPDATE_LOGIN;
2606         l_Line_Scredit_rec.line_id     := l_implicit_rec.LINE_ID;
2607         l_Line_Scredit_rec.percent     := l_implicit_rec.PERCENT;
2608         l_Line_Scredit_rec.salesrep_id := l_implicit_rec.SALESREP_ID;
2609         l_Line_Scredit_rec.sales_credit_type_id := l_implicit_rec.sales_credit_type_id;
2610         l_Line_Scredit_rec.sales_credit_id := l_implicit_rec.SALES_CREDIT_ID;
2611         l_Line_Scredit_rec.wh_update_date := l_implicit_rec.WH_UPDATE_DATE;
2612         --SG{
2613         l_Line_Scredit_rec.sales_group_id:=l_implicit_rec.sales_group_id;
2614         --SG}
2615         l_Line_Scredit_rec.lock_control := l_implicit_rec.LOCK_CONTROL;
2616         x_Line_Scredit_tbl(x_Line_Scredit_tbl.COUNT + 1) := l_Line_Scredit_rec;
2617 	--FP bug 3872166
2618 	x_total_percent := x_total_percent + l_implicit_rec.PERCENT;
2619     END LOOP;
2620     IF l_debug_level  > 0 THEN
2621         oe_debug_pub.add(  'EXITING QUERY_LINE_SCREDITS' , 5 ) ;
2622     END IF;
2623 EXCEPTION
2624     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2625          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2626     WHEN OTHERS THEN
2627          IF l_debug_level  > 0 THEN
2628              oe_debug_pub.add(  'EXCEPTION , QUERY LINE SALES CREDITS '||SQLERRM , 1 ) ;
2629          END IF;
2630          IF oe_msg_pub.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2631          THEN
2632             oe_msg_pub.Add_Exc_Msg
2633             (   G_PKG_NAME
2634             ,   'Query_Line_Scredits'
2635             );
2636          END IF;
2637          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2638 END Query_Line_Scredits;
2639 
2640 PROCEDURE Query_Header_Scredits
2641 ( p_header_id IN NUMBER
2642 , p_quota_flag  IN VARCHAR2
2643 , x_header_scredit_tbl IN OUT NOCOPY OE_Order_Pub.Header_Scredit_Tbl_Type
2644 ) IS
2645 l_Header_Scredit_rec            OE_Order_PUB.Header_Scredit_Rec_Type;
2646 CURSOR l_Header_Scredit_csr IS
2647     SELECT  SC.ATTRIBUTE1
2648     ,       SC.ATTRIBUTE10
2649     ,       SC.ATTRIBUTE11
2650     ,       SC.ATTRIBUTE12
2651     ,       SC.ATTRIBUTE13
2652     ,       SC.ATTRIBUTE14
2653     ,       SC.ATTRIBUTE15
2654     ,       SC.ATTRIBUTE2
2655     ,       SC.ATTRIBUTE3
2656     ,       SC.ATTRIBUTE4
2657     ,       SC.ATTRIBUTE5
2658     ,       SC.ATTRIBUTE6
2659     ,       SC.ATTRIBUTE7
2660     ,       SC.ATTRIBUTE8
2661     ,       SC.ATTRIBUTE9
2662     ,       SC.CONTEXT
2663     ,       SC.CREATED_BY
2664     ,       SC.CREATION_DATE
2665     ,       SC.DW_UPDATE_ADVICE_FLAG
2666     ,       SC.HEADER_ID
2667     ,       SC.LAST_UPDATED_BY
2668     ,       SC.LAST_UPDATE_DATE
2669     ,       SC.LAST_UPDATE_LOGIN
2670     ,       SC.LINE_ID
2671     ,       SC.PERCENT
2672     ,       SC.SALESREP_ID
2673     ,       SC.sales_credit_type_id
2674     ,       SC.SALES_CREDIT_ID
2675     ,       SC.WH_UPDATE_DATE
2676     --SG
2677     ,       SC.Sales_Group_Id
2678     --SG
2679     ,       SC.LOCK_CONTROL
2680     FROM    OE_SALES_CREDITS SC
2681     ,       OE_SALES_CREDIT_TYPES SCT
2682     WHERE   SC.sales_credit_type_id = sct.sales_credit_type_id
2683     AND     SCT.quota_flag = p_quota_flag
2684     AND     SC.header_id = p_header_id
2685     AND     SC.line_id IS NULL;
2686     --
2687     l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2688     --
2689 BEGIN
2690     IF l_debug_level  > 0 THEN
2691         oe_debug_pub.add(  'ENTERING QUERY_HEADER_SCREDITS' , 5 ) ;
2692         oe_debug_pub.add(  'P_QUOTA_FLAG: '||P_QUOTA_FLAG , 5 ) ;
2693     END IF;
2694     -- Initialize table so that it clears previous records
2695     x_header_scredit_tbl.DELETE;
2696     --  Loop over fetched records
2697     FOR l_implicit_rec IN l_Header_Scredit_csr LOOP
2698         l_Header_Scredit_rec.attribute1  := l_implicit_rec.ATTRIBUTE1;
2699         l_Header_Scredit_rec.attribute10 := l_implicit_rec.ATTRIBUTE10;
2700         l_Header_Scredit_rec.attribute11 := l_implicit_rec.ATTRIBUTE11;
2701         l_Header_Scredit_rec.attribute12 := l_implicit_rec.ATTRIBUTE12;
2702         l_Header_Scredit_rec.attribute13 := l_implicit_rec.ATTRIBUTE13;
2703         l_Header_Scredit_rec.attribute14 := l_implicit_rec.ATTRIBUTE14;
2704         l_Header_Scredit_rec.attribute15 := l_implicit_rec.ATTRIBUTE15;
2705         l_Header_Scredit_rec.attribute2  := l_implicit_rec.ATTRIBUTE2;
2706         l_Header_Scredit_rec.attribute3  := l_implicit_rec.ATTRIBUTE3;
2707         l_Header_Scredit_rec.attribute4  := l_implicit_rec.ATTRIBUTE4;
2708         l_Header_Scredit_rec.attribute5  := l_implicit_rec.ATTRIBUTE5;
2709         l_Header_Scredit_rec.attribute6  := l_implicit_rec.ATTRIBUTE6;
2710         l_Header_Scredit_rec.attribute7  := l_implicit_rec.ATTRIBUTE7;
2711         l_Header_Scredit_rec.attribute8  := l_implicit_rec.ATTRIBUTE8;
2712         l_Header_Scredit_rec.attribute9  := l_implicit_rec.ATTRIBUTE9;
2713         l_Header_Scredit_rec.context     := l_implicit_rec.CONTEXT;
2714         l_Header_Scredit_rec.created_by  := l_implicit_rec.CREATED_BY;
2715         l_Header_Scredit_rec.creation_date := l_implicit_rec.CREATION_DATE;
2716         l_Header_Scredit_rec.dw_update_advice_flag := l_implicit_rec.DW_UPDATE_ADVICE_FLAG;
2717         l_Header_Scredit_rec.header_id   := l_implicit_rec.HEADER_ID;
2718         l_Header_Scredit_rec.last_updated_by := l_implicit_rec.LAST_UPDATED_BY;
2719         l_Header_Scredit_rec.last_update_date := l_implicit_rec.LAST_UPDATE_DATE;
2720         l_Header_Scredit_rec.last_update_login := l_implicit_rec.LAST_UPDATE_LOGIN;
2721         l_Header_Scredit_rec.line_id     := l_implicit_rec.LINE_ID;
2722         l_Header_Scredit_rec.percent     := l_implicit_rec.PERCENT;
2723         l_Header_Scredit_rec.salesrep_id := l_implicit_rec.SALESREP_ID;
2724         l_Header_Scredit_rec.sales_credit_type_id := l_implicit_rec.sales_credit_type_id;
2725         l_Header_Scredit_rec.sales_credit_id := l_implicit_rec.SALES_CREDIT_ID;
2726         l_Header_Scredit_rec.wh_update_date := l_implicit_rec.WH_UPDATE_DATE;
2727         --sg
2728         l_Header_Scredit_rec.sales_group_id := l_implicit_rec.sales_group_id;
2729         --sg
2730         l_Header_Scredit_rec.lock_control := l_implicit_rec.LOCK_CONTROL;
2731         x_Header_Scredit_tbl(x_Header_Scredit_tbl.COUNT + 1) := l_Header_Scredit_rec;
2732         IF l_debug_level  > 0 THEN
2733             oe_debug_pub.add(  'SALESREP_ID: '||L_HEADER_SCREDIT_REC.SALESREP_ID ) ;
2734             oe_debug_pub.add(  'SALES_CREDIT_TYPE_ID: '||L_HEADER_SCREDIT_REC.SALES_CREDIT_TYPE_ID ) ;
2735             oe_debug_pub.add(  'PERCENT: '||L_HEADER_SCREDIT_REC.PERCENT ) ;
2736         END IF;
2737     END LOOP;
2738     IF l_debug_level  > 0 THEN
2739         oe_debug_pub.add(  'EXITING QUERY_HEADER_SCREDITS ( ) ' , 5 ) ;
2740     END IF;
2741 EXCEPTION
2742     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2743          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2744     WHEN OTHERS THEN
2745          IF l_debug_level  > 0 THEN
2746              oe_debug_pub.add(  'EXCEPTION , QUERY HEADER SALES CREDITS ( ) ' , 5 ) ;
2747          END IF;
2748          IF oe_msg_pub.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2749          THEN
2750             oe_msg_pub.Add_Exc_Msg
2751             (   G_PKG_NAME
2752             ,   'Query_Header_Scredits'
2753             );
2754          END IF;
2755          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2756 END Query_Header_Scredits;
2757 
2758 PROCEDURE Insert_Line
2759 (  p_interface_line_rec   IN  RA_interface_Lines_Rec_Type
2760 ,  x_return_status        OUT NOCOPY VARCHAR2
2761 ) IS
2762 update_sql_stmt VARCHAR2(32767);
2763 /* START PREPAYMENT */
2764 update_sql_stmt1 VARCHAR2(32767);
2765 /* END PREPAYMENT */
2766 err_msg  VARCHAR2(5000);
2767 l_rowid UROWID;
2768 --
2769 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2770 --
2771 BEGIN
2772    IF l_debug_level  > 0 THEN
2773        oe_debug_pub.add(  'ENTERING INSERT_LINE ( ) PROCEDURE' , 1 ) ;
2774    END IF;
2775    INSERT INTO RA_INTERFACE_LINES_ALL
2776                     (CREATED_BY
2777                      ,CREATION_DATE
2778                      ,LAST_UPDATED_BY
2779                      ,LAST_UPDATE_DATE
2780                      ,INTERFACE_LINE_ATTRIBUTE1
2781                      ,INTERFACE_LINE_ATTRIBUTE2
2782                      ,INTERFACE_LINE_ATTRIBUTE3
2783                      ,INTERFACE_LINE_ATTRIBUTE4
2784                      ,INTERFACE_LINE_ATTRIBUTE5
2785                      ,INTERFACE_LINE_ATTRIBUTE6
2786                      ,INTERFACE_LINE_ATTRIBUTE7
2787                      ,INTERFACE_LINE_ATTRIBUTE8
2788                      ,INTERFACE_LINE_ATTRIBUTE9
2789                      ,INTERFACE_LINE_ATTRIBUTE10
2790                      ,INTERFACE_LINE_ATTRIBUTE11
2791                      ,INTERFACE_LINE_ATTRIBUTE12
2792                      ,INTERFACE_LINE_ATTRIBUTE13
2793                      ,INTERFACE_LINE_ATTRIBUTE14
2794                      ,INTERFACE_LINE_ATTRIBUTE15
2795                      ,INTERFACE_LINE_ID
2796                      ,INTERFACE_LINE_CONTEXT
2797                      ,WAREHOUSE_ID
2798                      ,BATCH_SOURCE_NAME
2799                      ,SET_OF_BOOKS_ID
2800                      ,LINE_TYPE
2801                      ,DESCRIPTION
2802                      ,CURRENCY_CODE
2803                      ,AMOUNT
2804                      ,CONVERSION_TYPE
2805                      ,CONVERSION_DATE
2806                      ,CONVERSION_RATE
2807                      ,CUST_TRX_TYPE_NAME
2808                      ,CUST_TRX_TYPE_ID
2809                      ,TERM_NAME
2810                      ,TERM_ID
2811                      ,ORIG_SYSTEM_BILL_CUSTOMER_REF
2812                      ,ORIG_SYSTEM_BILL_CUSTOMER_ID
2813                      ,ORIG_SYSTEM_BILL_ADDRESS_REF
2814                      ,ORIG_SYSTEM_BILL_ADDRESS_ID
2815                      ,ORIG_SYSTEM_BILL_CONTACT_REF
2816                      ,ORIG_SYSTEM_BILL_CONTACT_ID
2817                      ,ORIG_SYSTEM_SHIP_CUSTOMER_REF
2818                      ,ORIG_SYSTEM_SHIP_CUSTOMER_ID
2819                      ,ORIG_SYSTEM_SHIP_ADDRESS_REF
2820                      ,ORIG_SYSTEM_SHIP_ADDRESS_ID
2821                      ,ORIG_SYSTEM_SHIP_CONTACT_REF
2822                      ,ORIG_SYSTEM_SHIP_CONTACT_ID
2823                      ,ORIG_SYSTEM_SOLD_CUSTOMER_REF
2824                      ,ORIG_SYSTEM_SOLD_CUSTOMER_ID
2825                      ,LINK_TO_LINE_ID
2826                      ,LINK_TO_LINE_CONTEXT
2827                      ,LINK_TO_LINE_ATTRIBUTE1
2828                      ,LINK_TO_LINE_ATTRIBUTE2
2829                      ,LINK_TO_LINE_ATTRIBUTE3
2830                      ,LINK_TO_LINE_ATTRIBUTE4
2831                      ,LINK_TO_LINE_ATTRIBUTE5
2832                      ,LINK_TO_LINE_ATTRIBUTE6
2833                      ,LINK_TO_LINE_ATTRIBUTE7
2834                      ,LINK_TO_LINE_ATTRIBUTE8
2835                      ,LINK_TO_LINE_ATTRIBUTE9
2836                      ,LINK_TO_LINE_ATTRIBUTE10
2837                      ,LINK_TO_LINE_ATTRIBUTE11
2838                      ,LINK_TO_LINE_ATTRIBUTE12
2839                      ,LINK_TO_LINE_ATTRIBUTE13
2840                      ,LINK_TO_LINE_ATTRIBUTE14
2841                      ,LINK_TO_LINE_ATTRIBUTE15
2842                      ,RECEIPT_METHOD_NAME
2843                      ,RECEIPT_METHOD_ID
2844                   -- ,CUSTOMER_BANK_ACCOUNT_ID   -- R12 cc encryption
2845                   -- ,CUSTOMER_BANK_ACCOUNT_NAME
2846                   -- ,PAYMENT_SERVER_ORDER_NUM
2847                   -- ,APPROVAL_CODE
2848                      ,CUSTOMER_TRX_ID
2849                      ,TRX_DATE
2850                      ,GL_DATE
2851                      ,DOCUMENT_NUMBER
2852                      ,DOCUMENT_NUMBER_SEQUENCE_ID
2853                      ,TRX_NUMBER
2854                      ,QUANTITY
2855                      ,QUANTITY_ORDERED
2856                      ,UNIT_SELLING_PRICE
2857                      ,UNIT_STANDARD_PRICE
2858                      ,UOM_CODE
2859                      ,UOM_NAME
2860                      ,PRINTING_OPTION
2861                      ,INTERFACE_STATUS
2862                      ,REQUEST_ID
2863                      ,RELATED_BATCH_SOURCE_NAME
2864                      ,RELATED_TRX_NUMBER
2865                      ,RELATED_CUSTOMER_TRX_ID
2866                      ,PREVIOUS_CUSTOMER_TRX_ID
2867                      ,INITIAL_CUSTOMER_TRX_ID
2868                      ,CREDIT_METHOD_FOR_ACCT_RULE
2869                      ,CREDIT_METHOD_FOR_INSTALLMENTS
2870                      ,REASON_CODE_MEANING
2871                      ,REASON_CODE
2872                      ,TAX_RATE
2873                      ,TAX_CODE
2874                      ,TAX_PRECEDENCE
2875                      ,TAX_EXEMPT_FLAG
2876                      ,TAX_EXEMPT_NUMBER
2877                      ,TAX_EXEMPT_REASON_CODE
2878                      ,EXCEPTION_ID
2879                      ,EXEMPTION_ID
2880                      ,SHIP_DATE_ACTUAL
2881                      ,FOB_POINT
2882                      ,SHIP_VIA
2883                      ,WAYBILL_NUMBER
2884                      ,INVOICING_RULE_NAME
2885                      ,INVOICING_RULE_ID
2886                      ,ACCOUNTING_RULE_NAME
2887                      ,ACCOUNTING_RULE_ID
2888                      ,ACCOUNTING_RULE_DURATION
2889                      ,RULE_START_DATE
2890 		     ,RULE_END_DATE --bug5336618
2891                      ,PRIMARY_SALESREP_NUMBER
2892                      ,PRIMARY_SALESREP_ID
2893                      ,SALES_ORDER
2894                      ,SALES_ORDER_LINE
2895                      ,SALES_ORDER_DATE
2896                      ,SALES_ORDER_SOURCE
2897                      ,SALES_ORDER_REVISION
2898                      ,PURCHASE_ORDER
2899                      ,PURCHASE_ORDER_REVISION
2900                      ,PURCHASE_ORDER_DATE
2901                      ,AGREEMENT_NAME
2902                      ,AGREEMENT_ID
2903                      ,MEMO_LINE_NAME
2904                      ,MEMO_LINE_ID
2905                      ,INVENTORY_ITEM_ID
2906                      ,MTL_SYSTEM_ITEMS_SEG1
2907                      ,MTL_SYSTEM_ITEMS_SEG2
2908                      ,MTL_SYSTEM_ITEMS_SEG3
2909                      ,MTL_SYSTEM_ITEMS_SEG4
2910                      ,MTL_SYSTEM_ITEMS_SEG5
2911                      ,MTL_SYSTEM_ITEMS_SEG6
2912                      ,MTL_SYSTEM_ITEMS_SEG7
2913                      ,MTL_SYSTEM_ITEMS_SEG8
2914                      ,MTL_SYSTEM_ITEMS_SEG9
2915                      ,MTL_SYSTEM_ITEMS_SEG10
2916                      ,MTL_SYSTEM_ITEMS_SEG11
2917                      ,MTL_SYSTEM_ITEMS_SEG12
2918                      ,MTL_SYSTEM_ITEMS_SEG13
2919                      ,MTL_SYSTEM_ITEMS_SEG14
2920                      ,MTL_SYSTEM_ITEMS_SEG15
2921                      ,MTL_SYSTEM_ITEMS_SEG16
2922                      ,MTL_SYSTEM_ITEMS_SEG17
2923                      ,MTL_SYSTEM_ITEMS_SEG18
2924                      ,MTL_SYSTEM_ITEMS_SEG19
2925                      ,MTL_SYSTEM_ITEMS_SEG20
2926                      ,REFERENCE_LINE_ID
2927                      ,REFERENCE_LINE_CONTEXT
2928                      ,REFERENCE_LINE_ATTRIBUTE1
2929                      ,REFERENCE_LINE_ATTRIBUTE2
2930                      ,REFERENCE_LINE_ATTRIBUTE3
2931                      ,REFERENCE_LINE_ATTRIBUTE4
2932                      ,REFERENCE_LINE_ATTRIBUTE5
2933                      ,REFERENCE_LINE_ATTRIBUTE6
2934                      ,REFERENCE_LINE_ATTRIBUTE7
2935                      ,REFERENCE_LINE_ATTRIBUTE8
2936                      ,REFERENCE_LINE_ATTRIBUTE9
2937                      ,REFERENCE_LINE_ATTRIBUTE10
2938                      ,REFERENCE_LINE_ATTRIBUTE11
2939                      ,REFERENCE_LINE_ATTRIBUTE12
2940                      ,REFERENCE_LINE_ATTRIBUTE13
2941                      ,REFERENCE_LINE_ATTRIBUTE14
2942                      ,REFERENCE_LINE_ATTRIBUTE15
2943                      ,TERRITORY_ID
2944                      ,TERRITORY_SEGMENT1
2945                      ,TERRITORY_SEGMENT2
2946                      ,TERRITORY_SEGMENT3
2947                      ,TERRITORY_SEGMENT4
2948                      ,TERRITORY_SEGMENT5
2949                      ,TERRITORY_SEGMENT6
2950                      ,TERRITORY_SEGMENT7
2951                      ,TERRITORY_SEGMENT8
2952                      ,TERRITORY_SEGMENT9
2953                      ,TERRITORY_SEGMENT10
2954                      ,TERRITORY_SEGMENT11
2955                      ,TERRITORY_SEGMENT12
2956                      ,TERRITORY_SEGMENT13
2957                      ,TERRITORY_SEGMENT14
2958                      ,TERRITORY_SEGMENT15
2959                      ,TERRITORY_SEGMENT16
2960                      ,TERRITORY_SEGMENT17
2961                      ,TERRITORY_SEGMENT18
2962                      ,TERRITORY_SEGMENT19
2963                      ,TERRITORY_SEGMENT20
2964                      ,ATTRIBUTE_CATEGORY
2965                      ,ATTRIBUTE1
2966                      ,ATTRIBUTE2
2967                      ,ATTRIBUTE3
2968                      ,ATTRIBUTE4
2969                      ,ATTRIBUTE5
2970                      ,ATTRIBUTE6
2971                      ,ATTRIBUTE7
2972                      ,ATTRIBUTE8
2973                      ,ATTRIBUTE9
2974                      ,ATTRIBUTE10
2975                      ,ATTRIBUTE11
2976                      ,ATTRIBUTE12
2977                      ,ATTRIBUTE13
2978                      ,ATTRIBUTE14
2979                      ,ATTRIBUTE15
2980                      ,HEADER_ATTRIBUTE_CATEGORY
2981                      ,HEADER_ATTRIBUTE1
2982                      ,HEADER_ATTRIBUTE2
2983                      ,HEADER_ATTRIBUTE3
2984                      ,HEADER_ATTRIBUTE4
2985                      ,HEADER_ATTRIBUTE5
2986                      ,HEADER_ATTRIBUTE6
2987                      ,HEADER_ATTRIBUTE7
2988                      ,HEADER_ATTRIBUTE8
2989                      ,HEADER_ATTRIBUTE9
2990                      ,HEADER_ATTRIBUTE10
2991                      ,HEADER_ATTRIBUTE11
2992                      ,HEADER_ATTRIBUTE12
2993                      ,HEADER_ATTRIBUTE13
2994                      ,HEADER_ATTRIBUTE14
2995                      ,HEADER_ATTRIBUTE15
2996                      ,COMMENTS
2997                      ,INTERNAL_NOTES
2998                      ,MOVEMENT_ID
2999                      ,ORG_ID
3000                      ,HEADER_GDF_ATTR_CATEGORY
3001                      ,HEADER_GDF_ATTRIBUTE1
3002                      ,HEADER_GDF_ATTRIBUTE2
3003                      ,HEADER_GDF_ATTRIBUTE3
3004                      ,HEADER_GDF_ATTRIBUTE4
3005                      ,HEADER_GDF_ATTRIBUTE5
3006                      ,HEADER_GDF_ATTRIBUTE6
3007                      ,HEADER_GDF_ATTRIBUTE7
3008                      ,HEADER_GDF_ATTRIBUTE8
3009                      ,HEADER_GDF_ATTRIBUTE9
3010                      ,HEADER_GDF_ATTRIBUTE10
3011                      ,HEADER_GDF_ATTRIBUTE11
3012                      ,HEADER_GDF_ATTRIBUTE12
3013                      ,HEADER_GDF_ATTRIBUTE13
3014                      ,HEADER_GDF_ATTRIBUTE14
3015                      ,HEADER_GDF_ATTRIBUTE15
3016                      ,HEADER_GDF_ATTRIBUTE16
3017                      ,HEADER_GDF_ATTRIBUTE17
3018                      ,HEADER_GDF_ATTRIBUTE18
3019                      ,HEADER_GDF_ATTRIBUTE19
3020                      ,HEADER_GDF_ATTRIBUTE20
3021                      ,HEADER_GDF_ATTRIBUTE21
3022                      ,HEADER_GDF_ATTRIBUTE22
3023                      ,HEADER_GDF_ATTRIBUTE23
3024                      ,HEADER_GDF_ATTRIBUTE24
3025                      ,HEADER_GDF_ATTRIBUTE25
3026                      ,HEADER_GDF_ATTRIBUTE26
3027                      ,HEADER_GDF_ATTRIBUTE27
3028                      ,HEADER_GDF_ATTRIBUTE28
3029                      ,HEADER_GDF_ATTRIBUTE29
3030                      ,HEADER_GDF_ATTRIBUTE30
3031                      ,LINE_GDF_ATTR_CATEGORY
3032                      ,LINE_GDF_ATTRIBUTE1
3033                      ,LINE_GDF_ATTRIBUTE2
3034                      ,LINE_GDF_ATTRIBUTE3
3035                      ,LINE_GDF_ATTRIBUTE4
3036                      ,LINE_GDF_ATTRIBUTE5
3037                      ,LINE_GDF_ATTRIBUTE6
3038                      ,LINE_GDF_ATTRIBUTE7
3039                      ,LINE_GDF_ATTRIBUTE8
3040                      ,LINE_GDF_ATTRIBUTE9
3041                      ,LINE_GDF_ATTRIBUTE10
3042                      ,LINE_GDF_ATTRIBUTE11
3043                      ,LINE_GDF_ATTRIBUTE12
3044                      ,LINE_GDF_ATTRIBUTE13
3045                      ,LINE_GDF_ATTRIBUTE14
3046                      ,LINE_GDF_ATTRIBUTE15
3047                      ,LINE_GDF_ATTRIBUTE16
3048                      ,LINE_GDF_ATTRIBUTE17
3049                      ,LINE_GDF_ATTRIBUTE18
3050                      ,LINE_GDF_ATTRIBUTE19
3051                      ,LINE_GDF_ATTRIBUTE20
3052                      ,TRANSLATED_DESCRIPTION
3053                      ,PAYMENT_TRXN_EXTENSION_ID
3054                      ,PARENT_LINE_ID
3055                      ,DEFERRAL_EXCLUSION_FLAG
3056                      )
3057               VALUES (
3058                       p_interface_line_rec.CREATED_BY
3059                      ,p_interface_line_rec.CREATION_DATE
3060                      ,p_interface_line_rec.LAST_UPDATED_BY
3061                      ,p_interface_line_rec.LAST_UPDATE_DATE
3062                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1
3063                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2
3064                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3
3065                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4
3066                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5
3067                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE6
3068                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7
3069                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8
3070                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9
3071                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE10
3072                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE11
3073                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE12
3074                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE13
3075                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE14
3076                      ,p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE15
3077                      ,p_interface_line_rec.INTERFACE_LINE_ID
3078                      ,p_interface_line_rec.INTERFACE_LINE_CONTEXT
3079                      ,p_interface_line_rec.WAREHOUSE_ID
3080                      ,p_interface_line_rec.BATCH_SOURCE_NAME
3081                      ,p_interface_line_rec.SET_OF_BOOKS_ID
3082                      ,p_interface_line_rec.LINE_TYPE
3083                      ,p_interface_line_rec.DESCRIPTION
3084                      ,p_interface_line_rec.CURRENCY_CODE
3085                      ,p_interface_line_rec.AMOUNT
3086                      ,p_interface_line_rec.CONVERSION_TYPE
3087                      ,p_interface_line_rec.CONVERSION_DATE
3088                      ,p_interface_line_rec.CONVERSION_RATE
3089                      ,p_interface_line_rec.CUST_TRX_TYPE_NAME
3090                      ,p_interface_line_rec.CUST_TRX_TYPE_ID
3091                      ,p_interface_line_rec.TERM_NAME
3092                      ,p_interface_line_rec.TERM_ID
3093                      ,p_interface_line_rec.ORIG_SYSTEM_BILL_CUSTOMER_REF
3094                      ,p_interface_line_rec.ORIG_SYSTEM_BILL_CUSTOMER_ID
3095                      ,p_interface_line_rec.ORIG_SYSTEM_BILL_ADDRESS_REF
3096                      ,p_interface_line_rec.ORIG_SYSTEM_BILL_ADDRESS_ID
3097                      ,p_interface_line_rec.ORIG_SYSTEM_BILL_CONTACT_REF
3098                      ,p_interface_line_rec.ORIG_SYSTEM_BILL_CONTACT_ID
3099                      ,p_interface_line_rec.ORIG_SYSTEM_SHIP_CUSTOMER_REF
3100                      ,p_interface_line_rec.ORIG_SYSTEM_SHIP_CUSTOMER_ID
3101                      ,p_interface_line_rec.ORIG_SYSTEM_SHIP_ADDRESS_REF
3102                      ,p_interface_line_rec.ORIG_SYSTEM_SHIP_ADDRESS_ID
3103                      ,p_interface_line_rec.ORIG_SYSTEM_SHIP_CONTACT_REF
3104                      ,p_interface_line_rec.ORIG_SYSTEM_SHIP_CONTACT_ID
3105                      ,p_interface_line_rec.ORIG_SYSTEM_SOLD_CUSTOMER_REF
3106                      ,p_interface_line_rec.ORIG_SYSTEM_SOLD_CUSTOMER_ID
3107                      ,p_interface_line_rec.LINK_TO_LINE_ID
3108                      ,p_interface_line_rec.LINK_TO_LINE_CONTEXT
3109                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE1
3110                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE2
3111                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE3
3112                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE4
3113                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE5
3114                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE6
3115                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE7
3116                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE8
3117                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE9
3118                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE10
3119                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE11
3120                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE12
3121                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE13
3122                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE14
3123                      ,p_interface_line_rec.LINK_TO_LINE_ATTRIBUTE15
3124                      ,p_interface_line_rec.RECEIPT_METHOD_NAME
3125                      ,p_interface_line_rec.RECEIPT_METHOD_ID
3126                   -- ,p_interface_line_rec.CUSTOMER_BANK_ACCOUNT_ID    -- R12 cc encryption
3127                   -- ,p_interface_line_rec.CUSTOMER_BANK_ACCOUNT_NAME
3128                   -- ,p_interface_line_rec.PAYMENT_SERVER_ORDER_NUM
3129                   -- ,p_interface_line_rec.APPROVAL_CODE
3130                      ,p_interface_line_rec.CUSTOMER_TRX_ID
3131                      ,p_interface_line_rec.TRX_DATE
3132                      ,p_interface_line_rec.GL_DATE
3133                      ,p_interface_line_rec.DOCUMENT_NUMBER
3134                      ,p_interface_line_rec.DOCUMENT_NUMBER_SEQUENCE_ID
3135                      ,p_interface_line_rec.TRX_NUMBER
3136                      ,p_interface_line_rec.QUANTITY
3137                      ,p_interface_line_rec.QUANTITY_ORDERED
3138                      ,p_interface_line_rec.UNIT_SELLING_PRICE
3139                      ,p_interface_line_rec.UNIT_STANDARD_PRICE
3140                      ,p_interface_line_rec.UOM_CODE
3141                      ,p_interface_line_rec.UOM_NAME
3142                      ,p_interface_line_rec.PRINTING_OPTION
3143                      ,p_interface_line_rec.INTERFACE_STATUS
3144                      ,p_interface_line_rec.REQUEST_ID
3145                      ,p_interface_line_rec.RELATED_BATCH_SOURCE_NAME
3146                      ,p_interface_line_rec.RELATED_TRX_NUMBER
3147                      ,p_interface_line_rec.RELATED_CUSTOMER_TRX_ID
3148                      ,p_interface_line_rec.PREVIOUS_CUSTOMER_TRX_ID
3149                      ,p_interface_line_rec.INITIAL_CUSTOMER_TRX_ID
3150                      ,p_interface_line_rec.CREDIT_METHOD_FOR_ACCT_RULE
3151                      ,p_interface_line_rec.CREDIT_METHOD_FOR_INSTALLMENTS
3152                      ,p_interface_line_rec.REASON_CODE_MEANING
3153                      ,p_interface_line_rec.REASON_CODE
3154                      ,p_interface_line_rec.TAX_RATE
3155                      ,p_interface_line_rec.TAX_CODE
3156                      ,p_interface_line_rec.TAX_PRECEDENCE
3157                      ,p_interface_line_rec.TAX_EXEMPT_FLAG
3158                      ,p_interface_line_rec.TAX_EXEMPT_NUMBER
3159                      ,p_interface_line_rec.TAX_EXEMPT_REASON_CODE
3160                      ,p_interface_line_rec.EXCEPTION_ID
3161                      ,p_interface_line_rec.EXEMPTION_ID
3162                      ,p_interface_line_rec.SHIP_DATE_ACTUAL
3163                      ,p_interface_line_rec.FOB_POINT
3164                      ,p_interface_line_rec.SHIP_VIA
3165                      ,p_interface_line_rec.WAYBILL_NUMBER
3166                      ,p_interface_line_rec.INVOICING_RULE_NAME
3167                      ,p_interface_line_rec.INVOICING_RULE_ID
3168                      ,p_interface_line_rec.ACCOUNTING_RULE_NAME
3169                      ,p_interface_line_rec.ACCOUNTING_RULE_ID
3170                      ,p_interface_line_rec.ACCOUNTING_RULE_DURATION
3171                      ,p_interface_line_rec.RULE_START_DATE
3172 		     ,p_interface_line_rec.RULE_END_DATE --bug5336618
3173                      ,p_interface_line_rec.PRIMARY_SALESREP_NUMBER
3174                      ,p_interface_line_rec.PRIMARY_SALESREP_ID
3175                      ,p_interface_line_rec.SALES_ORDER
3176                      ,p_interface_line_rec.SALES_ORDER_LINE
3177                      ,p_interface_line_rec.SALES_ORDER_DATE
3178                      ,p_interface_line_rec.SALES_ORDER_SOURCE
3179                      ,p_interface_line_rec.SALES_ORDER_REVISION
3180                      ,p_interface_line_rec.PURCHASE_ORDER
3181                      ,p_interface_line_rec.PURCHASE_ORDER_REVISION
3182                      ,p_interface_line_rec.PURCHASE_ORDER_DATE
3183                      ,p_interface_line_rec.AGREEMENT_NAME
3184                      ,p_interface_line_rec.AGREEMENT_ID
3185                      ,p_interface_line_rec.MEMO_LINE_NAME
3186                      ,p_interface_line_rec.MEMO_LINE_ID
3187                      ,p_interface_line_rec.INVENTORY_ITEM_ID
3188                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG1
3189                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG2
3190                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG3
3191                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG4
3192                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG5
3193                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG6
3194                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG7
3195                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG8
3196                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG9
3197                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG10
3198                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG11
3199                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG12
3200                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG13
3201                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG14
3202                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG15
3203                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG16
3204                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG17
3205                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG18
3206                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG19
3207                      ,p_interface_line_rec.MTL_SYSTEM_ITEMS_SEG20
3208                      ,p_interface_line_rec.REFERENCE_LINE_ID
3209                      ,p_interface_line_rec.REFERENCE_LINE_CONTEXT
3210                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE1
3211                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE2
3212                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE3
3213                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE4
3214                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE5
3215                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE6
3216                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE7
3217                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE8
3218                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE9
3219                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE10
3220                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE11
3221                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE12
3222                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE13
3223                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE14
3224                      ,p_interface_line_rec.REFERENCE_LINE_ATTRIBUTE15
3225                      ,p_interface_line_rec.TERRITORY_ID
3226                      ,p_interface_line_rec.TERRITORY_SEGMENT1
3227                      ,p_interface_line_rec.TERRITORY_SEGMENT2
3228                      ,p_interface_line_rec.TERRITORY_SEGMENT3
3229                      ,p_interface_line_rec.TERRITORY_SEGMENT4
3230                      ,p_interface_line_rec.TERRITORY_SEGMENT5
3231                      ,p_interface_line_rec.TERRITORY_SEGMENT6
3232                      ,p_interface_line_rec.TERRITORY_SEGMENT7
3233                      ,p_interface_line_rec.TERRITORY_SEGMENT8
3234                      ,p_interface_line_rec.TERRITORY_SEGMENT9
3235                      ,p_interface_line_rec.TERRITORY_SEGMENT10
3236                      ,p_interface_line_rec.TERRITORY_SEGMENT11
3237                      ,p_interface_line_rec.TERRITORY_SEGMENT12
3238                      ,p_interface_line_rec.TERRITORY_SEGMENT13
3239                      ,p_interface_line_rec.TERRITORY_SEGMENT14
3240                      ,p_interface_line_rec.TERRITORY_SEGMENT15
3241                      ,p_interface_line_rec.TERRITORY_SEGMENT16
3242                      ,p_interface_line_rec.TERRITORY_SEGMENT17
3243                      ,p_interface_line_rec.TERRITORY_SEGMENT18
3244                      ,p_interface_line_rec.TERRITORY_SEGMENT19
3245                      ,p_interface_line_rec.TERRITORY_SEGMENT20
3246                      ,p_interface_line_rec.ATTRIBUTE_CATEGORY
3247                      ,p_interface_line_rec.ATTRIBUTE1
3248                      ,p_interface_line_rec.ATTRIBUTE2
3249                      ,p_interface_line_rec.ATTRIBUTE3
3250                      ,p_interface_line_rec.ATTRIBUTE4
3251                      ,p_interface_line_rec.ATTRIBUTE5
3252                      ,p_interface_line_rec.ATTRIBUTE6
3253                      ,p_interface_line_rec.ATTRIBUTE7
3254                      ,p_interface_line_rec.ATTRIBUTE8
3255                      ,p_interface_line_rec.ATTRIBUTE9
3256                      ,p_interface_line_rec.ATTRIBUTE10
3257                      ,p_interface_line_rec.ATTRIBUTE11
3258                      ,p_interface_line_rec.ATTRIBUTE12
3259                      ,p_interface_line_rec.ATTRIBUTE13
3260                      ,p_interface_line_rec.ATTRIBUTE14
3261                      ,p_interface_line_rec.ATTRIBUTE15
3262                      ,p_interface_line_rec.HEADER_ATTRIBUTE_CATEGORY
3263                      ,p_interface_line_rec.HEADER_ATTRIBUTE1
3264                      ,p_interface_line_rec.HEADER_ATTRIBUTE2
3265                      ,p_interface_line_rec.HEADER_ATTRIBUTE3
3266                      ,p_interface_line_rec.HEADER_ATTRIBUTE4
3267                      ,p_interface_line_rec.HEADER_ATTRIBUTE5
3268                      ,p_interface_line_rec.HEADER_ATTRIBUTE6
3269                      ,p_interface_line_rec.HEADER_ATTRIBUTE7
3270                      ,p_interface_line_rec.HEADER_ATTRIBUTE8
3271                      ,p_interface_line_rec.HEADER_ATTRIBUTE9
3272                      ,p_interface_line_rec.HEADER_ATTRIBUTE10
3273                      ,p_interface_line_rec.HEADER_ATTRIBUTE11
3274                      ,p_interface_line_rec.HEADER_ATTRIBUTE12
3275                      ,p_interface_line_rec.HEADER_ATTRIBUTE13
3276                      ,p_interface_line_rec.HEADER_ATTRIBUTE14
3277                      ,p_interface_line_rec.HEADER_ATTRIBUTE15
3278                      ,p_interface_line_rec.COMMENTS
3279                      ,p_interface_line_rec.INTERNAL_NOTES
3280                      ,p_interface_line_rec.MOVEMENT_ID
3281                      ,p_interface_line_rec.ORG_ID
3282                      ,p_interface_line_rec.HEADER_GDF_ATTR_CATEGORY
3283                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE1
3284                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE2
3285                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE3
3286                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE4
3287                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE5
3288                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE6
3289                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE7
3290                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE8
3291                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE9
3292                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE10
3293                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE11
3294                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE12
3295                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE13
3296                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE14
3297                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE15
3298                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE16
3299                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE17
3300                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE18
3301                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE19
3302                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE20
3303                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE21
3304                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE22
3305                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE23
3306                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE24
3307                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE25
3308                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE26
3309                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE27
3310                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE28
3311                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE29
3312                      ,p_interface_line_rec.HEADER_GDF_ATTRIBUTE30
3313                      ,p_interface_line_rec.LINE_GDF_ATTR_CATEGORY
3314                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE1
3315                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE2
3316                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE3
3317                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE4
3318                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE5
3319                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE6
3320                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE7
3321                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE8
3322                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE9
3323                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE10
3324                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE11
3325                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE12
3326                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE13
3327                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE14
3328                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE15
3329                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE16
3330                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE17
3331                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE18
3332                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE19
3333                      ,p_interface_line_rec.LINE_GDF_ATTRIBUTE20
3334                      ,p_interface_line_rec.TRANSLATED_DESCRIPTION
3335                      ,p_interface_line_rec.payment_trxn_extension_id
3336                      ,p_interface_line_rec.PARENT_LINE_ID
3337                      ,p_interface_line_rec.DEFERRAL_EXCLUSION_FLAG
3338                      ) RETURNING rowid INTO l_rowid;
3339 
3340     IF l_debug_level  > 0 THEN
3341         oe_debug_pub.add(  'INSERT COMPLETED' , 1 ) ;
3342     END IF;
3343     IF OE_Commitment_Pvt.DO_Commitment_Sequencing
3344        AND p_interface_line_rec.promised_commitment_amount IS NOT NULL THEN
3345        IF l_debug_level  > 0 THEN
3346            oe_debug_pub.add(  'BUILD UPDATE STATEMENT WITH PROMISED COMMITMENT AMOUNT' , 1 ) ;
3347        END IF;
3348        update_sql_stmt := 'UPDATE RA_INTERFACE_LINES_ALL
3349                            SET PROMISED_COMMITMENT_AMOUNT = :1
3350                            WHERE ROWID = :r1';
3351        IF l_debug_level  > 0 THEN
3352            oe_debug_pub.add(  'EXECUTING UPDATE STMT FOR PROMISED_COMMITMENT_AMOUNT' , 1 ) ;
3353        END IF;
3354        EXECUTE IMMEDIATE update_sql_stmt USING
3355               p_interface_line_rec.promised_commitment_amount
3356              ,l_rowid;
3357     END IF;
3358 
3359 /* START PREPAYMENT */
3360     IF p_interface_line_rec.payment_set_id IS NOT NULL THEN
3361        IF l_debug_level  > 0 THEN
3362            oe_debug_pub.add(  'BUILD UPDATE STATEMENT WITH PAYMENT_SET_ID' , 1 ) ;
3363        END IF;
3364        update_sql_stmt1 := 'UPDATE RA_INTERFACE_LINES_ALL
3365                             SET PAYMENT_SET_ID = :2
3366                             WHERE ROWID = :r2';
3367        IF l_debug_level  > 0 THEN
3368            oe_debug_pub.add(  'EXECUTING UPDATE STMT FOR PAYMENT_SET_ID: '||P_INTERFACE_LINE_REC.PAYMENT_SET_ID , 1 ) ;
3369        END IF;
3370        EXECUTE IMMEDIATE update_sql_stmt1 USING
3371               p_interface_line_rec.PAYMENT_SET_ID
3372              ,l_rowid;
3373     END IF;
3374 /* END PREPAYMENT */
3375     -- Fix for the bug 2187074
3376     x_return_status := FND_API.G_RET_STS_SUCCESS;
3377     IF l_debug_level  > 0 THEN
3378         oe_debug_pub.add(  'EXIT INSERT_LINE ( ) PROCEDURE' , 1 ) ;
3379     END IF;
3380     EXCEPTION
3381        WHEN OTHERS THEN
3382             err_msg := 'Error while inserting to RA_INTERFACE_LINES_ALL :\n '|| SQLERRM;
3383             IF l_debug_level  > 0 THEN
3384                 oe_debug_pub.add(  ERR_MSG || ' SQLCODE: '||TO_CHAR ( SQLCODE ) , 1 ) ;
3385             END IF;
3386             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3387                OE_MSG_PUB.Add_Exc_Msg
3388                (   G_PKG_NAME
3389                ,   'Insert_Line'
3390                );
3391             END IF;
3392             /* fix for 2140223, do not raise hard error, but capture error in debug log */
3393             -- raise_application_error(-20101, 'Failing while inserting into ra_interface_lines');
3394             -- Fix for the bug 2187074
3395             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3396 END Insert_Line;
3397 
3398 PROCEDURE Prepare_Salescredit_rec
3399 (   p_line_scredit_rec       IN     OE_Order_Pub.Line_Scredit_Rec_Type
3400 ,   p_interface_line_rec     IN     RA_Interface_Lines_Rec_Type
3401 ,   x_interface_scredit_rec  OUT NOCOPY   RA_Interface_Scredits_Rec_Type
3402 ) IS
3403 --
3404 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3405 --
3406 BEGIN
3407     IF l_debug_level  > 0 THEN
3408         oe_debug_pub.add(  'ENTER LINE PREPARE_SALESCREDIT_REC ( ) PROCEDURE' , 5 ) ;
3409     END IF;
3410 
3411     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
3412        x_interface_scredit_rec.CREATION_DATE           := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
3413        x_interface_scredit_rec.LAST_UPDATE_DATE        := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
3414     ELSE
3415        x_interface_scredit_rec.CREATION_DATE           := sysdate;
3416        x_interface_scredit_rec.LAST_UPDATE_DATE        := sysdate;
3417     END IF;
3418 
3419     x_interface_scredit_rec.CREATED_BY                 := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
3420     x_interface_scredit_rec.LAST_UPDATED_BY            := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
3421     x_interface_scredit_rec.INTERFACE_SALESCREDIT_ID   := NULL;
3422     x_interface_scredit_rec.INTERFACE_LINE_ID          := NULL;
3423     x_interface_scredit_rec.INTERFACE_LINE_CONTEXT     := p_interface_line_rec.INTERFACE_LINE_CONTEXT;
3424     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE1  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1;
3425     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE2  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2;
3426     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE3  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3;
3427     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE4  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4;
3428     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE5  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5;
3429     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE6  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE6;
3430     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE7  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7;
3431     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE8  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8;
3432     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE9  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9;
3433     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE10 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE10;
3434     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE11 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE11;
3435     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE12 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE12;
3436     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE13 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE13;
3437     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE14 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE14;
3438     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE15 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE15;
3439     x_interface_scredit_rec.SALESREP_NUMBER            := NULL;
3440     x_interface_scredit_rec.SALESREP_ID                := p_line_scredit_rec.salesrep_id;
3441     x_interface_scredit_rec.SALES_CREDIT_TYPE_ID       := p_line_scredit_rec.sales_credit_type_id;
3442     x_interface_scredit_rec.SALES_CREDIT_PERCENT_SPLIT := p_line_scredit_rec.percent;
3443     x_interface_scredit_rec.ATTRIBUTE_CATEGORY         := p_line_scredit_rec.context;
3444     --SG
3445     x_interface_scredit_rec.SALES_GROUP_ID             := p_line_scredit_rec.sales_group_id;
3446     --SG
3447 
3448     --oe_debug_pub.add(x_interface_scredit_rec.SALES_GROUP_ID);
3449 
3450     --oe_debug_pub.add(
3451     x_interface_scredit_rec.ATTRIBUTE1                 := substrb(p_line_scredit_rec.attribute1, 1, 150);
3452     x_interface_scredit_rec.ATTRIBUTE2                 := substrb(p_line_scredit_rec.attribute2, 1, 150);
3453     x_interface_scredit_rec.ATTRIBUTE3                 := substrb(p_line_scredit_rec.attribute3, 1, 150);
3454     x_interface_scredit_rec.ATTRIBUTE4                 := substrb(p_line_scredit_rec.attribute4, 1, 150);
3455     x_interface_scredit_rec.ATTRIBUTE5                 := substrb(p_line_scredit_rec.attribute5, 1, 150);
3456     x_interface_scredit_rec.ATTRIBUTE6                 := substrb(p_line_scredit_rec.attribute6, 1, 150);
3457     x_interface_scredit_rec.ATTRIBUTE7                 := substrb(p_line_scredit_rec.attribute7, 1, 150);
3458     x_interface_scredit_rec.ATTRIBUTE8                 := substrb(p_line_scredit_rec.attribute8, 1, 150);
3459     x_interface_scredit_rec.ATTRIBUTE9                 := substrb(p_line_scredit_rec.attribute9, 1, 150);
3460     x_interface_scredit_rec.ATTRIBUTE10                := substrb(p_line_scredit_rec.attribute10, 1, 150);
3461     x_interface_scredit_rec.ATTRIBUTE11                := substrb(p_line_scredit_rec.attribute11, 1, 150);
3462     x_interface_scredit_rec.ATTRIBUTE12                := substrb(p_line_scredit_rec.attribute12, 1, 150);
3463     x_interface_scredit_rec.ATTRIBUTE13                := substrb(p_line_scredit_rec.attribute13, 1, 150);
3464     x_interface_scredit_rec.ATTRIBUTE14                := substrb(p_line_scredit_rec.attribute14, 1, 150);
3465     x_interface_scredit_rec.ATTRIBUTE15                := substrb(p_line_scredit_rec.attribute15, 1, 150);
3466     x_interface_scredit_rec.ORG_ID                     := p_interface_line_rec.org_id;
3467 
3468     IF l_debug_level  > 0 THEN
3469         oe_debug_pub.add ( 'value of sysdate '||sysdate);
3470         oe_debug_pub.add ( 'value of CREATION_DATE '||x_interface_scredit_rec.CREATION_DATE||
3471                            '  value of LAST_UPDATE_DATE '|| x_interface_scredit_rec.LAST_UPDATE_DATE);
3472     END IF;
3473 
3474     IF l_debug_level  > 0 THEN
3475         oe_debug_pub.add(  'EXITING LINE PREPARE_SALESCREDIT_REC' , 5 ) ;
3476     END IF;
3477 END Prepare_Salescredit_rec;
3478 
3479 PROCEDURE Prepare_Salescredit_rec
3480 (   p_header_scredit_rec     IN     OE_Order_Pub.Header_Scredit_Rec_Type
3481 ,   p_interface_line_rec     IN     RA_Interface_Lines_Rec_Type
3482 ,   x_interface_scredit_rec  OUT NOCOPY   RA_Interface_Scredits_Rec_Type
3483 ) IS
3484 --
3485 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3486 --
3487 BEGIN
3488     IF l_debug_level  > 0 THEN
3489         oe_debug_pub.add(  'ENTER HEADER PREPARE_SALESCREDIT_REC ( ) PROCEDURE ' , 5 ) ;
3490     END IF;
3491 
3492     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
3493        x_interface_scredit_rec.CREATION_DATE           := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
3494        x_interface_scredit_rec.LAST_UPDATE_DATE        := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
3495     ELSE
3496        x_interface_scredit_rec.CREATION_DATE           := sysdate;
3497        x_interface_scredit_rec.LAST_UPDATE_DATE        := sysdate;
3498     END IF;
3499 
3500     x_interface_scredit_rec.CREATED_BY                 := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
3501     x_interface_scredit_rec.LAST_UPDATED_BY            := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
3502     x_interface_scredit_rec.INTERFACE_SALESCREDIT_ID   := NULL;
3503     x_interface_scredit_rec.INTERFACE_LINE_ID          := NULL;
3504     x_interface_scredit_rec.INTERFACE_LINE_CONTEXT     := p_interface_line_rec.INTERFACE_LINE_CONTEXT;
3505     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE1  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1;
3506     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE2  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2;
3507     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE3  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3;
3508     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE4  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4;
3509     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE5  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5;
3510     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE6  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE6;
3511     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE7  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7;
3512     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE8  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8;
3513     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE9  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9;
3514     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE10 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE10;
3515     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE11 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE11;
3516     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE12 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE12;
3517     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE13 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE13;
3518     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE14 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE14;
3519     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE15 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE15;
3520     x_interface_scredit_rec.SALESREP_NUMBER            := NULL;
3521     x_interface_scredit_rec.SALESREP_ID                := p_header_scredit_rec.salesrep_id;
3522     x_interface_scredit_rec.SALES_CREDIT_TYPE_ID       := p_header_scredit_rec.sales_credit_type_id;
3523     x_interface_scredit_rec.SALES_CREDIT_PERCENT_SPLIT := p_header_scredit_rec.percent;
3524     x_interface_scredit_rec.ATTRIBUTE_CATEGORY         := p_header_scredit_rec.context;
3525 --SG{
3526     x_interface_scredit_rec.SALES_GROUP_ID             := p_header_scredit_rec.sales_group_id;
3527 --SG}
3528     x_interface_scredit_rec.ATTRIBUTE1                 := substrb(p_header_scredit_rec.attribute1, 1, 150);
3529     x_interface_scredit_rec.ATTRIBUTE2                 := substrb(p_header_scredit_rec.attribute2, 1, 150);
3530     x_interface_scredit_rec.ATTRIBUTE3                 := substrb(p_header_scredit_rec.attribute3, 1, 150);
3531     x_interface_scredit_rec.ATTRIBUTE4                 := substrb(p_header_scredit_rec.attribute4, 1, 150);
3532     x_interface_scredit_rec.ATTRIBUTE5                 := substrb(p_header_scredit_rec.attribute5, 1, 150);
3533     x_interface_scredit_rec.ATTRIBUTE6                 := substrb(p_header_scredit_rec.attribute6, 1, 150);
3534     x_interface_scredit_rec.ATTRIBUTE7                 := substrb(p_header_scredit_rec.attribute7, 1, 150);
3535     x_interface_scredit_rec.ATTRIBUTE8                 := substrb(p_header_scredit_rec.attribute8, 1, 150);
3536     x_interface_scredit_rec.ATTRIBUTE9                 := substrb(p_header_scredit_rec.attribute9, 1, 150);
3537     x_interface_scredit_rec.ATTRIBUTE10                := substrb(p_header_scredit_rec.attribute10, 1, 150);
3538     x_interface_scredit_rec.ATTRIBUTE11                := substrb(p_header_scredit_rec.attribute11, 1, 150);
3539     x_interface_scredit_rec.ATTRIBUTE12                := substrb(p_header_scredit_rec.attribute12, 1, 150);
3540     x_interface_scredit_rec.ATTRIBUTE13                := substrb(p_header_scredit_rec.attribute13, 1, 150);
3541     x_interface_scredit_rec.ATTRIBUTE14                := substrb(p_header_scredit_rec.attribute14, 1, 150);
3542     x_interface_scredit_rec.ATTRIBUTE15                := substrb(p_header_scredit_rec.attribute15, 1, 150);
3543     -- Fix for bug2185729
3544     x_interface_scredit_rec.ORG_ID                     := p_interface_line_rec.org_id;
3545 
3546     IF l_debug_level  > 0 THEN
3547         oe_debug_pub.add ( 'value of sysdate '||sysdate);
3548         oe_debug_pub.add ( 'value of CREATION_DATE '||x_interface_scredit_rec.CREATION_DATE||
3549                            '  value of LAST_UPDATE_DATE '|| x_interface_scredit_rec.LAST_UPDATE_DATE);
3550     END IF;
3551 
3552     IF l_debug_level  > 0 THEN
3553         oe_debug_pub.add(  'EXIT HEADER PREPARE_SALESCREDIT_REC ( ) PROCEDURE ' , 5 ) ;
3554     END IF;
3555 END Prepare_Salescredit_rec;
3556 
3557 PROCEDURE Prepare_Salescredit_rec
3558 (   p_interface_line_rec     IN     RA_Interface_Lines_Rec_Type
3559 ,   x_interface_scredit_rec  OUT NOCOPY   RA_Interface_Scredits_Rec_Type
3560 ) IS
3561 --
3562 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3563 --
3564 BEGIN
3565     IF l_debug_level  > 0 THEN
3566         oe_debug_pub.add(  'ENTER PREPARE_SALESCREDIT_REC ( ) PROCEDURE' , 1 ) ;
3567     END IF;
3568     --Fix for bug 2192220.
3569     Select SALES_CREDIT_TYPE_ID
3570     into x_interface_scredit_rec.SALES_CREDIT_TYPE_ID
3571     from ra_salesreps where salesrep_id=-3;
3572     IF l_debug_level  > 0 THEN
3573         oe_debug_pub.add(  'SALES_CREDIT_TYPE_ID'||X_INTERFACE_SCREDIT_REC.SALES_CREDIT_TYPE_ID ) ;
3574     END IF;
3575 
3576     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
3577        x_interface_scredit_rec.CREATION_DATE           := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
3578        x_interface_scredit_rec.LAST_UPDATE_DATE        := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
3579     ELSE
3580        x_interface_scredit_rec.CREATION_DATE           := sysdate;
3581        x_interface_scredit_rec.LAST_UPDATE_DATE        := sysdate;
3582     END IF;
3583 
3584     x_interface_scredit_rec.CREATED_BY := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
3585     x_interface_scredit_rec.LAST_UPDATED_BY := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
3586     x_interface_scredit_rec.INTERFACE_SALESCREDIT_ID := NULL;
3587     x_interface_scredit_rec.INTERFACE_LINE_ID := NULL;
3588     x_interface_scredit_rec.INTERFACE_LINE_CONTEXT := p_interface_line_rec.INTERFACE_LINE_CONTEXT;
3589     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE1 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1;
3590     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE2 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2;
3591     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE3 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3;
3592     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE4 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4;
3593     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE5 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5;
3594     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE6 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE6;
3595     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE7 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7;
3596     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE8 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8;
3597     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE9 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9;
3598     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE10 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE10;
3599     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE11 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE11;
3600     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE12 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE12;
3601     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE13 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE13;
3602     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE14 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE14;
3603     x_interface_scredit_rec.INTERFACE_LINE_ATTRIBUTE15 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE15;
3604     x_interface_scredit_rec.SALESREP_NUMBER := NULL;
3605     x_interface_scredit_rec.SALESREP_ID := -3;
3606     --x_interface_scredit_rec.SALES_CREDIT_TYPE_ID := 1; Commented off as part of fix for bug 2192220
3607     x_interface_scredit_rec.SALES_CREDIT_PERCENT_SPLIT := 100;
3608     x_interface_scredit_rec.ATTRIBUTE_CATEGORY := NULL;
3609     x_interface_scredit_rec.ATTRIBUTE1 := NULL;
3610     x_interface_scredit_rec.ATTRIBUTE2 := NULL;
3611     x_interface_scredit_rec.ATTRIBUTE3 := NULL;
3612     x_interface_scredit_rec.ATTRIBUTE4 := NULL;
3613     x_interface_scredit_rec.ATTRIBUTE5 := NULL;
3614     x_interface_scredit_rec.ATTRIBUTE6 := NULL;
3615     x_interface_scredit_rec.ATTRIBUTE7 := NULL;
3616     x_interface_scredit_rec.ATTRIBUTE8 := NULL;
3617     x_interface_scredit_rec.ATTRIBUTE9 := NULL;
3618     x_interface_scredit_rec.ATTRIBUTE10 := NULL;
3619     x_interface_scredit_rec.ATTRIBUTE11 := NULL;
3620     x_interface_scredit_rec.ATTRIBUTE12 := NULL;
3621     x_interface_scredit_rec.ATTRIBUTE13 := NULL;
3622     x_interface_scredit_rec.ATTRIBUTE14 := NULL;
3623     x_interface_scredit_rec.ATTRIBUTE15 := NULL;
3624     -- Fix for bug2185729
3625     x_interface_scredit_rec.ORG_ID := p_interface_line_rec.org_id;
3626 
3627     IF l_debug_level  > 0 THEN
3628         oe_debug_pub.add ( 'value of sysdate '||sysdate);
3629         oe_debug_pub.add ( ' value of CREATION_DATE '||x_interface_scredit_rec.CREATION_DATE||
3630                            '  value of LAST_UPDATE_DATE '|| x_interface_scredit_rec.LAST_UPDATE_DATE);
3631     END IF;
3632 
3633     IF l_debug_level  > 0 THEN
3634         oe_debug_pub.add(  'EXIT PREPARE_SALESCREDIT_REC ( ) PROCEDURE ' , 1 ) ;
3635     END IF;
3636 END Prepare_Salescredit_rec;
3637 
3638 procedure convert_to_ar(p_oe_salescredit_rec IN Ra_Interface_Scredits_Rec_Type,
3639                         x_ar_salescredit_rec OUT NOCOPY  AR_InterfaceSalesCredits_GRP.salescredit_rec_type) IS
3640 Begin
3641   x_ar_salescredit_rec.INTERFACE_SALESCREDIT_ID         :=p_oe_salescredit_rec.INTERFACE_SALESCREDIT_ID ;
3642   x_ar_salescredit_rec.INTERFACE_LINE_ID	        :=p_oe_salescredit_rec.INTERFACE_LINE_ID	;
3643   x_ar_salescredit_rec.INTERFACE_LINE_CONTEXT		:=p_oe_salescredit_rec.INTERFACE_LINE_CONTEXT	;
3644   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE1	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE1;
3645   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE2	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE2;
3646   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE3	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE3;
3647   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE4	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE4;
3648   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE5	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE5;
3649   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE6	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE6;
3650   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE7	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE7;
3651   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE8	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE8;
3652   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE9	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE9;
3653   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE10	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE10;
3654   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE11	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE11;
3655   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE12	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE12;
3656   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE13	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE13;
3657   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE14	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE14;
3658   x_ar_salescredit_rec.INTERFACE_LINE_ATTRIBUTE15	:=p_oe_salescredit_rec.INTERFACE_LINE_ATTRIBUTE15;
3659   x_ar_salescredit_rec.SALESREP_NUMBER			:=p_oe_salescredit_rec.SALESREP_NUMBER		;
3660   x_ar_salescredit_rec.SALESREP_ID			:=p_oe_salescredit_rec.SALESREP_ID		;
3661   x_ar_salescredit_rec.SALESGROUP_ID			:=p_oe_salescredit_rec.SALES_GROUP_ID		;
3662   x_ar_salescredit_rec.SALES_CREDIT_TYPE_NAME		:=p_oe_salescredit_rec.SALES_CREDIT_TYPE_NAME	;
3663   x_ar_salescredit_rec.SALES_CREDIT_TYPE_ID		:=p_oe_salescredit_rec.SALES_CREDIT_TYPE_ID	;
3664   x_ar_salescredit_rec.SALES_CREDIT_AMOUNT_SPLIT	:=p_oe_salescredit_rec.SALES_CREDIT_AMOUNT_SPLIT;
3665   x_ar_salescredit_rec.SALES_CREDIT_PERCENT_SPLIT	:=p_oe_salescredit_rec.SALES_CREDIT_PERCENT_SPLIT;
3666   x_ar_salescredit_rec.INTERFACE_STATUS		        :=p_oe_salescredit_rec.INTERFACE_STATUS		;
3667   x_ar_salescredit_rec.REQUEST_ID			:=p_oe_salescredit_rec.REQUEST_ID		;
3668   x_ar_salescredit_rec.ATTRIBUTE_CATEGORY		:=p_oe_salescredit_rec.ATTRIBUTE_CATEGORY	;
3669   x_ar_salescredit_rec.ATTRIBUTE1			:=p_oe_salescredit_rec.ATTRIBUTE1		;
3670   x_ar_salescredit_rec.ATTRIBUTE2			:=p_oe_salescredit_rec.ATTRIBUTE2		;
3671   x_ar_salescredit_rec.ATTRIBUTE3			:=p_oe_salescredit_rec.ATTRIBUTE3		;
3672   x_ar_salescredit_rec.ATTRIBUTE4			:=p_oe_salescredit_rec.ATTRIBUTE4		;
3673   x_ar_salescredit_rec.ATTRIBUTE5			:=p_oe_salescredit_rec.ATTRIBUTE5		;
3674   x_ar_salescredit_rec.ATTRIBUTE6			:=p_oe_salescredit_rec.ATTRIBUTE6		;
3675   x_ar_salescredit_rec.ATTRIBUTE7			:=p_oe_salescredit_rec.ATTRIBUTE7		;
3676   x_ar_salescredit_rec.ATTRIBUTE8			:=p_oe_salescredit_rec.ATTRIBUTE8		;
3677   x_ar_salescredit_rec.ATTRIBUTE9			:=p_oe_salescredit_rec.ATTRIBUTE9		;
3678   x_ar_salescredit_rec.ATTRIBUTE10			:=p_oe_salescredit_rec.ATTRIBUTE10		;
3679   x_ar_salescredit_rec.ATTRIBUTE11			:=p_oe_salescredit_rec.ATTRIBUTE11		;
3680   x_ar_salescredit_rec.ATTRIBUTE12			:=p_oe_salescredit_rec.ATTRIBUTE12		;
3681   x_ar_salescredit_rec.ATTRIBUTE13			:=p_oe_salescredit_rec.ATTRIBUTE13		;
3682   x_ar_salescredit_rec.ATTRIBUTE14			:=p_oe_salescredit_rec.ATTRIBUTE14		;
3683   x_ar_salescredit_rec.ATTRIBUTE15			:=p_oe_salescredit_rec.ATTRIBUTE15		;
3684   x_ar_salescredit_rec.CREATED_BY			:=p_oe_salescredit_rec.CREATED_BY		;
3685   x_ar_salescredit_rec.CREATION_DATE			:=p_oe_salescredit_rec.CREATION_DATE		;
3686   x_ar_salescredit_rec.LAST_UPDATED_BY			:=p_oe_salescredit_rec.LAST_UPDATED_BY		;
3687   x_ar_salescredit_rec.LAST_UPDATE_DATE		        :=p_oe_salescredit_rec.LAST_UPDATE_DATE		;
3688   --x_ar_salescredit_rec.LAST_UPDATE_LOGIN		:=p_oe_salescredit_rec.LAST_UPDATE_LOGIN	;
3689   x_ar_salescredit_rec.ORG_ID				:=p_oe_salescredit_rec.ORG_ID			;
3690 
3691 End;
3692 
3693 
3694 PROCEDURE Insert_Salescredit
3695 (   p_salescredit_rec  IN Ra_Interface_Scredits_Rec_Type
3696 ) IS
3697 --
3698 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3699 --
3700 l_msg_count NUMBER;
3701 l_msg_data VARCHAR2(2000);
3702 l_return_status VARCHAR2(15);
3703 l_ar_salescredit_rec AR_InterfaceSalesCredits_GRP.salescredit_rec_type;
3704 BEGIN
3705 
3706 
3707    IF l_debug_level  > 0 THEN
3708        oe_debug_pub.add(  'INSERTING SALES CREDIT RECORDS ' , 5 ) ;
3709    END IF;
3710 
3711    IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
3712       --OE_Invoice_Ext_Pvt.Insert_Salescredit(p_salescredit_rec);
3713       convert_to_ar(p_oe_salescredit_rec=>p_salescredit_rec,
3714                     x_ar_salescredit_rec=>l_ar_salescredit_rec);
3715 
3716       AR_InterfaceSalesCredits_GRP.Insert_Salescredit(
3717                               p_salescredit_rec=>l_ar_salescredit_rec,
3718                               x_return_status  =>l_return_status,
3719                               x_msg_count      =>l_msg_count,
3720                               x_msg_data       =>l_msg_data);
3721    ELSE   --old behavior
3722      INSERT INTO RA_INTERFACE_SALESCREDITS_ALL
3723                  (CREATED_BY
3724                   ,CREATION_DATE
3725                   ,LAST_UPDATED_BY
3726                   ,LAST_UPDATE_DATE
3727                   ,INTERFACE_SALESCREDIT_ID
3728                   ,INTERFACE_LINE_ID
3729                   ,INTERFACE_LINE_CONTEXT
3730                   ,INTERFACE_LINE_ATTRIBUTE1
3731                   ,INTERFACE_LINE_ATTRIBUTE2
3732                   ,INTERFACE_LINE_ATTRIBUTE3
3733                   ,INTERFACE_LINE_ATTRIBUTE4
3734                   ,INTERFACE_LINE_ATTRIBUTE5
3735                   ,INTERFACE_LINE_ATTRIBUTE6
3736                   ,INTERFACE_LINE_ATTRIBUTE7
3737                   ,INTERFACE_LINE_ATTRIBUTE8
3738                   ,INTERFACE_LINE_ATTRIBUTE9
3739                   ,INTERFACE_LINE_ATTRIBUTE10
3740                   ,INTERFACE_LINE_ATTRIBUTE11
3741                   ,INTERFACE_LINE_ATTRIBUTE12
3742                   ,INTERFACE_LINE_ATTRIBUTE13
3743                   ,INTERFACE_LINE_ATTRIBUTE14
3744                   ,INTERFACE_LINE_ATTRIBUTE15
3745                   ,SALESREP_NUMBER
3746                   ,SALESREP_ID
3747                   ,SALES_CREDIT_TYPE_NAME
3748                   ,SALES_CREDIT_TYPE_ID
3749                   ,SALES_CREDIT_AMOUNT_SPLIT
3750                   ,SALES_CREDIT_PERCENT_SPLIT
3751                   ,INTERFACE_STATUS
3752                   ,REQUEST_ID
3753                   ,ATTRIBUTE_CATEGORY
3754                   ,ATTRIBUTE1
3755                   ,ATTRIBUTE2
3756                   ,ATTRIBUTE3
3757                   ,ATTRIBUTE4
3758                   ,ATTRIBUTE5
3759                   ,ATTRIBUTE6
3760                   ,ATTRIBUTE7
3761                   ,ATTRIBUTE8
3762                   ,ATTRIBUTE9
3763                   ,ATTRIBUTE10
3764                   ,ATTRIBUTE11
3765                   ,ATTRIBUTE12
3766                   ,ATTRIBUTE13
3767                   ,ATTRIBUTE14
3768                   ,ATTRIBUTE15
3769                   ,ORG_ID)
3770             VALUES
3771                   (p_salescredit_rec.CREATED_BY
3772                   ,p_salescredit_rec.CREATION_DATE
3773                   ,p_salescredit_rec.LAST_UPDATED_BY
3774                   ,p_salescredit_rec.LAST_UPDATE_DATE
3775                   ,p_salescredit_rec.INTERFACE_SALESCREDIT_ID
3776                   ,p_salescredit_rec.INTERFACE_LINE_ID
3777                   ,p_salescredit_rec.INTERFACE_LINE_CONTEXT
3778                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE1
3779                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE2
3780                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE3
3781                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE4
3782                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE5
3783                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE6
3784                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE7
3785                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE8
3786                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE9
3787                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE10
3788                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE11
3789                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE12
3790                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE13
3791                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE14
3792                   ,p_salescredit_rec.INTERFACE_LINE_ATTRIBUTE15
3793                   ,p_salescredit_rec.SALESREP_NUMBER
3794                   ,p_salescredit_rec.SALESREP_ID
3795                   ,p_salescredit_rec.SALES_CREDIT_TYPE_NAME
3796                   ,p_salescredit_rec.SALES_CREDIT_TYPE_ID
3797                   ,p_salescredit_rec.SALES_CREDIT_AMOUNT_SPLIT
3798                   ,p_salescredit_rec.SALES_CREDIT_PERCENT_SPLIT
3799                   ,p_salescredit_rec.INTERFACE_STATUS
3800                   ,p_salescredit_rec.REQUEST_ID
3801                   ,p_salescredit_rec.ATTRIBUTE_CATEGORY
3802                   ,p_salescredit_rec.ATTRIBUTE1
3803                   ,p_salescredit_rec.ATTRIBUTE2
3804                   ,p_salescredit_rec.ATTRIBUTE3
3805                   ,p_salescredit_rec.ATTRIBUTE4
3806                   ,p_salescredit_rec.ATTRIBUTE5
3807                   ,p_salescredit_rec.ATTRIBUTE6
3808                   ,p_salescredit_rec.ATTRIBUTE7
3809                   ,p_salescredit_rec.ATTRIBUTE8
3810                   ,p_salescredit_rec.ATTRIBUTE9
3811                   ,p_salescredit_rec.ATTRIBUTE10
3812                   ,p_salescredit_rec.ATTRIBUTE11
3813                   ,p_salescredit_rec.ATTRIBUTE12
3814                   ,p_salescredit_rec.ATTRIBUTE13
3815                   ,p_salescredit_rec.ATTRIBUTE14
3816                   ,p_salescredit_rec.ATTRIBUTE15
3817                   ,p_salescredit_rec.ORG_ID);
3818           END IF;
3819 
3820           IF l_debug_level  > 0 THEN
3821               oe_debug_pub.add(  'SUCCESSFULLY INSERTED SALES CREDIT RECORDS' , 5 ) ;
3822           END IF;
3823 EXCEPTION WHEN OTHERS THEN
3824           IF l_debug_level  > 0 THEN
3825               oe_debug_pub.add(  'UNABLE TO INSERT SALES CREDIT RECORDS -> '||SQLERRM , 1 ) ;
3826           END IF;
3827           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3828                OE_MSG_PUB.Add_Exc_Msg
3829                (   G_PKG_NAME
3830                ,   'Insert_Salescredit'
3831                );
3832           END IF;
3833 END Insert_Salescredit;
3834 
3835 PROCEDURE Interface_SalesCredits
3836 (   p_line_rec   IN   OE_Order_Pub.Line_Rec_Type
3837 ,   p_interface_line_rec        IN  RA_Interface_Lines_Rec_Type
3838 ,   x_return_status  OUT NOCOPY VARCHAR2
3839 )
3840 IS
3841 l_interface_scredit_rec     RA_Interface_Scredits_Rec_Type;
3842 l_line_scredit_tbl          OE_Order_Pub.Line_Scredit_Tbl_Type;
3843 l_header_scredit_tbl        OE_Order_Pub.Header_Scredit_Tbl_Type;
3844 l_line_scredit_rec          OE_Order_Pub.Line_Scredit_Rec_Type;
3845 l_header_scredit_rec        OE_Order_Pub.Header_Scredit_Rec_Type;
3846 l_line_credits              NUMBER := 0 ;
3847 l_header_credits            NUMBER := 0 ;
3848 Insert_Header_Scredits_flag VARCHAR2(1);
3849 service_grand_parent_id     NUMBER := 0;
3850 i                           NUMBER;
3851 l_quota_flag                VARCHAR2(1);
3852 l_order_line_id             NUMBER;
3853 l_return_status             VARCHAR2(1);
3854 l_service_reference_line_id NUMBER;
3855 
3856 --FP bug 3872166
3857 l_total_percent NUMBER;
3858 
3859 --
3860 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3861 --
3862 BEGIN
3863  IF l_debug_level  > 0 THEN
3864      oe_debug_pub.add(  'ENTER INTERFACE_SALES_CREDITS ( ) PROCEDURE ' , 5 ) ;
3865  END IF;
3866  FOR i IN 1..2 LOOP
3867      IF    i=1 THEN
3868            l_quota_flag := 'Y';
3869            IF l_debug_level  > 0 THEN
3870                oe_debug_pub.add(  'INSERTING QUOTA SALES CREDITS..' , 5 ) ;
3871            END IF;
3872      ELSIF i = 2 THEN
3873            l_quota_flag := 'N';
3874            IF l_debug_level  > 0 THEN
3875                oe_debug_pub.add(  'INSERTING NON-QUOTA SALES CREDITS..' , 5 ) ;
3876            END IF;
3877      END IF;
3878      Query_Line_Scredits(p_line_id          => p_line_rec.line_id
3879                         ,p_quota_flag       => l_quota_flag
3880                         ,x_line_scredit_tbl => l_line_scredit_tbl
3881 			 --FP bug 3872166
3882 			,x_total_percent    => l_total_percent );
3883      -- Prepare and insert line sales credits
3884      IF l_line_scredit_tbl.COUNT <> 0  AND
3885         (l_quota_flag = 'N' OR (l_quota_flag = 'Y' AND l_total_percent <> 0)) THEN --FP bug 3872166
3886         FOR I IN 1..l_line_scredit_tbl.COUNT LOOP
3887             l_line_scredit_rec := l_line_scredit_tbl(I);
3888 	        Prepare_Salescredit_rec
3889                 (p_line_scredit_rec        => l_line_scredit_rec
3890                 ,p_interface_line_rec      => p_interface_line_rec
3891                 ,x_interface_scredit_rec   => l_interface_scredit_rec);
3892             Insert_Salescredit(l_interface_scredit_rec);
3893       END LOOP;
3894       IF l_debug_level  > 0 THEN
3895           oe_debug_pub.add(  'INSERTED LINE SALESCREDITS' , 1 ) ;
3896       END IF;
3897       Insert_Header_Scredits_Flag := 'N';
3898    ELSE  -- Line has no sales credits
3899       IF p_line_rec.item_type_code = 'SERVICE' AND p_line_rec.service_reference_line_id IS NOT NULL THEN -- line is service and has parent
3900          IF l_debug_level  > 0 THEN
3901              oe_debug_pub.add(  'RETRIEVING CUSTOMER PRODUCT LINE ID' ) ;
3902          END IF;
3903          IF p_line_rec.service_reference_type_code = 'CUSTOMER_PRODUCT' THEN
3904 /* Commenting for bug# 5032978
3905             OE_SERVICE_UTIL.Get_Cust_Product_Line_Id
3906             (x_return_status     => l_return_status
3907             ,p_reference_line_id => p_line_rec.service_reference_line_id
3908             ,p_customer_id       => p_line_rec.sold_to_org_id
3909             ,x_cust_product_line_id=> l_order_line_id
3910             );
3911            IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
3912 	          IF l_debug_level  > 0 THEN
3913 	              oe_debug_pub.add(  'CUSTOMER PRODUCT LINE ID -> ' || L_ORDER_LINE_ID , 5 ) ;
3914 	          END IF;
3915               l_service_reference_line_id := l_order_line_id;
3916            ELSE
3917               IF l_debug_level  > 0 THEN
3918                   oe_debug_pub.add(  'UNABLE TO RETRIEVE CUSTOMER PRODUCT LINE ID' , 1 ) ;
3919               END IF;
3920 		      RAISE NO_DATA_FOUND;
3921            END IF;
3922  end commenting for bug# 5032978 */
3923            l_service_reference_line_id := NULL;
3924          ELSE
3925            l_service_reference_line_id := p_line_rec.service_reference_line_id;
3926          END IF;
3927       END IF;
3928       IF l_service_reference_line_id is NOT NULL then  -- service line has a parent
3929          -- Get sales credits for service parent
3930          Query_Line_Scredits(p_line_id          => l_service_reference_line_id
3931                            , p_quota_flag       => l_quota_flag
3932                            , x_line_scredit_tbl => l_line_scredit_tbl
3933 			     -- FP bug 3872166
3934 			   , x_total_percent    => l_total_percent);
3935          IF l_line_scredit_tbl.COUNT <> 0 AND
3936 	    (l_quota_flag = 'N' OR (l_quota_flag = 'Y' AND l_total_percent <> 0)) THEN -- FP bug 3872166
3937             FOR I IN 1..l_line_scredit_tbl.COUNT LOOP
3938                 l_line_scredit_rec := l_line_scredit_tbl(I);
3939 	            Prepare_Salescredit_rec
3940                        (p_line_scredit_rec        => l_line_scredit_rec
3941                        ,p_interface_line_rec      => p_interface_line_rec
3942                        ,x_interface_scredit_rec   => l_interface_scredit_rec);
3943                 Insert_Salescredit(l_interface_scredit_rec);
3944             END LOOP;
3945             IF l_debug_level  > 0 THEN
3946                 oe_debug_pub.add(  'INSERTED SERVICE PARENT LINE SALESCREDITS' , 1 ) ;
3947             END IF;
3948             Insert_Header_Scredits_Flag := 'N';
3949          ELSE  -- Service parent has no sales credits
3950             -- Check if service parent has parent (In case if service parent is an option, class, kit etc)
3951             BEGIN
3952                SELECT top_model_line_id
3953                INTO   service_grand_parent_id
3954                FROM   oe_order_lines_all /*Bug3261460*/
3955                WHERE  line_id = l_service_reference_line_id;
3956 	    EXCEPTION
3957                WHEN NO_DATA_FOUND THEN
3958                    IF l_debug_level  > 0 THEN
3959                     oe_debug_pub.add(  'UNABLE TO GET SERVICE GRAND PARENT ITEM' , 1);
3960                    END IF;
3961                    service_grand_parent_id := NULL;
3962             END;
3963             IF (nvl(service_grand_parent_id,0) <> 0 AND service_grand_parent_id <> l_service_reference_line_id) THEN
3964                -- Get sales credits for service grand parent
3965                Query_Line_Scredits(p_line_id          =>  service_grand_parent_id
3966                                  , p_quota_flag       => l_quota_flag
3967                                  , x_line_scredit_tbl => l_line_scredit_tbl
3968 				   --FP bug 3872166
3969 				 , x_total_percent    => l_total_percent);
3970                IF l_line_scredit_tbl.COUNT <> 0 AND
3971 		  (l_quota_flag = 'N' OR (l_quota_flag = 'Y' AND l_total_percent <> 0)) THEN -- FP bug 3872166
3972                   FOR I IN 1..l_line_scredit_tbl.COUNT LOOP
3973                      l_line_scredit_rec := l_line_scredit_tbl(I);
3974                      Prepare_Salescredit_rec
3975                           (p_line_scredit_rec        => l_line_scredit_rec
3976                           ,p_interface_line_rec      => p_interface_line_rec
3977                           ,x_interface_scredit_rec   => l_interface_scredit_rec);
3978                      Insert_Salescredit(l_interface_scredit_rec);
3979                   END LOOP;
3980                   IF l_debug_level  > 0 THEN
3981                       oe_debug_pub.add(  'INSERTED SERVICE GRAND PARENT LINE SALESCREDITS' , 1 ) ;
3982                   END IF;
3983                   Insert_Header_Scredits_Flag := 'N';
3984                ELSE -- Service grand parent has no sales credits
3985                  --Get header sales credits
3986                  Insert_Header_Scredits_Flag := 'Y';
3987                END IF; -- end of service grand parent salescredits
3988             ELSE  -- Service has no grand parent
3989                --Get header sales credits
3990                Insert_Header_Scredits_Flag := 'Y';
3991             END IF; -- end of service grand parent
3992          END IF;  -- end of service parent
3993       -- Check if line is option, class or kit
3994       ELSIF (p_line_rec.top_model_line_id IS NOT NULL AND
3995              p_line_rec.top_model_line_id <> p_line_rec.line_id) THEN
3996           -- Get sales credits for parent line
3997           Query_Line_Scredits(p_line_id          =>  p_line_rec.top_model_line_id
3998                             , p_quota_flag       => l_quota_flag
3999                             , x_line_scredit_tbl => l_line_scredit_tbl
4000 			      -- FP bug 3872166
4001                             , x_total_percent    => l_total_percent);
4002           IF l_line_scredit_tbl.COUNT <> 0 AND
4003 	     (l_quota_flag = 'N' OR (l_quota_flag = 'Y' AND l_total_percent <> 0)) THEN --FP bug 3872166
4004              FOR I IN 1..l_line_scredit_tbl.COUNT LOOP
4005                 l_line_scredit_rec := l_line_scredit_tbl(I);
4006        	        Prepare_Salescredit_rec
4007                         (p_line_scredit_rec        => l_line_scredit_rec
4008                         ,p_interface_line_rec      => p_interface_line_rec
4009                         ,x_interface_scredit_rec   => l_interface_scredit_rec);
4010                 Insert_Salescredit(l_interface_scredit_rec);
4011              END LOOP;
4012              IF l_debug_level  > 0 THEN
4013                  oe_debug_pub.add(  'INSERTED PARENT LINE SALESCREDITS' , 1 ) ;
4014              END IF;
4015              Insert_Header_Scredits_Flag := 'N';
4016           ELSE  -- parent has no sales credits
4017              -- Prepare and insert header sales credits
4018              Insert_Header_Scredits_flag := 'Y';
4019           END IF; -- end of model line
4020       ELSE -- line has no parent
4021           Insert_Header_Scredits_flag := 'Y';
4022       END IF;
4023    END IF;
4024    IF Insert_Header_Scredits_flag = 'Y' THEN
4025      -- Prepare and insert header sales credits
4026      Query_Header_Scredits(p_header_id => p_line_rec.header_id
4027                          , p_quota_flag => l_quota_flag
4028                          , x_header_scredit_tbl => l_header_scredit_tbl);
4029      IF l_header_scredit_tbl.COUNT <> 0 THEN
4030         FOR I IN 1..l_header_scredit_tbl.COUNT LOOP
4031            l_header_scredit_rec := l_header_scredit_tbl(I);
4032            Prepare_Salescredit_rec
4033                   (p_header_scredit_rec      => l_header_scredit_rec
4034                   ,p_interface_line_rec      => p_interface_line_rec
4035                   ,x_interface_scredit_rec   => l_interface_scredit_rec);
4036            Insert_Salescredit(l_interface_scredit_rec);
4037         END LOOP;
4038         IF l_debug_level  > 0 THEN
4039             oe_debug_pub.add(  'INSERTED HEADER SALESCREDITS' , 1 ) ;
4040         END IF;
4041         Insert_Header_Scredits_Flag := 'N';
4042      END IF;
4043    END IF;
4044 END LOOP;
4045 x_return_status := FND_API.G_RET_STS_SUCCESS;
4046 IF l_debug_level  > 0 THEN
4047     oe_debug_pub.add(  'INTERFACE_SALES_CREDITS ( ) PROCDURE SUCCESS : '||X_RETURN_STATUS , 1 ) ;
4048 END IF;
4049 EXCEPTION
4050      WHEN OTHERS THEN
4051           IF l_debug_level  > 0 THEN
4052               oe_debug_pub.add(  'EXCEPTION INTERFACE_SALES_CREDITS ( ) '||SQLERRM , 1 ) ;
4053           END IF;
4054           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4055           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4056           THEN
4057             OE_MSG_PUB.Add_Exc_Msg
4058             (   G_PKG_NAME
4059             ,   'Interface_SalesCredits');
4060           END IF;
4061 END Interface_SalesCredits;
4062 
4063 PROCEDURE Interface_scredits_for_freight
4064 ( p_line_rec           IN OE_Order_PUB.Line_Rec_Type
4065 , p_interface_line_rec IN RA_Interface_Lines_Rec_Type
4066 , p_line_level_charge  IN VARCHAR2
4067 ) IS
4068 l_header_scredit_tbl     OE_Order_PUB.Header_Scredit_Tbl_Type;
4069 l_header_scredit_rec     OE_Order_PUB.Header_Scredit_Rec_Type;
4070 l_interface_scredit_rec  RA_Interface_Scredits_Rec_Type;
4071 l_cr_srep_for_freight    VARCHAR2(30); --moac moving the initialization to the body
4072 l_return_status          VARCHAR2(30);
4073 --
4074 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4075 --
4076 BEGIN
4077    IF l_debug_level  > 0 THEN
4078        oe_debug_pub.add(  'INTERFACING SALES CREDITS FOR FREIGHT' , 5 ) ;
4079    END IF;
4080    --moac
4081    l_cr_srep_for_freight := NVL(OE_SYS_PARAMETERS.value('WSH_CR_SREP_FOR_FREIGHT',p_line_rec.org_id), 'N');
4082    -- If the profile option 'OM: Credit Salesperson for Freight on Sales'
4083    -- is set to 'Yes' then interface header/line sales credits otherwise
4084    -- insert dummy sales credits.
4085    IF l_cr_srep_for_freight = 'Y' THEN
4086       IF p_line_level_charge = 'Y' THEN
4087          -- interface line sales credits if there are any otherwise get from its parent
4088          Interface_Salescredits(p_line_rec
4089                                ,p_interface_line_rec
4090                                ,l_return_status);
4091       ELSE
4092         --Interface quota, non-quota Header Sales Credits
4093         OE_Header_Scredit_Util.Query_Rows(p_header_id => p_line_rec.header_id, x_header_scredit_tbl=>l_header_scredit_tbl);
4094         IF l_header_scredit_tbl.COUNT <> 0 THEN
4095            FOR I IN 1..l_header_scredit_tbl.COUNT LOOP
4096               l_header_scredit_rec := l_header_scredit_tbl(I);
4097               Prepare_Salescredit_rec
4098                   (p_header_scredit_rec      => l_header_scredit_rec
4099                   ,p_interface_line_rec      => p_interface_line_rec
4100                   ,x_interface_scredit_rec   => l_interface_scredit_rec);
4101               Insert_Salescredit(l_interface_scredit_rec);
4102             END LOOP;
4103         END IF;
4104       END IF;
4105    ELSE
4106       -- Interface dummy quota freight sales credits
4107       Prepare_Salescredit_rec
4108               (p_interface_line_rec      => p_interface_line_rec
4109               ,x_interface_scredit_rec   => l_interface_scredit_rec);
4110       Insert_Salescredit(l_interface_scredit_rec);
4111    END IF;
4112    IF l_debug_level  > 0 THEN
4113        oe_debug_pub.add(  'INTERFACE SALES CREDITS FOR FREIGHT SUCCESSFULLY ' , 5 ) ;
4114    END IF;
4115 EXCEPTION
4116      WHEN OTHERS THEN
4117           IF l_debug_level  > 0 THEN
4118               oe_debug_pub.add(  'EXCEPTION , INTERFACE SALES CREDITS FOR FREIGHT '||SQLERRM , 1 ) ;
4119           END IF;
4120           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4121           THEN
4122             OE_MSG_PUB.Add_Exc_Msg
4123             (   G_PKG_NAME
4124             ,   'Interface_scredits_for_freight'
4125             );
4126           END IF;
4127 END Interface_scredits_for_freight;
4128 --Customer Acceptance
4129 FUNCTION Line_Rejected(p_line_rec IN OE_ORDER_PUB.Line_Rec_Type) RETURN BOOLEAN IS
4130 BEGIN
4131 
4132     IF p_line_rec.line_category_code= 'ORDER' THEN
4133         IF (p_line_rec.flow_status_code='PRE-BILLING_ACCEPTANCE' OR
4134            OE_ACCEPTANCE_UTIL.Pre_billing_acceptance_on (p_line_rec => p_line_rec))
4135             AND OE_ACCEPTANCE_UTIL.Acceptance_Status(p_line_rec => p_line_rec) = 'REJECTED' THEN
4136             RETURN TRUE;
4137          ELSE
4138             RETURN FALSE;
4139          END IF;
4140 
4141     ELSE -- Return line
4142 
4143        IF p_line_rec.reference_line_id IS NOT NULL THEN
4144           IF OE_ACCEPTANCE_UTIL.Pre_billing_acceptance_on (p_line_id => p_line_rec.reference_line_id)
4145             AND OE_ACCEPTANCE_UTIL.Acceptance_Status(p_line_id => p_line_rec.reference_line_id) = 'REJECTED' THEN
4146              RETURN TRUE;
4147            ELSE
4148               RETURN FALSE;
4149           END IF;
4150        ELSE
4151           RETURN FALSE;
4152        END IF;
4153    END IF;
4154 END Line_Rejected;
4155 
4156 PROCEDURE Prepare_Contingency_rec
4157 (   p_line_rec       IN     OE_Order_Pub.Line_Rec_Type
4158 ,   p_interface_line_rec     IN     RA_Interface_Lines_Rec_Type
4159 ,   x_interface_conts_rec  IN OUT NOCOPY   RA_Interface_Conts_Rec_Type
4160 ) IS
4161 l_revrec_event_code VARCHAR2(30);
4162 l_expiration_days NUMBER;
4163 --
4164 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4165 --
4166 BEGIN
4167     IF l_debug_level  > 0 THEN
4168         oe_debug_pub.add(  'ENTER PREPARE_CONTINGENCIES_REC ( ) PROCEDURE' , 5 ) ;
4169     END IF;
4170 
4171     OE_ACCEPTANCE_UTIL.Get_Contingency_attributes
4172        (p_line_rec => p_line_rec
4173 	,x_contingency_id =>    x_interface_conts_rec.contingency_id
4174 	,x_revrec_event_code => l_revrec_event_code
4175 	,x_revrec_expiration_days =>    l_expiration_days);
4176 
4177     IF x_interface_conts_rec.contingency_id IS NULL THEN
4178        IF l_debug_level  > 0 THEN
4179           oe_debug_pub.add(  'Returning from prepare_contingencies - no contingency');
4180        END IF;
4181        RETURN;
4182     END IF;
4183     x_interface_conts_rec.CREATION_DATE := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
4184     x_interface_conts_rec.LAST_UPDATE_DATE:= INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(sysdate,p_interface_line_rec.org_id);
4185     x_interface_conts_rec.CREATED_BY             := p_interface_line_rec.created_by;
4186     x_interface_conts_rec.LAST_UPDATED_BY       := p_interface_line_rec.last_updated_by;
4187     x_interface_conts_rec.INTERFACE_LINE_CONTEXT      := p_interface_line_rec.INTERFACE_LINE_CONTEXT;
4188     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE1  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1;
4189     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE2  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2;
4190     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE3  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3;
4191     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE4  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4;
4192     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE5  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5;
4193     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE6  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE6;
4194     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE7  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7;
4195     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE8  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8;
4196     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE9  := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9;
4197     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE10 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE10;
4198     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE11 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE11;
4199     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE12 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE12;
4200     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE13 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE13;
4201     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE14 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE14;
4202     x_interface_conts_rec.INTERFACE_LINE_ATTRIBUTE15 := p_interface_line_rec.INTERFACE_LINE_ATTRIBUTE15;
4203 
4204     x_interface_conts_rec.EXPIRATION_DAYS := nvl(p_line_rec.REVREC_EXPIRATION_DAYS, l_expiration_days);
4205     x_interface_conts_rec.EXPIRATION_DATE := NULL;
4206     IF p_line_rec.REVREC_SIGNATURE_DATE IS NOT NULL THEN
4207        x_interface_conts_rec.COMPLETED_FLAG := 'Y';
4208     END IF;
4209     /* commenting out because AR does not support expiration date on ar_interface_conts_all at this point of time. See bug# 5026580
4210     IF x_interface_conts_rec.EXPIRATION_DATE IS NOT NULL THEN
4211        x_interface_conts_rec.EXPIRATION_DATE := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(x_interface_conts_rec.EXPIRATION_DATE,p_line_rec.org_id);
4212        x_interface_conts_rec.COMPLETED_FLAG := 'Y';
4213     ELSE -- bug# 5049677
4214        x_interface_conts_rec.expiration_days := nvl(p_line_rec.REVREC_EXPIRATION_DAYS, l_expiration_days);
4215     END IF; */
4216     x_interface_conts_rec.org_id := p_line_rec.org_id;
4217     x_interface_conts_rec.completed_by := p_line_rec.accepted_by;
4218 
4219     IF l_debug_level  > 0 THEN
4220         oe_debug_pub.add(  'EXITING PREPARE_CONTINGENCY_REC' , 5 ) ;
4221     END IF;
4222  END Prepare_Contingency_rec;
4223 
4224 PROCEDURE Insert_Contingency
4225 (   p_contingency_rec  IN Ra_Interface_Conts_Rec_Type
4226 ) IS
4227 --
4228 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4229 --
4230 l_msg_count NUMBER;
4231 l_msg_data VARCHAR2(2000);
4232 l_return_status VARCHAR2(15);
4233 
4234 BEGIN
4235 
4236    IF l_debug_level  > 0 THEN
4237        oe_debug_pub.add(  'INSERTING CONTINGENCY RECORDS ' , 5 ) ;
4238    END IF;
4239 
4240      INSERT INTO AR_INTERFACE_CONTS_ALL
4241                  (CREATED_BY
4242                   ,CREATION_DATE
4243                   ,LAST_UPDATED_BY
4244                   ,LAST_UPDATE_DATE
4245                   ,INTERFACE_LINE_CONTEXT
4246                   ,INTERFACE_LINE_ATTRIBUTE1
4247                   ,INTERFACE_LINE_ATTRIBUTE2
4248                   ,INTERFACE_LINE_ATTRIBUTE3
4249                   ,INTERFACE_LINE_ATTRIBUTE4
4250                   ,INTERFACE_LINE_ATTRIBUTE5
4251                   ,INTERFACE_LINE_ATTRIBUTE6
4252                   ,INTERFACE_LINE_ATTRIBUTE7
4253                   ,INTERFACE_LINE_ATTRIBUTE8
4254                   ,INTERFACE_LINE_ATTRIBUTE9
4255                   ,INTERFACE_LINE_ATTRIBUTE10
4256                   ,INTERFACE_LINE_ATTRIBUTE11
4257                   ,INTERFACE_LINE_ATTRIBUTE12
4258                   ,INTERFACE_LINE_ATTRIBUTE13
4259                   ,INTERFACE_LINE_ATTRIBUTE14
4260                   ,INTERFACE_LINE_ATTRIBUTE15
4261                   ,INTERFACE_CONTINGENCY_ID
4262                   ,CONTINGENCY_ID
4263 		  ,EXPIRATION_DAYS
4264                   ,EXPIRATION_DATE
4265                   ,COMPLETED_FLAG
4266                   ,EXPIRATION_EVENT_DATE
4267 		  ,COMPLETED_BY
4268                  ,ORG_ID)
4269             VALUES
4270                   (p_contingency_rec.CREATED_BY
4271                   ,p_contingency_rec.CREATION_DATE
4272                   ,p_contingency_rec.LAST_UPDATED_BY
4273                   ,p_contingency_rec.LAST_UPDATE_DATE
4274                   ,p_contingency_rec.INTERFACE_LINE_CONTEXT
4275                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE1
4276                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE2
4277                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE3
4278                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE4
4279                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE5
4280                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE6
4281                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE7
4282                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE8
4283                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE9
4284                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE10
4285                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE11
4286                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE12
4287                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE13
4288                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE14
4289                   ,p_contingency_rec.INTERFACE_LINE_ATTRIBUTE15
4290                   ,p_contingency_rec.interface_contingency_id
4291 		  , p_contingency_rec.contingency_id
4292 		  , p_contingency_rec.expiration_days
4293                   , p_contingency_rec.EXPIRATION_DATE
4294                   , p_contingency_rec.COMPLETED_FLAG
4295                   , p_contingency_rec.EXPIRATION_EVENT_DATE
4296 		  , p_contingency_rec.completed_by
4297                   ,p_contingency_rec.ORG_ID);
4298 
4299           IF l_debug_level  > 0 THEN
4300               oe_debug_pub.add(  'SUCCESSFULLY INSERTED CONTINGENCY  RECORDS' , 5 ) ;
4301           END IF;
4302        EXCEPTION WHEN OTHERS THEN
4303           IF l_debug_level  > 0 THEN
4304               oe_debug_pub.add(  'UNABLE TO INSERT CONTINGENCY RECORDS -> '||SQLERRM , 1 ) ;
4305           END IF;
4306           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4307                OE_MSG_PUB.Add_Exc_Msg
4308                (   G_PKG_NAME
4309                ,   'Insert_Contingency'
4310                );
4311           END IF;
4312  END Insert_Contingency;
4313 
4314 --This procedure interfaces the contingency record by preparing it and inserting into AR_INTERFACE_CONTS_ALL
4315 
4316 PROCEDURE Interface_Contingencies
4317 (   p_line_rec   IN   OE_Order_Pub.Line_Rec_Type
4318 ,   p_interface_line_rec        IN  RA_Interface_Lines_Rec_Type
4319 ,   x_return_status  OUT NOCOPY VARCHAR2
4320 )
4321 IS
4322 l_interface_conts_rec     RA_Interface_Conts_Rec_Type;
4323 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
4324 --
4325 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4326 --
4327 BEGIN
4328  IF l_debug_level  > 0 THEN
4329      oe_debug_pub.add(  'ENTER INTERFACE_CONTINGENCIES ( ) PROCEDURE ' , 5 ) ;
4330  END IF;
4331 
4332  IF NVL(OE_SYS_PARAMETERS.VALUE('ENABLE_FULFILLMENT_ACCEPTANCE'), 'N') = 'N' THEN
4333     IF l_debug_level  > 0 THEN
4334        oe_debug_pub.add(  'Acceptance not enabled, Not interfacing Contingency details');
4335     END IF;
4336      -- Do not interface acceptance details
4337      RETURN;
4338  END IF;
4339 
4340    Prepare_Contingency_rec
4341    (   p_line_rec       => p_line_rec
4342     ,   p_interface_line_rec     => p_interface_line_rec
4343     ,   x_interface_conts_rec  => l_interface_conts_rec
4344     );
4345 
4346     IF l_interface_conts_rec.contingency_id IS NOT NULL THEN
4347        IF l_debug_level  > 0 THEN
4348           oe_debug_pub.add(  'Interfacing Contingency details');
4349        END IF;
4350      Insert_Contingency(l_interface_conts_rec);
4351     ELSE
4352        IF l_debug_level  > 0 THEN
4353           oe_debug_pub.add(  'No Contingency on the line, Not interfacing Contingency details');
4354        END IF;
4355        RETURN;
4356     END IF;
4357 x_return_status := l_return_status;
4358 IF l_debug_level  > 0 THEN
4359     oe_debug_pub.add(  'INTERFACE_CONTINGENCIES ( ) PROCDURE SUCCESS : '||l_RETURN_STATUS , 1 ) ;
4360 END IF;
4361 EXCEPTION
4362      WHEN OTHERS THEN
4363           IF l_debug_level  > 0 THEN
4364               oe_debug_pub.add(  'EXCEPTION INTERFACE_CONTINGENCIES ( ) '||SQLERRM , 1 ) ;
4365           END IF;
4366           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4367           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4368           THEN
4369             OE_MSG_PUB.Add_Exc_Msg
4370             (   G_PKG_NAME
4371             ,   'Interface_Contingencies');
4372           END IF;
4373 END Interface_Contingencies;
4374 --customer acceptance
4375 -- 3685479 Changed the signature of the procedure with extra parameter p_adjustments_tbl
4376 PROCEDURE Get_Rounding_Diff
4377 (  p_line_rec              IN   OE_Order_Pub.Line_Rec_Type
4378 ,  p_interface_line_rec    IN   RA_Interface_Lines_Rec_Type
4379 ,  p_adjustments_tbl       IN   OE_Header_Adj_Util.Line_Adjustments_Tab_Type
4380 ,  x_rounding_diff         OUT NOCOPY NUMBER
4381 ) IS
4382 l_adjustments_tbl    OE_Header_Adj_Util.Line_Adjustments_Tab_Type;
4383 l_adjustments_rec    OE_Header_Adj_Util.Line_Adjustments_Rec_Type;
4384 l_line_adj_rec       OE_Order_PUB.Line_Adj_Rec_Type;
4385 l_line_tot_amount    NUMBER;
4386 l_ind_line_tot       NUMBER;
4387 l_ind_disc_tot       NUMBER;
4388 l_comb_ind_line_tots NUMBER;
4389 --
4390 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4391 --
4392 l_header_id NUMBER;
4393 l_line_id   NUMBER;
4394 BEGIN
4395     IF l_debug_level  > 0 THEN
4396         oe_debug_pub.add(  'ENTER GET_ROUNDING_DIFF ( ) PROCEDURE' , 5 ) ;
4397     END IF;
4398 
4399      -- Removed the previous call to get_line_adjustments as adjustment table is passed now
4400 
4401      IF l_debug_level  > 0 THEN
4402         oe_debug_pub.add(  'p_adjustments_tbl.COUNT:'||p_adjustments_tbl.COUNT);
4403      END IF;
4404 
4405      -- 3685479 Replaced call to show_detail_discounts by the foll IF
4406      IF (oe_sys_parameters.value('OE_DISCOUNT_DETAILS_ON_INVOICE',p_line_rec.org_id) = 'Y' AND p_adjustments_tbl.COUNT > 0) THEN --moac
4407         -- get line total when the profile is off
4408         Rounded_Amount(p_currency_code => p_interface_line_rec.currency_code
4409                       ,p_unrounded_amount => (p_line_rec.unit_selling_price * p_interface_line_rec.quantity)
4410                       ,x_rounded_amount => l_line_tot_amount);
4411         IF l_debug_level  > 0 THEN
4412             oe_debug_pub.add(  'LINE TOTAL WHEN SHOW DISCOUNTS PROFILE IS OFF: '||L_LINE_TOT_AMOUNT , 5 ) ;
4413         END IF;
4414         -- get line total when the profile is on
4415         Rounded_Amount(p_currency_code => p_interface_line_rec.currency_code
4416                       ,p_unrounded_amount => (p_line_rec.unit_list_price * p_interface_line_rec.quantity)
4417                       ,x_rounded_amount => l_ind_line_tot);
4418         IF l_debug_level  > 0 THEN
4419             oe_debug_pub.add(  'LINE TOTAL WHEN SHOW DISCOUNTS PROFILE IS ON: '||L_IND_LINE_TOT , 5 ) ;
4420         END IF;
4421         IF p_adjustments_tbl.COUNT <> 0 THEN
4422            FOR I IN 1..p_adjustments_tbl.COUNT LOOP
4423                l_adjustments_rec := p_adjustments_tbl(I);
4424                Rounded_Amount(p_currency_code => p_interface_line_rec.currency_code
4425                              ,p_unrounded_amount => (l_adjustments_rec.unit_discount_amount * p_interface_line_rec.quantity * -1)
4426                              ,x_rounded_amount => l_ind_disc_tot);
4427               IF l_debug_level  > 0 THEN
4428                   oe_debug_pub.add(  'PROCESSING RECORD# '||I|| ': '||'DISCOUNT LINE TOTAL FOR ADJ_ID= '||L_ADJUSTMENTS_REC.PRICE_ADJUSTMENT_ID||': ' ||L_IND_DISC_TOT , 5 ) ;
4429               END IF;
4430               l_ind_line_tot := l_ind_line_tot + l_ind_disc_tot;
4431               IF l_debug_level  > 0 THEN
4432                   oe_debug_pub.add(  'INTERMEDIATE TOTAL: '||L_IND_LINE_TOT , 5 ) ;
4433               END IF;
4434            END LOOP;
4435            Rounded_Amount(p_currency_code => p_interface_line_rec.currency_code
4436                          ,p_unrounded_amount => l_ind_line_tot
4437                          ,x_rounded_amount => l_comb_ind_line_tots);
4438            IF l_debug_level  > 0 THEN
4439                oe_debug_pub.add(  'ROUNDED TOTAL FOR THE LINE WHEN SHOW DISCOUNTS IS ON => '||L_COMB_IND_LINE_TOTS , 5 ) ;
4440            END IF;
4441         END IF;
4442         IF l_line_tot_amount = l_comb_ind_line_tots THEN
4443            x_rounding_diff := NULL;
4444         ELSE
4445         -- This difference should go with the first discount line
4446            x_rounding_diff := l_line_tot_amount - l_comb_ind_line_tots;
4447         END IF;
4448      END IF;
4449      IF l_debug_level  > 0 THEN
4450          oe_debug_pub.add(  'EXIT GET_ROUNDING_DIFF ( ) WITH ROUNDING DIFFERENCE : '||X_ROUNDING_DIFF , 5 ) ;
4451      END IF;
4452 EXCEPTION
4453      WHEN OTHERS THEN
4454           IF l_debug_level  > 0 THEN
4455               oe_debug_pub.add(  'EXCEPTION , ROUNDING DIFFERENCE '||SQLERRM , 1 ) ;
4456           END IF;
4457           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4458           THEN
4459              OE_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,'Get_Rounding_Diff');
4460           END IF;
4461 END Get_Rounding_Diff;
4462 
4463 PROCEDURE Interface_Detail_Discounts
4464 (  p_line_rec              IN   OE_Order_Pub.Line_Rec_Type
4465 ,  p_interface_line_rec    IN   RA_Interface_Lines_Rec_Type
4466 ,  x_return_status         OUT NOCOPY  VARCHAR2
4467 ) IS
4468 l_discounts_rec      RA_Interface_Lines_Rec_Type;
4469 l_adjustments_tbl    OE_Header_Adj_Util.Line_Adjustments_Tab_Type;
4470 l_adjustments_rec    OE_Header_Adj_Util.Line_Adjustments_Rec_Type;
4471 l_line_adj_rec       OE_Order_PUB.Line_Adj_Rec_Type;
4472 l_header_adj_rec     OE_Order_PUB.Header_Adj_Rec_Type;
4473 l_return_status      VARCHAR2(30);
4474 l_rounding_diff      NUMBER;
4475 l_rounding_diff_applied VARCHAR2(1) :='N';
4476 l_reference_line_id  NUMBER;
4477 
4478 l_ref_header_id      NUMBER;
4479 l_ref_line_id        NUMBER;
4480 l_rounded_amount     NUMBER;
4481 
4482 cursor order_info(c_line_id number)
4483 is
4484 select header_id, line_id
4485 from   oe_order_lines_all
4486 where  line_id = c_line_id;
4487 --
4488 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4489 --
4490 l_header_id NUMBER;
4491 l_line_id NUMBER;
4492 BEGIN
4493 IF l_debug_level  > 0 THEN
4494     oe_debug_pub.add(  'ENTERING INTERFACE_DETAIL_DISCOUNTS ( ) PROCEDURE ' , 5 ) ;
4495 END IF;
4496     -- 3661895 The IF will be true only for return retrobilled RMA, all others will go through else
4497     -- RT{
4498     IF (p_line_rec.line_category_code = 'RETURN'
4499       and p_line_rec.reference_line_id IS NOT NULL
4500       and p_line_rec.retrobill_request_id IS NOT NULL) THEN
4501 
4502      OE_RETROBILL_PVT.Get_Line_Adjustments
4503                                   (p_line_rec          =>  p_line_rec
4504                                   ,x_line_adjustments  =>  l_adjustments_tbl);
4505     ELSE
4506 
4507      OE_Header_Adj_Util.Get_Line_Adjustments
4508 	               (p_header_id         =>   p_line_rec.header_id
4509 		       ,p_line_id           =>   p_line_rec.line_id
4510 		       ,x_line_adjustments  =>   l_adjustments_tbl);
4511     END IF;
4512     -- RT}
4513 
4514     -- Prepare l_discounts_rec from l_adjustments_tbl and p_interface_line_rec
4515     -- keep all other info same as line
4516 IF l_adjustments_tbl.COUNT <> 0 THEN
4517    FOR I IN 1..l_adjustments_tbl.COUNT LOOP
4518        l_adjustments_rec := l_adjustments_tbl(I);
4519        l_discounts_rec   := p_interface_line_rec;
4520        OE_Line_Adj_Util.Query_Row(p_price_adjustment_id=>l_adjustments_rec.price_adjustment_id,x_line_adj_rec=>l_line_adj_rec);
4521            -- Do not set mandatory grouping columns to different value than order line.
4522            -- This can cause discount lines to group into different invoice (if values
4523            -- are different from sales order line)
4524            -- l_discounts_rec.INTERFACE_LINE_ATTRIBUTE3 := '0';
4525        --l_discounts_rec.INTERFACE_LINE_ATTRIBUTE4 := '0'; -- bug 5843869
4526        l_discounts_rec.INTERFACE_LINE_ATTRIBUTE7 := '0';
4527        /* 1847224  l_discounts_rec.INTERFACE_LINE_ATTRIBUTE8 := '0'; */
4528        l_discounts_rec.INTERFACE_LINE_ATTRIBUTE11 := l_adjustments_rec.price_adjustment_id;
4529        /* 1789057, populate list_line_no in addition to adjustment name */
4530        if l_adjustments_rec.list_line_no is NULL then
4531 	      l_discounts_rec.Description := l_adjustments_rec.adjustment_name;
4532        else
4533           l_discounts_rec.Description := substr(l_adjustments_rec.adjustment_name,1,119)||'.'||substr(l_adjustments_rec.list_line_no,1,120);
4534        end if;
4535 
4536        -- bug 2509121.
4537        -- translated description is only needed for sales order line.
4538        IF l_discounts_rec.translated_description is not null THEN
4539          l_discounts_rec.translated_description := null;
4540        END IF;
4541 
4542        -- Quantity comes with the correct creation sign from the interface_line record. No need to adjust here
4543        l_discounts_rec.Unit_Selling_Price := l_adjustments_rec.unit_discount_amount * -1;
4544        l_discounts_rec.Unit_Standard_Price := l_adjustments_rec.unit_discount_amount * -1;
4545        IF l_debug_level  > 0 THEN
4546            oe_debug_pub.add(  'ORIGINAL UNIT DISCOUNT AMOUNT : '||L_ADJUSTMENTS_REC.UNIT_DISCOUNT_AMOUNT , 5 ) ;
4547        END IF;
4548        Rounded_Amount(p_currency_code => l_discounts_rec.currency_code
4549                       ,p_unrounded_amount => (l_discounts_rec.unit_selling_price * l_discounts_rec.quantity)
4550                       ,x_rounded_amount => l_discounts_rec.amount);
4551        IF l_debug_level  > 0 THEN
4552            oe_debug_pub.add(  'DISCOUNT UNIT_SELLING_PRICE: '||L_DISCOUNTS_REC.UNIT_SELLING_PRICE , 5 ) ;
4553            oe_debug_pub.add(  'DISCOUNT UNIT_STANDARD_PRICE: '||L_DISCOUNTS_REC.UNIT_STANDARD_PRICE , 5 ) ;
4554            oe_debug_pub.add(  'DISCOUNT AMOUNT: '||L_DISCOUNTS_REC.AMOUNT , 5 ) ;
4555        END IF;
4556        IF l_rounding_diff_applied = 'N' THEN
4557           IF (l_discounts_rec.quantity = 0 OR l_discounts_rec.amount = 0) THEN
4558              IF l_debug_level  > 0 THEN
4559                  oe_debug_pub.add(  'NOT APPLYING ROUNDING DIFF TO THIS DISCOUNT' ) ;
4560              END IF;
4561           ELSE
4562              -- 3685479 Changed signature to pass adjustments table
4563              Get_Rounding_Diff(p_line_rec => p_line_rec
4564                               ,p_interface_line_rec => p_interface_line_rec
4565                               ,p_adjustments_tbl => l_adjustments_tbl
4566                               , x_rounding_diff => l_rounding_diff);
4567              IF (l_rounding_diff IS NOT NULL AND l_rounding_diff <> 0) THEN
4568                 l_discounts_rec.amount := l_discounts_rec.amount + l_rounding_diff;
4569                 IF l_debug_level  > 0 THEN
4570                     oe_debug_pub.add(  'DISCOUNT TOTAL AFTER ADDING ROUNDING DIFF: '||L_DISCOUNTS_REC.AMOUNT , 5 ) ;
4571                 END IF;
4572 
4573                 Rounded_Amount(p_currency_code  => l_discounts_rec.currency_code
4574                                ,p_unrounded_amount => l_discounts_rec.amount
4575                                ,x_rounded_amount   => l_rounded_amount);
4576 
4577                 l_discounts_rec.amount := l_rounded_amount;
4578 
4579                 IF l_debug_level  > 0 THEN
4580                     oe_debug_pub.add(  'DISCOUNT TOTAL AFTER ADDING ROUNDING DIFF AND ROUNDING: '||L_DISCOUNTS_REC.AMOUNT , 5 ) ;
4581                 END IF;
4582                 l_discounts_rec.unit_selling_price := l_discounts_rec.amount /l_discounts_rec.quantity;
4583                 IF l_debug_level  > 0 THEN
4584                     oe_debug_pub.add(  'DISCOUNT UNIT_SELLING_PRICE AFTER ADDING ROUNDING DIFF: '||L_DISCOUNTS_REC.UNIT_SELLING_PRICE , 5 ) ;
4585                 END IF;
4586              END IF;
4587              l_rounding_diff_applied := 'Y';
4588           END IF;
4589        END IF;
4590        l_discounts_rec.Fob_Point      := NULL;
4591    --    l_discounts_rec.Ship_Via       := NULL; -- for bug# 5024577
4592       -- l_discounts_rec.Waybill_Number := NULL;  --bug 5843869
4593        IF l_debug_level  > 0 THEN
4594            oe_debug_pub.add(  'REFERENCE LINE_ID '||L_DISCOUNTS_REC.REFERENCE_LINE_ID , 5 ) ;
4595            oe_debug_pub.add(  'LINE CATEGORY CODE '||P_LINE_REC.LINE_CATEGORY_CODE , 5 ) ;
4596        END IF;
4597        IF p_line_rec.line_category_code = 'RETURN' AND l_discounts_rec.reference_line_id IS NOT NULL THEN
4598           -- 3645784
4599           -- RT{Retrobill Lines with line type return will not have reference information populated
4600           -- So setting the reference info with original order Header_id and Line_id
4601           IF ( p_line_rec.order_source_id = 27) THEN
4602              l_ref_header_id := to_number(p_line_rec.orig_sys_document_ref);
4603              l_ref_line_id   := to_number(p_line_rec.orig_sys_line_ref);
4604              oe_debug_pub.add('Retro:After setting reference line id');
4605           ELSE
4606              FOR order_info_rec in order_info(p_line_rec.reference_line_id) loop
4607                  l_ref_header_id := order_info_rec.header_id;
4608                  l_ref_line_id   := order_info_rec.line_id;
4609              END LOOP;
4610           END IF;
4611              oe_debug_pub.add('l_ref_header_id'||l_ref_header_id);
4612              oe_debug_pub.add('l_ref_line_id'||l_ref_line_id);
4613            BEGIN
4614              SELECT dis.customer_trx_line_id
4615              INTO   l_reference_line_id
4616              FROM   RA_CUSTOMER_TRX_LINES_ALL DIS,
4617                     RA_CUSTOMER_TRX_LINES_ALL PAR
4618              WHERE  PAR.CUSTOMER_TRX_LINE_ID       = L_DISCOUNTS_REC.REFERENCE_LINE_ID
4619              AND    PAR.CUSTOMER_TRX_ID            = DIS.CUSTOMER_TRX_ID
4620              AND    DIS.INTERFACE_LINE_ATTRIBUTE6  = NVL(l_ref_line_id,DIS.INTERFACE_LINE_ATTRIBUTE6) --Bug2966839
4621              AND    DIS.INTERFACE_LINE_ATTRIBUTE11 =
4622                    (SELECT D.PRICE_ADJUSTMENT_ID
4623                     FROM   OE_PRICE_ADJUSTMENTS D
4624                     WHERE  D.HEADER_ID                   = l_ref_header_id
4625                     AND    NVL(D.LINE_ID, l_ref_line_id) = l_ref_line_id
4626                     AND    D.APPLIED_FLAG = 'Y'          -- 3630426 Added for Retrobilling
4627                     AND    D.LIST_LINE_ID                =
4628                           (SELECT D2.LIST_LINE_ID
4629                            FROM   OE_PRICE_ADJUSTMENTS D2
4630                            WHERE  D2.PRICE_ADJUSTMENT_ID = L_DISCOUNTS_REC.INTERFACE_LINE_ATTRIBUTE11));
4631 
4632              EXCEPTION
4633                        WHEN OTHERS THEN
4634                        -- 3661895 l_reference_line_id must be cleared when the sql fails
4635                        l_reference_line_id := NULL;
4636                        IF l_debug_level  > 0 THEN
4637                            oe_debug_pub.add(  'FAILED TO INSERT DISCOUNT RECORDS FOR THE RETURN LINES '||SQLERRM , 1 ) ;
4638                        END IF;
4639 		       -- Added for the FP bug #3802957
4640 		       l_reference_line_id := l_discounts_rec.Reference_Line_Id;
4641                        NULL;
4642              END;
4643              l_discounts_rec.Reference_Line_Id := l_reference_line_id;
4644              IF l_debug_level  > 0 THEN
4645                  oe_debug_pub.add(  'REFERENCE LINE_ID FOR DISCOUNT LINE : '||L_DISCOUNTS_REC.REFERENCE_LINE_ID , 5 ) ;
4646              END IF;
4647           END IF;
4648           --  l_discounts_rec.Reference_Line_Id := NULL;
4649        l_discounts_rec.PROMISED_COMMITMENT_AMOUNT := 0; -- For bug 6798675 NULL;
4650        l_discounts_rec.Attribute_Category := l_line_adj_rec.Context;
4651        l_discounts_rec.Attribute1 := substrb(l_line_adj_rec.Attribute1, 1, 150);
4652        l_discounts_rec.Attribute2 := substrb(l_line_adj_rec.Attribute2, 1, 150);
4653        l_discounts_rec.Attribute3 := substrb(l_line_adj_rec.Attribute3, 1, 150);
4654        l_discounts_rec.Attribute4 := substrb(l_line_adj_rec.Attribute4, 1, 150);
4655        l_discounts_rec.Attribute5 := substrb(l_line_adj_rec.Attribute5, 1, 150);
4656        l_discounts_rec.Attribute6 := substrb(l_line_adj_rec.Attribute6, 1, 150);
4657        l_discounts_rec.Attribute7 := substrb(l_line_adj_rec.Attribute7, 1, 150);
4658        l_discounts_rec.Attribute8 := substrb(l_line_adj_rec.Attribute8, 1, 150);
4659        l_discounts_rec.Attribute9 := substrb(l_line_adj_rec.Attribute9, 1, 150);
4660        l_discounts_rec.Attribute10 := substrb(l_line_adj_rec.Attribute10, 1, 150);
4661        l_discounts_rec.Attribute11 := substrb(l_line_adj_rec.Attribute11, 1, 150);
4662        l_discounts_rec.Attribute12 := substrb(l_line_adj_rec.Attribute12, 1, 150);
4663        l_discounts_rec.Attribute13 := substrb(l_line_adj_rec.Attribute13, 1, 150);
4664        l_discounts_rec.Attribute14 := substrb(l_line_adj_rec.Attribute14, 1, 150);
4665        l_discounts_rec.Attribute15 := substrb(l_line_adj_rec.Attribute15, 1, 150);
4666 
4667        Insert_Line(l_discounts_rec
4668                    ,x_return_status=>l_return_status);
4669        -- Fix for the bug 2187074
4670        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4671           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4672        END IF;
4673 
4674        -- Populate salescredits for discount lines
4675        Interface_Salescredits(p_line_rec
4676                               ,l_discounts_rec
4677                               ,l_return_status);
4678        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4679          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4680        END IF;
4681 
4682        --Customer Acceptance
4683        Interface_Contingencies
4684 	  (   p_line_rec   => p_line_rec
4685 	      ,   p_interface_line_rec        => l_discounts_rec
4686 	      ,   x_return_status  => l_return_status
4687 	    );
4688 
4689       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4690          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4691       END IF;
4692       --Customer Acceptance
4693     END LOOP;
4694 END IF;
4695 -- Fix for the bug 2187074
4696 x_return_status := FND_API.G_RET_STS_SUCCESS;
4697 IF l_debug_level  > 0 THEN
4698     oe_debug_pub.add(  'EXITING INTERFACE_DETAIL_DISCOUNTS ( ) PROCEDURE ' , 5 ) ;
4699 END IF;
4700 
4701 EXCEPTION
4702      WHEN OTHERS THEN
4703           IF l_debug_level  > 0 THEN
4704               oe_debug_pub.add(  'EXCEPTION IN INTERFACE_DETAIL_DISCOUNTS '||SQLERRM , 1 ) ;
4705           END IF;
4706           -- Fix for the bug 2187074
4707           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4708           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4709              OE_MSG_PUB.Add_Exc_Msg (G_PKG_NAME , 'Interface_Detail_Discounts');
4710           END IF;
4711 
4712 END Interface_Detail_Discounts;
4713 
4714 PROCEDURE Update_Invoiced_Flag
4715 (   p_price_adjustment_id  IN  NUMBER
4716 ,   p_adjusted_amount   IN NUMBER
4717 ,   p_invoiced_amount  IN NUMBER
4718 ,   x_return_status    OUT NOCOPY VARCHAR2
4719 ) IS
4720 l_Header_Adj_tbl              OE_Order_PUB.Header_Adj_Tbl_Type;
4721 l_Old_Header_Adj_tbl          OE_Order_PUB.Header_Adj_Tbl_Type;
4722 l_return_status               VARCHAR2(30);
4723 l_notify_index			NUMBER;  -- jolin
4724 
4725 --
4726 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4727 --
4728 BEGIN
4729     IF l_debug_level  > 0 THEN
4730         oe_debug_pub.add(  'ENTERING UPDATE_INVOICED_FLAG' , 1 ) ;
4731     END IF;
4732     OE_Header_Adj_Util.Lock_Rows
4733     	(P_PRICE_ADJUSTMENT_ID=>p_price_adjustment_id,
4734          X_HEADER_ADJ_TBL=>l_old_header_adj_tbl,
4735 	     X_RETURN_STATUS => l_return_status);
4736     IF    l_return_status = FND_API.G_RET_STS_ERROR THEN
4737 	      RAISE FND_API.G_EXC_ERROR;
4738     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4739 	      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4740     END IF;
4741     l_Header_Adj_tbl := l_old_Header_Adj_Tbl;
4742 
4743     oe_debug_pub.add('Charges Amount '||p_adjusted_amount);
4744     oe_debug_pub.add('Invoiced Amount'||p_invoiced_amount);
4745 
4746     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
4747        UPDATE OE_PRICE_ADJUSTMENTS
4748        SET    INVOICED_FLAG = 'Y'
4749               , INVOICED_AMOUNT = nvl(invoiced_amount,0) + p_invoiced_amount -- update with unrounded amount, for bug# 5400517
4750               , LOCK_CONTROL = LOCK_CONTROL + 1
4751        WHERE  PRICE_ADJUSTMENT_ID = p_price_adjustment_id;
4752 
4753        --bug 4760069
4754        /*UPDATE OE_PRICE_ADJUSTMENTS
4755        SET  UPDATED_FLAG = 'Y'
4756        WHERE PRICE_ADJUSTMENT_ID = p_price_adjustment_id
4757 	     AND line_id IS NOT NULL;*/
4758 
4759        l_Header_Adj_tbl(1).Invoiced_Amount := nvl(l_Header_Adj_tbl(1).Invoiced_Amount, 0)+p_invoiced_amount;
4760     Else
4761        UPDATE OE_PRICE_ADJUSTMENTS
4762        SET    INVOICED_FLAG = 'Y'
4763               , UPDATED_FLAG = 'Y'
4764 	      , LOCK_CONTROL = LOCK_CONTROL + 1
4765        WHERE  PRICE_ADJUSTMENT_ID = p_price_adjustment_id;
4766     End If;
4767 
4768     x_return_status := FND_API.G_RET_STS_SUCCESS;
4769     l_Header_Adj_tbl(1).Invoiced_Flag := 'Y';
4770     l_Header_Adj_tbl(1).lock_control := l_Header_Adj_tbl(1).lock_control + 1;
4771 
4772   -- jolin start
4773   IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110508' THEN
4774 
4775   -- call notification framework to get header adj index position
4776     OE_ORDER_UTIL.Update_Global_Picture
4777 	(p_Upd_New_Rec_If_Exists =>FALSE
4778 	, p_hdr_adj_rec		=> l_Header_Adj_tbl(1)
4779 	, p_old_hdr_adj_rec	=> l_Old_Header_Adj_tbl(1)
4780         , p_hdr_adj_id 		=> l_Header_Adj_tbl(1).price_adjustment_id
4781         , x_index 		=> l_notify_index
4782         , x_return_status 	=> l_return_status);
4783 
4784     IF l_debug_level  > 0 THEN
4785         oe_debug_pub.add(  'UPDATE_GLOBAL RETURN STATUS FOR HDR ADJ IS: ' || L_RETURN_STATUS ) ;
4786         oe_debug_pub.add(  'HDR ADJ INDEX IS: ' || L_NOTIFY_INDEX , 1 ) ;
4787     END IF;
4788 
4789    IF l_notify_index is not null then
4790      -- modify Global Picture
4791     OE_ORDER_UTIL.g_old_header_adj_tbl(l_notify_index) := l_old_header_adj_tbl(1);
4792     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index) := OE_ORDER_UTIL.g_old_header_adj_tbl(l_notify_index);
4793     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index).invoiced_amount:=
4794                         l_Header_Adj_tbl(1).invoiced_amount;
4795     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index).invoiced_flag:=
4796 			l_Header_Adj_tbl(1).invoiced_flag;
4797     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index).lock_control:=
4798 			l_header_adj_tbl(1).lock_control;
4799     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index).last_update_date:=
4800 			l_header_adj_tbl(1).last_update_date;
4801     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index).header_id:=
4802 			l_header_adj_tbl(1).header_id;
4803     OE_ORDER_UTIL.g_header_adj_tbl(l_notify_index).line_id:=
4804 			l_header_adj_tbl(1).line_id;
4805 
4806 			IF l_debug_level  > 0 THEN
4807 			    oe_debug_pub.add(  'GLOBAL HDR ADJ INVOICED_FLAG IS: ' || OE_ORDER_UTIL.G_HEADER_ADJ_TBL ( L_NOTIFY_INDEX ) .INVOICED_FLAG , 1 ) ;
4808 			    oe_debug_pub.add(  'GLOBAL HDR ADJ LOCK_CONTROL IS: ' || OE_ORDER_UTIL.G_HEADER_ADJ_TBL ( L_NOTIFY_INDEX ) .LOCK_CONTROL , 1 ) ;
4809 
4810 			 END IF;
4811 
4812     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4813          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4814     END IF;
4815 
4816 -- Process requests is TRUE so still need to call it, but don't need to notify
4817   IF l_debug_level  > 0 THEN
4818       oe_debug_pub.add(  'OEXPINVB: HDRADJ BEFORE CALLING PROCESS_REQUESTS_AND_NOTIFY' ) ;
4819   END IF;
4820     OE_Order_PVT.PROCESS_REQUESTS_AND_NOTIFY(
4821 				P_HEADER_ADJ_TBL 	=>l_Header_Adj_tbl,
4822                                 P_OLD_HEADER_ADJ_TBL 	=>l_Old_Header_Adj_tbl,
4823                                 P_PROCESS_REQUESTS 	=> TRUE,
4824                                 P_NOTIFY 		=> FALSE,
4825                                 X_RETURN_STATUS 	=> l_return_status);
4826 
4827     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4828          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4829     END IF;
4830 
4831    END IF ; /* global entity index null check */
4832 
4833   ELSE /* pre-pack H */
4834 
4835   IF l_debug_level  > 0 THEN
4836       oe_debug_pub.add(  'OEXPINVB: HDRADJ BEFORE CALLING PROCESS_REQUESTS_AND_NOTIFY' ) ;
4837   END IF;
4838     OE_Order_PVT.PROCESS_REQUESTS_AND_NOTIFY(
4839 				P_HEADER_ADJ_TBL 	=>l_Header_Adj_tbl,
4840                                 P_OLD_HEADER_ADJ_TBL 	=>l_Old_Header_Adj_tbl,
4841                                 P_PROCESS_REQUESTS 	=> TRUE,
4842                                 P_NOTIFY 		=> TRUE,
4843                                 X_RETURN_STATUS 	=> l_return_status);
4844 
4845     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4846          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4847     END IF;
4848 
4849     END IF; /* code set is pack H or higher */
4850     /* jolin end*/
4851 
4852     IF l_debug_level  > 0 THEN
4853         oe_debug_pub.add(  'EXIT UPDATE_INVOICED_FLAG ( ) PROCEDURE' , 1 ) ;
4854     END IF;
4855 
4856 EXCEPTION
4857     WHEN OTHERS THEN
4858         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4859         IF      FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4860         THEN
4861                 OE_MSG_PUB.Add_Exc_Msg
4862                         (   G_PKG_NAME
4863                         ,   'Update_Invoiced_flag'
4864                         );
4865         END IF;
4866 END Update_Invoiced_Flag;
4867 
4868 PROCEDURE Prepare_Freight_Charges_Rec
4869 (  p_line_rec       IN OE_Order_Pub.Line_Rec_Type
4870 ,  p_x_charges_rec  IN  OUT NOCOPY RA_Interface_Lines_Rec_Type
4871 ) IS
4872 -- l_vat_flag         VARCHAR2(1);
4873 l_freight_as_line  VARCHAR2(1);
4874 l_freight_item     NUMBER;
4875 l_reference_line_id NUMBER;
4876 
4877 l_ref_header_id    NUMBER;
4878 l_ref_line_id      NUMBER;
4879 l_ref_order_number VARCHAR2(30);
4880 l_ref_order_type   VARCHAR2(30);
4881 l_rounded_amount   NUMBER;
4882 
4883 CURSOR ORDER_INFO(c_line_id NUMBER) IS
4884 SELECT ooh.header_id
4885      , ool.line_id
4886      , ooh.order_number
4887      , ott.name order_type
4888 FROM   oe_order_lines ool,
4889        oe_order_headers_all ooh,  /* MOAC SQL CHANGE */
4890        oe_transaction_types_tl ott
4891 WHERE  ool.line_id             = c_line_id
4892 AND    ooh.header_id           = ool.header_id
4893 AND    ott.transaction_type_id = ooh.order_type_id
4894 AND    ott.language            =
4895       (select language_code
4896        from   fnd_languages
4897        where  installed_flag = 'B');
4898        --
4899        l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4900        --
4901 BEGIN
4902    IF l_debug_level  > 0 THEN
4903        oe_debug_pub.add(  'ENTER PREPARE_FREIGHT_CHARGES_REC ( ) PROCEDURE ' , 5 ) ;
4904        oe_debug_pub.add(  'PREPARING FOR CHARGE ID : '|| P_X_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 ) ;
4905    END IF;
4906 
4907    -- Do not set mandatory grouping columns to different value than order line.
4908    -- This can cause freight charges to group into different invoice (if values
4909    -- are different from sales order line)
4910    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE5  := 1;
4911    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE7  := '0'; --picking line id
4912    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE8  := '0'; -- bill_of_lading;
4913    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE9  := '0'; -- customer item number
4914    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE12 := lpad('0', 30); -- shipment number
4915    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE13 := lpad('0', 30); -- option number
4916    p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE14 := lpad('0', 30); -- service number
4917    -- l_vat_flag := NVL(FND_PROFILE.VALUE('AR_ALLOW_TAX_CODE_OVERRIDE'), 'N');
4918    l_freight_as_line := NVL(oe_sys_parameters.value('OE_INVOICE_FREIGHT_AS_LINE',p_line_rec.org_id), 'N'); --moac
4919    IF l_debug_level  > 0 THEN
4920        oe_debug_pub.add(  'INVOICE FREIGHT AS REVENUE '||L_FREIGHT_AS_LINE ) ;
4921    END IF;
4922    l_freight_item := oe_sys_parameters.value('OE_INVENTORY_ITEM_FOR_FREIGHT',p_line_rec.org_id); --moac
4923    /* VAT on freight
4924         if vat_flag = 'Y'
4925            if freight_as_line = 'Y'
4926              if freight_item is NULL
4927                o inventory_item_id = NULL
4928                o description = lookup meaning for FREIGHT
4929                o line_type = 'LINE'
4930              else
4931                o inventory_item_id = freight_item
4932                o description = freight item's description
4933                o line_type = 'LINE'
4934            else
4935                o inventory_item_id = NULL
4936                o description = lookup meaning for FREIGHT
4937                o line_type = 'FREIGHT'
4938        if vat = 'Y' and freight_as_line = 'Y' and freight_item not null
4939           get description from mtl_system_items
4940        else
4941           get description from ar_lookups */
4942 
4943    -- per bug 2382340, take out the dependency on AR_ALLOW_TAX_CODE_OVERRIDE.
4944    -- IF l_vat_flag = 'Y' AND l_freight_as_line = 'Y'AND l_freight_item IS NOT NULL THEN
4945    BEGIN
4946    IF l_freight_as_line = 'Y'AND l_freight_item IS NOT NULL THEN
4947      SELECT description
4948             ,primary_uom_code
4949      INTO   p_x_charges_rec.Description
4950             ,p_x_charges_rec.Uom_Code
4951      FROM   mtl_system_items
4952      WHERE  inventory_item_id = l_freight_item
4953      AND    organization_id =  oe_sys_parameters.value('MASTER_ORGANIZATION_ID', p_line_rec.org_id);
4954    ELSE
4955      SELECT meaning
4956             ,NULL
4957      INTO   p_x_charges_rec.Description
4958             ,p_x_charges_rec.Uom_Code
4959      FROM   ar_lookups
4960      WHERE  lookup_type = 'STD_LINE_TYPE'
4961      AND    lookup_code = 'FREIGHT';
4962    END IF;
4963 
4964    EXCEPTION
4965       WHEN NO_DATA_FOUND THEN
4966          IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
4967           FND_MESSAGE.SET_NAME('ONT','ONT_FREIGHT_ITEM_REQUIRED');
4968           OE_MSG_PUB.ADD;
4969          END IF;
4970 
4971          RAISE FND_API.G_EXC_ERROR;
4972    END;
4973 
4974    IF l_freight_as_line = 'Y' THEN
4975       IF l_freight_item IS NULL THEN
4976          p_x_charges_rec.Inventory_Item_Id := NULL;
4977          p_x_charges_rec.Line_Type := 'LINE';
4978       ELSE
4979          p_x_charges_rec.Inventory_Item_Id := l_freight_item;
4980          p_x_charges_rec.Line_Type := 'LINE';
4981       END IF;
4982    ELSE
4983      p_x_charges_rec.Inventory_Item_Id := NULL;
4984      p_x_charges_rec.Line_Type := 'FREIGHT';
4985      p_x_charges_rec.Tax_Exempt_Flag := NULL;
4986      p_x_charges_rec.Tax_Exempt_Number := NULL;
4987      p_x_charges_rec.Tax_Exempt_Reason_Code :=  NULL;
4988    END IF;
4989 
4990    IF l_debug_level  > 0 THEN
4991        oe_debug_pub.add(  'LINE TYPE IS SET AS ' ||P_X_CHARGES_REC.LINE_TYPE , 1 ) ;
4992    END IF;
4993 
4994      p_x_charges_rec.Quantity := NULL;
4995      p_x_charges_rec.Quantity_Ordered := NULL;
4996      p_x_charges_rec.Unit_Selling_Price := NULL;
4997      p_x_charges_rec.Unit_Standard_Price := NULL;
4998 
4999      Rounded_Amount(p_currency_code => p_x_charges_rec.currency_code
5000                    ,p_unrounded_amount => p_x_charges_rec.amount
5001                    ,x_rounded_amount => l_rounded_amount );
5002 
5003      p_x_charges_rec.amount := l_rounded_amount;
5004 
5005      p_x_charges_rec.Sales_Order_Line := NULL;
5006      IF l_debug_level  > 0 THEN
5007          oe_debug_pub.add(  'LINE CATEGORY CODE : '||P_LINE_REC.LINE_CATEGORY_CODE , 5 ) ;
5008      END IF;
5009      -- Change made for the FP bug #3802957
5010      IF p_line_rec.line_category_code = 'RETURN' then
5011         IF l_debug_level  > 0 THEN
5012             oe_debug_pub.add(  'REFERENCE LINE_ID FOR FREIGHT RECORD BEFORE : '||P_X_CHARGES_REC.REFERENCE_LINE_ID , 5 ) ;
5013             oe_debug_pub.add(  'P_LINE_REC.REFERENCE_LINE_ID : '||P_LINE_REC.REFERENCE_LINE_ID , 5 ) ;
5014             oe_debug_pub.add(  'INTERFACE_LINE_ATTRIBUTE6 : '||P_X_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 , 5 ) ;
5015         END IF;
5016 
5017         -- 3645784
5018           -- RT{Retrobill lines will not have freight charges applied
5019           -- so for retrobill lines shouldnt come to this part at all
5020           -- But still coded it so that it doesnt fail
5021           IF ( p_line_rec.order_source_id = 27) THEN
5022              l_ref_header_id    := to_number(p_line_rec.orig_sys_document_ref);
5023              l_ref_line_id      := to_number(p_line_rec.orig_sys_line_ref);
5024           ELSE
5025              FOR order_info_rec in ORDER_INFO(p_line_rec.reference_line_id) LOOP
5026              l_ref_header_id    := order_info_rec.header_id;
5027              l_ref_line_id      := order_info_rec.line_id;
5028              l_ref_order_number := to_char(order_info_rec.order_number);
5029              l_ref_order_type   := order_info_rec.order_type;
5030              END LOOP;
5031           END IF;
5032 
5033         BEGIN
5034 
5035           SELECT FRE.customer_trx_line_id
5036           INTO   l_reference_line_id
5037           FROM   RA_CUSTOMER_TRX_LINES_ALL FRE
5038           WHERE  FRE.LINE_TYPE IN ('LINE', 'FREIGHT')
5039           AND    FRE.INTERFACE_LINE_CONTEXT    = 'ORDER ENTRY'
5040           AND    FRE.INTERFACE_LINE_ATTRIBUTE1 = l_ref_order_number
5041           AND    FRE.INTERFACE_LINE_ATTRIBUTE2 = l_ref_order_type
5042           AND    FRE.INTERFACE_LINE_ATTRIBUTE6 =
5043                 (SELECT TO_CHAR(D.PRICE_ADJUSTMENT_ID)
5044                  FROM   OE_PRICE_ADJUSTMENTS D
5045                  WHERE  D.HEADER_ID                   = l_ref_header_id
5046                  AND    NVL(D.LINE_ID, l_ref_line_id) = l_ref_line_id
5047                  AND    D.LIST_LINE_ID                =
5048                        (SELECT D2.LIST_LINE_ID
5049                         FROM   OE_PRICE_ADJUSTMENTS D2
5050                         WHERE  D2.PRICE_ADJUSTMENT_ID=p_x_charges_rec.INTERFACE_LINE_ATTRIBUTE6));
5051 
5052           EXCEPTION
5053              WHEN OTHERS THEN
5054                   IF l_debug_level  > 0 THEN
5055                       oe_debug_pub.add(  'UNABLE TO FIND REFERENCE LINE ID : '||SQLERRM , 1 ) ;
5056                   END IF;
5057                   NULL;
5058         END;
5059         IF l_reference_line_id IS NULL THEN
5060            BEGIN
5061                SELECT ra1.customer_trx_line_id
5062                INTO   l_reference_line_id
5063                from   ra_customer_trx_lines_all ra1, /* MOAC SQL CHANGE */
5064                       ra_customer_trx_lines ra2
5065                where  ra2.customer_trx_line_id = p_x_charges_rec.reference_line_id
5066                and    ra1.customer_trx_id = ra2.customer_trx_id
5067                and    ra1.line_type = 'FREIGHT'
5068                and    ra1.request_id is not null;
5069            EXCEPTION
5070                WHEN OTHERS THEN
5071                     IF l_debug_level  > 0 THEN
5072                         oe_debug_pub.add(  'UNABLE TO FIND REFERENCE LINE ID - 2 : '||SQLERRM , 1 ) ;
5073                     END IF;
5074                     NULL;
5075            END;
5076         END IF;
5077         p_x_charges_rec.Reference_Line_Id := l_reference_line_id;
5078         IF l_debug_level  > 0 THEN
5079             oe_debug_pub.add(  'REFERENCE LINE_ID FOR FREIGHT LINE AFTER : '||P_X_CHARGES_REC.REFERENCE_LINE_ID , 5 ) ;
5080         END IF;
5081      end if;
5082      --  IF p_line_rec.commitment_id is not null then
5083      --     re populate cust_trx_type_id which was nulled out for interface line
5084      --     p_x_charges_rec.Cust_Trx_Type_Id := Get_Customer_Transaction_Type(p_line_rec);
5085      --  END IF;
5086      p_x_charges_rec.PROMISED_COMMITMENT_AMOUNT := 0; -- For bug 6798675 NULL;
5087      -- Adding for bug# 4071445
5088       IF p_x_charges_rec.LINE_TYPE = 'FREIGHT' OR
5089          nvl(FND_PROFILE.VALUE('ONT_TAX_CODE_FOR_FREIGHT'), 'N') = 'N'  THEN
5090          p_x_charges_rec.Tax_Code := NULL;
5091          IF l_debug_level  > 0 THEN
5092             oe_debug_pub.add('tax_code for freight is set as ' ||p_x_charges_rec.tax_code , 5 ) ;
5093          END IF;
5094       END IF;
5095       --Customer Acceptance
5096       -- should be set always irrespective of customer acceptance enabled or not
5097 	     p_x_charges_rec.deferral_exclusion_flag := 'Y';
5098       --Customer Acceptance
5099      -- bug 2509121.
5100      -- translated description is only needed for sales order line.
5101      IF p_x_charges_rec.translated_description is not null THEN
5102         p_x_charges_rec.translated_description := null;
5103      END IF;
5104 
5105      IF l_debug_level  > 0 THEN
5106          oe_debug_pub.add(  'EXIT PREPARE_FREIGHT_CHARGES_REC ( ) PROCEDURE' , 5 ) ;
5107      END IF;
5108 END Prepare_Freight_Charges_Rec;
5109 
5110 PROCEDURE Interface_Freight_Charges
5111 (  p_line_rec  IN OE_Order_Pub.Line_Rec_Type
5112 ,  p_interface_line_rec  IN  RA_Interface_Lines_Rec_Type
5113 ,  x_return_status   OUT NOCOPY VARCHAR2
5114 ) IS
5115 l_charges_rec      RA_Interface_Lines_Rec_Type;
5116 l_return_status    VARCHAR2(30);
5117 l_line_rec         OE_Order_Pub.Line_Rec_Type;
5118 config_line_id     NUMBER;
5119 l_invoiced_amount  NUMBER;
5120 l_charge_amount    NUMBER;
5121 l_count1           NUMBER := 0;
5122 l_count2           NUMBER := 0 ;
5123 --pnpl
5124 l_hdr_payment_term_id NUMBER;
5125 CURSOR Line_Charges_Cursor(p_header_id IN NUMBER, p_line_id IN NUMBER) IS
5126    SELECT CHARGE_ID
5127          ,CHARGE_NAME
5128          ,CHARGE_AMOUNT
5129 	 ,nvl(INVOICED_AMOUNT,CHARGE_AMOUNT)
5130          ,CURRENCY_CODE
5131          ,CONTEXT
5132          ,substrb(ATTRIBUTE1, 1, 150)
5133          ,substrb(ATTRIBUTE2, 1, 150)
5134          ,substrb(ATTRIBUTE3, 1, 150)
5135          ,substrb(ATTRIBUTE4, 1, 150)
5136          ,substrb(ATTRIBUTE5, 1, 150)
5137          ,substrb(ATTRIBUTE6, 1, 150)
5138          ,substrb(ATTRIBUTE7, 1, 150)
5139          ,substrb(ATTRIBUTE8, 1, 150)
5140          ,substrb(ATTRIBUTE9, 1, 150)
5141          ,substrb(ATTRIBUTE10, 1, 150)
5142          ,substrb(ATTRIBUTE11, 1, 150)
5143          ,substrb(ATTRIBUTE12, 1, 150)
5144          ,substrb(ATTRIBUTE13, 1, 150)
5145          ,substrb(ATTRIBUTE14, 1, 150)
5146          ,substrb(ATTRIBUTE15, 1, 150)
5147    FROM   oe_charge_lines_v
5148    WHERE  header_id = p_header_id
5149    AND    line_id = p_line_id
5150    AND    nvl(invoiced_flag, 'N') = 'N';
5151 
5152 CURSOR Header_Charges_Cursor(p_header_id IN NUMBER, p_line_id IN NUMBER) IS
5153    SELECT CHARGE_ID
5154          ,CHARGE_NAME
5155          ,CHARGE_AMOUNT
5156 	 ,nvl(INVOICED_AMOUNT,CHARGE_AMOUNT)
5157          ,CURRENCY_CODE
5158          ,CONTEXT
5159          ,substrb(ATTRIBUTE1, 1, 150)
5160          ,substrb(ATTRIBUTE2, 1, 150)
5161          ,substrb(ATTRIBUTE3, 1, 150)
5162          ,substrb(ATTRIBUTE4, 1, 150)
5163          ,substrb(ATTRIBUTE5, 1, 150)
5164          ,substrb(ATTRIBUTE6, 1, 150)
5165          ,substrb(ATTRIBUTE7, 1, 150)
5166          ,substrb(ATTRIBUTE8, 1, 150)
5167          ,substrb(ATTRIBUTE9, 1, 150)
5168          ,substrb(ATTRIBUTE10, 1, 150)
5169          ,substrb(ATTRIBUTE11, 1, 150)
5170          ,substrb(ATTRIBUTE12, 1, 150)
5171          ,substrb(ATTRIBUTE13, 1, 150)
5172          ,substrb(ATTRIBUTE14, 1, 150)
5173          ,substrb(ATTRIBUTE15, 1, 150)
5174    FROM   oe_charge_lines_v
5175    WHERE  header_id = p_line_rec.header_id
5176    AND    line_id IS NULL
5177    AND    nvl(invoiced_flag, 'N') = 'N'
5178    for update nowait;   -- Bug #3686558
5179 
5180 CURSOR Modified_Header_Charges_Cursor(p_header_id IN NUMBER, p_line_id IN NUMBER) IS
5181    SELECT CHARGE_ID
5182          ,CHARGE_NAME
5183          ,(CHARGE_AMOUNT -  INVOICED_AMOUNT)
5184          ,CHARGE_AMOUNT
5185          ,(CHARGE_AMOUNT -  INVOICED_AMOUNT) -- should be diff amount which is not rounded, for bug 5400517
5186          ,CURRENCY_CODE
5187          ,CONTEXT
5188          ,substrb(ATTRIBUTE1, 1, 150)
5189          ,substrb(ATTRIBUTE2, 1, 150)
5190          ,substrb(ATTRIBUTE3, 1, 150)
5191          ,substrb(ATTRIBUTE4, 1, 150)
5192          ,substrb(ATTRIBUTE5, 1, 150)
5193          ,substrb(ATTRIBUTE6, 1, 150)
5194          ,substrb(ATTRIBUTE7, 1, 150)
5195          ,substrb(ATTRIBUTE8, 1, 150)
5196          ,substrb(ATTRIBUTE9, 1, 150)
5197          ,substrb(ATTRIBUTE10, 1, 150)
5198          ,substrb(ATTRIBUTE11, 1, 150)
5199          ,substrb(ATTRIBUTE12, 1, 150)
5200          ,substrb(ATTRIBUTE13, 1, 150)
5201          ,substrb(ATTRIBUTE14, 1, 150)
5202          ,substrb(ATTRIBUTE15, 1, 150)
5203    FROM   oe_charge_lines_v
5204    WHERE  header_id = p_header_id
5205    AND    line_id IS NULL
5206    AND    nvl(invoiced_flag, 'N') = 'Y'
5207    AND    invoiced_amount IS NOT NULL
5208    AND    invoiced_amount <> charge_amount
5209    for update nowait;   -- Bug #3686558
5210 
5211 CURSOR    config_for_model (l_line_id NUMBER) IS
5212    SELECT LINE_ID
5213    FROM   OE_ORDER_LINES
5214    WHERE  LINK_TO_LINE_ID = l_line_id
5215    AND    ITEM_TYPE_CODE = 'CONFIG';
5216 
5217 --
5218 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
5219 --
5220 BEGIN
5221      IF l_debug_level  > 0 THEN
5222          oe_debug_pub.add(  'ENTER INTERFACE_FREIGHT_CHARGES ( ) PROCEDURE' , 5 ) ;
5223      END IF;
5224      l_charges_rec := p_interface_line_rec;
5225      OPEN Line_Charges_Cursor(p_line_rec.header_id, p_line_rec.line_id);
5226      LOOP
5227         IF l_debug_level  > 0 THEN
5228             oe_debug_pub.add(  'IN THE LOOP: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 , 5 ) ;
5229         END IF;
5230         FETCH  Line_Charges_Cursor INTO
5231         l_charges_rec.INTERFACE_LINE_ATTRIBUTE6 -- charge_id
5232        ,l_charges_rec.description
5233        ,l_charges_rec.amount
5234        ,l_invoiced_amount
5235        ,l_charges_rec.currency_code
5236        ,l_charges_rec.attribute_category
5237        ,l_charges_rec.attribute1
5238        ,l_charges_rec.attribute2
5239        ,l_charges_rec.attribute3
5240        ,l_charges_rec.attribute4
5241        ,l_charges_rec.attribute5
5242        ,l_charges_rec.attribute6
5243        ,l_charges_rec.attribute7
5244        ,l_charges_rec.attribute8
5245        ,l_charges_rec.attribute9
5246        ,l_charges_rec.attribute10
5247        ,l_charges_rec.attribute11
5248        ,l_charges_rec.attribute12
5249        ,l_charges_rec.attribute13
5250        ,l_charges_rec.attribute14
5251        ,l_charges_rec.attribute15;
5252         EXIT WHEN Line_Charges_Cursor%NOTFOUND;
5253         IF l_debug_level  > 0 THEN
5254             oe_debug_pub.add(  'IN THE LOOP 1: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 , 5 ) ;
5255    	    oe_debug_pub.add(  'INVOICE SOURCE BEFORE CALLING PREPARE_FREIGHT_CHARGES_REC '|| L_CHARGES_REC.BATCH_SOURCE_NAME , 5 ) ;
5256         END IF;
5257         --prepare l_charges_rec
5258         Prepare_Freight_Charges_Rec(p_line_rec    => p_line_rec
5259                                     ,p_x_charges_rec => l_charges_rec);
5260         IF l_debug_level  > 0 THEN
5261            oe_debug_pub.add(  'INVOICE SOURCE AFTER : '|| L_CHARGES_REC.BATCH_SOURCE_NAME , 5 ) ;
5262            oe_debug_pub.add(  'FREIGHT LINE TYPE : '||L_CHARGES_REC.LINE_TYPE , 5 ) ;
5263         END IF;
5264         IF l_charges_rec.Amount = 0 THEN
5265            -- Issue Message (Zero Amount Freight Charge not interfaced)
5266            IF l_debug_level  > 0 THEN
5267                oe_debug_pub.add(  'ZERO AMOUNT FREIGHT NOT INTERFACED' , 5 ) ;
5268            END IF;
5269         ELSE
5270            Insert_Line(l_charges_rec
5271                        ,x_return_status=>l_return_status);
5272            -- Fix for the bug 2187074
5273            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5274               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5275            END IF;
5276 
5277            IF l_charges_rec.line_type = 'LINE' THEN
5278               Interface_scredits_for_freight
5279                                  (p_line_rec => p_line_rec
5280                                 , p_interface_line_rec => l_charges_rec
5281                                 , p_line_level_charge => 'Y');
5282            END IF;
5283            --Set oe_price_adjustment.Invoiced_flag for the interfaced charge line
5284            Update_Invoiced_Flag(to_number(l_charges_rec.INTERFACE_LINE_ATTRIBUTE6)
5285 				,l_charges_rec.amount
5286 				,l_invoiced_amount
5287                                 ,l_return_status);
5288         END IF;
5289      END LOOP;
5290      CLOSE Line_Charges_Cursor;
5291      --Bug2465201
5292      IF p_line_rec.item_type_code IN ( 'MODEL','CLASS') THEN
5293         OPEN CONFIG_FOR_MODEL (p_line_rec.line_id);
5294         FETCH CONFIG_FOR_MODEL INTO config_line_id;
5295         CLOSE CONFIG_FOR_MODEL;
5296 
5297         IF config_line_id IS NOT NULL THEN
5298            IF l_debug_level  > 0 THEN
5299                oe_debug_pub.add(  'FOUND CONFIG LINE : '||CONFIG_LINE_ID , 1 ) ;
5300            END IF;
5301            -- Initialize API return status to success
5302            x_return_status := FND_API.G_RET_STS_SUCCESS;
5303            OE_Line_Util.Lock_Row(p_line_id=>config_line_id
5304            		, p_x_line_rec => l_line_rec
5305             		, x_return_status => l_return_status
5306               	    	);
5307            IF    l_return_status = FND_API.G_RET_STS_ERROR THEN
5308               IF l_debug_level  > 0 THEN
5309                   oe_debug_pub.add(  'UNABLE TO LOCK LINE ID '||CONFIG_LINE_ID||' '||SQLERRM , 1 ) ;
5310               END IF;
5311        	      RAISE FND_API.G_EXC_ERROR;
5312            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5313               IF l_debug_level  > 0 THEN
5314                   oe_debug_pub.add(  'UNABLE TO LOCK LINE ID '||CONFIG_LINE_ID||' '||SQLERRM , 1 ) ;
5315               END IF;
5316        	      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5317            END IF;
5318            IF l_debug_level  > 0 THEN
5319                oe_debug_pub.add(  'INTERFACING OTHER CHARGES ASSOCIATED WITH THIS MODEL..' , 1 ) ;
5320            END IF;
5321            OPEN Line_Charges_Cursor(p_line_rec.header_id, config_line_id);
5322            LOOP
5323               IF l_debug_level  > 0 THEN
5324                   oe_debug_pub.add(  'IN THE LOOP: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 , 5 ) ;
5325               END IF;
5326               FETCH  Line_Charges_Cursor INTO
5327               l_charges_rec.INTERFACE_LINE_ATTRIBUTE6 -- charge_id
5328              ,l_charges_rec.description
5329              ,l_charges_rec.amount
5330              ,l_invoiced_amount
5331              ,l_charges_rec.currency_code
5332              ,l_charges_rec.attribute_category
5333              ,l_charges_rec.attribute1
5334              ,l_charges_rec.attribute2
5335              ,l_charges_rec.attribute3
5336              ,l_charges_rec.attribute4
5337              ,l_charges_rec.attribute5
5338              ,l_charges_rec.attribute6
5339              ,l_charges_rec.attribute7
5340              ,l_charges_rec.attribute8
5341              ,l_charges_rec.attribute9
5342              ,l_charges_rec.attribute10
5343              ,l_charges_rec.attribute11
5344              ,l_charges_rec.attribute12
5345              ,l_charges_rec.attribute13
5346              ,l_charges_rec.attribute14
5347              ,l_charges_rec.attribute15;
5348               EXIT WHEN Line_Charges_Cursor%NOTFOUND;
5349               IF l_debug_level  > 0 THEN
5350                   oe_debug_pub.add(  'IN THE LOOP 1: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 , 5 ) ;
5351                   oe_debug_pub.add(  'INVOICE SOURCE BEFORE CALLING PREPARE_FREIGHT_CHARGES_REC '|| L_CHARGES_REC.BATCH_SOURCE_NAME , 5 ) ;
5352               END IF;
5353               --prepare l_charges_rec
5354               Prepare_Freight_Charges_Rec(p_line_rec    => p_line_rec
5355                                           ,p_x_charges_rec => l_charges_rec);
5356       	      IF l_debug_level  > 0 THEN
5357       	          oe_debug_pub.add(  'INVOICE SOURCE AFTER : '|| L_CHARGES_REC.BATCH_SOURCE_NAME , 5 ) ;
5358                   oe_debug_pub.add(  'FREIGHT LINE TYPE : '||L_CHARGES_REC.LINE_TYPE , 5 ) ;
5359               END IF;
5360               IF l_charges_rec.Amount = 0 THEN
5361                  -- Issue Message (Zero Amount Freight Charge not interfaced)
5362                  IF l_debug_level  > 0 THEN
5363                      oe_debug_pub.add(  'ZERO AMOUNT FREIGHT NOT INTERFACED' , 5 ) ;
5364                  END IF;
5365               ELSE
5366                  Insert_Line(l_charges_rec
5367                              ,x_return_status=>l_return_status);
5368                  -- Fix for the bug 2187074
5369                  IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5370                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5371                  END IF;
5372 
5373     /*   Added for the bug 3019754   */
5374                  IF l_charges_rec.line_type = 'LINE' THEN
5375               Interface_scredits_for_freight
5376                                  (p_line_rec => p_line_rec
5377                                 , p_interface_line_rec => l_charges_rec
5378                                 , p_line_level_charge => 'Y');
5379                  END IF;
5380 
5381                  --Set oe_price_adjustment.Invoiced_flag for the interfaced charge line
5382                  Update_Invoiced_Flag(to_number(l_charges_rec.INTERFACE_LINE_ATTRIBUTE6)
5383 				      ,l_charges_rec.amount
5384          			      ,l_invoiced_amount
5385 				      ,l_return_status);
5386               END IF;
5387            END LOOP;
5388            CLOSE Line_Charges_Cursor;
5389         END IF;
5390      END IF;
5391      IF l_debug_level  > 0 THEN
5392          oe_debug_pub.add(  'INTERFACING HEADER CHARGES...' , 1 ) ;
5393      END IF;
5394      l_charges_rec := p_interface_line_rec;
5395      --pnpl
5396      --get header level payment term for header level charges
5397      -- bug 4680186
5398      IF NOT Return_Line(p_line_rec) THEN
5399        BEGIN
5400 	 SELECT payment_term_id INTO l_hdr_payment_term_id
5401 	 FROM oe_order_headers_all
5402 	 WHERE header_id = p_line_rec.header_id;
5403        EXCEPTION
5404  	 WHEN NO_DATA_FOUND THEN
5405 	   l_hdr_payment_term_id := null;
5406        END;
5407      END IF;
5408 
5409      OPEN Header_Charges_Cursor(p_line_rec.header_id, p_line_rec.line_id);
5410      LOOP
5411         IF l_debug_level  > 0 THEN
5412             oe_debug_pub.add(  'IN THE LOOP: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 ) ;
5413         END IF;
5414         FETCH  Header_Charges_Cursor INTO
5415         l_charges_rec.INTERFACE_LINE_ATTRIBUTE6 -- charge_id
5416        ,l_charges_rec.description
5417        ,l_charges_rec.amount
5418        ,l_invoiced_amount
5419        ,l_charges_rec.currency_code
5420        ,l_charges_rec.attribute_category
5421        ,l_charges_rec.attribute1
5422        ,l_charges_rec.attribute2
5423        ,l_charges_rec.attribute3
5424        ,l_charges_rec.attribute4
5425        ,l_charges_rec.attribute5
5426        ,l_charges_rec.attribute6
5427        ,l_charges_rec.attribute7
5428        ,l_charges_rec.attribute8
5429        ,l_charges_rec.attribute9
5430        ,l_charges_rec.attribute10
5431        ,l_charges_rec.attribute11
5432        ,l_charges_rec.attribute12
5433        ,l_charges_rec.attribute13
5434        ,l_charges_rec.attribute14
5435        ,l_charges_rec.attribute15;
5436         --pnpl
5437 	l_charges_rec.term_id := l_hdr_payment_term_id;
5438         EXIT WHEN Header_Charges_Cursor%NOTFOUND;
5439 
5440 
5441         IF l_debug_level  > 0 THEN
5442             oe_debug_pub.add(  'IN THE LOOP 1: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 ) ;
5443    	    oe_debug_pub.add(  'INVOICE SOURCE BEFORE CALLING PREPARE_FREIGHT_CHARGES_REC '|| L_CHARGES_REC.BATCH_SOURCE_NAME ) ;
5444 	    --pnpl
5445 	    oe_debug_pub.add(  'l_charges_rec.term_id : ' || l_charges_rec.term_id);
5446    	END IF;
5447         --prepare l_charges_rec
5448         Prepare_Freight_Charges_Rec(p_line_rec    => p_line_rec
5449                                    ,p_x_charges_rec => l_charges_rec);
5450 	IF l_debug_level  > 0 THEN
5451 	   oe_debug_pub.add(  'INVOICE SOURE AFTER CALLING PREPARE_FREIGHT_CHARGES_REC '|| L_CHARGES_REC.BATCH_SOURCE_NAME ) ;
5452            oe_debug_pub.add(  'FREIGHT LINE TYPE: '||L_CHARGES_REC.LINE_TYPE ) ;
5453         END IF;
5454         IF l_charges_rec.Amount = 0 THEN
5455            IF l_debug_level  > 0 THEN
5456                oe_debug_pub.add(  ' ZERO AMOUNT FREIGHT NOT INTERFACED' , 5 ) ;
5457            END IF;
5458         ELSE
5459            Insert_Line(l_charges_rec
5460                        ,x_return_status=>l_return_status);
5461            -- Fix for the bug 2187074
5462            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5463               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5464            END IF;
5465 
5466            IF l_charges_rec.line_type = 'LINE' THEN
5467               Interface_scredits_for_freight
5468                                  (p_line_rec => p_line_rec
5469                                 , p_interface_line_rec => l_charges_rec
5470                                 , p_line_level_charge => 'N');
5471            END IF;
5472            --Set oe_price_adjustment.Invoiced_flag for the interfaced charge line
5473            Update_Invoiced_Flag(to_number(l_charges_rec.INTERFACE_LINE_ATTRIBUTE6)
5474                                 ,l_charges_rec.amount
5475          			,l_invoiced_amount
5476 				,l_return_status);
5477         END IF;
5478      END LOOP;
5479      CLOSE Header_Charges_Cursor;
5480      x_return_status := FND_API.G_RET_STS_SUCCESS;
5481 
5482      IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
5483         IF l_debug_level  > 0 THEN
5484            oe_debug_pub.add(  'INTERFACING Modified HEADER CHARGES...' , 1 ) ;
5485         END IF;
5486         l_charges_rec := p_interface_line_rec;
5487         OPEN Modified_Header_Charges_Cursor(p_line_rec.header_id, p_line_rec.line_id);
5488         LOOP
5489          IF l_debug_level  > 0 THEN
5490             oe_debug_pub.add(  'IN THE LOOP: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 ) ;
5491          END IF;
5492         FETCH  Modified_Header_Charges_Cursor INTO
5493            l_charges_rec.INTERFACE_LINE_ATTRIBUTE6 -- charge_id
5494           ,l_charges_rec.description
5495           ,l_charges_rec.amount
5496           ,l_charge_amount
5497           ,l_invoiced_amount
5498           ,l_charges_rec.currency_code
5499           ,l_charges_rec.attribute_category
5500           ,l_charges_rec.attribute1
5501           ,l_charges_rec.attribute2
5502           ,l_charges_rec.attribute3
5503           ,l_charges_rec.attribute4
5504           ,l_charges_rec.attribute5
5505           ,l_charges_rec.attribute6
5506           ,l_charges_rec.attribute7
5507           ,l_charges_rec.attribute8
5508           ,l_charges_rec.attribute9
5509           ,l_charges_rec.attribute10
5510           ,l_charges_rec.attribute11
5511           ,l_charges_rec.attribute12
5512           ,l_charges_rec.attribute13
5513           ,l_charges_rec.attribute14
5514           ,l_charges_rec.attribute15;
5515 
5516 	--pnpl
5517         l_charges_rec.term_id := l_hdr_payment_term_id;
5518         EXIT WHEN Modified_Header_Charges_Cursor%NOTFOUND;
5519         IF l_debug_level  > 0 THEN
5520            oe_debug_pub.add(  'IN THE LOOP 1: L_CHARGES_REC.CHARGE_ID: '|| L_CHARGES_REC.INTERFACE_LINE_ATTRIBUTE6 ) ;
5521            oe_debug_pub.add(  'Charge_Amount:'||l_charge_amount ||':Invoiced_Amount:'||l_invoiced_amount) ;
5522 	   --pnpl
5523 	   oe_debug_pub.add(  'l_charges_rec.term_id : ' || l_charges_rec.term_id);
5524         END IF;
5525 
5526         --prepare l_charges_rec
5527         Prepare_Freight_Charges_Rec(p_line_rec    => p_line_rec
5528                                    ,p_x_charges_rec => l_charges_rec);
5529 
5530        SELECT nvl(max(interface_line_attribute5),0)  --Bug 3338492
5531        INTO   l_count1
5532        FROM   ra_interface_lines_all
5533        WHERE  interface_line_context = 'ORDER ENTRY'
5534        AND    interface_line_attribute1 = l_charges_rec.INTERFACE_LINE_ATTRIBUTE1
5535        AND    interface_line_attribute2 = l_charges_rec.INTERFACE_LINE_ATTRIBUTE2
5536        AND    interface_line_attribute6 = l_charges_rec.INTERFACE_LINE_ATTRIBUTE6
5537        AND    interface_line_attribute11 = '0'
5538        AND    NVL(interface_status, '~') <> 'P';
5539        SELECT nvl(max(interface_line_attribute5),0)
5540        INTO   l_count2
5541        FROM   ra_customer_trx_lines_all
5542        WHERE  interface_line_context = 'ORDER ENTRY'
5543        AND    interface_line_attribute1 = l_charges_rec.INTERFACE_LINE_ATTRIBUTE1
5544        AND    interface_line_attribute2 = l_charges_rec.INTERFACE_LINE_ATTRIBUTE2
5545        AND    interface_line_attribute6 = l_charges_rec.INTERFACE_LINE_ATTRIBUTE6
5546        AND    interface_line_attribute11 = '0';
5547 
5548        IF l_count1 > l_count2 THEN
5549           l_charges_rec.INTERFACE_LINE_ATTRIBUTE5 := l_count1 + 1 ;
5550        ELSE
5551           l_charges_rec.INTERFACE_LINE_ATTRIBUTE5 := l_count2 + 1 ;
5552        END IF;
5553 
5554        IF l_debug_level  > 0 THEN
5555           oe_debug_pub.add(  'INTERFACE_LINE_ATTRIBUTE5: '|| l_charges_rec.INTERFACE_LINE_ATTRIBUTE5 , 5 ) ;
5556           oe_debug_pub.add(  'INVOICE SOURE AFTER CALLING PREPARE_FREIGHT_CHARGES_REC '|| L_CHARGES_REC.BATCH_SOURCE_NAME ) ;
5557           oe_debug_pub.add(  'FREIGHT LINE TYPE: '||L_CHARGES_REC.LINE_TYPE ) ;
5558        END IF;
5559 
5560        IF l_charges_rec.Amount = 0 THEN
5561         IF l_debug_level  > 0 THEN
5562             oe_debug_pub.add(  ' ZERO AMOUNT FREIGHT NOT INTERFACED' , 5 ) ;
5563         END IF;
5564        ELSE
5565            Insert_Line(l_charges_rec
5566                        ,x_return_status=>l_return_status);
5567            -- Fix for the bug 2187074
5568            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5569               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5570            END IF;
5571 
5572            IF l_charges_rec.line_type = 'LINE' THEN
5573               Interface_scredits_for_freight
5574                                  (p_line_rec => p_line_rec
5575                                 , p_interface_line_rec => l_charges_rec
5576                                 , p_line_level_charge => 'N');
5577            END IF;
5578            --Set oe_price_adjustment.Invoiced_flag for the interfaced charge line
5579            Update_Invoiced_Flag(to_number(l_charges_rec.INTERFACE_LINE_ATTRIBUTE6)
5580                                 , l_charges_rec.amount
5581                                  ,l_invoiced_amount
5582                                  ,l_return_status);
5583        END IF;
5584      END LOOP;
5585      CLOSE Modified_Header_Charges_Cursor;
5586      x_return_status := FND_API.G_RET_STS_SUCCESS;
5587      END IF;
5588      IF l_debug_level  > 0 THEN
5589          oe_debug_pub.add(  'EXITING INTERFACE_FREIGHT_CHARGES' , 5 ) ;
5590      END IF;
5591 EXCEPTION
5592     WHEN FND_API.G_EXC_ERROR THEN
5593          IF l_debug_level  > 0 THEN
5594              oe_debug_pub.add(  'EXPECTED ERROR. EXITING INTERFACE_FREIGHT_CHARGES : '||SQLERRM , 1 ) ;
5595          END IF;
5596          x_return_status := FND_API.G_RET_STS_ERROR;
5597     WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN   -- Bug #3686558
5598          IF l_debug_level > 0 THEN
5599             OE_DEBUG_PUB.Add('Unable to lock the line',3);
5600          END IF;
5601          x_return_status := FND_API.G_RET_STS_SUCCESS;
5602     WHEN OTHERS THEN
5603          IF l_debug_level  > 0 THEN
5604              oe_debug_pub.add(  'EXCEPTION , INTERFACE_FREIGHT_CHARGES ( ) '||SQLERRM , 1 ) ;
5605          END IF;
5606          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5607          IF      FND_MSG_PUB.Check_Msg_Level
5608                 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5609          THEN
5610                 OE_MSG_PUB.Add_Exc_Msg
5611                         (   G_PKG_NAME
5612                         ,   'Interface_Freight_Charges'
5613                         );
5614          END IF;
5615          IF (Line_Charges_Cursor%ISOPEN) THEN
5616             CLOSE Line_Charges_Cursor;
5617          END IF;
5618          IF (Header_Charges_Cursor%ISOPEN) THEN
5619             CLOSE Header_Charges_Cursor;
5620          END IF;
5621 END Interface_Freight_Charges;
5622 
5623 PROCEDURE Prepare_Interface_Line_Rec
5624 (   p_line_rec              IN OE_Order_Pub.Line_Rec_Type
5625 ,   p_header_rec            IN OE_Order_Pub.Header_Rec_Type
5626 ,   p_x_interface_line_rec  IN OUT NOCOPY RA_Interface_Lines_Rec_Type
5627 ,   x_result_code           OUT NOCOPY VARCHAR2
5628 ) IS
5629 l_creation_sign                VARCHAR2(30);
5630 l_territory_code               VARCHAR2(30);
5631 l_delivery_line_id             NUMBER;
5632 l_bank_acct_id                 NUMBER;
5633 l_bank_acct_uses_id            NUMBER;
5634 l_pay_method_id                NUMBER;
5635 l_pay_method_name              VARCHAR2(50);
5636 l_merchant_id                  NUMBER;
5637 l_trxn_id                      NUMBER;
5638 l_tangible_id                  VARCHAR2(80);
5639 l_hdr_inv_to_cust_id           NUMBER;
5640 l_gdf_rec                      OE_GDF_Rec_Type;
5641 l_jg_return_code               NUMBER;
5642 l_jg_error_buffer              VARCHAR2(240);
5643 l_rma_date                     DATE;
5644 l_rma_result                   VARCHAR2(1);
5645 l_count1                       NUMBER := 0 ;
5646 l_count2                       NUMBER := 0 ;
5647 l_item_description             VARCHAR2(2000);
5648 l_course_end_date              DATE;
5649 l_ship_method_code             VARCHAR2(30);
5650 l_return_status                VARCHAR2(1);
5651 l_accounting_rule_type         VARCHAR2(10);
5652 l_acct_rule_duration           NUMBER;
5653 l_orig_sys_ship_addr_id        NUMBER;
5654 l_commitment_applied           NUMBER;
5655 l_commitment_interfaced        NUMBER;
5656 l_partial_line_amount          NUMBER := 0;
5657 l_partial_line_tax_amount      NUMBER := 0;
5658 l_partial_line_freight_amount  NUMBER := 0;
5659 l_partial_line_promised_amount NUMBER := 0;
5660 l_fulfilled_qty                NUMBER;
5661 l_set_of_books_rec             OE_Order_Cache.Set_Of_Books_Rec_Type;
5662 l_user_id                      NUMBER;
5663 l_resp_id                      NUMBER;
5664 l_appl_id                      NUMBER;
5665 /*Added for FP bug # 3647389*/
5666 l_cur_user_id                  NUMBER;
5667 l_cur_resp_id                  NUMBER;
5668 l_cur_appl_id                  NUMBER;
5669 l_AR_Sys_Param_Rec             AR_SYSTEM_PARAMETERS_ALL%ROWTYPE;
5670 --serla begin
5671 l_payment_type_code VARCHAR2(30);
5672 l_payment_trx_id NUMBER;
5673 l_receipt_method_id NUMBER;
5674 l_credit_card_holder_name  	VARCHAR2(80);
5675 l_credit_card_approval_code 	VARCHAR2(80);
5676 --serla end
5677 l_trx_date			DATE;
5678 l_max_actual_shipment_date	DATE;
5679 l_fulfillment_set_flag		VARCHAR2(1) := FND_API.G_FALSE;
5680 -- 3757279
5681 l_concat_segment VARCHAR2(240) := NULL;
5682 l_prof_value     VARCHAR2(240) := NULL;
5683 l_table_index  BINARY_INTEGER;
5684 -- 3757279
5685 --Adding for bug#4190312
5686 l_return_code                  VARCHAR2(30);
5687 l_unmapped_date                DATE;
5688 l_frequency                    VARCHAR2(15);
5689 l_calendar_name                VARCHAR2(15);
5690 
5691 --Customer Acceptance
5692 l_top_model_line_id NUMBER;
5693 l_parent_line_id    NUMBER;
5694 l_order_line_id     NUMBER;
5695 --
5696 l_payment_trxn_extension_id	NUMBER;
5697 l_interface_line_rec           RA_Interface_Lines_Rec_Type; --bug 4738947
5698 
5699 l_invoice_to_customer_id       NUMBER; -- Added for bug 6911267
5700 
5701 --bug6086777 Reverting the fix for 5849568
5702 --bug5849568
5703 --l_cust_pay_method_id           NUMBER;
5704 --bug6086340 Refix the fix for 5849568
5705 l_cust_pay_method_id           NUMBER;
5706 L_ACCOUNTING_RULE_ID 	       NUMBER;
5707 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
5708 --
5709 BEGIN
5710     IF l_debug_level  > 0 THEN
5711         oe_debug_pub.add(  'ENTER PREPARE_INTERFACE_LINE_REC ( ) PROCEDURE ' , 5 ) ;
5712     END IF;
5713     l_interface_line_rec.request_id := p_x_interface_line_rec.request_id; --bug 4738947
5714     p_x_interface_line_rec := l_interface_line_rec; --bug 4738947
5715     l_delivery_line_id := Null;
5716     IF Shipping_info_Available(p_line_rec) THEN
5717        -- Fix for bug 2196494
5718        IF p_line_rec.item_type_code NOT In ('MODEL','CLASS','KIT') THEN
5719        BEGIN
5720     --Bug2181628 TO retrieve the minimum delivery_id of a line,if it is present
5721     --in more than one delivery.Hence used "MIN"instead of "ROWNUM".Hence split the SQL Query.
5722      SELECT min(dl.delivery_id)
5723          INTO   l_delivery_line_id
5724          FROM   wsh_new_deliveries dl,
5725                 wsh_delivery_assignments da,
5726                 wsh_delivery_details dd
5727          WHERE  dd.delivery_detail_id  = da.delivery_detail_id
5728          AND    da.delivery_id  = dl.delivery_id
5729          AND    dd.source_code = 'OE'
5730          AND    dd.released_status = 'C'  -- bug 6721251
5731          AND    dd.source_line_id = p_line_rec.line_id;
5732 --	     AND    rownum = 1;
5733        EXCEPTION
5734          WHEN NO_DATA_FOUND THEN
5735 	          IF l_debug_level  > 0 THEN
5736 	              oe_debug_pub.add(  'REACHING NO DATA FOUND. DELIVERY DETAILS NOT FOUND FOR THIS LINE..' , 1 ) ;
5737 	          END IF;
5738               p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3 := '0';
5739               p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4 := '0';
5740               p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7 := '0';
5741        END;
5742        /*  Populate bill of lading  */
5743        IF l_delivery_line_id Is Not Null Then
5744           BEGIN
5745              SELECT NVL(SUBSTR(dl.name, 1, 30), '0')
5746                    ,NVL(SUBSTR(dl.waybill, 1, 30), '0')
5747                    ,dl.ship_method_code
5748                    ,dl.initial_pickup_date
5749              INTO  p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3
5750                    ,p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4
5751                    ,l_ship_method_code
5752                    ,p_x_interface_line_rec.SHIP_DATE_ACTUAL
5753              FROM   wsh_new_deliveries dl
5754              WHERE  dl.delivery_id = l_delivery_line_id;
5755 
5756              IF l_debug_level  > 0 THEN
5757                  oe_debug_pub.add(  'POPULATING BILL OF LADING NUMBER ..' , 5 ) ;
5758              END IF;
5759              SELECT wdi.sequence_number
5760              INTO   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8
5761              FROM   wsh_delivery_legs wdl,
5762                     wsh_document_instances wdi
5763              where wdi.entity_name = 'WSH_DELIVERY_LEGS'
5764              and wdi.entity_id = wdl.delivery_leg_id
5765              and wdl.delivery_id =l_delivery_line_id
5766              and wdi.status <> 'CANCELLED'
5767              and rownum=1;
5768  IF l_debug_level  > 0 THEN
5769      oe_debug_pub.add(  'BILL OF LADING NUMBER IS POPULATED AS ..'||P_X_INTERFACE_LINE_REC.INTERFACE_LINE_ATTRIBUTE8 , 5 ) ;
5770  END IF;
5771           EXCEPTION
5772               WHEN NO_DATA_FOUND THEN
5773                    IF l_debug_level  > 0 THEN
5774                        oe_debug_pub.add(  'NO DETAILS FOR BILL OF LADING NUMBER FOUND ...' , 5 ) ;
5775                    END IF;
5776                    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8 := '0';
5777           END;
5778         END IF;
5779 --Fix for bug 3661402
5780   IF l_ship_method_code IS NOT NULL THEN
5781      GOTO get_ship_via;
5782   END IF;
5783 --End of Fix for bug 3661402
5784 
5785 -- commented for bug 3661402
5786 /*      BEGIN
5787            IF l_debug_level  > 0 THEN
5788  oe_debug_pub.add(  'GETTING SHIP_VIA FROM SHIP_METHOD_CODE: '||L_SHIP_METHOD_CODE|| ' AND ORGANIZATION_ID: '||P_LINE_REC.SHIP_FROM_ORG_ID , 5 ) ;
5789            END IF;
5790 -- fix bug# 1382196
5791            IF l_ship_method_code IS NOT NULL THEN
5792                IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110509' THEN
5793 
5794                   SELECT   substr(freight_code,1,25)
5795                     INTO   p_x_interface_line_rec.SHIP_VIA
5796                     FROM   wsh_carriers wsh_ca,wsh_carrier_services wsh,
5797                            wsh_org_carrier_services wsh_org
5798                     WHERE  wsh_org.organization_id   = p_line_rec.ship_from_org_id
5799                       AND  wsh.carrier_service_id    = wsh_org.carrier_service_id
5800                       AND  wsh_ca.carrier_id         = wsh.carrier_id
5801                       AND  wsh.ship_method_code      = l_ship_method_code
5802                       AND  wsh_org.enabled_flag      = 'Y';
5803                ELSE
5804                     SELECT  substr(freight_code,1,25)
5805                       INTO  p_x_interface_line_rec.SHIP_VIA
5806                       FROM  wsh_carrier_ship_methods
5807                      WHERE  ship_method_code = l_ship_method_code
5808                        AND  organization_id = p_line_rec.ship_from_org_id;
5809                END IF;
5810            END IF;
5811         EXCEPTION
5812            WHEN NO_DATA_FOUND THEN
5813 		        p_x_interface_line_rec.SHIP_VIA := NULL;
5814         END;    */
5815     ELSE   --non ship line
5816        If p_line_rec.item_type_code In ('MODEL','CLASS','KIT') Then
5817           BEGIN
5818    --Bug2181628 TO retrieve the minimum delivery_id of a line,if it is present
5819    --in more than one delivery.Hence used "MIN"instead of "ROWNUM".Hence Split the Query.
5820    SELECT min(dl.delivery_id)
5821              INTO   l_delivery_line_id
5822              FROM wsh_new_deliveries dl,
5823                   wsh_delivery_assignments da,
5824                   wsh_delivery_details dd
5825              WHERE   dd.delivery_detail_id  = da.delivery_detail_id
5826              AND     da.delivery_id  = dl.delivery_id
5827              AND     dd.source_code = 'OE'
5828              AND     dd.released_status = 'C'  -- bug 6721251
5829              AND     dd.top_model_line_id = p_line_rec.line_id;
5830 --	         AND   rownum = 1;
5831           EXCEPTION
5832              WHEN NO_DATA_FOUND THEN
5833 	              IF l_debug_level  > 0 THEN
5834 	                  oe_debug_pub.add(  'REACHING NO DATA FOUND. DELIVERY DETAILS NOT FOUND FOR THIS LINE..' , 1 ) ;
5835 	              END IF;
5836                   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3 := '0';
5837                   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4 := '0';
5838                   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7 := '0';
5839           END;
5840           IF l_delivery_line_id Is Not Null Then
5841              BEGIN
5842                SELECT  NVL(SUBSTR(dl.name, 1, 30), '0')
5843                       ,NVL(SUBSTR(dl.waybill, 1, 30), '0')
5844                       ,dl.ship_method_code
5845                       ,dl.initial_pickup_date
5846                INTO    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3
5847                       ,p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4
5848                       ,l_ship_method_code
5849                       ,p_x_interface_line_rec.SHIP_DATE_ACTUAL
5850                FROM   wsh_new_deliveries dl
5851                WHERE dl.delivery_id = l_delivery_line_id;
5852 
5853 
5854                IF l_debug_level  > 0 THEN
5855                    oe_debug_pub.add(  'POPULATING BILL OF LADING NUMBER ..' , 5 ) ;
5856                END IF;
5857                SELECT substr(wdi.sequence_number,1,30)
5858                INTO   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8
5859                FROM   wsh_delivery_legs wdl,
5860                       wsh_document_instances wdi
5861                where  wdi.entity_name = 'WSH_DELIVERY_LEGS'
5862                and    wdi.entity_id = wdl.delivery_leg_id
5863                and    wdl.delivery_id =l_delivery_line_id
5864                and    wdi.status <> 'CANCELLED'
5865                and    rownum=1;
5866                IF l_debug_level  > 0 THEN
5867                    oe_debug_pub.add(  'BILL OF LADING NUMBER IS POPULATED AS ..'||P_X_INTERFACE_LINE_REC.INTERFACE_LINE_ATTRIBUTE8 , 5 ) ;
5868                END IF;
5869              EXCEPTION
5870                  WHEN NO_DATA_FOUND THEN
5871                       IF l_debug_level  > 0 THEN
5872                           oe_debug_pub.add(  'NO DETAILS FOR BILL OF LADING NUMBER FOUND ...' , 5 ) ;
5873                       END IF;
5874                       p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8 := '0';
5875              END;
5876 
5877 --Fix for bug 3661402
5878   IF l_ship_method_code IS NOT NULL THEN
5879      GOTO get_ship_via;
5880   END IF;
5881 --End of Fix for bug 3661402
5882 
5883 --Commented for bug 3661402
5884 /* Added for the bug number 2988432 */
5885 
5886 /*        BEGIN
5887            IF l_debug_level  > 0 THEN
5888   oe_debug_pub.add(  'GETTING SHIP_VIA FROM SHIP_METHOD_CODE: '||L_SHIP_METHOD_CODE|| ' AND ORGANIZATION_ID: '||P_LINE_REC.SHIP_FROM_ORG_ID , 5 ) ;
5889            END IF;
5890            -- fix bug# 1382196
5891            IF l_ship_method_code IS NOT NULL THEN
5892                IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110509' THEN
5893 
5894                   SELECT   substr(freight_code,1,25)
5895                     INTO   p_x_interface_line_rec.SHIP_VIA
5896                     FROM   wsh_carriers wsh_ca,wsh_carrier_services wsh,
5897                            wsh_org_carrier_services wsh_org
5898                     WHERE  wsh_org.organization_id   = p_line_rec.ship_from_org_id
5899                       AND  wsh.carrier_service_id    = wsh_org.carrier_service_id
5900                       AND  wsh_ca.carrier_id         = wsh.carrier_id
5901                       AND  wsh.ship_method_code      = l_ship_method_code
5902                       AND  wsh_org.enabled_flag      = 'Y';
5903                ELSE
5904                     SELECT  substr(freight_code,1,25)
5905                       INTO  p_x_interface_line_rec.SHIP_VIA
5906                       FROM  wsh_carrier_ship_methods
5907                      WHERE  ship_method_code = l_ship_method_code
5908                        AND  organization_id = p_line_rec.ship_from_org_id;
5909                END IF;
5910            END IF;
5911         EXCEPTION
5912            WHEN NO_DATA_FOUND THEN
5913                         p_x_interface_line_rec.SHIP_VIA := NULL;
5914         END; */
5915 /* Added for the bug number 2988432  */
5916 
5917           END IF;
5918       END IF;
5919       END IF;
5920   END IF;
5921 
5922 --Fix for bug 3661402
5923 
5924  if l_ship_method_code is null then
5925    if p_line_rec.ship_from_org_id is not null then
5926       l_ship_method_code := p_line_rec.shipping_method_code;
5927    end if;
5928  end if;
5929 
5930  <<get_ship_via>>
5931 
5932        BEGIN
5933            IF l_debug_level  > 0 THEN
5934   oe_debug_pub.add(  'GETTING SHIP_VIA FROM SHIP_METHOD_CODE: '||L_SHIP_METHOD_CODE|| ' AND ORGANIZATION_ID: '||P_LINE_REC.SHIP_FROM_ORG_ID ,5 ) ;
5935            END IF;
5936            IF l_ship_method_code IS NOT NULL THEN
5937                IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110509' THEN
5938 
5939                   SELECT   substr(freight_code,1,25)
5940                     INTO   p_x_interface_line_rec.SHIP_VIA
5941                     FROM   wsh_carriers wsh_ca,wsh_carrier_services wsh,
5942                            wsh_org_carrier_services wsh_org
5943                     WHERE  wsh_org.organization_id   =
5944 p_line_rec.ship_from_org_id
5945                       AND  wsh.carrier_service_id    =
5946 wsh_org.carrier_service_id
5947                       AND  wsh_ca.carrier_id         = wsh.carrier_id
5948                       AND  wsh.ship_method_code      = l_ship_method_code
5949                       AND  wsh_org.enabled_flag      = 'Y';
5950                ELSE
5951                     SELECT  substr(freight_code,1,25)
5952                       INTO  p_x_interface_line_rec.SHIP_VIA
5953                       FROM  wsh_carrier_ship_methods
5954                      WHERE  ship_method_code = l_ship_method_code
5955                        AND  organization_id = p_line_rec.ship_from_org_id;
5956                END IF;
5957            END IF;
5958         EXCEPTION
5959            WHEN NO_DATA_FOUND THEN
5960                         p_x_interface_line_rec.SHIP_VIA := NULL;
5961         END;
5962 
5963 --End of fix for bug 3661402
5964 
5965     /* 1847224 */
5966   IF l_delivery_line_id IS NULL THEN  -- for Returns and non shippable lines
5967        IF l_debug_level  > 0 THEN
5968            oe_debug_pub.add(  'NON SHIPPABLE OR RETURN LINE ' , 5 ) ;
5969        END IF;
5970        if p_line_rec.line_category_code <> 'RETURN' THEN
5971           IF l_debug_level  > 0 THEN
5972               oe_debug_pub.add(  'THIS IS A NON-SHIPPABLE LINE..' , 5 ) ;
5973           END IF;
5974 
5975           -- fixed bug 3435298
5976           -- for non-shippable line in a fulfillment set
5977           l_fulfillment_set_flag
5978                        := OE_Line_Fullfill.Is_Part_Of_Fulfillment_Set
5979                           (p_line_rec.line_id);
5980           IF l_fulfillment_set_flag = FND_API.G_TRUE THEN
5981              IF l_debug_level  > 0 THEN
5982                 oe_debug_pub.add(  'SETTING TRANSACTION DATE AS THE ACTUAL_SHIPMENT_DATE OF THE LAST SHIPPED ITEM IN THE SET. ' , 5 ) ;
5983              END IF;
5984 
5985              BEGIN
5986              SELECT max(actual_shipment_date)
5987              INTO   l_max_actual_shipment_date
5988              FROM   oe_order_lines_all 	ool,
5989                     oe_line_sets	ols
5990              WHERE  ool.shippable_flag = 'Y'
5991              AND    ool.line_id = ols.line_id
5992              AND    ols.set_id IN (SELECT os.set_id
5993                                   FROM   oe_line_sets ls,
5994                                          oe_sets os
5995                                   WHERE  ls.line_id = p_line_rec.line_id
5996                                   AND    ls.set_id = os.set_id
5997                                   AND    os.set_type='FULFILLMENT_SET');
5998              EXCEPTION WHEN NO_DATA_FOUND THEN
5999                null;
6000              END;
6001 
6002              --4483722
6003              IF l_max_actual_shipment_date IS NULL THEN
6004                 IF (fnd_profile.value('OE_RECEIVABLES_DATE_FOR_NONSHIP_LINES') = 'Y') THEN
6005                    l_max_actual_shipment_date := SYSDATE;
6006                 ELSE
6007                    --Should we let the date be null?
6008                    Null;
6009                 END IF;
6010              END IF;
6011              --4483722
6012 
6013              p_x_interface_line_rec.SHIP_DATE_ACTUAL := l_max_actual_shipment_date;
6014           -- for non-shippable line not in a fulfillment set
6015           ELSIF (fnd_profile.value('OE_RECEIVABLES_DATE_FOR_NONSHIP_LINES') = 'Y') THEN
6016               IF l_debug_level  > 0 THEN
6017                   oe_debug_pub.add(  'SETTING TRANSACTION DATE AS CURRENT DATE FOR THIS NONSHIP LINE ' , 5 ) ;
6018               END IF;
6019               p_x_interface_line_rec.SHIP_DATE_ACTUAL := SYSDATE;
6020 
6021           END IF;
6022        end if;
6023        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3 := '0';
6024        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4 := '0';
6025        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7 := '0';
6026        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8 := '0';
6027   END IF;
6028   -- for bug# 1468820
6029   IF p_line_rec.source_type_code = 'EXTERNAL' THEN
6030      BEGIN
6031         --following line added for bug 3712551
6032         IF(p_line_rec.actual_shipment_date is null) THEN
6033            SELECT nvl ( max ( transaction_date ) , sysdate )
6034            INTO   p_x_interface_line_rec.ship_date_actual
6035            FROM   rcv_transactions   t , oe_drop_ship_sources s
6036            WHERE  t.po_header_id  =  s.po_header_id
6037            AND    t.po_line_location_id =  s.line_location_id
6038            AND    transaction_type = 'RECEIVE'
6039            AND    s.line_id = p_line_rec.line_id;
6040         ELSE
6041           --following line added for bug 3712551
6042           p_x_interface_line_rec.ship_date_actual := p_line_rec.actual_shipment_date;
6043        END IF;
6044 
6045      EXCEPTION
6046          WHEN OTHERS THEN
6047               IF l_debug_level  > 0 THEN
6048                   oe_debug_pub.add(  'SETTING SHIP_DATE_ACTUAL FOR DROPSHIP LINE TO SYSDATE' , 5 ) ;
6049               END IF;
6050               p_x_interface_line_rec.ship_date_actual := sysdate;
6051      END;
6052      IF l_debug_level  > 0 THEN
6053          oe_debug_pub.add(  'SHIP_DATE_ACTUAL FOR DROPSHIP LINE: '|| TO_CHAR ( P_X_INTERFACE_LINE_REC.SHIP_DATE_ACTUAL , 'DD-MON-YYYY HH24:MI:SS' ) , 5 ) ;
6054      END IF;
6055   END IF;
6056 
6057   -- Get information into p_x_interface_line_rec
6058   p_x_interface_line_rec.CREATED_BY                := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
6059   p_x_interface_line_rec.CREATION_DATE             := sysdate;
6060   p_x_interface_line_rec.LAST_UPDATED_BY           := NVL(oe_standard_wf.g_user_id, fnd_global.user_id); -- 3169637
6061   p_x_interface_line_rec.LAST_UPDATE_DATE          := sysdate;
6062   p_x_interface_line_rec.INTERFACE_LINE_CONTEXT    := FND_PROFILE.VALUE('ONT_SOURCE_CODE');
6063   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1 := to_char(p_header_rec.order_number);
6064 
6065   SELECT tt.name
6066   INTO   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2
6067   FROM   oe_transaction_types_tl tt,
6068          oe_order_headers oh
6069   WHERE  tt.language = ( select language_code
6070                          from   fnd_languages
6071                          where  installed_flag = 'B')
6072   AND    tt.transaction_type_id = oh.order_type_id
6073   AND    oh.header_id = p_line_rec.header_id;
6074   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE6 := to_char(p_line_rec.line_id);
6075   p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7 := '0'; -- picking_line_id
6076   --rt{ Retrobilling change
6077   /*IF (p_line_rec.line_category_code = 'RETURN'
6078      and p_line_rec.reference_line_id is not null
6079      and p_line_rec.retrobill_request_id is not null) THEN
6080     p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5 := p_line_rec.retrobill_request_id;
6081   END IF;*/
6082   --rt} End Retrobilling change
6083 
6084 
6085   IF   p_line_rec.invoiced_quantity IS NOT NULL THEN
6086        IF l_debug_level  > 0 THEN
6087            oe_debug_pub.add(  'THIS LINE WAS INTERFACED ATLEAST ONCE BEFORE' , 5 ) ;
6088        END IF;
6089        SELECT count(*)
6090        INTO   l_count1
6091        FROM   ra_interface_lines_all
6092        WHERE  interface_line_context = 'ORDER ENTRY'
6093        AND    interface_line_attribute1 = p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1
6094        AND    interface_line_attribute2 = p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2
6095        AND    interface_line_attribute6= to_char(p_line_rec.line_id)
6096        AND    interface_line_attribute11 = '0'
6097        AND    NVL(interface_status, '~') <> 'P';
6098        SELECT count(*)
6099        INTO   l_count2
6100        FROM   ra_customer_trx_lines_all
6101        WHERE  interface_line_context = 'ORDER ENTRY'
6102        AND    interface_line_attribute1 = p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1
6103        AND    interface_line_attribute2 = p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE2
6104        AND    interface_line_attribute6= to_char(p_line_rec.line_id)
6105        AND    interface_line_attribute11 = '0'
6106        AND    sales_order =  p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE1;
6107    END IF;
6108    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5 := l_count1 + l_count2 ; -- no of times this line is interfaced to AR
6109    IF l_debug_level  > 0 THEN
6110        oe_debug_pub.add(  'INTERFACE_LINE_ATTRIBUTE5: '|| P_X_INTERFACE_LINE_REC.INTERFACE_LINE_ATTRIBUTE5 , 5 ) ;
6111    END IF;
6112 
6113    --rt{ Retrobilling change
6114      IF (p_line_rec.line_category_code = 'RETURN'
6115          and p_line_rec.reference_line_id is not null
6116          and p_line_rec.retrobill_request_id is not null) THEN
6117              p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE5 := p_line_rec.retrobill_request_id;
6118     END IF;
6119   --rt} End Retrobilling change
6120 
6121    IF NVL(p_line_rec.item_identifier_type, 'INT') = 'CUST' THEN
6122        BEGIN
6123          SELECT customer_item_number
6124          INTO  p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9
6125          FROM  mtl_customer_items citems
6126          WHERE customer_item_id = p_line_rec.ordered_item_id;
6127        EXCEPTION
6128             WHEN OTHERS THEN
6129             IF l_debug_level  > 0 THEN
6130                 oe_debug_pub.add(  'EXCEPTION , POPULATING ATTRIBUTE9 AS 0 =>'||SQLERRM , 1 ) ;
6131             END IF;
6132             p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9 := '0';
6133        END;
6134        IF l_debug_level  > 0 THEN
6135            oe_debug_pub.add(  'GETTING CUSTOMER ITEM NUMBER: '|| P_X_INTERFACE_LINE_REC.INTERFACE_LINE_ATTRIBUTE9 ) ;
6136        END IF;
6137    ELSE
6138        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE9 := '0';
6139    END IF;
6140    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE10 := nvl(to_char(p_line_rec.ship_from_org_id), '0');
6141    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE11 := '0';
6142    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE12 := lpad(to_char(nvl(p_line_rec.Shipment_Number,0)),30);
6143    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE13 := lpad(to_char(nvl(p_line_rec.Option_Number,0)),30);
6144    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE14 := lpad(to_char(nvl(p_line_rec.Service_Number,0)),30);
6145    p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE15 := NULL;
6146    p_x_interface_line_rec.SET_OF_BOOKS_ID := oe_sys_parameters.value('SET_OF_BOOKS_ID', p_line_rec.org_id);
6147    p_x_interface_line_rec.LINE_TYPE := 'LINE';
6148    p_x_interface_line_rec.WAREHOUSE_ID := p_line_rec.ship_from_org_id;
6149 
6150    /* If the Line is of OTA type, then we need to call an OTA API to get the */
6151    /* concaternated string for item description */
6152 
6153    IF p_line_rec.order_quantity_uom in ('EVT','ENR') THEN
6154 	  IF l_debug_level  > 0 THEN
6155 	      oe_debug_pub.add(  'GETTING THE OTA DESCRIPTION' , 5 ) ;
6156 	  END IF;
6157 
6158           IF p_line_rec.line_category_code = 'RETURN' and
6159              p_line_rec.reference_line_id is not null then
6160 
6161 	    IF l_debug_level  > 0 THEN
6162 	        oe_debug_pub.add(  'GETTING THE OTA DESCRIPTION FOR RETURN' , 5 ) ;
6163 	    END IF;
6164 
6165 	    OE_OTA_UTIL.Get_OTA_Description
6166 			    (p_line_id         => p_line_rec.reference_line_id
6167 			    ,p_uom             => p_line_rec.order_quantity_uom
6168                             ,x_description     => l_item_description
6169 			    ,x_course_end_date => l_course_end_date
6170 			    ,x_return_status   => l_return_status
6171 			    );
6172             p_x_interface_line_rec.DESCRIPTION := l_item_description;
6173 	    IF l_debug_level  > 0 THEN
6174 	        oe_debug_pub.add(  'OTA DESCRIPTION' || L_ITEM_DESCRIPTION , 5 ) ;
6175 	    END IF;
6176 	    p_x_interface_line_rec.GL_DATE     := l_course_end_date;
6177 
6178           ELSE
6179 
6180 	    OE_OTA_UTIL.Get_OTA_Description
6181 			    (p_line_id         => p_line_rec.line_id
6182 			    ,p_uom             => p_line_rec.order_quantity_uom
6183                             ,x_description     => l_item_description
6184 			    ,x_course_end_date => l_course_end_date
6185 			    ,x_return_status   => l_return_status
6186 			    );
6187             p_x_interface_line_rec.DESCRIPTION := l_item_description;
6188 	    IF l_debug_level  > 0 THEN
6189 	        oe_debug_pub.add(  'OTA DESCRIPTION' || L_ITEM_DESCRIPTION , 5 ) ;
6190 	    END IF;
6191 	    p_x_interface_line_rec.GL_DATE     := l_course_end_date;
6192 
6193           END IF;
6194     ELSE
6195        IF p_line_rec.item_type_code = 'SERVICE' THEN
6196           Get_Service_Item_Description(p_line_rec, p_x_interface_line_rec.DESCRIPTION);
6197        ELSE
6198           Get_Item_Description(p_line_rec, p_x_interface_line_rec.DESCRIPTION);
6199        END IF;
6200 
6201     END IF;
6202 
6203     -- bug 2509121.
6204     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110509'
6205        AND p_line_rec.user_item_description IS NOT NULL
6206        AND p_line_rec.user_item_description <> FND_API.G_MISS_CHAR THEN
6207          p_x_interface_line_rec.translated_description := p_line_rec.user_item_description;
6208     END IF;
6209 
6210     -- Commenting if condition for bug# 4063920
6211     --IF p_x_interface_line_rec.CURRENCY_CODE IS NULL THEN
6212        p_x_interface_line_rec.CURRENCY_CODE := p_header_rec.transactional_curr_code;
6213     --END IF;
6214     IF p_line_rec.Commitment_Id IS NOT NULL THEN
6215        IF l_debug_level  > 0 THEN
6216            oe_debug_pub.add(  'GETTING CUST_TRX_TYPE_ID FROM COMMITMENT: '||P_LINE_REC.COMMITMENT_ID , 5 ) ;
6217        END IF;
6218        SELECT NVL(cust_type.subsequent_trx_type_id,cust_type.cust_trx_type_id)
6219        INTO p_x_interface_line_rec.Cust_Trx_Type_Id
6220        FROM ra_cust_trx_types cust_type,ra_customer_trx_all cust_trx  /* MOAC SQL CHANGE */
6221        WHERE cust_type.cust_trx_type_id = cust_trx.cust_trx_type_id
6222        AND cust_trx.customer_trx_id = p_line_rec.Commitment_Id;
6223        IF l_debug_level  > 0 THEN
6224            oe_debug_pub.add(  'CUST_TRX_TYPE_ID FROM COMMITMENT IS '||P_X_INTERFACE_LINE_REC.CUST_TRX_TYPE_ID ) ;
6225        END IF;
6226     ELSE
6227        p_x_interface_line_rec.Cust_Trx_Type_Id := Get_Customer_Transaction_Type(p_line_rec);
6228     END IF;
6229 /* START PREPAYMENT */
6230     IF NOT Return_Line(p_line_rec) THEN
6231        IF OE_PrePayment_Util.Is_Prepaid_Order(p_header_rec) = 'Y' THEN
6232           -- p_x_interface_line_rec.Term_Id := p_header_rec.payment_term_id;
6233           IF l_debug_level  > 0 THEN
6234               oe_debug_pub.add(  'GETTING PAYMENT_SET_ID FROM OE_PAYMENTS' ) ;
6235           END IF;
6236           BEGIN
6237 --serla begin
6238             IF OE_PrePayment_UTIL.IS_MULTIPLE_PAYMENTS_ENABLED THEN
6239                SELECT payment_set_id
6240                INTO p_x_interface_line_rec.Payment_Set_ID
6241                FROM oe_payments
6242                WHERE header_id = p_line_rec.header_id
6243                AND   payment_set_id IS NOT NULL
6244                AND   rownum=1;
6245             ELSE
6246 --serla end
6247                SELECT payment_set_id
6248                INTO p_x_interface_line_rec.Payment_Set_ID
6249                FROM oe_payments
6250                WHERE header_id = p_line_rec.header_id
6251                AND   line_id is null
6252                AND   payment_type_code = 'CREDIT_CARD';
6253 --serla begin
6254             END IF;
6255 --serla end
6256           EXCEPTION
6257              WHEN NO_DATA_FOUND THEN
6258                p_x_interface_line_rec.Payment_Set_ID := NULL;
6259              WHEN TOO_MANY_ROWS THEN
6260                p_x_interface_line_rec.Payment_Set_ID := NULL;
6261           END;
6262           IF l_debug_level  > 0 THEN
6263               oe_debug_pub.add(  'AFTER GETTING PAYMENT_SET_ID: '||P_X_INTERFACE_LINE_REC.PAYMENT_SET_ID ) ;
6264           END IF;
6265           p_x_interface_line_rec.approval_code := NULL;
6266        -- ELSE
6267        --  p_x_interface_line_rec.Term_Id := p_line_rec.payment_term_id;
6268        END IF;
6269        p_x_interface_line_rec.Term_Id := p_line_rec.payment_term_id;
6270     END IF;
6271 /* END PREPAYMENT */
6272     Get_Qty_To_Invoice(p_line_rec, p_x_interface_line_rec.QUANTITY, x_result_code);
6273     IF OE_Commitment_Pvt.DO_Commitment_Sequencing THEN-- commitment sequencing functionality ON
6274       IF p_line_rec.commitment_id IS NOT NULL THEN
6275          Get_Commitment_Info(p_line_rec
6276                             ,l_commitment_applied
6277                             ,l_commitment_interfaced);
6278          IF x_result_code = 'RFR-PENDING' THEN
6279             IF l_debug_level  > 0 THEN
6280                 oe_debug_pub.add(  'GET PARTIAL PROMISED AMOUNT FOR PARTIALLY INVOICED LINE' , 5 ) ;
6281             END IF;
6282             Rounded_Amount(p_currency_code => p_x_interface_line_rec.currency_code
6283                           ,p_unrounded_amount => (p_line_rec.unit_selling_price * p_x_interface_line_rec.quantity)
6284                           ,x_rounded_amount => l_partial_line_amount);
6285             IF OE_COMMITMENT_PVT.Get_Allocate_Tax_Freight(p_line_rec) = 'Y' THEN
6286                l_fulfilled_qty := NVL(p_line_rec.fulfilled_quantity, NVL(p_line_rec.shipped_quantity, NVL(p_line_rec.ordered_quantity, 0)));
6287                l_partial_line_tax_amount := nvl(p_line_rec.tax_value * (p_x_interface_line_rec.QUANTITY/l_fulfilled_qty), 0);
6288                SELECT nvl(sum(charge_amount), 0)
6289                INTO   l_partial_line_freight_amount
6290                FROM   oe_charge_lines_v
6291                WHERE  header_id = p_line_rec.header_id
6292                AND    line_id = p_line_rec.line_id
6293                AND    nvl(invoiced_flag, 'N') = 'N';
6294             END IF;
6295 
6296             IF l_debug_level  > 0 THEN
6297                 oe_debug_pub.add(  'PARTIAL LINE AMOUNT '||L_PARTIAL_LINE_AMOUNT||' - PARTIAL TAX AMOUNT '||L_PARTIAL_LINE_TAX_AMOUNT||' - PARTIAL LINE FREIGHT AMOUNT '||L_PARTIAL_LINE_FREIGHT_AMOUNT , 5 ) ;
6298             END IF;
6299             l_partial_line_promised_amount := l_partial_line_amount + l_partial_line_tax_amount + l_partial_line_freight_amount;
6300             IF (l_commitment_applied-l_commitment_interfaced) >= l_partial_line_promised_amount THEN
6301                p_x_interface_line_rec.promised_commitment_amount := l_partial_line_promised_amount;
6302                IF l_debug_level  > 0 THEN
6303                    oe_debug_pub.add(  'RFR- PASS FULL AMOUNT FOR THIS INTERFACE: '|| P_X_INTERFACE_LINE_REC.PROMISED_COMMITMENT_AMOUNT , 3 ) ;
6304                END IF;
6305             ELSE
6306                p_x_interface_line_rec.promised_commitment_amount := l_commitment_applied-l_commitment_interfaced;
6307                IF l_debug_level  > 0 THEN
6308                    oe_debug_pub.add(  'PASS PARTIAL AMOUNT FOR THIS INTERFACE: ' ||P_X_INTERFACE_LINE_REC.PROMISED_COMMITMENT_AMOUNT , 3 ) ;
6309                END IF;
6310             END IF;
6311          ELSE
6312             p_x_interface_line_rec.PROMISED_COMMITMENT_AMOUNT := l_commitment_applied-l_commitment_interfaced;
6313             IF l_debug_level  > 0 THEN
6314                 oe_debug_pub.add(  'NOT RFR- PROMISED_COMMITMENT_AMOUNT: '|| P_X_INTERFACE_LINE_REC.PROMISED_COMMITMENT_AMOUNT ) ;
6315             END IF;
6316          END IF;
6317       END IF;
6318     END IF; -- end of commitment sequencing functionality ON
6319     p_x_interface_line_rec.Unit_Standard_Price := p_line_rec.Unit_List_Price;
6320     IF Show_Detail_Discounts(p_line_rec) THEN
6321 	  -- If we show detail discounts, original line selling and extended amounts should not include discount amount.
6322        p_x_interface_line_rec.Unit_Selling_Price := p_line_rec.Unit_List_Price;
6323        Rounded_Amount(p_currency_code => p_x_interface_line_rec.currency_code
6324                      ,p_unrounded_amount => (p_line_rec.unit_list_price * p_x_interface_line_rec.quantity)
6325                      ,x_rounded_amount => p_x_interface_line_rec.amount);
6326     ELSE
6327        p_x_interface_line_rec.Unit_Selling_Price := p_line_rec.Unit_Selling_Price;
6328        Rounded_Amount(p_currency_code => p_x_interface_line_rec.currency_code
6329                      ,p_unrounded_amount => (p_line_rec.unit_selling_price * p_x_interface_line_rec.quantity)
6330                      ,x_rounded_amount => p_x_interface_line_rec.amount);
6331     END IF;
6332     p_x_interface_line_rec.Quantity_Ordered := p_line_rec.Ordered_Quantity;
6333     -- Get Creation_sign
6334     l_creation_sign := Get_Credit_Creation_Sign(p_line_rec, p_x_interface_line_rec.cust_trx_type_id);
6335     IF l_debug_level  > 0 THEN
6336         oe_debug_pub.add(  ' CREATION SIGN IS '|| L_CREATION_SIGN , 5 ) ;
6337     END IF;
6338 
6339     IF l_creation_sign = 'A' THEN
6340        IF Return_Line(p_line_rec) THEN
6341 	     IF l_debug_level  > 0 THEN
6342 	         oe_debug_pub.add(  'SETTING -VE SIGN FOR RETURN LINE' , 5 ) ;
6343 	     END IF;
6344           p_x_interface_line_rec.Amount := p_x_interface_line_rec.amount * -1;
6345           p_x_interface_line_rec.Quantity := p_x_interface_line_rec.Quantity * -1;
6346           p_x_interface_line_rec.Quantity_Ordered := p_line_rec.Ordered_Quantity * -1;
6347        END IF;
6348     ELSIF l_creation_sign = 'P' THEN
6349        NULL;
6350     ELSIF l_creation_sign = 'N' THEN
6351        p_x_interface_line_rec.Amount := p_x_interface_line_rec.amount * -1;
6352        p_x_interface_line_rec.Quantity := p_x_interface_line_rec.Quantity * -1;
6353        p_x_interface_line_rec.Quantity_Ordered := p_line_rec.Ordered_Quantity * -1;
6354     END IF;
6355 
6356     IF l_debug_level  > 0 THEN
6357         oe_debug_pub.add(  'LINE UNIT SELLING PRICE: '||P_X_INTERFACE_LINE_REC.UNIT_SELLING_PRICE , 5 ) ;
6358         oe_debug_pub.add(  'LINE UNIT STANDARD PRICE: '||P_X_INTERFACE_LINE_REC.UNIT_STANDARD_PRICE , 5 ) ;
6359         oe_debug_pub.add(  'LINE AMOUNT: '||P_X_INTERFACE_LINE_REC.AMOUNT ) ;
6360     END IF;
6361 
6362     -- invoice_to_org_id is required at booking
6363     IF p_line_rec.invoice_to_org_id IS NOT NULL THEN
6364 	  IF l_debug_level  > 0 THEN
6365 	      oe_debug_pub.add(  'GETTING ORIG_SYSTEM_BILL_CUSTOMER_ID , ORIG_SYSTEM_BILL_ADDRESS_ID INFO' , 5 ) ;
6366 	  END IF;
6367        BEGIN
6368        /* Commented for bug #3519137 added new select statement */
6369        /*SELECT bill_to_org.customer_id
6370                ,bill_to_org.address_id
6371          INTO   p_x_interface_line_rec.ORIG_SYSTEM_BILL_CUSTOMER_ID
6372                ,p_x_interface_line_rec.ORIG_SYSTEM_BILL_ADDRESS_ID
6373          FROM   oe_invoice_to_orgs_v bill_to_org
6374          WHERE  bill_to_org.organization_id = p_line_rec.invoice_to_org_id;*/
6375 
6376          SELECT acct_site.cust_account_id, site.cust_acct_site_id
6377          INTO p_x_interface_line_rec.ORIG_SYSTEM_BILL_CUSTOMER_ID
6378              ,p_x_interface_line_rec.ORIG_SYSTEM_BILL_ADDRESS_ID
6379          FROM hz_cust_acct_sites_all acct_site, hz_cust_site_uses_all site
6380          WHERE SITE.SITE_USE_CODE = 'BILL_TO'
6381          AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
6382          AND SITE.SITE_USE_ID  = p_line_rec.invoice_to_org_id;
6383 
6384        EXCEPTION
6385            WHEN OTHERS THEN
6386 	            IF l_debug_level  > 0 THEN
6387 	                oe_debug_pub.add(  'EXCEPTION , '||SQLERRM , 1 ) ;
6388 	            END IF;
6389                 p_x_interface_line_rec.ORIG_SYSTEM_BILL_CUSTOMER_ID := NULL;
6390                 p_x_interface_line_rec.ORIG_SYSTEM_BILL_ADDRESS_ID := NULL;
6391        END;
6392     END IF;
6393     -- ship_to_org_id is not required at booking for return lines
6394     IF p_line_rec.ship_to_org_id IS NOT NULL THEN
6395        IF l_debug_level  > 0 THEN
6396            oe_debug_pub.add(  'GETTING ORIG_SYSTEM_SHIP_CUSTOMER_ID , ORIG_SYSTEM_SHIP_ADDRESS_ID INFO' ) ;
6397        END IF;
6398        BEGIN
6399        /* Commented for bug #3519137 added new select statement */
6400        /*SELECT ship_to_org.customer_id
6401                ,ship_to_org.address_id
6402          INTO   p_x_interface_line_rec.ORIG_SYSTEM_SHIP_CUSTOMER_ID
6403                ,l_orig_sys_ship_addr_id
6404          FROM   oe_ship_to_orgs_v ship_to_org
6405          WHERE  ship_to_org.organization_id = p_line_rec.ship_to_org_id;*/
6406 
6407          SELECT acct_site.cust_account_id, site.cust_acct_site_id
6408          INTO   p_x_interface_line_rec.ORIG_SYSTEM_SHIP_CUSTOMER_ID
6409                ,l_orig_sys_ship_addr_id
6410          FROM hz_cust_acct_sites_all acct_site, hz_cust_site_uses_all site
6411          WHERE SITE.SITE_USE_CODE = 'SHIP_TO'
6412          AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
6413          AND SITE.SITE_USE_ID = p_line_rec.ship_to_org_id;
6414 
6415        EXCEPTION
6416            WHEN OTHERS THEN
6417 	            IF l_debug_level  > 0 THEN
6418 	                oe_debug_pub.add(  'EXCEPTION , '||SQLERRM , 1 ) ;
6419 	            END IF;
6420                 p_x_interface_line_rec.ORIG_SYSTEM_SHIP_CUSTOMER_ID := NULL;
6421                 l_orig_sys_ship_addr_id := NULL;
6422        END;
6423     END IF;
6424     p_x_interface_line_rec.orig_system_ship_address_id  := nvl(p_x_interface_line_rec.orig_system_ship_address_id, l_orig_sys_ship_addr_id);
6425     p_x_interface_line_rec.orig_system_bill_contact_id  := p_line_rec.invoice_to_contact_id;
6426     p_x_interface_line_rec.orig_system_ship_contact_id  := p_line_rec.ship_to_contact_id;
6427     p_x_interface_line_rec.orig_system_sold_customer_id := p_line_rec.sold_to_org_id;
6428     p_x_interface_line_rec.conversion_type              := NVL(p_header_rec.conversion_type_code, 'User');
6429     p_x_interface_line_rec.conversion_date              := p_header_rec.conversion_rate_date;
6430     p_x_interface_line_rec.conversion_rate              := p_header_rec.conversion_rate;
6431     IF p_x_interface_line_rec.conversion_rate IS NULL THEN
6432        IF p_x_interface_line_rec.conversion_type = 'User' THEN
6433           p_x_interface_line_rec.conversion_rate := 1;
6434        END IF;
6435     END IF;
6436 
6437     IF p_header_rec.conversion_type_code IS NOT NULL THEN
6438        l_set_of_books_rec := OE_Order_Cache.Load_Set_Of_Books;
6439        IF l_debug_level  > 0 THEN
6440            oe_debug_pub.add(  'SOB CURRENCY: '||L_SET_OF_BOOKS_REC.CURRENCY_CODE||' TRANSACTIONAL CURRENCY: '||P_HEADER_REC.TRANSACTIONAL_CURR_CODE ) ;
6441        END IF;
6442        IF p_header_rec.transactional_curr_code = l_set_of_books_rec.currency_code THEN
6443           p_x_interface_line_rec.conversion_type :=  'User';
6444           p_x_interface_line_rec.conversion_rate := 1;
6445        END IF;
6446     END IF;
6447 
6448     p_x_interface_line_rec.Primary_salesrep_Id := NVL(p_line_rec.Salesrep_Id, p_header_rec.Salesrep_Id);
6449     p_x_interface_line_rec.Sales_Order         := to_char(p_header_rec.Order_Number);
6450     p_x_interface_line_rec.Sales_Order_Line    := to_char(p_line_rec.Line_Number);
6451     p_x_interface_line_rec.Sales_Order_Date    := p_header_rec.Ordered_Date;
6452     p_x_interface_line_rec.Sales_Order_Source  := FND_PROFILE.VALUE('ONT_SOURCE_CODE');
6453     p_x_interface_line_rec.Agreement_Id        := p_line_rec.Agreement_Id;
6454     p_x_interface_line_rec.Purchase_Order      := p_line_rec.Cust_PO_Number;
6455     p_x_interface_line_rec.Inventory_Item_Id   := p_line_rec.Inventory_Item_Id;
6456 
6457     -- Changes for #3144768 begin
6458 
6459     BEGIN
6460          SELECT NUMBER_VALUE
6461          INTO   l_user_id
6462          FROM   WF_ITEM_ATTRIBUTE_VALUES
6463          WHERE  ITEM_KEY = to_char(p_line_rec.line_id)
6464          AND    ITEM_TYPE = 'OEOL'
6465          AND    NAME = 'USER_ID';
6466 
6467          SELECT NUMBER_VALUE
6468          INTO   l_resp_id
6469          FROM   WF_ITEM_ATTRIBUTE_VALUES
6470          WHERE  ITEM_KEY = to_char(p_line_rec.line_id)
6471          AND    ITEM_TYPE = 'OEOL'
6472          AND    NAME = 'RESPONSIBILITY_ID';
6473 
6474          SELECT NUMBER_VALUE
6475          INTO   l_appl_id
6476          FROM   WF_ITEM_ATTRIBUTE_VALUES
6477          WHERE  ITEM_KEY = to_char(p_line_rec.line_id)
6478          AND    ITEM_TYPE = 'OEOL'
6479          AND    NAME = 'APPLICATION_ID';
6480 
6481     EXCEPTION WHEN OTHERS THEN
6482          l_user_id := NULL;
6483          l_resp_id := NULL;
6484          l_appl_id := NULL;
6485          OE_DEBUG_PUB.add('Unable to find item attributes while searching for Tax Code profile value : '||sqlerrm,1);
6486          NULL;
6487     END;
6488 
6489     OE_DEBUG_PUB.add('Tax code value on the Order Line '||p_line_rec.tax_code,5);
6490     OE_DEBUG_PUB.add('ID => User,Resp,Appl : '||l_user_id||','||l_resp_id||','||l_appl_id,5);
6491 
6492     -- 3757279
6493        l_concat_segment := 'u'||l_user_id||'r'||l_resp_id||'a'||l_appl_id;
6494        oe_debug_pub.add('l_concat_segment'||l_concat_segment,1);
6495        l_table_index := FIND(l_concat_segment);
6496        IF l_table_index < TABLE_SIZE THEN
6497            IF l_debug_level  > 0 THEN
6498               --oe_debug_pub.add(  'cached FND PROFILE AR_ALLOW_TAX_CODE_OVERRIDE: '||Prf_Tbl(l_table_index).prf_value,1);
6499               oe_debug_pub.add(  'cached FND PROFILE ZX_ALLOW_TAX_CLASSIF_OVERRIDE: '||Prf_Tbl(l_table_index).prf_value,1);
6500            END IF;
6501             l_prof_value := Prf_Tbl(l_table_index).prf_value;
6502        ELSE
6503            put(l_concat_segment,l_user_id,l_resp_id,l_appl_id,l_prof_value);
6504            IF l_debug_level  > 0 THEN
6505               --oe_debug_pub.add(  ' Uncached first time FND PROFILE AR_ALLOW_TAX_CODE_OVERRIDE: '||l_prof_value,1);
6506               oe_debug_pub.add(  ' Uncached first time FND PROFILE ZX_ALLOW_TAX_CLASSIF_OVERRIDE: '||l_prof_value,1);
6507            END IF;
6508        END IF;
6509     -- 3757279
6510 
6511     IF NVL(l_prof_value,'N') = 'Y' THEN
6512        p_x_interface_line_rec.Tax_code := p_line_rec.Tax_code;
6513     END IF;
6514     OE_DEBUG_PUB.add('Tax Code interfaced to AR is : '||p_line_rec.Tax_Code,1);
6515 
6516     -- Changes for 3144768 End
6517     IF Return_Line(p_line_rec) THEN
6518 	   IF l_debug_level  > 0 THEN
6519 	       oe_debug_pub.add(  'SETTING INFORMATION FOR RETURN LINE' , 5 ) ;
6520 	   END IF;
6521        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3 := '0';
6522        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE4 := '0';
6523        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE7 := '0';
6524        p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE8 := '0';
6525        p_x_interface_line_rec.Reason_Code := p_line_rec.Return_Reason_Code;
6526 --Bug2302812.Commented the procedure "Get_Received_Status" and in turn we get the
6527 --Receipt date from "RCV_TRANSACTIONS".
6528   /*     OE_LINE_STATUS_PUB.Get_Received_Status(p_line_id => p_line_rec.line_id, x_result=>l_rma_result, x_result_date=>l_rma_date);*/
6529          --Bug2758528-Added a check for 'RECEIVE' Transaction type.
6530 
6531        -- With the new fix we are populating the actual_shipment_date for RMAs.
6532        -- But for old RMAs it may be still NULL, hence adding this logic
6533        -- to avoid the data upgrade impact for open RMA lines.
6534 
6535       IF p_line_rec.actual_shipment_date IS NULL THEN
6536          SELECT max ( transaction_date )   -- Bug#3343004
6537          INTO   l_rma_date
6538          FROM   rcv_transactions
6539          WHERE  transaction_type IN ('RECEIVE','UNORDERED')
6540          AND    oe_order_line_id = p_line_rec.line_id;
6541 
6542          p_x_interface_line_rec.Ship_Date_Actual := l_rma_date;
6543 
6544       ELSE
6545          p_x_interface_line_rec.Ship_Date_Actual :=
6546                                       p_line_rec.actual_shipment_date;
6547       END IF;
6548 
6549       IF  p_x_interface_line_rec.Ship_Date_Actual is NULL THEN
6550           IF (fnd_profile.value('OE_RECEIVABLES_DATE_FOR_NONSHIP_LINES') = 'Y')
6551           THEN
6552               p_x_interface_line_rec.Ship_Date_Actual := SYSDATE;
6553           END IF;
6554       END IF;
6555 
6556        --p_x_interface_line_rec.Ship_Date_Actual := l_rma_date;
6557        p_x_interface_line_rec.Fob_Point := NULL;
6558        p_x_interface_line_rec.Ship_Via := NULL;
6559        p_x_interface_line_rec.Waybill_Number := NULL;
6560        p_x_interface_line_rec.Reference_Line_Id := p_line_rec.Credit_Invoice_Line_Id;
6561        p_x_interface_line_rec.Accounting_Rule_Id := NULL;
6562        p_x_interface_line_rec.Invoicing_Rule_Id := NULL;
6563        p_x_interface_line_rec.Term_Id := NULL;
6564        --bug 6324173, populate credit method only if referenced invoice has accounting rule
6565        IF p_x_interface_line_rec.Reference_Line_Id is NOT NULL THEN
6566          select ACCOUNTING_RULE_ID INTO L_ACCOUNTING_RULE_ID from RA_CUSTOMER_TRX_LINES_all
6567 		where CUSTOMER_TRX_LINE_ID= p_x_interface_line_rec.Reference_Line_Id;
6568   	 IF L_ACCOUNTING_RULE_ID is NOT NULL THEN
6569            Get_Credit_Method_Code(p_line_rec
6570                           ,p_x_interface_line_rec.Credit_Method_For_Acct_Rule
6571                           ,p_x_interface_line_rec.Credit_Method_For_Installments);
6572          END IF;
6573        END IF;
6574     ELSE
6575        p_x_interface_line_rec.Reason_Code := NULL;
6576        p_x_interface_line_rec.Ship_Date_Actual := NVL(p_x_interface_line_rec.Ship_Date_Actual, p_line_rec.actual_shipment_date);
6577        p_x_interface_line_rec.Fob_Point := p_line_rec.fob_point_code;
6578        p_x_interface_line_rec.Waybill_Number := p_x_interface_line_rec.Interface_line_Attribute4;
6579 --     p_x_interface_line_rec.Ship_Via := NVL(p_x_interface_line_rec.Ship_Via, p_line_rec.freight_carrier_code);  -- Should it be shipping_method_code???
6580        IF p_line_rec.Commitment_Id IS NOT NULL THEN
6581     	  IF l_debug_level  > 0 THEN
6582     	      oe_debug_pub.add(  'REFERENCE_LINE_ID FROM COMMITMENT ID IS '||P_LINE_REC.COMMITMENT_ID ) ;
6583     	  END IF;
6584           SELECT customer_trx_line_id
6585           INTO   p_x_interface_line_rec.Reference_Line_Id
6586           FROM   ra_customer_trx_lines_all
6587           WHERE  customer_trx_id = p_line_rec.Commitment_Id;
6588          -- p_x_interface_line_rec.Cust_Trx_Type_Id := NULL; -- bug 4744262
6589        END IF;
6590        IF /*p_line_rec.accounting_rule_id = 1 or*/ p_line_rec.accounting_rule_id is NULL THEN--Bug 5730802
6591           p_x_interface_line_rec.accounting_rule_id := NULL;
6592           p_x_interface_line_rec.invoicing_rule_id := NULL;
6593        ELSE
6594           p_x_interface_line_rec.accounting_rule_id := p_line_rec.accounting_rule_id;
6595           p_x_interface_line_rec.invoicing_rule_id := p_line_rec.invoicing_rule_id;
6596        END IF;
6597     END IF;
6598     -- This may be a temporary fix for bug# 1386715.
6599     -- need to understand if we need to convert duration into different unit
6600     -- Right now, it is in units of Months.
6601     -- But, Autoinvoice uses accounting rule's period.
6602     IF NOT Return_Line(p_line_rec) AND p_x_interface_line_rec.accounting_rule_id IS NOT NULL THEN
6603        IF l_debug_level  > 0 THEN
6604            oe_debug_pub.add(  'GET ACCOUNTING RULE TYPE ' , 5 ) ;
6605        END IF;
6606        --Modified for bug#4190312
6607        SELECT type,frequency
6608        INTO l_accounting_rule_type, l_frequency
6609        FROM ra_rules
6610        WHERE rule_id = p_x_interface_line_rec.accounting_rule_id;
6611        IF l_accounting_rule_type = 'ACC_DUR' THEN
6612           -- accounting rule duration is required for regular (non service) lines at booking
6613           IF OE_CODE_CONTROL.Get_Code_Release_Level >= '110509' THEN
6614              IF l_debug_level  > 0 THEN
6615                  oe_debug_pub.add(  'INTERFACING ACCOUNTING_RULE_DURATION FOR REGULAR LINES:'|| P_LINE_REC.ACCOUNTING_RULE_DURATION ) ;
6616              END IF;
6617              p_x_interface_line_rec.ACCOUNTING_RULE_DURATION := p_line_rec.accounting_rule_duration;
6618           ELSE
6619              IF l_debug_level  > 0 THEN
6620                  oe_debug_pub.add(  'BELOW PACK I , DO NOT INTERFACE DURATION' ) ;
6621              END IF;
6622              p_x_interface_line_rec.ACCOUNTING_RULE_DURATION := NULL;
6623           END IF;
6624           IF p_line_rec.item_type_code = 'SERVICE' THEN
6625              p_x_interface_line_rec.rule_start_date := p_line_rec.service_start_date; -- 1833680
6626              --PP Revenue Recognition
6627              --bug 4893057
6628 	     --Need to pass the rule end date for partial revenue recognition enhancement
6629 	     --bug 5608550 Commenting the code since we are in 'Variable schedule' ie 'ACC_DUR'
6630 	     --p_x_interface_line_rec.rule_end_date := p_line_rec.service_end_date;
6631              IF p_x_interface_line_rec.accounting_rule_duration IS NULL THEN
6632                 IF p_line_rec.service_start_date IS NULL OR p_line_rec.service_end_date IS NULL THEN
6633                    -- bug# 4190312 post message and complete with status INCOMPLETE
6634                    FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ACCT_RULE_DURATION');
6635                    OE_MSG_PUB.ADD;
6636                    IF l_debug_level  > 0 THEN
6637                        oe_debug_pub.add(  'SERVICE START DATE OR SERVICE END DATE IS NULL' , 3 ) ;
6638                    END IF;
6639                    p_x_interface_line_rec.ACCOUNTING_RULE_DURATION := -1;
6640                 ELSE
6641                    BEGIN
6642 --Modified for bug#4190312
6643 /*
6644                       l_acct_rule_duration :=  ceil(OKS_TIME_MEASURES_PUB.GET_QUANTITY(
6645                                                                  p_start_date  => p_line_rec.service_start_date
6646                                                                 ,p_end_date    => p_line_rec.service_end_date));
6647 */
6648 
6649                       SELECT period_set_name
6650                       INTO l_calendar_name
6651                       FROM gl_sets_of_books
6652                       WHERE set_of_books_id = p_x_interface_line_rec.SET_OF_BOOKS_ID;
6653 
6654                       GL_CALENDAR_PKG.get_num_periods_in_date_range(
6655                          calendar_name => l_calendar_name,
6656                          period_type   => l_frequency,
6657                          start_date    => p_line_rec.service_start_date,
6658                          end_date      => p_line_rec.service_end_date,
6659                          check_missing => TRUE,
6660                          num_periods   => l_acct_rule_duration,
6661                          return_code   => l_return_code,
6662                          unmapped_date => l_unmapped_date);
6663 
6664                       IF l_debug_level  > 0 THEN
6665                           oe_debug_pub.add('l_acct_rule_duration:'||l_acct_rule_duration);
6666                           oe_debug_pub.add('l_return_code:'||l_return_code);
6667                           oe_debug_pub.add('l_unmapped_date:'||l_unmapped_date);
6668                       END IF;
6669                       IF l_return_code = 'SUCCESS' THEN
6670                          p_x_interface_line_rec.ACCOUNTING_RULE_DURATION := l_acct_rule_duration;
6671                       ELSE
6672                          p_x_interface_line_rec.ACCOUNTING_RULE_DURATION := -1;
6673                         -- post message
6674                         FND_MESSAGE.SET_NAME('ONT','ONT_GL_UNMAPPED_DATES');
6675                         FND_MESSAGE.SET_TOKEN('START_DATE', p_line_rec.service_start_date);
6676                         FND_MESSAGE.SET_TOKEN('END_DATE', p_line_rec.service_end_date);
6677                         FND_MESSAGE.SET_TOKEN('CALENDAR_NAME', l_calendar_name);                        OE_MSG_PUB.ADD;
6678                          IF l_debug_level  > 0 THEN
6679                             oe_debug_pub.add('Atleast one or more dates ('||l_unmapped_date||') within the date range that are not associated with any adjustment period.');
6680                          END IF;
6681                       END IF;
6682                    EXCEPTION
6683                       WHEN OTHERS THEN
6684                          p_x_interface_line_rec.ACCOUNTING_RULE_DURATION := -1;
6685                          -- Modified for bug# 4190312
6686                          FND_MESSAGE.SET_NAME('ONT','ONT_GL_UNMAPPED_DATES');
6687                          FND_MESSAGE.SET_TOKEN('START_DATE', p_line_rec.service_start_date);
6688                          FND_MESSAGE.SET_TOKEN('END_DATE', p_line_rec.service_end_date);
6689                          FND_MESSAGE.SET_TOKEN('CALENDAR_NAME', l_calendar_name);
6690                          OE_MSG_PUB.ADD;
6691                          IF l_debug_level  > 0 THEN
6692                              oe_debug_pub.add(  'ERROR IN GL_CALENDAR_PKG.Get_Num_Periods_In_Date_Range ; ERROR => '||SQLERRM , 1 ) ;
6693                          END IF;
6694                    END;
6695                 END IF; -- end of service service start/end dates
6696              END IF; -- null accounting_rule_duaration
6697           END IF; --service line
6698        ELSE -- fixed accounting rule
6699         -- Pass rule_start_date for service lines for fixed rules also (as it was before change for variable accounting rules)
6700           IF p_line_rec.item_type_code = 'SERVICE'
6701           	OR (l_accounting_rule_type = 'PP_DR_ALL' OR l_accounting_rule_type = 'PP_DR_PP')THEN -- webroot bug 6826344 modified the contition
6702              oe_debug_pub.add(  'Start date assigned: l_accounting_rule_type: ' || l_accounting_rule_type) ;
6703              p_x_interface_line_rec.rule_start_date := p_line_rec.service_start_date; -- 1833680
6704              --PP Revenue Recognition
6705              --bug 4893057
6706 	     --Need to pass the rule end date for partial revenue recognition enhancement
6707 	     --bug 5608550 Need to pass the rule end date ONLY for partial revenue recognition
6708 	     IF ((l_accounting_rule_type = 'PP_DR_ALL') OR (l_accounting_rule_type = 'PP_DR_PP')) THEN
6709 
6710 	        oe_debug_pub.add(  'End date assigned: l_accounting_rule_type: ' || l_accounting_rule_type) ;
6711 	        p_x_interface_line_rec.rule_end_date := p_line_rec.service_end_date;
6712 	     END IF;
6713           END IF;
6714        END IF; -- variable/fixed accounting rule
6715     END IF;
6716 
6717     IF l_debug_level  > 0 THEN
6718         oe_debug_pub.add(  'GET ATTRIBUTE VALUES' , 5 ) ;
6719     END IF;
6720     p_x_interface_line_rec.Attribute_Category := p_line_rec.Context;
6721     p_x_interface_line_rec.Attribute1 := substrb(p_line_rec.Attribute1, 1, 150);
6722     p_x_interface_line_rec.Attribute2 := substrb(p_line_rec.Attribute2, 1, 150);
6723     p_x_interface_line_rec.Attribute3 := substrb(p_line_rec.Attribute3, 1, 150);
6724     p_x_interface_line_rec.Attribute4 := substrb(p_line_rec.Attribute4, 1, 150);
6725     p_x_interface_line_rec.Attribute5 := substrb(p_line_rec.Attribute5, 1, 150);
6726     p_x_interface_line_rec.Attribute6 := substrb(p_line_rec.Attribute6, 1, 150);
6727     p_x_interface_line_rec.Attribute7 := substrb(p_line_rec.Attribute7, 1, 150);
6728     p_x_interface_line_rec.Attribute8 := substrb(p_line_rec.Attribute8, 1, 150);
6729     p_x_interface_line_rec.Attribute9 := substrb(p_line_rec.Attribute9, 1, 150);
6730     p_x_interface_line_rec.Attribute10 := substrb(p_line_rec.Attribute10, 1, 150);
6731     p_x_interface_line_rec.Attribute11 := substrb(p_line_rec.Attribute11, 1, 150);
6732     p_x_interface_line_rec.Attribute12 := substrb(p_line_rec.Attribute12, 1, 150);
6733     p_x_interface_line_rec.Attribute13 := substrb(p_line_rec.Attribute13, 1, 150);
6734     p_x_interface_line_rec.Attribute14 := substrb(p_line_rec.Attribute14, 1, 150);
6735     p_x_interface_line_rec.Attribute15 := substrb(p_line_rec.Attribute15, 1, 150);
6736 
6737     p_x_interface_line_rec.Header_Attribute_Category := p_header_rec.Context;
6738     p_x_interface_line_rec.Header_Attribute1 := substrb(p_header_rec.Attribute1, 1, 150);
6739     p_x_interface_line_rec.Header_Attribute2 := substrb(p_header_rec.Attribute2, 1, 150);
6740     p_x_interface_line_rec.Header_Attribute3 := substrb(p_header_rec.Attribute3, 1, 150);
6741     p_x_interface_line_rec.Header_Attribute4 := substrb(p_header_rec.Attribute4, 1, 150);
6742     p_x_interface_line_rec.Header_Attribute5 := substrb(p_header_rec.Attribute5, 1, 150);
6743     p_x_interface_line_rec.Header_Attribute6 := substrb(p_header_rec.Attribute6, 1, 150);
6744     p_x_interface_line_rec.Header_Attribute7 := substrb(p_header_rec.Attribute7, 1, 150);
6745     p_x_interface_line_rec.Header_Attribute8 := substrb(p_header_rec.Attribute8, 1, 150);
6746     p_x_interface_line_rec.Header_Attribute9 := substrb(p_header_rec.Attribute9, 1, 150);
6747     p_x_interface_line_rec.Header_Attribute10 := substrb(p_header_rec.Attribute10, 1, 150);
6748     p_x_interface_line_rec.Header_Attribute11 := substrb(p_header_rec.Attribute11, 1, 150);
6749     p_x_interface_line_rec.Header_Attribute12 := substrb(p_header_rec.Attribute12, 1, 150);
6750     p_x_interface_line_rec.Header_Attribute13 := substrb(p_header_rec.Attribute13, 1, 150);
6751     p_x_interface_line_rec.Header_Attribute14 := substrb(p_header_rec.Attribute14, 1, 150);
6752     p_x_interface_line_rec.Header_Attribute15 := substrb(p_header_rec.Attribute15, 1, 150);
6753 
6754     p_x_interface_line_rec.UOM_Code := p_line_rec.Order_Quantity_UOM;
6755     p_x_interface_line_rec.Tax_Exempt_Flag := nvl(p_line_rec.Tax_Exempt_Flag, 'S');
6756     p_x_interface_line_rec.Tax_Exempt_Number := p_line_rec.Tax_Exempt_Number;
6757     p_x_interface_line_rec.Tax_Exempt_Reason_Code := p_line_rec.Tax_Exempt_Reason_Code;
6758     p_x_interface_line_rec.Org_id := p_line_rec.Org_id;
6759 
6760     IF l_debug_level  > 0 THEN
6761         oe_debug_pub.add(  'GET DEFAULT TERRITORY' , 5 ) ;
6762     END IF;
6763 
6764     IF oe_code_control.code_release_level < '110510' THEN
6765        SELECT asp.default_territory
6766        INTO   l_territory_code
6767        FROM   ar_system_parameters asp
6768        WHERE  nvl(asp.org_id, -3114) = nvl(p_line_rec.org_id, -3114);
6769     ELSE
6770        l_AR_Sys_Param_Rec := OE_Sys_Parameters_Pvt.Get_AR_Sys_Params(p_line_rec.org_id);
6771        l_territory_code   := l_AR_Sys_Param_Rec.default_territory;
6772     END IF;
6773 
6774     -- Get territory information into p_x_interface_line_rec
6775     IF l_debug_level  > 0 THEN
6776         oe_debug_pub.add(  'PREPARE TERRITORY INFORMATION. l_territory_code: ' ||l_territory_code, 5 ) ;
6777     END IF;
6778     OE_DEBUG_PUB.DUMPDEBUG;
6779 
6780     p_x_interface_line_rec.territory_id := 0;
6781 
6782     IF    (l_territory_code = 'SALES') THEN
6783           SELECT max(nvl(rst.territory_id, 0))
6784           INTO   p_x_interface_line_rec.territory_id
6785           FROM   ra_salesrep_territories rst
6786           WHERE  rst.salesrep_id = nvl(p_line_rec.salesrep_id, p_header_rec.salesrep_id)
6787           AND  sysdate between nvl(start_date_active, sysdate)
6788           AND  nvl(end_date_active, sysdate);
6789     ELSIF (l_territory_code = 'BILL' AND p_line_rec.invoice_to_org_id IS NOT NULL) THEN
6790           SELECT nvl(sub.territory_id,0)
6791           INTO  p_x_interface_line_rec.territory_id
6792           FROM hz_cust_site_uses sub
6793           WHERE sub.site_use_id = p_line_rec.invoice_to_org_id;
6794     ELSIF (l_territory_code = 'SHIP' AND p_line_rec.ship_to_org_id IS NOT NULL) THEN
6795           SELECT nvl(sus.territory_id,0)
6796           INTO  p_x_interface_line_rec.territory_id
6797           FROM hz_cust_site_uses sus
6798           WHERE sus.site_use_id = p_line_rec.ship_to_org_id;
6799     END IF;
6800     IF l_debug_level  > 0 THEN
6801         oe_debug_pub.add(  'territory_id:'|| p_x_interface_line_rec.territory_id , 5 ) ;
6802     END IF;
6803     IF (p_x_interface_line_rec.territory_id > 0) THEN
6804           SELECT     terr.segment1
6805                     ,terr.segment2
6806                     ,terr.segment3
6807                     ,terr.segment4
6808                     ,terr.segment5
6809                     ,terr.segment6
6810                     ,terr.segment7
6811                     ,terr.segment8
6812                     ,terr.segment9
6813                     ,terr.segment10
6814                     ,terr.segment11
6815                     ,terr.segment12
6816                     ,terr.segment13
6817                     ,terr.segment14
6818                     ,terr.segment15
6819                     ,terr.segment16
6820                     ,terr.segment17
6821                     ,terr.segment18
6822                     ,terr.segment19
6823                     ,terr.segment20
6824           INTO       p_x_interface_line_rec.TERRITORY_SEGMENT1
6825                     ,p_x_interface_line_rec.TERRITORY_SEGMENT2
6826                     ,p_x_interface_line_rec.TERRITORY_SEGMENT3
6827                     ,p_x_interface_line_rec.TERRITORY_SEGMENT4
6828                     ,p_x_interface_line_rec.TERRITORY_SEGMENT5
6829                     ,p_x_interface_line_rec.TERRITORY_SEGMENT6
6830                     ,p_x_interface_line_rec.TERRITORY_SEGMENT7
6831                     ,p_x_interface_line_rec.TERRITORY_SEGMENT8
6832                     ,p_x_interface_line_rec.TERRITORY_SEGMENT9
6833                     ,p_x_interface_line_rec.TERRITORY_SEGMENT10
6834                     ,p_x_interface_line_rec.TERRITORY_SEGMENT11
6835                     ,p_x_interface_line_rec.TERRITORY_SEGMENT12
6836                     ,p_x_interface_line_rec.TERRITORY_SEGMENT13
6837                     ,p_x_interface_line_rec.TERRITORY_SEGMENT14
6838                     ,p_x_interface_line_rec.TERRITORY_SEGMENT15
6839                     ,p_x_interface_line_rec.TERRITORY_SEGMENT16
6840                     ,p_x_interface_line_rec.TERRITORY_SEGMENT17
6841                     ,p_x_interface_line_rec.TERRITORY_SEGMENT18
6842                     ,p_x_interface_line_rec.TERRITORY_SEGMENT19
6843                     ,p_x_interface_line_rec.TERRITORY_SEGMENT20
6844            FROM     ra_territories terr
6845            WHERE    terr.territory_id = p_x_interface_line_rec.territory_id;
6846     END IF;
6847     IF p_x_interface_line_rec.territory_id = 0 THEN
6848        p_x_interface_line_rec.territory_id := NULL;
6849     END IF;
6850     IF l_debug_level  > 0 THEN
6851         oe_debug_pub.add(  'FINISH TERRITORY' , 5 ) ;
6852     END IF;
6853     p_x_interface_line_rec.Batch_Source_Name := Get_Invoice_source(p_line_rec, p_x_interface_line_rec);
6854     IF l_debug_level  > 0 THEN
6855         oe_debug_pub.add(  'BATCH SOURCE NAME : '||P_X_INTERFACE_LINE_REC.BATCH_SOURCE_NAME ) ;
6856     END IF;
6857     IF p_x_interface_line_rec.INTERFACE_LINE_ATTRIBUTE3 = '0' THEN
6858        IF p_x_interface_line_rec.REQUEST_ID IS NOT NULL THEN
6859           IF l_debug_level  > 0 THEN
6860               oe_debug_pub.add(  'SET REQUEST_ID TO NULL FOR NON DELIVERY LINES' , 5 ) ;
6861           END IF;
6862           p_x_interface_line_rec.REQUEST_ID := NULL;
6863        END IF;
6864     END IF;
6865    --Customer Acceptance
6866       -- Populate acceptance date as trx_date for pre-billing lines to get it as invoice date
6867       IF (p_line_rec.flow_status_code='PRE-BILLING_ACCEPTANCE' OR
6868           OE_ACCEPTANCE_UTIL.Pre_billing_acceptance_on(p_line_rec => p_line_rec)) THEN
6869 
6870           p_x_interface_line_rec.trx_date := p_line_rec.Revrec_signature_date;
6871       END IF;
6872 
6873       -- parent_line_id, deferral_exclusion_flag should be set always
6874       -- irrespective of customer acceptance enabled or not
6875       IF p_line_rec.top_model_line_id is not null and p_line_rec.top_model_line_id <> p_line_rec.line_id THEN
6876          p_x_interface_line_rec.parent_line_id := p_line_rec.top_model_line_id;
6877       END IF;
6878       IF p_line_rec.item_type_code = 'SERVICE' THEN
6879           -- get parent line_id for service line.
6880        IF p_line_rec.service_reference_type_code='CUSTOMER_PRODUCT' AND
6881                p_line_rec.service_reference_line_id IS NOT NULL THEN
6882            BEGIN
6883               OE_SERVICE_UTIL.Get_Cust_Product_Line_Id
6884               ( x_return_status    => l_return_status
6885               , p_reference_line_id => p_line_rec.service_reference_line_id
6886               , p_customer_id       => p_line_rec.sold_to_org_id
6887               , x_cust_product_line_id => l_order_line_id
6888               );
6889            EXCEPTION
6890            WHEN OTHERS THEN
6891                 l_parent_line_id := NULL;
6892            END;
6893            IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
6894                l_parent_line_id := l_order_line_id;
6895            ELSE
6896                       FND_MESSAGE.SET_NAME('ONT','ONT_NO_CUST_PROD_LINE');
6897                       OE_MSG_PUB.ADD;
6898            END IF;
6899        ELSE -- not a customer product
6900         l_parent_line_id := p_line_rec.service_reference_line_id;
6901        END IF;
6902        IF l_parent_line_id IS NOT NULL THEN
6903 	  BEGIN
6904 	       Select top_model_line_id
6905 		 into l_top_model_line_id
6906 		 from oe_order_lines_all
6907 		where line_id = l_parent_line_id ;
6908 	   EXCEPTION WHEN NO_DATA_FOUND THEN
6909              p_x_interface_line_rec.parent_line_id := l_parent_line_id ;
6910 	 END;
6911 
6912 	  IF l_top_model_line_id IS NOT NULL then --service parent is a child line
6913                p_x_interface_line_rec.parent_line_id := l_top_model_line_id;
6914           else
6915                 p_x_interface_line_rec.parent_line_id :=  l_parent_line_id ;
6916          end if;
6917       ELSE
6918            p_x_interface_line_rec.deferral_exclusion_flag := 'Y';
6919       END IF;
6920     END IF;
6921    --Customer Acceptance
6922     IF l_debug_level  > 0 THEN
6923         oe_debug_pub.add(  'START CREDIT CARD PROCESSING' , 5 ) ;
6924     END IF;
6925 --serla begin
6926     IF NOT OE_PREPAYMENT_UTIL.IS_MULTIPLE_PAYMENTS_ENABLED THEN
6927 --serla end
6928        -- Check if the Line has an associated Credit Card Payment
6929        IF p_header_rec.credit_card_number is NOT NULL AND
6930           NOT Return_Line(p_line_rec) THEN   /* Bug #3463843 */
6931          IF l_debug_level  > 0 THEN
6932             oe_debug_pub.add(  'CREDIT CARD INFO EXISTS' , 5 ) ;
6933          -- Fix for Bug # 1586750.
6934          -- Get the Customer Id for Invoice To Org at the Header Level.
6935             oe_debug_pub.add(  'GET CUSTOMER ID FOR INVOICE TO ORG AT HEADER' , 5 ) ;
6936          END IF;
6937 
6938          BEGIN
6939          /* Commented for bug #3519137 added new select statement */
6940          /* SELECT customer_id
6941            INTO   l_hdr_inv_to_cust_id
6942            FROM   oe_invoice_to_orgs_v
6943            WHERE  organization_id = p_header_rec.invoice_to_org_id;*/
6944 
6945            SELECT acct_site.cust_account_id
6946            INTO   l_hdr_inv_to_cust_id
6947            FROM hz_cust_acct_sites_all acct_site, hz_cust_site_uses_all site
6948            WHERE SITE.SITE_USE_CODE = 'BILL_TO'
6949            AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
6950            AND SITE.SITE_USE_ID  = p_header_rec.invoice_to_org_id;
6951 
6952            EXCEPTION
6953                WHEN OTHERS THEN
6954                     IF l_debug_level  > 0 THEN
6955                         oe_debug_pub.add(  'INVOICE TO CUSTOMER ID : '||L_HDR_INV_TO_CUST_ID , 1 ) ;
6956                         oe_debug_pub.add(  'ORGANIZATION ID : '||P_HEADER_REC.INVOICE_TO_ORG_ID , 1 ) ;
6957                         oe_debug_pub.add(  'IN OTHERS EXCEPTION ( OE_INVOICE_TO_ORGS_V ) '||SQLERRM , 1 ) ;
6958                     END IF;
6959          END;
6960          -- Calling Process Customer Bank Account
6961          IF l_debug_level  > 0 THEN
6962              oe_debug_pub.add(  'BEFORE CALLING AR PACKAGE PROCESS_CUST_BANK_ACCOUNT ( ) ' , 5 ) ;
6963          END IF;
6964          --
6965          l_trx_date := nvl(p_header_rec.ordered_date, sysdate)
6966                     - nvl( to_number(fnd_profile.value('ONT_DAYS_TO_BACKDATE_BANK_ACCT')), 0);
6967    	  BEGIN
6968                /*
6969                ** Fix Bug # 2438201
6970                ** p_trx_date to be passed as order creation date so that autoinvoice succceds
6971                */
6972 
6973                null;
6974 
6975                /*** Commented out for R12 cc encryption
6976 	       arp_bank_pkg.process_cust_bank_account
6977 		( p_trx_date             => l_trx_date
6978 		, p_currency_code        => p_header_rec.transactional_curr_code
6979 		, p_cust_id              => l_hdr_inv_to_cust_id
6980 		, p_site_use_id          => p_header_rec.invoice_to_org_id
6981 		, p_credit_card_num      => p_header_rec.credit_card_number
6982 		, p_acct_name            => p_header_rec.credit_card_holder_name
6983 		, p_exp_date             => p_header_rec.credit_card_expiration_date
6984 		, p_bank_account_id      => l_bank_acct_id
6985 		, p_bank_account_uses_id => l_bank_acct_uses_id
6986 		) ;
6987            EXCEPTION
6988    	        WHEN OTHERS THEN
6989                     l_bank_acct_id := -1;
6990                     p_x_interface_line_rec.customer_bank_account_id := -1;
6991                     IF l_debug_level  > 0 THEN
6992                         oe_debug_pub.add(  'AR PACKAGE ARP_BANK_PKG.PROCESS_CUST_BANK_ACCOUNT ( ) RETURNED ERROR : '||SQLERRM , 1 ) ;
6993                     END IF;
6994                  ***/
6995          END;
6996          IF l_debug_level  > 0 THEN
6997              oe_debug_pub.add(  'AFTER CALLING PROCESS_CUST_BANK_ACCOUNT ( ) PROCEDURE ' , 5 ) ;
6998          END IF;
6999          -- Check if a Valid Bank Account Id returned
7000    	  IF NVL(l_bank_acct_id, 0) > 0 THEN
7001             -- Setup the Bank Account Information
7002             IF l_debug_level  > 0 THEN
7003                 oe_debug_pub.add(  'BANK ACCOUNT ID : '||L_BANK_ACCT_ID ) ;
7004             END IF;
7005 	        p_x_interface_line_rec.customer_bank_account_id := l_bank_acct_id;
7006 	        p_x_interface_line_rec.customer_bank_account_name
7007 							  := p_header_rec.credit_card_holder_name;
7008             /* Fix FP Bug # 3647389: Get the Current Context Values */
7009             l_cur_user_id := fnd_global.user_id;
7010             fnd_profile.get('RESP_ID',l_cur_resp_id);
7011             fnd_profile.get('RESP_APPL_ID',l_cur_appl_id);
7012 
7013             /* Fix FP Bug # 3647389: Set the Context using Original Values */
7014             fnd_global.apps_initialize(l_user_id, l_resp_id, l_appl_id);
7015 
7016              -- Call Get Primary Pay Method to get the method id
7017              IF l_debug_level  > 0 THEN
7018                 oe_debug_pub.add(  'GETTING PRIMAY PAYMENT METHOD' , 5 ) ;
7019             END IF;
7020 
7021             l_pay_method_id := OE_Verify_Payment_PUB.Get_Primary_Pay_Method
7022                              ( p_header_rec      => p_header_rec ) ;
7023             IF l_debug_level  > 0 THEN
7024                 oe_debug_pub.add(  'AFTER GETTING PRIMARY PAYMENT METHOD' , 5 ) ;
7025             END IF;
7026 
7027             /* Fix FP Bug # 3647389: Reset the Context using Current Values */
7028             fnd_global.apps_initialize(l_cur_user_id, l_cur_resp_id, l_cur_appl_id);
7029 
7030       	     -- Check if a Valid Pay Method Id returned
7031             IF NVL(l_pay_method_id, 0) > 0 THEN
7032                IF l_debug_level  > 0 THEN
7033                   oe_debug_pub.add(  'PAYMENT METHOD IS VALID' ) ;
7034                -- Call Get Pay Method Info to get the method name
7035                   oe_debug_pub.add(  'GET PAYMENT METHOD INFORMATION ' , 5 ) ;
7036                END IF;
7037                OE_Verify_Payment_PUB.Get_Pay_Method_Info
7038                ( p_pay_method_id   => l_pay_method_id
7039                , p_pay_method_name => l_pay_method_name
7040                , p_merchant_id     => l_merchant_id
7041                ) ;
7042                IF l_debug_level  > 0 THEN
7043                    oe_debug_pub.add(  'AFTER GETTING PAYMENT METHOD INFORMATION' , 5 ) ;
7044           	    -- Setup the Payment Method Information
7045                    oe_debug_pub.add(  'PAYMENT METHOD ID IS : '||L_PAY_METHOD_ID , 5 ) ;
7046                END IF;
7047 	        p_x_interface_line_rec.receipt_method_id := l_pay_method_id;
7048 	        p_x_interface_line_rec.receipt_method_name := l_pay_method_name;
7049                -- Check if Credit Card Approval Code exists
7050 	        IF p_header_rec.credit_card_approval_code is NOT NULL THEN
7051                   IF l_debug_level  > 0 THEN
7052                      oe_debug_pub.add(  'CREDIT CARD APPROVAL CODE EXISTS' , 5 ) ;
7053      	          -- Call Fetch Current Auth to get the tangible id
7054                      oe_debug_pub.add(  'FETCH CURRENT AUTHORIZATION CODE , IF ANY' , 5 ) ;
7055                   END IF;
7056                   OE_Verify_Payment_PUB.Fetch_Current_Auth
7057                   ( p_header_rec  => p_header_rec
7058                    , p_trxn_id     => l_trxn_id
7059 		    , p_tangible_id => l_tangible_id
7060                   ) ;
7061                   IF l_debug_level  > 0 THEN
7062                       oe_debug_pub.add(  ' AFTER CALLING FETCH_CURRENT_AUTH' ) ;
7063         	      -- Setup the CC Approval Info
7064                       oe_debug_pub.add(  'TANGIBLE ID IS : '||L_TANGIBLE_ID , 5 ) ;
7065                   END IF;
7066    	           p_x_interface_line_rec.approval_code := p_header_rec.credit_card_approval_code;
7067     	          p_x_interface_line_rec.payment_server_order_num := l_tangible_id;
7068                END IF; -- IF Approval Code Exists
7069             END IF; -- IF Pay Method ID is VALID
7070          END IF; -- IF Bank Account ID is VALID
7071        END IF; -- IF Credit Card Payment Exists
7072 --serla begin
7073     ELSE  -- multiple payments enabled
7074        IF l_debug_level  > 0 THEN
7075           oe_debug_pub.add('multiple payment enabled. getting payments data from line payments');
7076        END IF;
7077        -- R12 CC encryption
7078        BEGIN
7079           SELECT payment_type_code
7080                , payment_trx_id
7081                , receipt_method_id
7082             -- , tangible_id
7083             -- , credit_card_holder_name
7084             -- , credit_card_approval_code
7085                , trxn_extension_id
7086           INTO   l_payment_type_code
7087                , l_payment_trx_id
7088                , l_receipt_method_id
7089            --  , l_tangible_id
7090            --  , l_credit_card_holder_name
7091            --  , l_credit_card_approval_code
7092                , l_payment_trxn_extension_id
7093           FROM   oe_payments
7094           WHERE  line_id = p_line_rec.line_id
7095           AND    header_id = p_line_rec.header_id
7096           AND    payment_type_code <> 'COMMITMENT'
7097           AND    payment_collection_event = 'INVOICE';
7098           IF l_debug_level  > 0 THEN
7099              oe_debug_pub.add('l_payment_type_code:'||l_payment_type_code||'l_payment_trx_id:'||l_payment_trx_id||':l_receipt_method_id:'||l_receipt_method_id);
7100           END IF;
7101         EXCEPTION
7102           WHEN NO_DATA_FOUND THEN
7103            IF l_debug_level  > 0 THEN
7104               oe_debug_pub.add('No invoice payments at line level');
7105            END IF;
7106            l_payment_type_code := NULL;
7107            l_payment_trx_id := NULL;
7108            l_receipt_method_id := NULL;
7109            /*
7110            l_tangible_id := NULL;
7111            l_credit_card_holder_name := NULL;
7112            l_credit_card_approval_code := NULL;
7113            */
7114            l_payment_trxn_extension_id := NULL;
7115 
7116        END;
7117 
7118        IF l_payment_type_code IS NULL THEN
7119           oe_debug_pub.add('Getting payments data from header payments');
7120           BEGIN
7121              SELECT payment_type_code
7122                   , payment_trx_id
7123                   , receipt_method_id
7124                -- , tangible_id
7125                -- , credit_card_holder_name
7126                -- , credit_card_approval_code
7127                   , trxn_extension_id
7128              INTO   l_payment_type_code
7129                   , l_payment_trx_id
7130                   , l_receipt_method_id
7131                -- , l_tangible_id
7132                -- , l_credit_card_holder_name
7133                -- , l_credit_card_approval_code
7134                   , l_payment_trxn_extension_id
7135              FROM   oe_payments
7136              WHERE  header_id = p_line_rec.header_id
7137              AND    line_id is NULL
7138              AND    payment_collection_event = 'INVOICE';
7139              IF l_debug_level  > 0 THEN
7140                 oe_debug_pub.add('l_payment_type_code:'||l_payment_type_code||'l_payment_trx_id:'||l_payment_trx_id||':l_receipt_method_id:'||l_receipt_method_id);
7141              END IF;
7142            EXCEPTION
7143              WHEN NO_DATA_FOUND THEN
7144               l_payment_type_code := NULL;
7145               l_payment_trx_id := NULL;
7146               l_receipt_method_id := NULL;
7147               /*
7148               l_tangible_id := NULL;
7149               l_credit_card_holder_name := NULL;
7150               l_credit_card_approval_code := NULL;
7151               */
7152               l_payment_trxn_extension_id := NULL;
7153           END;
7154        END IF;
7155 
7156        /* also need to pass payment_trxn_extension_id for pay later lines per AR.
7157        --pnpl
7158        -- we only need to interface auth code and tangible id
7159        -- for pay now lines
7160        -- set these values to null for pay later line
7161 
7162        IF OE_PREPAYMENT_UTIL.Get_installment_Options = 'ENABLE_PAY_NOW' THEN
7163 	  IF NOT OE_PREPAYMENT_UTIL.Is_Pay_Now_Line(p_line_rec.line_id)
7164              -- AND l_credit_card_approval_code IS NOT NULL
7165              THEN
7166              *
7167 	     l_credit_card_approval_code := null;
7168 	     l_tangible_id := null;
7169              *
7170 
7171 	     l_payment_trxn_extension_id := null;
7172 
7173 	  END IF;
7174        END IF;
7175        */
7176 
7177 
7178        IF l_payment_type_code = 'CREDIT_CARD' OR
7179           l_payment_type_code = 'ACH' OR
7180           l_payment_type_code = 'DIRECT_DEBIT' OR /* Bug #3510892 */
7181           l_payment_type_code = 'CASH' OR
7182           l_payment_type_code = 'CHECK' THEN  /* Bug #3742304 */
7183              p_x_interface_line_rec.receipt_method_id := l_receipt_method_id;
7184              p_x_interface_line_rec.payment_trxn_extension_id := l_payment_trxn_extension_id;
7185 
7186              /* R12 CC encryption
7187              p_x_interface_line_rec.customer_bank_account_id := l_payment_trx_id;
7188              p_x_interface_line_rec.customer_bank_account_name := l_credit_card_holder_name;
7189              */
7190 
7191              IF  l_receipt_method_id IS NOT NULL THEN
7192                BEGIN
7193                  SELECT NAME
7194                  INTO p_x_interface_line_rec.receipt_method_name
7195                  FROM  AR_RECEIPT_METHODS
7196                  WHERE RECEIPT_METHOD_ID = l_receipt_method_id;
7197                  /* AND   SYSDATE >= NVL(START_DATE, SYSDATE)
7198                    AND   SYSDATE <= NVL(END_DATE, SYSDATE); */
7199                EXCEPTION
7200                  WHEN NO_DATA_FOUND THEN
7201                    p_x_interface_line_rec.receipt_method_name := NULL;
7202                  WHEN OTHERS THEN
7203                    p_x_interface_line_rec.receipt_method_name := NULL;
7204                END;
7205              END IF;
7206 
7207 	     --bug6086777 Reverting the fix made by bug 5849568
7208 	     /*
7209 	     --bug5849568
7210 	     --Creating a receipt method assignment at the site level if it does not exist so that Autoinvoice goes through
7211 	     IF l_receipt_method_id IS NOT NULL THEN
7212 	     	IF l_debug_level > 0 THEN
7213 	        	oe_debug_pub.add('Before creating receipt method assignment at site level if it does not exist');
7214 	     	END IF;
7215 	     	l_trx_date := nvl(p_header_rec.ordered_date, sysdate)
7216 	     	            - nvl( to_number(fnd_profile.value('ONT_DAYS_TO_BACKDATE_BANK_ACCT')), 0);
7217 	        --bug6025064 Using SQL Statement since API arp_bank_pkg.process_cust_pay_method has been obsoleted
7218 	        	l_cust_pay_method_id := arp_bank_pkg.process_cust_pay_method
7219 	                                            ( p_pay_method_id => l_receipt_method_id
7220 	                                            , p_customer_id   => p_header_rec.sold_to_org_id
7221 	                                            , p_site_use_id   => p_header_rec.invoice_to_org_id
7222 	                                            , p_as_of_date    => l_trx_date
7223 	       		                            );
7224 
7225 	        SELECT cust_receipt_method_id
7226 		  INTO l_cust_pay_method_id
7227 		  FROM ra_cust_receipt_methods rm
7228 		 WHERE rm.customer_id = p_header_rec.sold_to_org_id
7229 		   AND rm.SITE_USE_ID = NVL(p_header_rec.invoice_to_org_id, -1)
7230 		   AND rm.receipt_method_id = NVL(l_receipt_method_id, rm.receipt_method_id)
7231 		   AND l_trx_date BETWEEN rm.start_date AND NVL(rm.end_date, l_trx_date)
7232                    AND primary_flag = 'Y';
7233                 --bug6025064
7234 
7235 	     	IF l_debug_level > 0 THEN
7236 	        	oe_debug_pub.add('l_cust_pay_method_id returned for Receipt Method  ' || p_x_interface_line_rec.receipt_method_name|| 'is ' ||l_cust_pay_method_id);
7237 	     	END IF;
7238 
7239 	     END IF;
7240 	     --bug5849568
7241 	     */
7242 	     --bug6086777
7243 
7244 	     --bug6086340 Refix the fix made by bug 5849568 using new AR API arp_ext_bank_pkg.process_cust_pay_method()
7245 	     --Creating a receipt method assignment at the site level if it does not exist so that Autoinvoice goes through
7246 	     IF l_receipt_method_id IS NOT NULL THEN
7247                    -- Added for bug 6911267, to get Invoice To Customer Id
7248                    oe_oe_form_header.get_invoice_to_customer_id(p_site_use_id => p_header_rec.invoice_to_org_id,
7249                                                              x_invoice_to_customer_id => l_invoice_to_customer_id);
7250 	     	     IF l_debug_level > 0 THEN
7251 	     	       	oe_debug_pub.add('Before creating receipt method assignment at site level if it does not exist', 5);
7252                         oe_debug_pub.add('Invoice To Customer : ' || l_invoice_to_customer_id ||'; Invoice To Site : ' || p_header_rec.invoice_to_org_id, 5);
7253 	     	     END IF;
7254 	     	     l_trx_date := nvl(p_header_rec.ordered_date, sysdate)
7255 	     	                 - nvl( to_number(fnd_profile.value('ONT_DAYS_TO_BACKDATE_BANK_ACCT')), 0);
7256 
7257 	     	     l_cust_pay_method_id := arp_ext_bank_pkg.process_cust_pay_method
7258 	     	                ( p_pay_method_id => l_receipt_method_id
7259 	     	                , p_customer_id   => l_invoice_to_customer_id -- p_header_rec.sold_to_org_id -- Bug 6911267
7260 	     	                , p_site_use_id   => p_header_rec.invoice_to_org_id
7261 	     	                , p_as_of_date    => l_trx_date
7262 	     	                );
7263 
7264 
7265 	     	     IF l_debug_level > 0 THEN
7266 	     	       	oe_debug_pub.add('l_cust_pay_method_id returned for Receipt Method  ' || p_x_interface_line_rec.receipt_method_name|| 'is ' ||l_cust_pay_method_id);
7267 	     	     END IF;
7268 
7269 	     END IF;
7270 	     --bug6086340
7271 
7272              -- comment out the following code for R12 cc encryption
7273              /*
7274              IF l_credit_card_approval_code IS NOT NULL THEN
7275                 p_x_interface_line_rec.approval_code := l_credit_card_approval_code;
7276 		--bug3906851 getting the tangible_id from oe_verify_payment_pub.fetch_current_auth if it is null
7277 		IF l_tangible_id IS NULL THEN
7278 
7279 		   OE_Verify_Payment_PUB.Fetch_Current_Auth
7280                   ( p_header_rec  => p_header_rec
7281                    , p_trxn_id     => l_trxn_id
7282 		    , p_tangible_id => l_tangible_id
7283                   ) ;
7284 
7285 		  IF l_debug_level  > 0 THEN
7286 		      oe_debug_pub.add(  ' AFTER CALLING FETCH_CURRENT_AUTH' ) ;
7287         	      -- Setup the CC Approval Info
7288                       oe_debug_pub.add(  'TANGIBLE ID IS : '||L_TANGIBLE_ID , 5 ) ;
7289                   END IF;
7290 
7291 		END IF;
7292 		 p_x_interface_line_rec.payment_server_order_num := l_tangible_id;
7293              END IF;
7294              */
7295              oe_debug_pub.add('l_receipt_method_id:'||l_receipt_method_id||'Name:'||p_x_interface_line_rec.receipt_method_name);
7296        END IF;
7297     END IF;
7298 
7299 --serla end
7300 
7301     IF l_debug_level  > 0 THEN
7302         oe_debug_pub.add(  'FINISH CREDIT CARD PROCESSING' , 5 ) ;
7303         oe_debug_pub.add(  'START GLOBALIZATION' , 5 ) ;
7304     END IF;
7305     l_gdf_rec.interface_line_attribute3 := p_x_interface_line_rec.interface_line_attribute3;
7306     l_gdf_rec.interface_line_attribute6 := p_x_interface_line_rec.interface_line_attribute6;
7307     l_gdf_rec.line_type := p_x_interface_line_rec.line_type;
7308     l_gdf_rec.inventory_item_id := p_line_rec.inventory_item_id;
7309     l_gdf_rec.line_gdf_attr_category := p_line_rec.global_attribute_category;
7310     l_gdf_rec.line_gdf_attribute1 := substrb(p_line_rec.global_attribute1, 1, 150);
7311     l_gdf_rec.line_gdf_attribute2 := substrb(p_line_rec.global_attribute2, 1, 150);
7312     l_gdf_rec.line_gdf_attribute3 := substrb(p_line_rec.global_attribute3, 1, 150);
7313     l_gdf_rec.line_gdf_attribute4 := substrb(p_line_rec.global_attribute4, 1, 150);
7314     l_gdf_rec.line_gdf_attribute5 := substrb(p_line_rec.global_attribute5, 1, 150);
7315     l_gdf_rec.line_gdf_attribute6 := substrb(p_line_rec.global_attribute6, 1, 150);
7316     l_gdf_rec.line_gdf_attribute7 := substrb(p_line_rec.global_attribute7, 1, 150);
7317     l_gdf_rec.line_gdf_attribute8 := substrb(p_line_rec.global_attribute8, 1, 150);
7318     l_gdf_rec.line_gdf_attribute9 := substrb(p_line_rec.global_attribute9, 1, 150);
7319     l_gdf_rec.line_gdf_attribute10 := substrb(p_line_rec.global_attribute10, 1, 150);
7320     l_gdf_rec.line_gdf_attribute11 := substrb(p_line_rec.global_attribute11, 1, 150);
7321     l_gdf_rec.line_gdf_attribute12 := substrb(p_line_rec.global_attribute12, 1, 150);
7322     l_gdf_rec.line_gdf_attribute13 := substrb(p_line_rec.global_attribute13, 1, 150);
7323     l_gdf_rec.line_gdf_attribute14 := substrb(p_line_rec.global_attribute14, 1, 150);
7324     l_gdf_rec.line_gdf_attribute15 := substrb(p_line_rec.global_attribute15, 1, 150);
7325     l_gdf_rec.line_gdf_attribute16 := substrb(p_line_rec.global_attribute16, 1, 150);
7326     l_gdf_rec.line_gdf_attribute17 := substrb(p_line_rec.global_attribute17, 1, 150);
7327     l_gdf_rec.line_gdf_attribute18 := substrb(p_line_rec.global_attribute18, 1, 150);
7328     l_gdf_rec.line_gdf_attribute19 := substrb(p_line_rec.global_attribute19, 1, 150);
7329     l_gdf_rec.line_gdf_attribute20 := substrb(p_line_rec.global_attribute20, 1, 150);
7330     IF l_debug_level  > 0 THEN
7331         oe_debug_pub.add(  'CALLING THE GLOBALIZATION PACKAGE' , 5 ) ;
7332     END IF;
7333     JG_ZZ_OM_COMMON_PKG.copy_gdff(p_interface_line_rec => l_gdf_rec,
7334                            x_interface_line_rec => l_gdf_rec,
7335                            x_return_code => l_jg_return_code,
7336                            x_error_buffer => l_jg_error_buffer);
7337     IF l_debug_level  > 0 THEN
7338         oe_debug_pub.add(  'AFTER CALLING GLOBALIZATION PACKAGE' , 5 ) ;
7339     END IF;
7340     p_x_interface_line_rec.line_gdf_attr_category := l_gdf_rec.line_gdf_attr_category;
7341     p_x_interface_line_rec.line_gdf_attribute1  := l_gdf_rec.line_gdf_attribute1;
7342     p_x_interface_line_rec.line_gdf_attribute2  := l_gdf_rec.line_gdf_attribute2;
7343     p_x_interface_line_rec.line_gdf_attribute3  := l_gdf_rec.line_gdf_attribute3;
7344     p_x_interface_line_rec.line_gdf_attribute4  := l_gdf_rec.line_gdf_attribute4;
7345     p_x_interface_line_rec.line_gdf_attribute5  := l_gdf_rec.line_gdf_attribute5;
7346     p_x_interface_line_rec.line_gdf_attribute6  := l_gdf_rec.line_gdf_attribute6;
7347     p_x_interface_line_rec.line_gdf_attribute7  := l_gdf_rec.line_gdf_attribute7;
7348     p_x_interface_line_rec.line_gdf_attribute8  := l_gdf_rec.line_gdf_attribute8;
7349     p_x_interface_line_rec.line_gdf_attribute9  := l_gdf_rec.line_gdf_attribute9;
7350     p_x_interface_line_rec.line_gdf_attribute10 := l_gdf_rec.line_gdf_attribute10;
7351     p_x_interface_line_rec.line_gdf_attribute11 := l_gdf_rec.line_gdf_attribute11;
7352     p_x_interface_line_rec.line_gdf_attribute12 := l_gdf_rec.line_gdf_attribute12;
7353     p_x_interface_line_rec.line_gdf_attribute13 := l_gdf_rec.line_gdf_attribute13;
7354     p_x_interface_line_rec.line_gdf_attribute14 := l_gdf_rec.line_gdf_attribute14;
7355     p_x_interface_line_rec.line_gdf_attribute15 := l_gdf_rec.line_gdf_attribute15;
7356     p_x_interface_line_rec.line_gdf_attribute16 := l_gdf_rec.line_gdf_attribute16;
7357     p_x_interface_line_rec.line_gdf_attribute17 := l_gdf_rec.line_gdf_attribute17;
7358     p_x_interface_line_rec.line_gdf_attribute18 := l_gdf_rec.line_gdf_attribute18;
7359     p_x_interface_line_rec.line_gdf_attribute19 := l_gdf_rec.line_gdf_attribute19;
7360     p_x_interface_line_rec.line_gdf_attribute20 := l_gdf_rec.line_gdf_attribute20;
7361     p_x_interface_line_rec.header_gdf_attr_category := l_gdf_rec.header_gdf_attr_category;
7362     p_x_interface_line_rec.header_gdf_attribute1  := l_gdf_rec.header_gdf_attribute1;
7363     p_x_interface_line_rec.header_gdf_attribute2  := l_gdf_rec.header_gdf_attribute2;
7364     p_x_interface_line_rec.header_gdf_attribute3  := l_gdf_rec.header_gdf_attribute3;
7365     p_x_interface_line_rec.header_gdf_attribute4  := l_gdf_rec.header_gdf_attribute4;
7366     p_x_interface_line_rec.header_gdf_attribute5  := l_gdf_rec.header_gdf_attribute5;
7367     p_x_interface_line_rec.header_gdf_attribute6  := l_gdf_rec.header_gdf_attribute6;
7368     p_x_interface_line_rec.header_gdf_attribute7  := l_gdf_rec.header_gdf_attribute7;
7369     p_x_interface_line_rec.header_gdf_attribute8  := l_gdf_rec.header_gdf_attribute8;
7370     p_x_interface_line_rec.header_gdf_attribute9  := l_gdf_rec.header_gdf_attribute9;
7371     p_x_interface_line_rec.header_gdf_attribute10 := l_gdf_rec.header_gdf_attribute10;
7372     p_x_interface_line_rec.header_gdf_attribute11 := l_gdf_rec.header_gdf_attribute11;
7373     p_x_interface_line_rec.header_gdf_attribute12 := l_gdf_rec.header_gdf_attribute12;
7374     p_x_interface_line_rec.header_gdf_attribute13 := l_gdf_rec.header_gdf_attribute13;
7375     p_x_interface_line_rec.header_gdf_attribute14 := l_gdf_rec.header_gdf_attribute14;
7376     p_x_interface_line_rec.header_gdf_attribute15 := l_gdf_rec.header_gdf_attribute15;
7377     p_x_interface_line_rec.header_gdf_attribute16 := l_gdf_rec.header_gdf_attribute16;
7378     p_x_interface_line_rec.header_gdf_attribute17 := l_gdf_rec.header_gdf_attribute17;
7379     p_x_interface_line_rec.header_gdf_attribute18 := l_gdf_rec.header_gdf_attribute18;
7380     p_x_interface_line_rec.header_gdf_attribute19 := l_gdf_rec.header_gdf_attribute19;
7381     p_x_interface_line_rec.header_gdf_attribute20 := l_gdf_rec.header_gdf_attribute20;
7382     p_x_interface_line_rec.header_gdf_attribute21 := l_gdf_rec.header_gdf_attribute21;
7383     p_x_interface_line_rec.header_gdf_attribute22 := l_gdf_rec.header_gdf_attribute22;
7384     p_x_interface_line_rec.header_gdf_attribute23 := l_gdf_rec.header_gdf_attribute23;
7385     p_x_interface_line_rec.header_gdf_attribute24 := l_gdf_rec.header_gdf_attribute24;
7386     p_x_interface_line_rec.header_gdf_attribute25 := l_gdf_rec.header_gdf_attribute25;
7387     p_x_interface_line_rec.header_gdf_attribute26 := l_gdf_rec.header_gdf_attribute26;
7388     p_x_interface_line_rec.header_gdf_attribute27 := l_gdf_rec.header_gdf_attribute27;
7389     p_x_interface_line_rec.header_gdf_attribute28 := l_gdf_rec.header_gdf_attribute28;
7390     p_x_interface_line_rec.header_gdf_attribute29 := l_gdf_rec.header_gdf_attribute29;
7391     p_x_interface_line_rec.header_gdf_attribute30 := l_gdf_rec.header_gdf_attribute30;
7392 
7393     IF l_debug_level  > 0 THEN
7394        oe_debug_pub.add('Before calling Legal Entity Time Zone ');
7395        oe_debug_pub.add('Value of ship_date_actual '||p_x_interface_line_rec.ship_date_actual||
7396                           ' Value of creation_date '|| p_x_interface_line_rec.creation_date);
7397        oe_debug_pub.add('Value of last_update_date '||p_x_interface_line_rec.last_update_date||
7398                          ' Value of sales_order_date '||p_x_interface_line_rec.sales_order_date|| ' Value of trx_date '||p_x_interface_line_rec.trx_date);
7399     END IF;
7400 
7401     IF oe_code_control.code_release_level >= '110510' THEN
7402      IF p_line_rec.org_id IS NOT NULL THEN
7403        IF p_x_interface_line_rec.ship_date_actual IS NOT NULL THEN
7404           p_x_interface_line_rec.ship_date_actual := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.ship_date_actual,p_line_rec.org_id);
7405        END IF;
7406        IF p_x_interface_line_rec.creation_date IS NOT NULL THEN
7407           p_x_interface_line_rec.creation_date    := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.creation_date,p_line_rec.org_id);
7408        END IF;
7409        IF p_x_interface_line_rec.last_update_date IS NOT NULL THEN
7410           p_x_interface_line_rec.last_update_date := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.last_update_date,p_line_rec.org_id);
7411        END IF;
7412        IF p_x_interface_line_rec.GL_Date IS NOT NULL THEN
7413           p_x_interface_line_rec.GL_Date          := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.GL_Date,p_line_rec.org_id);
7414        END IF;
7415        IF p_x_interface_line_rec.conversion_date IS NOT NULL THEN
7416           p_x_interface_line_rec.conversion_date  := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.conversion_date,p_line_rec.org_id);
7417        END IF;
7418        IF p_x_interface_line_rec.sales_order_date IS NOT NULL THEN
7419           p_x_interface_line_rec.sales_order_date := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.sales_order_date,p_line_rec.org_id);
7420        END IF;
7421        IF p_x_interface_line_rec.rule_start_date IS NOT NULL THEN
7422           p_x_interface_line_rec.rule_start_date  := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.rule_start_date,p_line_rec.org_id);
7423        END IF;
7424        IF p_x_interface_line_rec.rule_end_date IS NOT NULL THEN
7425           p_x_interface_line_rec.rule_end_date  := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.rule_end_date,p_line_rec.org_id);
7426        END IF;
7427        IF p_x_interface_line_rec.trx_date IS NOT NULL THEN
7428           p_x_interface_line_rec.trx_date  := INV_LE_TIMEZONE_PUB.Get_Le_Day_Time_For_Ou(p_x_interface_line_rec.trx_date,p_line_rec.org_id);
7429        END IF;
7430       END IF;
7431     END IF;
7432 
7433     IF l_debug_level  > 0 THEN
7434        oe_debug_pub.add('After calling Legal Entity Time Zone ');
7435        oe_debug_pub.add('Value of ship_date_actual '||p_x_interface_line_rec.ship_date_actual||
7436                           ' Value of creation_date '|| p_x_interface_line_rec.creation_date);
7437        oe_debug_pub.add('Value of last_update_date '||p_x_interface_line_rec.last_update_date||
7438                          ' Value of sales_order_date '||p_x_interface_line_rec.sales_order_date|| ' Value of trx_date '||p_x_interface_line_rec.trx_date);
7439     END IF;
7440 
7441     IF l_debug_level  > 0 THEN
7442         oe_debug_pub.add(  'END GLOBALIZATION' , 5 ) ;
7443     END IF;
7444     OE_DEBUG_PUB.dumpdebug;
7445     IF l_debug_level  > 0 THEN
7446         oe_debug_pub.add(  'EXITING PREPARE_INTERFACE_LINE_REC ( ) PROCEDURE' , 5 ) ;
7447     END IF;
7448 END Prepare_Interface_Line_Rec;
7449 
7450 PROCEDURE Update_Invoice_Attributes
7451 (   p_line_rec             IN  OE_Order_Pub.Line_Rec_Type
7452 ,   p_interface_line_rec   IN  RA_interface_Lines_Rec_Type
7453 ,   p_invoice_interface_status       IN VARCHAR2
7454 ,   x_return_status    OUT NOCOPY VARCHAR2
7455 ) IS
7456 l_invoiced_quantity NUMBER;
7457 l_Line_tbl              OE_Order_PUB.Line_Tbl_Type;
7458 l_Old_Line_tbl          OE_Order_PUB.Line_Tbl_Type;
7459 l_return_status         VARCHAR2(30);
7460 l_flow_status_code      VARCHAR2(30);
7461 err_msg 		VARCHAR2(240);
7462 l_notify_index		NUMBER;  -- jolin
7463 
7464 --
7465 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7466 --
7467 BEGIN
7468     IF l_debug_level  > 0 THEN
7469         oe_debug_pub.add(  'UPDATING INVOICE ATTRIBUTES' , 5 ) ;
7470     END IF;
7471     IF OE_GLOBALS.G_ASO_INSTALLED IS NULL THEN
7472        OE_GLOBALS.G_ASO_INSTALLED := OE_GLOBALS.CHECK_PRODUCT_INSTALLED(697);
7473     END IF;
7474     l_invoiced_quantity := nvl(p_line_rec.invoiced_quantity, 0) + nvl(p_interface_line_rec.quantity, 0);
7475     --Bug2361642.Added a check for lines in "MANUAL-PENDING" status too.
7476  IF (p_invoice_interface_status = 'RFR-PENDING' OR
7477         p_invoice_interface_status= 'NOT_ELIGIBLE' OR
7478         p_invoice_interface_status = 'MANUAL-PENDING' OR
7479         p_invoice_interface_status = 'ACCEPTANCE-PENDING' ) AND       --Customer Acceptance
7480         nvl(l_invoiced_quantity, 0) = 0 THEN -- changed for bug# 4097203
7481        l_invoiced_quantity := null;
7482     END IF;
7483     --Bug2361642 Added an ELSE condition to retain the flow_status_code otherwise.
7484     -- invoiced quantity should not be populated for not eligible lines
7485     IF p_invoice_interface_status= 'NOT_ELIGIBLE' THEN
7486        l_invoiced_quantity := null;
7487     END IF;
7488     IF l_debug_level  > 0 THEN
7489         oe_debug_pub.add(  'INVOICED QUANTITY IS '|| TO_CHAR ( L_INVOICED_QUANTITY ) , 5 ) ;
7490     END IF;
7491 
7492     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL < '110510' THEN
7493            IF p_invoice_interface_status = 'YES' THEN
7494               l_flow_status_code := 'INVOICED';
7495            ELSIF p_invoice_interface_status = 'RFR-PENDING' THEN
7496               l_flow_status_code := 'INVOICED_PARTIAL';
7497            ELSE l_flow_status_code := p_line_rec.flow_status_code;
7498            END IF;
7499     ELSE
7500            IF p_invoice_interface_status = 'YES' THEN
7501               l_flow_status_code := 'INVOICED';
7502            ELSIF p_invoice_interface_status = 'MANUAL-PENDING' THEN
7503               l_flow_status_code := 'INVOICE_DELIVERY';
7504            ELSIF p_invoice_interface_status = 'RFR-PENDING' THEN
7505               IF nvl(l_invoiced_quantity, 0) =  0 THEN -- changed for bug# 4097203
7506                  l_flow_status_code := 'INVOICE_RFR';
7507               ELSE
7508 	         l_flow_status_code := 'PARTIAL_INVOICE_RFR';
7509               END IF;
7510            ELSIF p_invoice_interface_status = 'NOT_ELIGIBLE' THEN
7511               l_flow_status_code := 'INVOICE_NOT_APPLICABLE';
7512 	   --Customer Acceptance
7513            ELSIF p_invoice_interface_status = 'ACCEPTANCE-PENDING' THEN
7514               l_flow_status_code := 'PRE-BILLING_ACCEPTANCE';
7515 	  --Customer Acceptance
7516            ELSE l_flow_status_code := p_line_rec.flow_status_code;
7517            END IF;
7518     END IF;
7519 
7520     IF l_debug_level  > 0 THEN
7521         oe_debug_pub.add(  'UPDATING FLOW STATUS CODE AS '||L_FLOW_STATUS_CODE , 5 ) ;
7522         oe_debug_pub.add(  ' UPDATING p_line_rec.SERVICE_START_DATE = '||p_line_rec.SERVICE_START_DATE , 5 ) ;  -- bug# 7231974
7523         oe_debug_pub.add(  '          p_line_rec.SERVICE_END_DATE = '|| p_line_rec.SERVICE_END_DATE , 5 ) ;
7524     END IF;
7525 
7526     UPDATE OE_ORDER_LINES_ALL
7527     SET INVOICE_INTERFACE_STATUS_CODE = p_invoice_interface_status,
7528         INVOICED_QUANTITY = l_invoiced_quantity,
7529         FLOW_STATUS_CODE = l_flow_status_code,
7530         SERVICE_START_DATE = p_line_rec.SERVICE_START_DATE,    --bug# 7231974 :- as srvc_dates are derived in OE_INVOICE_PUB, they should be updated in OM tables as well
7531         SERVICE_END_DATE = p_line_rec.SERVICE_END_DATE,    --bug # 7231974
7532         CALCULATE_PRICE_FLAG = 'N',
7533 	    LOCK_CONTROL = LOCK_CONTROL + 1
7534     WHERE LINE_ID = p_line_rec.line_id;
7535     IF ( (OE_GLOBALS.G_ASO_INSTALLED = 'Y') OR
7536           (NVL(FND_PROFILE.VALUE('ONT_DBI_INSTALLED'),'N') = 'Y')  ) THEN
7537 
7538         l_Line_tbl(1) := p_line_rec;
7539         l_Old_Line_tbl(1) := p_line_rec;
7540         l_Line_tbl(1).calculate_price_flag := 'N';
7541         l_Line_tbl(1).invoice_interface_status_code := p_invoice_interface_status;
7542         l_Line_tbl(1).invoiced_quantity := l_invoiced_quantity;
7543         l_Line_tbl(1).flow_status_code := l_flow_status_code;
7544         l_line_tbl(1).lock_control := l_line_tbl(1).lock_control + 1;
7545 
7546 -- jolin start
7547 IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110508' THEN
7548 
7549     -- call notification framework to get this line's index position
7550     OE_ORDER_UTIL.Update_Global_Picture
7551 	(p_Upd_New_Rec_If_Exists =>FALSE
7552 	, p_line_rec		=> l_line_tbl(1)
7553 	, p_old_line_rec	=> l_old_line_tbl(1)
7554         , p_line_id 		=> l_line_tbl(1).line_id
7555         , x_index 		=> l_notify_index
7556         , x_return_status 	=> l_return_status);
7557 
7558     IF l_debug_level  > 0 THEN
7559         oe_debug_pub.add(  'UPDATE_GLOBAL RET_STATUS FOR LINE_ID '||L_LINE_TBL ( 1 ) .LINE_ID ||' IS: ' || L_RETURN_STATUS , 1 ) ;
7560         oe_debug_pub.add(  'UPDATE_GLOBAL INDEX FOR LINE_ID '||L_LINE_TBL ( 1 ) .LINE_ID ||' IS: ' || L_NOTIFY_INDEX , 1 ) ;
7561     END IF;
7562 
7563         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7564            RAISE FND_API.G_EXC_ERROR;
7565         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7566 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7567         END IF;
7568 
7569    IF l_notify_index is not null then
7570      -- modify Global Picture
7571     OE_ORDER_UTIL.g_old_line_tbl(l_notify_index) := l_old_line_tbl(1);
7572     OE_ORDER_UTIL.g_line_tbl(l_notify_index) := OE_ORDER_UTIL.g_old_line_tbl(l_notify_index);
7573     OE_ORDER_UTIL.g_line_tbl(l_notify_index).invoice_interface_status_code:=
7574 			l_line_tbl(1).invoice_interface_status_code;
7575     OE_ORDER_UTIL.g_line_tbl(l_notify_index).invoiced_quantity:=
7576 			l_line_tbl(1).invoiced_quantity;
7577     OE_ORDER_UTIL.g_line_tbl(l_notify_index).flow_status_code:=
7578 			l_line_tbl(1).flow_status_code;
7579     OE_ORDER_UTIL.g_line_tbl(l_notify_index).calculate_price_flag:=
7580 			l_line_tbl(1).calculate_price_flag;
7581     OE_ORDER_UTIL.g_line_tbl(l_notify_index).lock_control:=
7582 			l_line_tbl(1).lock_control;
7583     OE_ORDER_UTIL.g_line_tbl(l_notify_index).last_update_date:=
7584 			l_line_tbl(1).last_update_date;
7585     OE_ORDER_UTIL.g_line_tbl(l_notify_index).line_id:=
7586 			l_line_tbl(1).line_id;
7587     OE_ORDER_UTIL.g_line_tbl(l_notify_index).header_id:=
7588 			l_line_tbl(1).header_id;
7589 
7590     IF l_debug_level  > 0 THEN
7591        oe_debug_pub.add(  'GLOBAL LINE INVOICED_QUANTITY IS: ' || OE_ORDER_UTIL.G_LINE_TBL ( L_NOTIFY_INDEX ) .INVOICED_QUANTITY , 1 ) ;
7592        oe_debug_pub.add(  'GLOBAL LINE CALCULATE_PRICE_FLAG IS: ' || OE_ORDER_UTIL.G_LINE_TBL ( L_NOTIFY_INDEX ) .CALCULATE_PRICE_FLAG , 1 ) ;
7593        oe_debug_pub.add(  'GLOBAL LINE INVOICE_INTERFACE_STATUS_CODE IS: ' || OE_ORDER_UTIL.G_LINE_TBL ( L_NOTIFY_INDEX ) .INVOICE_INTERFACE_STATUS_CODE , 1 ) ;
7594       oe_debug_pub.add(  'GLOBAL LINE FLOW_STATUS_CODE IS: ' || OE_ORDER_UTIL.G_LINE_TBL ( L_NOTIFY_INDEX ) .FLOW_STATUS_CODE , 1 ) ;
7595     END IF;
7596 
7597     -- Process requests is TRUE so still need to call it, but don't need to notify
7598     IF l_debug_level  > 0 THEN
7599         oe_debug_pub.add(  'OEXPINVB: BEFORE CALLING LINE PROCESS_REQUESTS_AND_NOTIFY' ) ;
7600     END IF;
7601         OE_Order_PVT.PROCESS_REQUESTS_AND_NOTIFY(
7602 				P_LINE_TBL 	=>l_Line_tbl,
7603                                 P_OLD_LINE_TBL 	=>l_Old_Line_tbl,
7604                                 P_PROCESS_REQUESTS => TRUE,
7605                                 P_NOTIFY 	=> FALSE,
7606                                 P_PROCESS_ACK 	=> FALSE,
7607                                 X_RETURN_STATUS => l_return_status);
7608 
7609         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7610              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7611         END IF;
7612 
7613    END IF ; /* global entity index null check */
7614 
7615   ELSE  /* pre-pack H */
7616 
7617      IF l_debug_level  > 0 THEN
7618          oe_debug_pub.add(  'OEXPINVB: BEFORE CALLING LINE PROCESS_REQUESTS_AND_NOTIFY' ) ;
7619      END IF;
7620         OE_Order_PVT.PROCESS_REQUESTS_AND_NOTIFY(
7621 				P_LINE_TBL 	=>l_Line_tbl,
7622                                 P_OLD_LINE_TBL 	=>l_Old_Line_tbl,
7623                                 P_PROCESS_REQUESTS => TRUE,
7624                                 P_NOTIFY 	=> TRUE,
7625                                 P_PROCESS_ACK 	=> FALSE,
7626                                 X_RETURN_STATUS => l_return_status);
7627 
7628         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7629              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7630         END IF;
7631 
7632     END IF; /* code set is pack H or higher */
7633     /* jolin end*/
7634 
7635     END IF;
7636 
7637     x_return_status := FND_API.G_RET_STS_SUCCESS;
7638 
7639     IF l_debug_level  > 0 THEN
7640         oe_debug_pub.add(  'RETURN STATUS : ' ||X_RETURN_STATUS ) ;
7641     END IF;
7642 
7643     IF OE_Commitment_Pvt.DO_Commitment_Sequencing THEN --commitment sequencing ON
7644        IF p_line_rec.commitment_id IS NOT NULL AND
7645           p_interface_line_rec.promised_commitment_amount IS NOT NULL THEN
7646           IF l_debug_level  > 0 THEN
7647               oe_debug_pub.add(  'UPDATING OE_PAYMENTS' , 3 ) ;
7648           END IF;
7649           UPDATE oe_payments
7650           SET commitment_interfaced_amount = nvl(commitment_interfaced_amount, 0) + nvl(p_interface_line_rec.promised_commitment_amount, 0)
7651           WHERE LINE_ID = p_line_rec.line_id
7652           AND PAYMENT_TRX_ID = p_line_rec.commitment_id;
7653        END IF;
7654     END IF;
7655 
7656     IF l_debug_level  > 0 THEN
7657         oe_debug_pub.add(  'DONE UPDATING INVOICE ATTRIBUTES' , 1 ) ;
7658     END IF;
7659 
7660 EXCEPTION
7661     WHEN OTHERS THEN
7662          IF l_debug_level  > 0 THEN
7663              oe_debug_pub.add(  'EXCEPTION WHILE UPDATING INVOICE ATTRIBUTES : '||SQLERRM , 1 ) ;
7664          END IF;
7665          err_msg := 'Error in Update_Invoice_Attributes:\n '||SQLERRM;
7666          IF l_debug_level  > 0 THEN
7667              oe_debug_pub.add(  ERR_MSG ) ;
7668          END IF;
7669          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7670          IF FND_MSG_PUB.Check_Msg_Level
7671             (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7672          THEN
7673             OE_MSG_PUB.Add_Exc_Msg
7674                         (   G_PKG_NAME
7675                         ,   'Update_Invoice_Attributes'
7676                         );
7677          END IF;
7678 END Update_Invoice_Attributes;
7679 FUNCTION Header_Activity
7680 (p_line_id IN NUMBER
7681 ) RETURN BOOLEAN IS
7682 l_header_id NUMBER;
7683 --
7684 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7685 --
7686 BEGIN
7687     IF l_debug_level  > 0 THEN
7688         oe_debug_pub.add(  'ENTER HEADER_ACTIVITY ( ) PROCEDURE ' , 5 ) ;
7689     END IF;
7690     SELECT header_id
7691     INTO   l_header_id
7692     FROM   oe_order_lines
7693     WHERE  line_id = p_line_id;
7694     RETURN( WF_ENGINE.Activity_Exist_In_Process(
7695                       p_item_type => OE_GLOBALS.G_WFI_HDR
7696                      ,p_item_key  => to_char(l_header_id)
7697                      ,p_activity_name => 'HEADER_INVOICE_INTERFACE'));
7698 END Header_Activity;
7699 
7700 FUNCTION Line_Activity
7701 (p_line_id IN NUMBER
7702 ) RETURN BOOLEAN IS
7703 --
7704 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7705 --
7706 BEGIN
7707     IF l_debug_level  > 0 THEN
7708         oe_debug_pub.add(  'ENTER LINE_ACTIVITY ( ) PROCEDURE ' , 5 ) ;
7709     END IF;
7710     -- This function is provided by WF for our use with bug# 1040262.
7711     -- WF team removed this function at one stage and now provided the same
7712     -- for backward compatibility purpose with bug# 1869241.
7713     -- Issue with invoice interface due the the missing wf function is reported in bug# 1868026.
7714     RETURN( WF_ENGINE.Activity_Exist_In_Process(
7715                       p_item_type => OE_GLOBALS.G_WFI_LIN
7716                      ,p_item_key  => to_char(p_line_id)
7717                      ,p_activity_name => 'INVOICE_INTERFACE'));
7718 END Line_Activity;
7719 
7720 FUNCTION Update_Invoice_Numbers
7721 ( p_del_id   IN NUMBER
7722 , p_del_name IN VARCHAR2
7723 )RETURN NUMBER IS
7724 inv_num_index NUMBER;
7725 inv_num_base  VARCHAR2(40);
7726 err_msg       VARCHAR2(240);
7727 --
7728 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7729 --
7730 BEGIN
7731     IF l_debug_level  > 0 THEN
7732         oe_debug_pub.add(  'ENTER UPDATE_INVOICE_NUMBERS ( ) PROCEDURE ' , 5 ) ;
7733         oe_debug_pub.add(  'UPDATE INVOICE NUMBERS: DEL_ID ' || TO_CHAR ( P_DEL_ID ) ||' DEL NAME: ' || P_DEL_NAME , 5 ) ;
7734     END IF;
7735     inv_num_base := p_del_name;
7736     SELECT nvl((max(index_number)+1), 0)
7737     INTO   inv_num_index
7738     FROM   oe_invoice_numbers
7739     WHERE  delivery_id = p_del_id;
7740     IF ( SQL%NOTFOUND ) THEN
7741         inv_num_index := 1;
7742     END IF;
7743     IF ( inv_num_index = 0 ) THEN
7744         inv_num := inv_num_base;
7745     ELSE
7746         inv_num := inv_num_base || '-' || to_char(inv_num_index);
7747     END IF;
7748     IF l_debug_level  > 0 THEN
7749         oe_debug_pub.add(  'GLOBAL USER ' || NVL(oe_standard_wf.g_user_id, fnd_global.user_id)); -- 3169637
7750         oe_debug_pub.add(  'INV NUM INDEX ' || TO_CHAR ( INV_NUM_INDEX ) ) ;
7751     END IF;
7752     INSERT INTO OE_INVOICE_NUMBERS(
7753                  INVOICE_NUMBER_ID
7754                , DELIVERY_ID
7755                , INDEX_NUMBER
7756                , LAST_UPDATE_DATE
7757                , LAST_UPDATED_BY
7758                , CREATION_DATE
7759                , CREATED_BY)
7760     VALUES
7761               ( oe_invoice_numbers_s.nextval
7762               , p_del_id
7763               , inv_num_index
7764               , SYSDATE
7765               , NVL(oe_standard_wf.g_user_id, fnd_global.user_id) -- 3169637
7766               , SYSDATE
7767               , NVL(oe_standard_wf.g_user_id, fnd_global.user_id)); -- 3169637
7768 
7769     IF l_debug_level  > 0 THEN
7770         oe_debug_pub.add(  'DONE UPDATE_INVOICE_NUMBERS W/SUCCESS' , 5 ) ;
7771     END IF;
7772     RETURN 0;
7773   EXCEPTION
7774       WHEN OTHERS THEN
7775            err_msg := 'Error in update_invoice_numbers:\n '||SQLERRM;
7776            IF l_debug_level  > 0 THEN
7777                oe_debug_pub.add(  ERR_MSG ) ;
7778                oe_debug_pub.add(  'WHEN OTHERS :EXITING UPDATE_INVOICE_NUMBERS' , 1 ) ;
7779            END IF;
7780            RETURN -1;
7781 END Update_Invoice_Numbers;
7782 
7783 PROCEDURE Update_Numbers
7784 ( p_id       IN  NUMBER
7785 , x_return_status OUT NOCOPY VARCHAR2
7786 ) IS
7787 l_count NUMBER := 0;
7788 group_col_clause varchar2(10000) := '';
7789 select_col       varchar2(10000) := '';
7790 col_name         varchar2(100) ;
7791 grp_stmt         varchar2(20000);
7792 col_length       NUMBER;
7793 group_cursor     INTEGER;
7794 rows_processed   INTEGER;
7795 
7796 last_concat_cols varchar2(5000) := '';
7797 this_concat_cols varchar2(5000) := '';
7798 
7799 last_del_name varchar2(30) := '';
7800 this_del_name varchar2(30) := '';
7801 this_del_id   Number;
7802 this_rowid    Varchar2(20);
7803 err_msg       VARCHAR2(240);
7804 
7805 Type DelCurType IS REF CURSOR;
7806 del_cursor   DelCurType;
7807 CURSOR cur_get_cols IS
7808   SELECT upper(c.from_column_name), c.from_column_length
7809   FROM ra_group_by_columns c
7810   WHERE c.column_type = 'M';
7811 
7812 CURSOR cur_get_del_id (p_del_name IN VARCHAR2) IS
7813   SELECT delivery_id
7814   FROM wsh_new_deliveries
7815   WHERE name = p_del_name;
7816   --
7817   l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7818   --
7819 BEGIN
7820     IF l_debug_level  > 0 THEN
7821         oe_debug_pub.add(  'ENTER UPDATE_NUMBERS ( ) PROCEDURE' , 5 ) ;
7822     END IF;
7823     SELECT count(*)
7824     INTO   l_count
7825     FROM   ra_interface_lines_all
7826     WHERE  request_id = -1 * p_id;
7827 
7828     IF l_count = 0 THEN
7829        IF l_debug_level  > 0 THEN
7830            oe_debug_pub.add(  'NO LINES NEED MANUAL NUMBERING' , 5 ) ;
7831        END IF;
7832        x_return_status := FND_API.G_RET_STS_SUCCESS;
7833        RETURN;
7834     END IF;
7835     -- Get all the group by columns from ra_group_by_columns table
7836     -- and build up the select and group by column clauses.
7837     OPEN cur_get_cols;
7838     LOOP
7839       FETCH cur_get_cols Into col_name, col_length;
7840       EXIT WHEN cur_get_cols%NOTFOUND;
7841       IF ( group_col_clause is NULL ) THEN
7842           group_col_clause := col_name;
7843           select_col := col_name;
7844           select_col := col_name;
7845       ELSE
7846           group_col_clause := group_col_clause || ', ' || col_name;
7847           select_col := select_col || '||' || '''~'''|| '||'|| col_name;
7848       END IF;
7849     END LOOP;
7850     CLOSE cur_get_cols;
7851     IF l_debug_level  > 0 THEN
7852        oe_debug_pub.add(  'POSITION 2' ) ;
7853     -- Build the full select statement and using dbms_sql execute
7854     -- the statement
7855        oe_debug_pub.add(  'POSITION 2-1' ) ;
7856     END IF;
7857     grp_stmt := 'Select ' || select_col || ' group_cols,'    ||
7858           ' l.interface_line_attribute3, ROWID '       ||
7859           ' From RA_INTERFACE_LINES_ALL L'             ||
7860           ' Where trx_number is NULL'                  ||
7861           ' And request_id = :p' ||
7862           ' Order by ' || group_col_clause             ||
7863           ' , l.interface_line_attribute3, l.org_id' ;
7864     OPEN del_cursor FOR grp_stmt USING (-1 * p_id);
7865     LOOP
7866       FETCH del_cursor INTO this_concat_cols, this_del_name, this_rowid;
7867       EXIT WHEN del_cursor%NOTFOUND;
7868       IF l_debug_level  > 0 THEN
7869           oe_debug_pub.add(  'DELIVERY NAME: ' || THIS_DEL_NAME , 5 ) ;
7870           oe_debug_pub.add(  'CONCAT COLS: ' || THIS_CONCAT_COLS , 5 ) ;
7871       END IF;
7872       IF ( last_del_name is NULL OR
7873            last_del_name <> this_del_name ) THEN
7874           IF l_debug_level  > 0 THEN
7875               oe_debug_pub.add(  'POSITION 5' ) ;
7876           END IF;
7877           OPEN cur_get_del_id(this_del_name);
7878           FETCH cur_get_del_id Into this_del_id;
7879           IF (cur_get_del_id%NOTFOUND ) THEN
7880              fnd_message.set_token('DELIVERY_NAME', this_del_name);
7881              fnd_message.set_name('OE', 'WSH_AR_INVALID_DEL_NAME');
7882              err_msg := fnd_message.get;
7883              IF l_debug_level  > 0 THEN
7884                  oe_debug_pub.add(  ERR_MSG ) ;
7885              END IF;
7886              CLOSE cur_get_del_id;
7887              --return;
7888           END IF;
7889           IF ( cur_get_del_id%ISOPEN ) THEN
7890              Close cur_get_del_id;
7891           END IF;
7892           IF l_debug_level  > 0 THEN
7893               oe_debug_pub.add(  'DELIVERY ID: ' || TO_CHAR ( THIS_DEL_ID ) , 5 ) ;
7894           END IF;
7895       END IF;
7896       IF ( last_concat_cols is NULL OR
7897            last_concat_cols <> this_concat_cols ) THEN
7898          IF l_debug_level  > 0 THEN
7899              oe_debug_pub.add(  'CONCAT COLS CHANGED , CALLING UPDATE_INVOICE' ) ;
7900          END IF;
7901          IF ( Update_Invoice_Numbers ( this_del_id, this_del_name) < 0 ) THEN
7902             x_return_status := FND_API.G_RET_STS_SUCCESS;
7903             RETURN;
7904          END IF;
7905          last_del_name := this_del_name;
7906          last_concat_cols := this_concat_cols;
7907       ELSE
7908          IF ( last_del_name <> this_del_name ) THEN
7909             IF l_debug_level  > 0 THEN
7910                 oe_debug_pub.add(  'DEL NAME CHANGED , CALLING UPDATE_INVOICE' ) ;
7911             END IF;
7912             IF ( update_invoice_numbers ( this_del_id, this_del_name) < 0 ) THEN
7913                x_return_status := FND_API.G_RET_STS_SUCCESS;
7914                RETURN;
7915             END IF;
7916             last_del_name := this_del_name;
7917          END IF;
7918       END IF;
7919       IF l_debug_level  > 0 THEN
7920           oe_debug_pub.add(  'TRANSACTION NUMBER IS : '|| INV_NUM , 5 ) ;
7921       END IF;
7922       Update RA_INTERFACE_LINES_ALL
7923       set trx_number = substr(inv_num,1,20) -- substr(inv_num,20)--inv_num --bug#7592350  -- Bug 8216166
7924       where rowid = chartorowid(this_rowid);
7925     END LOOP;
7926     CLOSE del_cursor;
7927     IF l_debug_level  > 0 THEN
7928         oe_debug_pub.add(  'SETTING REQUEST ID TO NULL' , 5 ) ;
7929     END IF;
7930     update ra_interface_lines_all
7931     set request_id=null
7932     where request_id = -1 * p_id;
7933     x_return_status := FND_API.G_RET_STS_SUCCESS;
7934     IF l_debug_level  > 0 THEN
7935         oe_debug_pub.add(  'EXITING UPDATE_NUMBERS ( ) PROCEDURE' , 5 ) ;
7936     END IF;
7937     RETURN;
7938   EXCEPTION
7939     WHEN OTHERS THEN
7940       IF l_debug_level  > 0 THEN
7941           oe_debug_pub.add(  'ORACLE ERROR: ' || SQLERRM , 1 ) ;
7942       END IF;
7943       err_msg := 'Error in update_numbers:\n '|| SQLERRM;
7944       IF l_debug_level  > 0 THEN
7945           oe_debug_pub.add(  ERR_MSG ) ;
7946       END IF;
7947       x_return_status := FND_API.G_RET_STS_ERROR;
7948       IF (cur_get_cols%ISOPEN) THEN
7949         CLOSE cur_get_cols;
7950       END IF;
7951       IF (cur_get_del_id%ISOPEN) THEN
7952         CLOSE cur_get_del_id;
7953       END IF;
7954       IF l_debug_level  > 0 THEN
7955           oe_debug_pub.add(  'EXITING UPDATE_NUMBERS' , 1 ) ;
7956       END IF;
7957       RETURN;
7958     IF l_debug_level  > 0 THEN
7959         oe_debug_pub.add(  'EXITING UPDATE_NUMBERS' , 1 ) ;
7960     END IF;
7961 END Update_Numbers;
7962 
7963 PROCEDURE Interface_Single_Line
7964 (  p_line_rec    IN    OE_Order_PUB.Line_Rec_Type
7965 ,  p_header_rec  IN    OE_Order_PUB.Header_Rec_Type
7966 ,  p_x_interface_line_rec   IN OUT NOCOPY  RA_Interface_Lines_Rec_Type
7967 ,  x_return_status     OUT NOCOPY VARCHAR2
7968 ,  x_result_out        OUT NOCOPY  VARCHAR2
7969 ) IS
7970 --gaynagar
7971 l_freight_count NUMBER;
7972 
7973 CURSOR Pending_Lines IS
7974 SELECT Line.line_id  --SQL# 16487863 Added the UNION clause to avoid FTS
7975 FROM   oe_order_lines Line
7976 WHERE (Line.link_to_line_id = p_line_rec.link_to_line_id)
7977        AND invoice_interface_status_code = 'RFR-PENDING'
7978 UNION
7979 SELECT Line.line_id
7980 FROM   oe_order_lines Line
7981 WHERE (Line.line_id = p_line_rec.link_to_line_id)
7982        AND invoice_interface_status_code = 'RFR-PENDING';
7983 
7984 l_pending_line_id           NUMBER;
7985 l_pending_line_rec          OE_Order_Pub.Line_Rec_Type;
7986 
7987 l_result_code VARCHAR2(240);
7988 l_return_status VARCHAR2(30);
7989 --Customer Acceptance
7990 l_line_invoiceable BOOLEAN;
7991 l_line_rejected    BOOLEAN;
7992 
7993 --
7994 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7995 --
7996 BEGIN
7997     IF l_debug_level  > 0 THEN
7998         oe_debug_pub.add(  'ENTERING INTERFACE_SINGLE_LINE ( ) PROCEDURE' , 5 ) ;
7999         oe_debug_pub.add(  'INTERFACING LINE ID '||TO_CHAR ( P_LINE_REC.LINE_ID ) , 1 ) ;
8000     END IF;
8001     x_return_status := FND_API.G_RET_STS_SUCCESS;
8002     --Customer Acceptance
8003     l_line_invoiceable :=     Line_Invoiceable(p_line_rec);
8004     l_line_rejected    :=     Line_Rejected(p_line_rec);
8005 
8006 --gaynagar added code for handling non-invoiceable lines
8007 --    IF NOT Line_Invoiceable(p_line_rec) THEN
8008       IF NOT l_line_invoiceable OR l_line_rejected THEN --Customer Acceptance
8009          oe_debug_pub.add('Line is non invoiceable',1);
8010        /* Bug#2666125 start-check freight records and holds for non invoiceable items*/
8011      /*    BEGIN
8012 	 IF oe_code_control.code_release_level < '110510' then
8013           SELECT count(*)
8014           INTO l_freight_count
8015           FROM oe_price_adjustments p
8016           WHERE p.header_id = p_line_rec.header_id
8017           AND (p.line_id IS NULL OR p.line_id = p_line_rec.line_id)
8018           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8019           AND p.applied_flag = 'Y'
8020           AND NVL(p.invoiced_flag, 'N') = 'N';
8021          ELSE
8022           SELECT count(*)
8023           INTO l_freight_count
8024           FROM oe_price_adjustments p
8025           WHERE p.header_id = p_line_rec.header_id
8026           AND p.line_id IS NULL
8027           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8028           AND p.applied_flag = 'Y'
8029           AND (NVL(p.invoiced_flag, 'N') = 'N' OR (NVL(p.invoiced_flag, 'N') = 'Y' AND p.adjusted_amount <> nvl(p.invoiced_amount, p.adjusted_amount)));
8030             IF l_freight_count = 0 then
8031                SELECT count(*)
8032                INTO l_freight_count
8033                FROM oe_price_adjustments p
8034                WHERE p.header_id = p_line_rec.header_id
8035                 AND p.line_id = p_line_rec.line_id
8036                 AND p.list_line_type_code = 'FREIGHT_CHARGE'
8037                 AND p.applied_flag = 'Y'
8038                 AND NVL(p.invoiced_flag, 'N') = 'N';
8039             END IF;
8040         END IF;
8041 
8042         EXCEPTION
8043          WHEN NO_DATA_FOUND THEN
8044            IF l_debug_level  > 0 THEN
8045              oe_debug_pub.add('Non-invoiceable lines-In when no data found of freight');
8046            END IF;
8047            l_freight_count := 0;
8048         END;
8049         IF l_debug_level  > 0 THEN
8050         oe_debug_pub.add('l_freight_count: '||l_freight_count);
8051         END IF;
8052         IF l_freight_count >0 then
8053            Check_Invoicing_Holds(p_line_rec, g_itemtype, x_return_status);
8054              IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8055                    x_result_out := OE_GLOBALS.G_WFR_ON_HOLD;
8056                    RAISE FND_API.G_EXC_ERROR;
8057              ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8058                    x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8059                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8060              END IF;
8061         END IF; */
8062        /* Bug#2666125 end-check freight records and holds for non invoiceable items*/
8063 
8064        Update_Invoice_Attributes(p_line_rec
8065                                 ,p_x_interface_line_rec
8066                                 ,'NOT_ELIGIBLE'
8067                                 ,x_return_status);
8068        IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8069           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8070           RAISE FND_API.G_EXC_ERROR;
8071        ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8072           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8073           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8074        END IF;
8075        --- Eventhough line is not eligible for invoicing, there might be some other
8076        --- lines that are waiting for this line to trigger their invoicing activity.
8077        --- Ex: Included Items are not invoiceable but due to RFR, there might be
8078        --- some lines in RFR-PENDING block. We should invoice them.
8079        IF Is_PTO(p_line_rec) THEN
8080           IF Is_RFR(p_line_rec.line_id) THEN
8081              IF l_debug_level  > 0 THEN
8082                  oe_debug_pub.add(  'RFR: THIS LINE IS RFR BUT NOT ELIGIBLE FOR INVOICING- CHECKING FOR PENDING LINES' , 5 ) ;
8083              END IF;
8084              Open Pending_Lines;
8085              LOOP
8086                  Fetch Pending_Lines Into l_pending_line_id;
8087                  EXIT WHEN Pending_Lines%NOTFOUND;
8088                  OE_Line_Util.Query_Row(p_line_id=>l_pending_line_id,x_line_rec=>l_pending_line_rec);
8089                  IF l_debug_level  > 0 THEN
8090                      oe_debug_pub.add(  'RFR: PENDING LINE ID : ' || TO_CHAR ( L_PENDING_LINE_ID ) , 5 ) ;
8091                  END IF;
8092                  IF Something_To_Invoice(l_pending_line_rec) THEN -- the pending line now has something to
8093                                                              -- invoice because current line has been shipped
8094                    IF l_debug_level  > 0 THEN
8095                        oe_debug_pub.add(  'RFR: INTERFACING PENDING LINE ID :'||L_PENDING_LINE_ID , 5 ) ;
8096                    END IF;
8097                    Interface_Single_line(p_line_rec              => l_pending_line_rec
8098                                         ,p_header_rec            => p_header_rec
8099                                         ,p_x_interface_line_rec  => p_x_interface_line_rec
8100                                         ,x_return_status         => x_return_status
8101                                         ,x_result_out            => x_result_out);
8102                    IF l_debug_level  > 0 THEN
8103                        oe_debug_pub.add(  'INTERFACING PENDING LINE ID ' || L_PENDING_LINE_REC.LINE_ID , 5 ) ;
8104                    END IF;
8105                    IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8106                          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8107                          RAISE FND_API.G_EXC_ERROR;
8108                    ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8109                          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8110                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8111                    ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8112                       IF x_result_out = OE_GLOBALS.G_WFR_PRTL_COMPLETE THEN
8113                          IF l_debug_level  > 0 THEN
8114                              oe_debug_pub.add(  'RFR PENDING LINE PARTIALLY INTERFACED' , 5 ) ;
8115                          END IF;
8116                       ELSE --x_result_out = OE_GLOBALS.G_WFR_COMPLETE THEN
8117                          IF l_debug_level  > 0 THEN
8118                              oe_debug_pub.add(  'RFR-PENDING LINE INTERFACED SUCCESSFULLY' , 5 ) ;
8119                          END IF;
8120                          WF_ENGINE.CompleteActivityInternalName(OE_GLOBALS.G_WFI_LIN, l_pending_line_rec.line_id, 'INVOICING_WAIT_FOR_RFR', 'COMPLETE');
8121                       END IF;
8122                    END IF;
8123                  END IF;
8124              END LOOP;
8125              close Pending_Lines;
8126          END IF; -- itself is a RFR line
8127        END IF; -- PTO line
8128        --freight line rec info comes from interface line rec. so prepare interface line rec
8129 /* START Enhancement Request# 1915736 */
8130        -- Prepare interface line rec only if there are any freight charges to interface (Enhancement Request# 1915736)
8131        IF NOT l_line_rejected THEN --Customer Acceptance
8132        BEGIN
8133 
8134 	 IF oe_code_control.code_release_level < '110510' then
8135           SELECT count(*)
8136           INTO l_freight_count
8137           FROM oe_price_adjustments p
8138           WHERE p.header_id = p_line_rec.header_id
8139           AND (p.line_id IS NULL OR p.line_id = p_line_rec.line_id)
8140           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8141           AND p.applied_flag = 'Y'
8142           AND NVL(p.invoiced_flag, 'N') = 'N';
8143          ELSE
8144           SELECT count(*)
8145           INTO l_freight_count
8146           FROM oe_price_adjustments p
8147           WHERE p.header_id = p_line_rec.header_id
8148           AND p.line_id IS NULL
8149           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8150           AND p.applied_flag = 'Y'
8151           AND (NVL(p.invoiced_flag, 'N') = 'N' OR (NVL(p.invoiced_flag, 'N') = 'Y' AND p.adjusted_amount <> nvl(p.invoiced_amount, p.adjusted_amount)));
8152             IF l_freight_count = 0 then
8153                SELECT count(*)
8154                INTO l_freight_count
8155                FROM oe_price_adjustments p
8156                WHERE p.header_id = p_line_rec.header_id
8157                 AND p.line_id = p_line_rec.line_id
8158                 AND p.list_line_type_code = 'FREIGHT_CHARGE'
8159                 AND p.applied_flag = 'Y'
8160                 AND NVL(p.invoiced_flag, 'N') = 'N';
8161             END IF;
8162         END IF;
8163 
8164        EXCEPTION
8165         WHEN NO_DATA_FOUND THEN
8166            IF l_debug_level  > 0 THEN
8167                oe_debug_pub.add(  'IN WHEN NO DATA FOUND OF FREIGHT' ) ;
8168            END IF;
8169            l_freight_count := 0;
8170        END;
8171        IF l_debug_level  > 0 THEN
8172            oe_debug_pub.add(  'L_FREIGHT_COUNT: '||L_FREIGHT_COUNT ) ;
8173        END IF;
8174        IF l_freight_count > 0 THEN
8175 /* END Enhancement Request# 1915736 */
8176           IF l_debug_level  > 0 THEN
8177               oe_debug_pub.add(  'PREPARING INTERFACE LINE RECORD' , 5 ) ;
8178           END IF;
8179 
8180           Prepare_Interface_Line_Rec(p_line_rec            =>   p_line_rec
8181                                     ,p_header_rec          =>   p_header_rec
8182                                     ,p_x_interface_line_rec  =>   p_x_interface_line_rec
8183                                     ,x_result_code         =>   l_result_code);
8184           IF l_debug_level  > 0 THEN
8185               oe_debug_pub.add(  'VALIDATING REQUIRED ATTRIBUTES' , 5 ) ;
8186           END IF;
8187           IF NOT Validate_Required_Attributes(p_line_rec, p_x_interface_line_rec) THEN
8188              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8189              RAISE FND_API.G_EXC_ERROR;
8190           END IF;
8191           IF l_debug_level  > 0 THEN
8192               oe_debug_pub.add(  'INTERFACING FREIGHT CHARGES' , 5 ) ;
8193           END IF;
8194           Interface_Freight_Charges(p_line_rec
8195                                   , p_x_interface_line_rec
8196                                   , x_return_status);
8197 /* START Enhancement Request# 1915736 */
8198        END IF; -- for freight
8199 /* END Enhancement Request# 1915736 */
8200       END IF; -- for Non-rejected_lines Customer Acceptance
8201 
8202        IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8203              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8204              RAISE FND_API.G_EXC_ERROR;
8205        ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8206              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8207              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8208        ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8209              x_result_out := OE_GLOBALS.G_WFR_NOT_ELIGIBLE;
8210              IF l_debug_level  > 0 THEN
8211                  oe_debug_pub.add(  'RETURN AFTER INVOICEABLE ELIGIBLE CHECK' , 1 ) ;
8212              END IF;
8213 	     --Customer Acceptance
8214              IF l_line_rejected AND p_line_rec.line_category_code = 'RETURN' THEN
8215 		FND_MESSAGE.SET_NAME('ONT','ONT_RMA_NO_CREDIT');
8216 		OE_MSG_PUB.ADD;
8217              END IF;
8218 	     --Customer Acceptance
8219              RETURN;
8220        END IF;
8221     END IF;
8222 --gaynagar end
8223 
8224     IF l_debug_level  > 0 THEN
8225         oe_debug_pub.add(  'PREPARING INTERFACE LINE RECORD' , 5 ) ;
8226     END IF;
8227     Prepare_Interface_Line_Rec(p_line_rec            =>   p_line_rec
8228                               ,p_header_rec          =>   p_header_rec
8229                               ,p_x_interface_line_rec  =>   p_x_interface_line_rec
8230                               ,x_result_code         =>   l_result_code);
8231     IF l_debug_level  > 0 THEN
8232         oe_debug_pub.add(  'REQUEST_ID: '||P_X_INTERFACE_LINE_REC.REQUEST_ID || ' RESULT_CODE: '||L_RESULT_CODE , 5 ) ;
8233     END IF;
8234     IF ((p_x_interface_line_rec.QUANTITY = 0 OR p_x_interface_line_rec.QUANTITY IS NULL) AND l_result_code = 'RFR-PENDING') THEN
8235        IF l_debug_level  > 0 THEN
8236            oe_debug_pub.add(  'ZERO QUANTITY LINE - NOT INTERFACED' , 5 ) ;
8237            oe_debug_pub.add(  'UPDATING INVOICE FLAG AND QUANTITY' , 5 ) ;
8238        END IF;
8239        IF l_result_code = 'RFR-PENDING' THEN
8240            Update_Invoice_Attributes(p_line_rec
8241                                      ,p_x_interface_line_rec
8242                                      ,'RFR-PENDING'
8243                                      ,x_return_status);
8244        IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
8245           FND_MESSAGE.SET_NAME('ONT','OE_INVOICE_WAIT_FOR_RFR');
8246           OE_MSG_PUB.ADD;
8247        END IF;
8248        END IF;
8249        IF l_debug_level  > 0 THEN
8250            oe_debug_pub.add(  'REQUEST_ID AFTER INSERTING '||P_X_INTERFACE_LINE_REC.REQUEST_ID , 5 ) ;
8251        END IF;
8252        IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8253           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8254           RAISE FND_API.G_EXC_ERROR;
8255        ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8256           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8257           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8258        ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8259           IF l_result_code = 'RFR-PENDING' THEN
8260              x_result_out := OE_GLOBALS.G_WFR_PRTL_COMPLETE;
8261              IF l_debug_level  > 0 THEN
8262                  oe_debug_pub.add(  'LINE ID '||TO_CHAR ( P_LINE_REC.LINE_ID ) ||' PARTIALLY INTERFACED SUCCESSFULLY ' || 'X_RESULT_OUT: '||X_RESULT_OUT ||' L_RESULT_CODE '||L_RESULT_CODE ) ;
8263              END IF;
8264              IF l_debug_level  > 0 THEN
8265                  oe_debug_pub.add(  'EXITING INTERFACE_SINGLE_LINE' , 5 ) ;
8266              END IF;
8267              RETURN; --Do not need to interface this line
8268           END IF;
8269        END IF;
8270        IF l_debug_level  > 0 THEN
8271            oe_debug_pub.add(  'EXIT INTERFACE_SINGLE_LINE ( ) PROCEDURE ( 1 ) ' , 1 ) ;
8272        END IF;
8273        RETURN; --Do not need to interface this line
8274     END IF; -- Zero invoice quantity RFR
8275     IF l_debug_level  > 0 THEN
8276         oe_debug_pub.add(  'VALIDATE REQUIRED ATTRIBUTES' , 5 ) ;
8277     END IF;
8278     IF NOT Validate_Required_Attributes(p_line_rec, p_x_interface_line_rec) THEN
8279        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8280        RAISE FND_API.G_EXC_ERROR;
8281     END IF;
8282     IF l_debug_level  > 0 THEN
8283         oe_debug_pub.add(  'INSERTING LINE INTO RA_INTERFACE_LINES' , 5 ) ;
8284     END IF;
8285     Insert_Line(p_x_interface_line_rec
8286                 ,x_return_status=>l_return_status);
8287     -- Fix for the bug 2187074
8288     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8289        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8290        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8291     END IF;
8292 
8293     -- 3685479 Replacing show detail dis by the following IF
8294     -- Adjustments need not be queried here as it is anyway going to be queried in interface_detail_discounts
8295     IF (oe_sys_parameters.value('OE_DISCOUNT_DETAILS_ON_INVOICE',p_line_rec.org_id) = 'Y') THEN --moac
8296   	   IF l_debug_level  > 0 THEN
8297   	       oe_debug_pub.add(  'INSERTING DISCOUNT DETAILS' , 5 ) ;
8298   	   END IF;
8299         Interface_Detail_Discounts(p_line_rec, p_x_interface_line_rec
8300                                    ,x_return_status);
8301         -- Fix for the bug 2187074
8302         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8303            x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8304            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8305         END IF;
8306     END IF;
8307     IF l_debug_level  > 0 THEN
8308         oe_debug_pub.add(  'INTERFACING FREIGHT CHARGES' , 5 ) ;
8309     END IF;
8310     Interface_Freight_Charges(p_line_rec
8311                             , p_x_interface_line_rec
8312                             , x_return_status);
8313     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8314        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8315        RAISE FND_API.G_EXC_ERROR;
8316     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8317        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8318        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8319     END IF;
8320     IF l_debug_level  > 0 THEN
8321         oe_debug_pub.add(  'INTERFACING SALES CREDITS' , 5 ) ;
8322     END IF;
8323     Interface_Salescredits(p_line_rec
8324                           ,p_x_interface_line_rec
8325                           ,x_return_status);
8326     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8327        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8328        RAISE FND_API.G_EXC_ERROR;
8329     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8330        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8331        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8332     END IF;
8333 
8334        --Customer Acceptance
8335     IF l_debug_level  > 0 THEN
8336         oe_debug_pub.add(  'INTERFACING Contingencies' , 5 ) ;
8337     END IF;
8338        Interface_Contingencies
8339           (   p_line_rec   => p_line_rec
8340               ,   p_interface_line_rec        => p_x_interface_line_rec
8341               ,   x_return_status  => x_return_status
8342             );
8343 
8344       IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8345          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8346       END IF;
8347       --Customer Acceptance
8348 
8349     IF l_debug_level  > 0 THEN
8350         oe_debug_pub.add(  'UPDATING INVOICE FLAG AND QUANTITY' , 5 ) ;
8351     END IF;
8352     IF l_result_code = 'RFR-PENDING' THEN
8353         Update_Invoice_Attributes(p_line_rec
8354                              ,p_x_interface_line_rec
8355                              ,'RFR-PENDING'
8356                              ,x_return_status);
8357     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
8358        FND_MESSAGE.SET_NAME('ONT','OE_INVOICE_WAIT_FOR_RFR');
8359        OE_MSG_PUB.ADD;
8360     END IF;
8361     ELSE
8362         Update_Invoice_Attributes(p_line_rec
8363                              ,p_x_interface_line_rec
8364                              ,'YES'
8365                              ,x_return_status);
8366     END IF;
8367     IF l_debug_level  > 0 THEN
8368         oe_debug_pub.add(  'REQUEST_ID AFTER INSERTING '||P_X_INTERFACE_LINE_REC.REQUEST_ID ) ;
8369     END IF;
8370     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8371        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8372        RAISE FND_API.G_EXC_ERROR;
8373     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8374        x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8375        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8376     ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8377        IF l_result_code = 'RFR-PENDING' THEN
8378           x_result_out := OE_GLOBALS.G_WFR_PRTL_COMPLETE;
8379           IF l_debug_level  > 0 THEN
8380               oe_debug_pub.add(  'LINE ID '||TO_CHAR ( P_LINE_REC.LINE_ID ) ||' PARTIALLY INTERFACED SUCCESSFULLY' , 1 ) ;
8381           END IF;
8382        ELSE
8383           x_result_out := OE_GLOBALS.G_WFR_COMPLETE;
8384           IF l_debug_level  > 0 THEN
8385               oe_debug_pub.add(  'LINE ID '||TO_CHAR ( P_LINE_REC.LINE_ID ) ||' INTERFACED SUCCESSFULLY' , 1 ) ;
8386           END IF;
8387        END IF;
8388     END IF;
8389 
8390     IF l_debug_level  > 0 THEN
8391         oe_debug_pub.add(  'EXIT INTERFACE_SINGLE_LINE ( ) PROCEDURE SUCCESSFULLY' , 1 ) ;
8392     END IF;
8393 EXCEPTION
8394     WHEN FND_API.G_EXC_ERROR THEN
8395          IF l_debug_level  > 0 THEN
8396              oe_debug_pub.add(  'EXPECTED ERROR. EXITING INTERFACE_SINGLE_LINE : '||SQLERRM , 1 ) ;
8397          END IF;
8398          x_return_status := FND_API.G_RET_STS_ERROR;
8399          IF l_debug_level  > 0 THEN
8400              oe_debug_pub.add(  'RETURN STATUS :'||X_RETURN_STATUS||' OUT RESULT : '||X_RESULT_OUT , 5 ) ;
8401          END IF;
8402     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8403          IF l_debug_level  > 0 THEN
8404              oe_debug_pub.add(  'UNEXPECTED ERROR. EXITING INTERFACE_SINGLE_LINE '||SQLERRM , 1 ) ;
8405              oe_debug_pub.add(  'RETURN STATUS :'||X_RETURN_STATUS||' OUT RESULT : '||X_RESULT_OUT , 5 ) ;
8406          END IF;
8407          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8408     WHEN OTHERS THEN
8409          IF l_debug_level  > 0 THEN
8410              oe_debug_pub.add(  'OTHER EXCEPTION. EXITING INTERFACE_SINGLE_LINE : '||SQLERRM , 1 ) ;
8411              oe_debug_pub.add(  'RETURN STATUS :'||X_RETURN_STATUS||' OUT RESULT : '||X_RESULT_OUT , 5 ) ;
8412          END IF;
8413          IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8414                OE_MSG_PUB.Add_Exc_Msg
8415                (   G_PKG_NAME
8416                ,   'Interface_Single_line'
8417                );
8418          END IF;
8419          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8420 END Interface_Single_line;
8421 
8422 PROCEDURE Interface_Line
8423 (   p_line_id       IN   NUMBER
8424 ,   p_itemtype      IN   VARCHAR2
8425 ,   x_result_out    OUT  NOCOPY VARCHAR2
8426 ,   x_return_status OUT  NOCOPY VARCHAR2
8427 ) IS
8428 l_interface_line_rec        RA_Interface_Lines_Rec_Type;
8429 l_line_rec                  OE_Order_Pub.Line_Rec_Type;
8430 l_header_rec                OE_Order_Pub.Header_Rec_Type;
8431 l_dummy                     VARCHAR2(240);
8432 l_delivery_line_id          NUMBER := NULL;
8433 l_line_delivery_id  NUMBER := NULL;
8434 l_line_id                   NUMBER;
8435 l_interface_status_code     VARCHAR2(30);
8436 l_old_interface_status_code VARCHAR2(30);
8437 l_pending_line_id           NUMBER;
8438 l_pending_line_rec          OE_Order_Pub.Line_Rec_Type;
8439 del_line_ready_flag         VARCHAR2(1) := NULL;
8440 interface_this_line         VARCHAR2(1) := 'Y';
8441 l_result_code               VARCHAR2(240);
8442 generate_invoice_number     VARCHAR2(1) := 'N';
8443 x_msg_count                 NUMBER;
8444 x_msg_data                  VARCHAR2(240);
8445 p_header_id                 NUMBER := NULL;
8446 l_return_status		        VARCHAR2(30);
8447 l_open_flag                 VARCHAR2(1);
8448 l_flow_status_code      VARCHAR2(30);
8449 /* START Enhancement Request# 1915736 */
8450 l_freight_count             NUMBER;
8451 /* END Enhancement Request# 1915736 */
8452 -- Fix for bug 2224248
8453 l_invoice_rec                  OE_Order_Pub.Line_Rec_Type;
8454 --Customer Acceptance
8455 l_line_invoiceable BOOLEAN;
8456 l_line_rejected  BOOLEAN;
8457 
8458 -- Fix for the bug 2196494
8459 CURSOR delivery_lines_cursor(p_delivery_id  IN NUMBER) IS
8460 SELECT  distinct dd.source_line_id
8461 FROM    wsh_new_deliveries dl,
8462         wsh_delivery_assignments da,
8463         wsh_delivery_details dd
8464 WHERE   dd.delivery_detail_id  = da.delivery_detail_id
8465 AND     da.delivery_id  = dl.delivery_id
8466 AND     dd.source_code = 'OE'
8467 AND     dl.delivery_id = p_delivery_id
8468 AND     dd.source_line_id is not null
8469 UNION ALL
8470 SELECT  distinct dd.top_model_line_id
8471 FROM    wsh_new_deliveries dl,
8472         wsh_delivery_assignments da,
8473         wsh_delivery_details dd
8474 WHERE   dd.delivery_detail_id  = da.delivery_detail_id
8475 AND     da.delivery_id  = dl.delivery_id
8476 AND     dd.source_code = 'OE'
8477 AND     dl.delivery_id = p_delivery_id
8478 AND     dd.top_model_line_id is not null;
8479 
8480 CURSOR cur1(p_delivery_id  IN NUMBER) IS -- added for 4084965
8481 SELECT  'x'
8482 FROM    wsh_new_deliveries dl,
8483         wsh_delivery_assignments da,
8484         wsh_delivery_details dd
8485 WHERE   dd.delivery_detail_id  = da.delivery_detail_id
8486 AND     da.delivery_id  = dl.delivery_id
8487 AND     dd.source_code = 'OE'
8488 AND     dl.delivery_id = p_delivery_id
8489 AND     (dd.source_line_id is not null OR
8490          dd.top_model_line_id is not null)
8491 for update of dd.source_line_id nowait;
8492 
8493 CURSOR Pending_Lines IS
8494 SELECT Line.line_id
8495 FROM   oe_order_lines Line
8496 WHERE (Line.link_to_line_id = l_line_rec.link_to_line_id
8497        OR Line.line_id = l_line_rec.link_to_line_id)
8498        AND invoice_interface_status_code = 'RFR-PENDING';
8499        --
8500        l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
8501        --
8502 l_delivery_name VARCHAR2(30);
8503 --bug# 4094835
8504 delivery_line_processed VARCHAR2(1):='N';
8505 current_line_return_status VARCHAR2(30);
8506 current_line_result_out VARCHAR2(30);
8507 v_line_id               NUMBER;
8508 v_lock_control          NUMBER;
8509 BEGIN
8510     IF l_debug_level  > 0 THEN
8511         oe_debug_pub.add(  'ENTERING INTERFACE_LINE ( ) PROCEDURE' , 1 ) ;
8512         oe_debug_pub.add(  'LINE ID : '|| P_LINE_ID , 5 ) ;
8513         oe_debug_pub.add(  'ITEM TYPE : '||P_ITEMTYPE , 5 ) ;
8514     END IF;
8515     IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
8516        SAVEPOINT INVOICE_INTERFACE;
8517     END IF;
8518 
8519  --bug 5336623 Commented the following call to OE_MSG_PUB.set_msg_context
8520     --Exception management begin
8521  /*   OE_MSG_PUB.set_msg_context(
8522            p_entity_code           => 'LINE'
8523           ,p_entity_id                  => p_line_id
8524           ,p_line_id                    => p_line_id ); */
8525     --Exception management end
8526 
8527     -- Initialize API return status to success
8528     x_return_status := FND_API.G_RET_STS_SUCCESS;
8529     G_ITEMTYPE := p_itemtype;
8530 
8531     --bug 5336623
8532     oe_line_util.Query_Row
8533         (p_line_id  => p_line_id
8534         ,x_line_rec => l_line_rec
8535         );
8536     --bug 5336623
8537 
8538     ----bug 5336623 commented the following call to OE_Line_Util.Lock_Row
8539 /*    OE_Line_Util.Lock_Row(p_line_id=>p_line_id
8540     		, p_x_line_rec => l_line_rec
8541      		, x_return_status => l_return_status
8542 	    	);
8543     IF    l_return_status = FND_API.G_RET_STS_ERROR THEN
8544 	      RAISE FND_API.G_EXC_ERROR;
8545     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8546 	      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8547     END IF;  */
8548 
8549     --bug 5336623 Moved the following call to OE_Header_Util.Query_row after the line is locked
8550     --OE_Header_Util.Query_row(p_header_id=>l_line_rec.header_id,x_header_rec=>l_header_rec);
8551     IF p_itemtype = OE_GLOBALS.G_WFI_HDR THEN
8552        p_header_id := l_line_rec.header_id;
8553     END IF;
8554     -- Set message context
8555     OE_MSG_PUB.set_msg_context(
8556            p_entity_code           => 'LINE'
8557           ,p_entity_id                  => l_line_rec.line_id
8558           ,p_header_id                  => l_line_rec.header_id
8559           ,p_line_id                    => l_line_rec.line_id
8560           ,p_order_source_id            => l_line_rec.order_source_id
8561           ,p_orig_sys_document_ref      => l_line_rec.orig_sys_document_ref
8562           ,p_orig_sys_document_line_ref => l_line_rec.orig_sys_line_ref
8563           ,p_orig_sys_shipment_ref      => l_line_rec.orig_sys_shipment_ref
8564           ,p_change_sequence            => l_line_rec.change_sequence
8565           ,p_source_document_type_id    => l_line_rec.source_document_type_id
8566           ,p_source_document_id         => l_line_rec.source_document_id
8567           ,p_source_document_line_id    => l_line_rec.source_document_line_id );
8568 
8569     --bug 5336623
8570     begin
8571 
8572         select line_id, lock_control into v_line_id, v_lock_control
8573         from oe_order_lines_all where line_id = l_line_rec.line_id
8574         FOR UPDATE NOWAIT;
8575 
8576         IF l_debug_level  > 0 THEN
8577            oe_debug_pub.add('Locking successful');
8578         END IF;
8579 
8580     exception
8581      --- bug# 7600960 : Start
8582      /*
8583         WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
8584           IF l_debug_level  > 0 THEN
8585             oe_debug_pub.add('in lock record exception, someone else working on the row');
8586          END IF;
8587          x_return_status := FND_API.G_RET_STS_ERROR;
8588          l_line_rec.return_status       := FND_API.G_RET_STS_ERROR;
8589          l_line_rec.line_id := null;
8590          FND_MESSAGE.Set_Name('ONT', 'OE_LINE_LOCKED');
8591          OE_MSG_PUB.Add;
8592          RAISE FND_API.G_EXC_ERROR;
8593      */
8594 
8595         WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
8596             IF l_debug_level  > 0 THEN
8597                 oe_debug_pub.add(' in lock record exception, someone else working on the row ');
8598                 oe_debug_pub.add('  SQLERRM = '|| SQLERRM );
8599                 oe_debug_pub.add(  ' Unable to LOCK this Line. Going to make it DEFERRED so that it can be picked by another WFBP ');
8600             END IF;
8601 
8602             IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
8603                 ROLLBACK TO INVOICE_INTERFACE;
8604             END IF;
8605             x_result_out := NULL;
8606             x_return_status := 'DEFERRED';
8607             FND_MESSAGE.Set_Name('ONT', 'OE_LINE_LOCKED');
8608             OE_MSG_PUB.Add;
8609             RETURN;
8610         --- bug# 7600960 : end
8611 
8612 
8613        WHEN NO_DATA_FOUND THEN
8614            IF l_debug_level  > 0 THEN
8615               oe_debug_pub.add('no_data_found, record lock exception');
8616            END IF;
8617            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8618 
8619        WHEN OTHERS THEN
8620            IF l_debug_level  > 0 THEN
8621               oe_debug_pub.add('record lock exception, others');
8622               oe_debug_pub.add('line id '|| v_line_id , 1);
8623            END IF;
8624            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8625     END;
8626     OE_Header_Util.Query_row(p_header_id=>l_line_rec.header_id,x_header_rec=>l_header_rec);
8627     --bug 5336623
8628 
8629 
8630     -- bug# 7231974 : before starting processing, fetch the service date
8631         oe_debug_pub.add(  ' trying to fetch srv_start/end_date ... ' , 5 ) ;
8632         IF  l_line_Rec.item_type_code = 'SERVICE' and l_line_Rec.accounting_rule_duration is null
8633             and (l_line_rec.SERVICE_START_DATE is null or l_line_rec.SERVICE_START_DATE is null) THEN
8634                Update_Service_Dates(l_line_Rec);
8635         END IF;
8636     -- 7231974
8637 
8638 
8639     --Customer Acceptance
8640      IF NVL(OE_SYS_PARAMETERS.VALUE('ENABLE_FULFILLMENT_ACCEPTANCE'), 'N') = 'Y' AND
8641        OE_ACCEPTANCE_UTIL.Pre_billing_acceptance_on(l_line_rec)
8642        AND OE_ACCEPTANCE_UTIL.Acceptance_Status(l_line_rec) = 'NOT_ACCEPTED' THEN
8643         IF l_debug_level  > 0 THEN
8644            oe_debug_pub.add('top_model_line_id:'||l_line_rec.top_model_line_id);
8645         END IF;
8646 
8647   -- added following for bug# 5232503
8648   -- If it is a child line then check if the parent is accepted.
8649   -- Do not wait for acceptance if parent is already accepted.                    -- This check is added to make sure that child line won't get stuck
8650   -- if the system parameter is changed from yes to no to yes again.
8651      IF ((l_line_rec.top_model_line_id is not null
8652         AND l_line_rec.line_id <>  l_line_rec.top_model_line_id
8653         AND OE_ACCEPTANCE_UTIL.Acceptance_Status(l_line_rec.top_model_line_id) = 'ACCEPTED')
8654         OR
8655         (l_line_rec.item_type_code = 'SERVICE'
8656          AND l_line_rec.service_reference_type_code='ORDER'
8657          AND l_line_rec.service_reference_line_id IS NOT NULL
8658          AND OE_ACCEPTANCE_UTIL.Acceptance_Status(l_line_rec.service_reference_line_id) = 'ACCEPTED')) THEN
8659         IF l_debug_level  > 0 THEN
8660            oe_debug_pub.add('acceptance not required. item_type:'||l_line_rec.item_type_code);
8661         END IF;
8662      ELSE
8663           Update_Invoice_Attributes(l_line_rec ,l_interface_line_rec ,'ACCEPTANCE-PENDING' ,x_return_status);
8664            IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8665                    x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8666                    RAISE FND_API.G_EXC_ERROR;
8667             ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8668                    x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8669                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8670             ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8671                     x_result_out := OE_GLOBALS.G_WFR_PENDING_ACCEPTANCE; -- this is pending for Acceptance
8672                    RETURN;
8673             END IF;
8674       END IF;
8675      END IF;
8676       l_line_invoiceable := Line_Invoiceable(l_line_rec);
8677       l_line_rejected := Line_Rejected(l_line_rec);
8678    --Customer Acceptance
8679 
8680 
8681 -- gaynagar controlled code for non-invoiceable lines based on invoice numbering method
8682 --    IF NOT Line_Invoiceable(l_line_rec) THEN
8683       IF NOT l_line_invoiceable  OR l_line_rejected THEN
8684        IF NOT l_line_Invoiceable THEN
8685        /* Bug#2666125 start-check freight records and holds for non invoiceable items*/
8686          BEGIN
8687 	 IF oe_code_control.code_release_level < '110510' then
8688           SELECT count(*)
8689           INTO l_freight_count
8690           FROM oe_price_adjustments p
8691           WHERE p.header_id = l_line_rec.header_id
8692           AND (p.line_id IS NULL OR p.line_id = l_line_rec.line_id)
8693           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8694           AND p.applied_flag = 'Y'
8695           AND NVL(p.invoiced_flag, 'N') = 'N';
8696          ELSE
8697           SELECT count(*)
8698           INTO l_freight_count
8699           FROM oe_price_adjustments p
8700           WHERE p.header_id = l_line_rec.header_id
8701           AND p.line_id IS NULL
8702           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8703           AND p.applied_flag = 'Y'
8704           AND (NVL(p.invoiced_flag, 'N') = 'N' OR (NVL(p.invoiced_flag, 'N') = 'Y' AND p.adjusted_amount <> nvl(p.invoiced_amount, p.adjusted_amount)));
8705             IF l_freight_count = 0 then
8706                SELECT count(*)
8707                INTO l_freight_count
8708                FROM oe_price_adjustments p
8709                WHERE p.header_id = l_line_rec.header_id
8710                 AND p.line_id = l_line_rec.line_id
8711                 AND p.list_line_type_code = 'FREIGHT_CHARGE'
8712                 AND p.applied_flag = 'Y'
8713                 AND NVL(p.invoiced_flag, 'N') = 'N';
8714             END IF;
8715         END IF;
8716         EXCEPTION
8717          WHEN NO_DATA_FOUND THEN
8718            IF l_debug_level  > 0 THEN
8719              oe_debug_pub.add('Non-invoiceable lines-In when no data found of freight');
8720            END IF;
8721            l_freight_count := 0;
8722         END;
8723         IF l_debug_level  > 0 THEN
8724         oe_debug_pub.add('l_freight_count: '||l_freight_count);
8725         END IF;
8726         IF l_freight_count >0 then
8727            Check_Invoicing_Holds(l_line_rec, p_itemtype, x_return_status);
8728              IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8729                    x_result_out := OE_GLOBALS.G_WFR_ON_HOLD;
8730                    RAISE FND_API.G_EXC_ERROR;
8731              ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8732                    x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8733                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8734              END IF;
8735         END IF;
8736        END IF; -- noninvoiceable line
8737        /* Bug#2666125 end-check freight records and holds for non invoiceable items*/
8738      IF
8739       -- l_freight_count = 0 OR
8740          FND_PROFILE.VALUE('WSH_INVOICE_NUMBERING_METHOD') = 'A' THEN
8741        oe_debug_pub.add('Handling non-invoiceable lines with no freight or automatic numbering',1);
8742        Update_Invoice_Attributes(l_line_rec
8743                                 ,l_interface_line_rec
8744                                 ,'NOT_ELIGIBLE'
8745                                 ,x_return_status);
8746        IF x_return_status = FND_API.G_RET_STS_ERROR THEN
8747           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8748           RAISE FND_API.G_EXC_ERROR;
8749        ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8750           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8751           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8752        END IF;
8753        --- Eventhough line is not eligible for invoicing, there might be some other
8754        --- lines that are waiting for this line to trigger their invoicing activity.
8755        --- Ex: Included Items are not invoiceable but due to RFR, there might be
8756        --- some lines in RFR-PENDING block. We should invoice them.
8757        IF Is_PTO(l_line_rec) THEN
8758           IF Is_RFR(l_line_rec.line_id) THEN
8759              IF l_debug_level  > 0 THEN
8760                  oe_debug_pub.add(  'RFR: THIS LINE IS RFR BUT NOT ELIGIBLE FOR INVOICING- CHECKING FOR PENDING LINES' , 5 ) ;
8761              END IF;
8762              Open Pending_Lines;
8763              LOOP
8764                  Fetch Pending_Lines Into l_pending_line_id;
8765                  EXIT WHEN Pending_Lines%NOTFOUND;
8766                  OE_Line_Util.Query_Row(p_line_id=>l_pending_line_id,x_line_rec=>l_pending_line_rec);
8767                  IF l_debug_level  > 0 THEN
8768                      oe_debug_pub.add(  'RFR: PENDING LINE ID : ' || TO_CHAR ( L_PENDING_LINE_ID ) , 5 ) ;
8769                  END IF;
8770                  IF Something_To_Invoice(l_pending_line_rec) THEN -- the pending line now has something to
8771                                                              -- invoice because current line has been shipped
8772                    IF l_debug_level  > 0 THEN
8773                        oe_debug_pub.add(  'RFR: INTERFACING PENDING LINE ID :'||L_PENDING_LINE_ID , 5 ) ;
8774                    END IF;
8775                    Interface_Single_line(p_line_rec              => l_pending_line_rec
8776                                         ,p_header_rec            => l_header_rec
8777                                         ,p_x_interface_line_rec  => l_interface_line_rec
8778                                         ,x_return_status         => x_return_status
8779                                         ,x_result_out            => x_result_out);
8780                    IF l_debug_level  > 0 THEN
8781                        oe_debug_pub.add(  'INTERFACING PENDING LINE ID ' || L_PENDING_LINE_REC.LINE_ID , 5 ) ;
8782                    END IF;
8783                    IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8784                          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8785                          RAISE FND_API.G_EXC_ERROR;
8786                    ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8787                          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8788                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8789                    ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8790                       IF x_result_out = OE_GLOBALS.G_WFR_PRTL_COMPLETE THEN
8791                          IF l_debug_level  > 0 THEN
8792                              oe_debug_pub.add(  'RFR PENDING LINE PARTIALLY INTERFACED' , 5 ) ;
8793                          END IF;
8794                       ELSE --x_result_out = OE_GLOBALS.G_WFR_COMPLETE THEN
8795                          IF l_debug_level  > 0 THEN
8796                              oe_debug_pub.add(  'RFR-PENDING LINE INTERFACED SUCCESSFULLY' , 5 ) ;
8797                          END IF;
8798                          WF_ENGINE.CompleteActivityInternalName(OE_GLOBALS.G_WFI_LIN, l_pending_line_rec.line_id, 'INVOICING_WAIT_FOR_RFR', 'COMPLETE');
8799                       END IF;
8800                    END IF;
8801                  END IF;
8802              END LOOP;
8803              close Pending_Lines;
8804          END IF; -- itself is a RFR line
8805        END IF; -- PTO line
8806        --freight line rec info comes from interface line rec. so prepare interface line rec
8807 /* START Enhancement Request# 1915736 */
8808        -- Prepare interface line rec only if there are any freight charges to interface (Enhancement Request# 1915736)
8809       IF NOT l_line_rejected THEN  --Customer Acceptance
8810        BEGIN
8811 	IF oe_code_control.code_release_level < '110510' then
8812           SELECT count(*)
8813           INTO l_freight_count
8814           FROM oe_price_adjustments p
8815           WHERE p.header_id = l_line_rec.header_id
8816           AND (p.line_id IS NULL OR p.line_id = l_line_rec.line_id)
8817           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8818           AND p.applied_flag = 'Y'
8819           AND NVL(p.invoiced_flag, 'N') = 'N';
8820 	ELSE
8821           SELECT count(*)
8822           INTO l_freight_count
8823           FROM oe_price_adjustments p
8824           WHERE p.header_id = l_line_rec.header_id
8825           AND p.line_id IS NULL
8826           AND p.list_line_type_code = 'FREIGHT_CHARGE'
8827           AND p.applied_flag = 'Y'
8828           AND (NVL(p.invoiced_flag, 'N') = 'N' OR (NVL(p.invoiced_flag, 'N') = 'Y' AND p.adjusted_amount <> nvl(p.invoiced_amount, p.adjusted_amount)));
8829            IF l_freight_count = 0 then
8830                SELECT count(*)
8831                INTO l_freight_count
8832                FROM oe_price_adjustments p
8833                WHERE p.header_id = l_line_rec.header_id
8834                 AND p.line_id = l_line_rec.line_id
8835                 AND p.list_line_type_code = 'FREIGHT_CHARGE'
8836                 AND p.applied_flag = 'Y'
8837                 AND NVL(p.invoiced_flag, 'N') = 'N';
8838             END IF;
8839       END IF;
8840        EXCEPTION
8841         WHEN NO_DATA_FOUND THEN
8842            IF l_debug_level  > 0 THEN
8843                oe_debug_pub.add(  'IN WHEN NO DATA FOUND OF FREIGHT' ) ;
8844            END IF;
8845            l_freight_count := 0;
8846        END;
8847        IF l_debug_level  > 0 THEN
8848            oe_debug_pub.add(  'L_FREIGHT_COUNT: '||L_FREIGHT_COUNT ) ;
8849        END IF;
8850        IF l_freight_count > 0 THEN
8851 /* END Enhancement Request# 1915736 */
8852           IF l_debug_level  > 0 THEN
8853               oe_debug_pub.add(  'PREPARING INTERFACE LINE RECORD' , 5 ) ;
8854           END IF;
8855           Prepare_Interface_Line_Rec(p_line_rec            =>   l_line_rec
8856                                     ,p_header_rec          =>   l_header_rec
8857                                     ,p_x_interface_line_rec  =>   l_interface_line_rec
8858                                     ,x_result_code         =>   l_result_code);
8859           IF l_debug_level  > 0 THEN
8860               oe_debug_pub.add(  'VALIDATING REQUIRED ATTRIBUTES' , 5 ) ;
8861           END IF;
8862           IF NOT Validate_Required_Attributes(l_line_rec, l_interface_line_rec) THEN
8863              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8864              RAISE FND_API.G_EXC_ERROR;
8865           END IF;
8866           IF l_debug_level  > 0 THEN
8867               oe_debug_pub.add(  'INTERFACING FREIGHT CHARGES' , 5 ) ;
8868           END IF;
8869           Interface_Freight_Charges(l_line_rec
8870                                   , l_interface_line_rec
8871                                   , x_return_status);
8872 /* START Enhancement Request# 1915736 */
8873        END IF; -- for freight
8874 /* END Enhancement Request# 1915736 */
8875       END IF; -- for Non-rejected_lines Customer Acceptance
8876        IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8877              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8878              RAISE FND_API.G_EXC_ERROR;
8879        ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8880              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8881              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8882        ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8883              x_result_out := OE_GLOBALS.G_WFR_NOT_ELIGIBLE;
8884              IF l_debug_level  > 0 THEN
8885                  oe_debug_pub.add(  'RETURN AFTER INVOICEABLE ELIGIBLE CHECK' , 1 ) ;
8886              END IF;
8887 	     --Customer Acceptance
8888              IF l_line_rejected AND l_line_rec.line_category_code = 'RETURN' THEN
8889 		FND_MESSAGE.SET_NAME('ONT','ONT_RMA_NO_CREDIT');
8890 		OE_MSG_PUB.ADD;
8891              END IF;
8892 	     --Customer Acceptance
8893              RETURN;
8894        END IF;
8895     END IF; --freight_count zero or automatic numbering
8896    END IF; -- non-invoiceable lines check
8897 
8898     Check_Invoicing_Holds(l_line_rec, p_itemtype, x_return_status);
8899     IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
8900           x_result_out := OE_GLOBALS.G_WFR_ON_HOLD;
8901           RAISE FND_API.G_EXC_ERROR;
8902     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8903           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
8904           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8905     END IF;
8906     IF FND_PROFILE.VALUE('WSH_INVOICE_NUMBERING_METHOD') = 'D' THEN
8907        IF l_debug_level  > 0 THEN
8908            oe_debug_pub.add(  'INVOICE NUMBERING SET TO MANUAL' , 5 ) ;
8909        END IF;
8910        IF Shipping_Info_Available(l_line_rec) AND NOT Return_Line(l_line_rec) THEN
8911           -- Fix for bug 2196494
8912           IF (l_line_rec.item_type_code NOT IN ('MODEL','CLASS','KIT')) THEN
8913       	  IF l_debug_level  > 0 THEN
8914       	      oe_debug_pub.add(  'SHIPPING INFORMATION IS AVAILABLE' ) ;
8915       	  END IF;
8916    --Bug2181628 TO retrieve the minimum delivery_id of a line,if it is present
8917    --in more than one delivery.Hence used "MIN"instead of "ROWNUM".
8918         SELECT min(dl.delivery_id)
8919           INTO   l_delivery_line_id
8920           FROM   wsh_new_deliveries dl,
8921                  wsh_delivery_assignments da,
8922                  wsh_delivery_details dd
8923           WHERE  dd.delivery_detail_id  = da.delivery_detail_id
8924           AND    da.delivery_id  = dl.delivery_id
8925           AND    dd.source_code = 'OE'
8926           AND    dd.released_status = 'C'  -- bug 6721251
8927           AND    dd.source_line_id = l_line_rec.line_id;
8928         --  AND    rownum = 1;
8929           -- Fix for bug 2196494
8930           ELSE
8931           SELECT min(dl.delivery_id)
8932           INTO   l_delivery_line_id
8933           FROM   wsh_new_deliveries dl,
8934                  wsh_delivery_assignments da,
8935                  wsh_delivery_details dd
8936           WHERE  dd.delivery_detail_id  = da.delivery_detail_id
8937           AND    da.delivery_id  = dl.delivery_id
8938           AND    dd.source_code = 'OE'
8939           AND    dd.released_status = 'C'  -- bug 6721251
8940           AND    dd.top_model_line_id = l_line_rec.line_id;
8941       --    AND    rownum = 1;
8942           END IF;
8943 
8944           -- fix: temporary
8945           IF l_delivery_line_id IS NOT NULL THEN
8946 	         IF l_debug_level  > 0 THEN
8947 	             oe_debug_pub.add(  'DELIVERY ID : '||L_DELIVERY_LINE_ID , 5 ) ;
8948 	         END IF;
8949 
8950              /* added for bug fix 4084965 */
8951              BEGIN
8952                IF l_debug_level  > 0 THEN
8953                  oe_debug_pub.add(  'locking '||to_char(sysdate,'HH24:MI:SS') ,5 ) ;
8954                END IF;
8955                open cur1(l_delivery_line_id);
8956                close cur1;
8957                IF l_debug_level  > 0 THEN
8958                  oe_debug_pub.add(  'locking: locked' , 5 ) ;
8959                END IF;
8960              EXCEPTION
8961                when app_exceptions.RECORD_LOCK_EXCEPTION then
8962                 IF l_debug_level  > 0 THEN
8963                   oe_debug_pub.add(  'locking: cannot lock' , 5 ) ;
8964                 END IF;
8965                 x_return_status := 'DEFERRED';
8966                 RETURN;
8967                when others then
8968                 IF l_debug_level  > 0 THEN
8969                   oe_debug_pub.add(  'locking: exception:'||sqlerrm , 5 ) ;
8970                 END IF;
8971              END; -- end of bug fix 4084965
8972 
8973              OPEN delivery_lines_cursor(l_delivery_line_id);
8974              LOOP
8975                   FETCH  delivery_lines_cursor  INTO l_line_id;
8976                   EXIT WHEN delivery_lines_cursor%NOTFOUND;
8977                   SELECT invoice_interface_status_code, open_flag
8978                   INTO   l_interface_status_code, l_open_flag
8979                   FROM   oe_order_lines
8980                   WHERE  line_id = l_line_id;
8981             	  IF l_debug_level  > 0 THEN
8982             	      oe_debug_pub.add(  'LINE ID : '||L_LINE_ID , 5 ) ;
8983             	  END IF;
8984                   IF  l_interface_status_code = 'YES' OR
8985 			          l_interface_status_code = 'NOT_ELIGIBLE' OR
8986                       l_interface_status_code = 'MANUAL-PENDING' OR
8987                       l_interface_status_code = 'RFR-PENDING' OR
8988                       l_open_flag = 'N' OR
8989                       l_line_id = p_line_id THEN --this line is ready to invoice
8990                       del_line_ready_flag := 'Y';
8991                   ELSE
8992                       --If there is no INVOICE_INTERFACE activity in the flow then do not wait for the line
8993 	              IF NOT Line_Activity(l_line_id) then
8994                           del_line_ready_flag := 'Y';
8995                           -- Fix for bug 2164555
8996                           -- Fix for bug 2224248. Changed the variable l_line_rec to l_invoice_rec.
8997                       ELSE
8998                               l_invoice_rec :=OE_Line_Util.Query_Row(p_line_id=>l_line_id);
8999 --Bug2181628 Check if the current line's delivery_id is the same as the delivery_id
9000 --being processed.If it is the same then wait for this line,else do not wait indefinetely.
9001 --Bug3071154 Check the shippable flag also
9002                                  IF Shipping_Info_Available(l_invoice_rec)
9003                                   AND (l_invoice_rec.shippable_flag = 'Y')  THEN
9004 				    l_line_delivery_id := NULL;
9005                                     SELECT min(dl.delivery_id)
9006                                     INTO l_line_delivery_id
9007                                     FROM wsh_new_deliveries dl,
9008                                          wsh_delivery_assignments da,
9009                                          wsh_delivery_details dd
9010                                     WHERE dd.delivery_detail_id  = da.delivery_detail_id
9011                                     AND   da.delivery_id  = dl.delivery_id
9012                                     AND   dd.source_code = 'OE'
9013                                     AND   dd.released_status = 'C'  -- bug 6721251
9014                                     AND   dd.source_line_id = l_line_id;
9015 
9016                                       IF l_line_delivery_id IS NULL AND l_invoice_rec.item_type_code in ('MODEL', 'CLASS', 'KIT') THEN
9017                                       SELECT min(dl.delivery_id)
9018                                       INTO l_line_delivery_id
9019                                       FROM wsh_new_deliveries dl,
9020                                            wsh_delivery_assignments da,
9021                                            wsh_delivery_details dd
9022                                       WHERE dd.delivery_detail_id  = da.delivery_detail_id
9023                                       AND   da.delivery_id  = dl.delivery_id
9024                                       AND   dd.source_code = 'OE'
9025                                       AND   dd.released_status = 'C'  -- bug 6721251
9026                                       AND   dd.top_model_line_id = l_line_id;
9027                                     END IF;
9028                                  ELSE
9029                                    IF l_invoice_rec.item_type_code in ('MODEL', 'CLASS', 'KIT') THEN
9030                                       l_line_delivery_id := NULL;
9031                                       SELECT min(dl.delivery_id)
9032                                       INTO l_line_delivery_id
9033                                       FROM wsh_new_deliveries dl,
9034                                            wsh_delivery_assignments da,
9035                                            wsh_delivery_details dd
9036                                       WHERE dd.delivery_detail_id  = da.delivery_detail_id
9037                                       AND   da.delivery_id  = dl.delivery_id
9038                                       AND   dd.source_code = 'OE'
9039                                       AND   dd.released_status = 'C'  -- bug 6721251
9040                                       AND   dd.top_model_line_id = l_line_id;
9041                                    END IF;
9042                                  END IF;
9043                                  IF  (l_line_delivery_id <> l_delivery_line_id) THEN
9044                                     del_line_ready_flag := 'Y';
9045                                  ELSE
9046                                     del_line_ready_flag := 'N';
9047                                  END IF;
9048                               END IF;
9049                       END IF;
9050                   EXIT WHEN del_line_ready_flag = 'N';
9051               END LOOP;
9052               CLOSE delivery_lines_cursor;
9053        	      IF l_debug_level  > 0 THEN
9054        	          oe_debug_pub.add(  'DELIVERY LINE READY FLAG : '||DEL_LINE_READY_FLAG , 5 ) ;
9055        	      END IF;
9056               IF del_line_ready_flag = 'N' THEN -- atleast one line in delivery is not ready to interface
9057 	             IF l_debug_level  > 0 THEN
9058 	                 oe_debug_pub.add(  'SOME OF THE LINES IN THE DELIVERY ARE NOT READY' , 5 ) ;
9059 	             END IF;
9060                  IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9061 	                IF l_debug_level  > 0 THEN
9062 	                    oe_debug_pub.add(  'LINE LEVEL INVOICING-SET STATUS TO PENDING' , 5 ) ;
9063 	                END IF;
9064                     Update_Invoice_Attributes(l_line_rec
9065                                        ,l_interface_line_rec
9066                                        ,'MANUAL-PENDING'
9067                                        ,x_return_status);
9068 		    IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
9069                        IF l_delivery_line_id Is Not Null Then
9070                           SELECT NVL(SUBSTR(dl.name, 1, 30), '0')
9071                           INTO l_delivery_name
9072                           FROM   wsh_new_deliveries dl
9073                           WHERE  dl.delivery_id = l_delivery_line_id;
9074                        END IF;
9075 		       FND_MESSAGE.SET_NAME('ONT','OE_INVOICE_WAIT_FOR_DELIVERY');
9076                        FND_MESSAGE.SET_TOKEN('DELIVERY_NAME',l_delivery_name);
9077                        OE_MSG_PUB.ADD;
9078 		    END IF;
9079                     IF l_debug_level  > 0 THEN
9080                        oe_debug_pub.add(  'INTERFACE STATUS : '||L_LINE_REC.INVOICE_INTERFACE_STATUS_CODE , 5 ) ;
9081                        oe_debug_pub.add(  'X_RETURN_STATUS : '||X_RETURN_STATUS , 5 ) ;
9082                     END IF;
9083                     IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9084                           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9085                           RAISE FND_API.G_EXC_ERROR;
9086                     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9087                           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9088                           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9089                     ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9090                           x_result_out := OE_GLOBALS.G_WFR_PRTL_COMPLETE; -- this actually is pending, we call it partial for WF
9091                           RETURN;
9092                     END IF;
9093                  ELSE -- header level invoice, all delivery lines are not ready to invoice. do not honor delivery.
9094                     IF l_debug_level  > 0 THEN
9095                         oe_debug_pub.add(  'HDR INVOICING- PROCEED W/INVOICING' , 5 ) ;
9096                     END IF;
9097                     generate_invoice_number := 'Y';
9098                     interface_this_line := 'Y';
9099                  END IF;
9100               ELSIF del_line_ready_flag = 'Y' THEN --invoice all lines in delivery
9101                  IF l_debug_level  > 0 THEN
9102                      oe_debug_pub.add(  'ALL LINES IN DELIVERY ARE READY' , 5 ) ;
9103                  END IF;
9104                  --except we need to check for any line in the delivery actually is not invoiciable
9105                  --due to RFR
9106                  OPEN delivery_lines_cursor(l_delivery_line_id);
9107                  LOOP
9108                       FETCH  delivery_lines_cursor  INTO l_line_id;
9109                       EXIT WHEN delivery_lines_cursor%NOTFOUND;
9110                       OE_Line_Util.Query_Row(p_line_id=>l_line_id, x_line_rec=>l_line_rec);
9111                       OE_Header_Util.Query_row(p_header_id=>l_line_rec.header_id,x_header_rec=>l_header_rec);
9112 	                  IF l_debug_level  > 0 THEN
9113 	                      oe_debug_pub.add(  'LINE ID : '||L_LINE_REC.LINE_ID , 5 ) ;
9114 	                  END IF;
9115 --gaynagar processing non-invoiceable lines with delivery lines
9116                       IF l_line_rec.open_flag='Y' AND
9117                          NVL(l_line_rec.invoice_interface_status_code, 'NO') <> 'YES' AND
9118                          NVL(l_line_rec.invoice_interface_status_code, 'NO') <> 'NOT_ELIGIBLE' THEN
9119                          -- Fix for bug 2224248
9120                          --Line_Invoiceable(l_line_rec) THEN
9121                          IF (l_line_id <> p_line_id AND Line_Activity(l_line_rec.line_id) OR (l_line_id = p_line_id))THEN
9122                              -- in devliery and pto, and has something/full qty to invoice - invoice whatever possible,
9123                              -- update to RFR-PENDING if necessarily
9124                              -- in delivery and pto, nothing to invoice - update status to RFR-PENDING
9125                              -- in delivery and not in pto - invoice
9126                              -- it is possible for lines in differnt orders in the same delivery
9127                              -- so ready in a delivery doesn't mean line has something to interface
9128                              --Bug2181628 Check if the current line's delivery_id is the same as the delivery_id
9129                              --being processed.If it is the same then wait for this line,else do not wait indefinetely.
9130                              --Bug 3071154 Check the shippable flag also.
9131                            IF (l_line_id <> p_line_id) THEN
9132                                IF Shipping_Info_Available(l_line_rec)
9133                                 AND (l_line_rec.shippable_flag = 'Y') THEN
9134                                    l_line_delivery_id := NULL;
9135                                    SELECT min(dl.delivery_id)
9136                                    INTO l_line_delivery_id
9137                                    FROM wsh_new_deliveries dl,
9138                                         wsh_delivery_assignments da,
9139                                         wsh_delivery_details dd
9140                                    WHERE dd.delivery_detail_id  = da.delivery_detail_id
9141                                    AND   da.delivery_id  = dl.delivery_id
9142                                    AND   dd.source_code = 'OE'
9143                                    AND   dd.released_status = 'C'  -- bug 6721251
9144                                    AND   dd.source_line_id = l_line_id;
9145 
9146                                     IF l_line_delivery_id IS NULL AND l_line_rec.item_type_code in ('MODEL', 'CLASS', 'KIT') THEN
9147                                      SELECT min(dl.delivery_id)
9148                                      INTO l_line_delivery_id
9149                                      FROM wsh_new_deliveries dl,
9150                                           wsh_delivery_assignments da,
9151                                           wsh_delivery_details dd
9152                                       WHERE dd.delivery_detail_id  = da.delivery_detail_id
9153                                       AND   da.delivery_id  = dl.delivery_id
9154                                       AND   dd.source_code = 'OE'
9155                                       AND   dd.released_status = 'C'  -- bug 6721251
9156                                       AND   dd.top_model_line_id = l_line_id;
9157                                    END IF;
9158 
9159                                    IF l_debug_level  > 0 THEN
9160                                        oe_debug_pub.add(  'CURRENT LINES DELIVERY ID = '||L_LINE_DELIVERY_ID , 5 ) ;
9161                                    END IF;
9162                                 ELSE
9163                                   IF l_line_rec.item_type_code in ('MODEL', 'CLASS', 'KIT') THEN
9164                                      SELECT min(dl.delivery_id)
9165                                      INTO l_line_delivery_id
9166                                      FROM wsh_new_deliveries dl,
9167                                           wsh_delivery_assignments da,
9168                                           wsh_delivery_details dd
9169                                       WHERE dd.delivery_detail_id  = da.delivery_detail_id
9170                                       AND   da.delivery_id  = dl.delivery_id
9171                                       AND   dd.source_code = 'OE'
9172                                       AND   dd.released_status = 'C'  -- bug 6721251
9173                                       AND   dd.top_model_line_id = l_line_id;
9174                                  IF l_debug_level  > 0 THEN
9175                                      oe_debug_pub.add(  'CURRENT LINES DELIVERY ID MODEL , CLASS , KIT = '||L_LINE_DELIVERY_ID , 5 ) ;
9176                                  END IF;
9177                                   END IF;
9178                                 END IF;
9179                            END IF;
9180                       -- Bug2181628 Only now Process the line.
9181                          IF  ((l_line_id = p_line_id) OR (l_line_delivery_id = l_delivery_line_id)) THEN
9182                              IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9183                                 l_interface_line_rec.request_id := -1 * p_line_id;
9184                              ELSE
9185                                 l_interface_line_rec.request_id := -1 * p_header_id;
9186                              END IF;
9187                              generate_invoice_number := 'Y';
9188                              l_old_interface_status_code := l_line_rec.invoice_interface_status_code;
9189                              IF Is_PTO(l_line_rec) THEN
9190                                 IF l_debug_level  > 0 THEN
9191                                     oe_debug_pub.add(  'RFR: PTO IS TRUE - IN DELIVERY HANDLING' , 5 ) ;
9192                                 END IF;
9193                                 IF Something_To_Invoice(l_line_rec) THEN
9194                                    IF l_debug_level  > 0 THEN
9195                                        oe_debug_pub.add(  'RFR: SOMETHING_TO_INVOICE IS TRUE , GO AHEAD INTERFACE - IN DELIVERY HANDLING' , 5 ) ;
9196                                    END IF;
9197                                    Interface_Single_line(p_line_rec            => l_line_rec
9198                                          ,p_header_rec          => l_header_rec
9199                                          ,p_x_interface_line_rec  => l_interface_line_rec
9200                                          ,x_return_status       => x_return_status
9201                                          ,x_result_out          => x_result_out);
9202                                    IF l_debug_level  > 0 THEN
9203                                       oe_debug_pub.add(  'INTERFACED W/REQUEST_ID : '||L_INTERFACE_LINE_REC.REQUEST_ID , 5 ) ;
9204                                    -- if this line can only invoice partial, it will become RFR-PENDING while interfacing whatever it can
9205                                    -- x_result_out should have set appropriately
9206                                       oe_debug_pub.add(  'AFTER INTERFACE SINGLE LINE , RESULT_OUT IS ' || X_RESULT_OUT ||': And x_return_status:'||x_return_status, 5 ) ;
9207                                    END IF;
9208                                    IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9209                                          RAISE FND_API.G_EXC_ERROR;
9210                                    ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9211                                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9212                                    ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9213                                          -- bug# 4094835, if RFR line is fully is fully invoiced or not eligible
9214                                          IF (x_result_out = OE_GLOBALS.G_WFR_COMPLETE OR x_result_out=OE_GLOBALS.G_WFR_NOT_ELIGIBLE) THEN
9215                                             IF l_old_interface_status_code = 'MANUAL-PENDING' OR l_old_interface_status_code = 'RFR-PENDING' THEN
9216                                                IF l_debug_level  > 0 THEN
9217                                                    oe_debug_pub.add(  'RFR: MANUAL-PENDING + RFR LINE HAS BEEN FULLY INVOICED' , 5 ) ;
9218                                                    oe_debug_pub.add(  'NOW COMPLETING THE WF BLOCK ACTIVITY' , 5 ) ;
9219                                                END IF;
9220                                                WF_ENGINE.CompleteActivityInternalName(OE_GLOBALS.G_WFI_LIN, l_line_rec.line_id, 'INVOICING_WAIT_FOR_RFR', 'COMPLETE');
9221                                             END IF;
9222                                          END IF;
9223                                          IF x_result_out = OE_GLOBALS.G_WFR_PRTL_COMPLETE THEN -- RFR line is partially invoiced
9224                                             IF l_debug_level  > 0 THEN
9225                                                 oe_debug_pub.add(  'RFR: THIS LINE IS PARTIALLY INVOICED' , 5 ) ;
9226                                             END IF;
9227                                          END IF;
9228                                          -- real invoice_interface_status_code should have updated to right value
9229                                          -- from interface_single_line already
9230                                    END IF;
9231                                 ELSE -- PTO in a delivery, but nothing available to invoice, update to RFR-PENDING
9232                                    IF l_debug_level  > 0 THEN
9233                                        oe_debug_pub.add(  'RFR: NOTHING AVAILABLE FOR PTO TO INVOICE , UDPATE RFR-PENDING' , 5 ) ;
9234                                        oe_debug_pub.add(  'l_interface_line_rec.quantity:'|| l_interface_line_rec.quantity||':l_line_rec.invoiced_quantity:'||l_line_rec.invoiced_quantity,5 ) ;
9235                                    END IF;
9236                                    l_interface_line_rec.quantity := 0; -- for bug# 4760143, setting the quantity to zero as nothing to invoice
9237                                    IF l_debug_level  > 0 THEN
9238                                        oe_debug_pub.add(  'l_interface_line_rec.quantity after resetting:'|| l_interface_line_rec.quantity,5 ) ;
9239                                    END IF;
9240                                    Update_Invoice_Attributes(l_line_rec
9241                                                  ,l_interface_line_rec
9242                                                  ,'RFR-PENDING'
9243                                                  ,x_return_status);
9244 				   IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
9245 				      FND_MESSAGE.SET_NAME('ONT','OE_INVOICE_WAIT_FOR_RFR');
9246                                       OE_MSG_PUB.ADD;
9247 				   END IF;
9248                                    IF l_debug_level  > 0 THEN
9249                                        oe_debug_pub.add(  'RFR: L_LINE_REC.INTERFACE_STATUS '||L_LINE_REC.INVOICE_INTERFACE_STATUS_CODE , 5 ) ;
9250                                        oe_debug_pub.add(  'RFR: X_RETURN_STATUS :'||X_RETURN_STATUS , 5 ) ;
9251                                    END IF;
9252                                    IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9253                                          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9254                                          RAISE FND_API.G_EXC_ERROR;
9255                                    ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9256                                          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9257                                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9258                                    --bug# 4094835
9259                                    ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9260                                          x_result_out := OE_GLOBALS.G_WFR_PRTL_COMPLETE;
9261                                          IF l_debug_level  > 0 THEN
9262                                             oe_debug_pub.add(  'RFR: LINE ID '||TO_CHAR ( L_LINE_REC.LINE_ID ) ||' PARTIALLY INTERFACED SUCCESSFULLY ' || 'X_RESULT_OUT: '||X_RESULT_OUT) ;
9263                                          END IF;
9264                                    END IF; -- check for update_invoice_attribute results
9265                                 END IF; -- check for anything to invoice for this PTO
9266                              ELSE -- not in a PTO
9267                                 Interface_Single_line(p_line_rec              => l_line_rec
9268                                                      ,p_header_rec            => l_header_rec
9269                                                      ,p_x_interface_line_rec  => l_interface_line_rec
9270                                                      ,x_return_status         => x_return_status
9271                                                      ,x_result_out            => x_result_out);
9272                                 IF l_debug_level  > 0 THEN
9273                                     oe_debug_pub.add(  'INTERFACED W/REQUEST_ID : '||L_INTERFACE_LINE_REC.REQUEST_ID , 5 ) ;
9274                                 END IF;
9275                                 IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9276                                       RAISE FND_API.G_EXC_ERROR;
9277                                 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9278                                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9279                                 ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9280                                       IF l_debug_level  > 0 THEN
9281                                           oe_debug_pub.add(  'L_LINE_ID: '||L_LINE_ID||' P_LINE_ID: '||P_LINE_ID|| ' INVOICE_INTERFACE_STATUS_CODE: '||L_LINE_REC.INVOICE_INTERFACE_STATUS_CODE , 5 ) ;
9282                                       END IF;
9283                                       IF l_old_interface_status_code = 'MANUAL-PENDING' THEN
9284                                          IF l_debug_level  > 0 THEN
9285                                              oe_debug_pub.add(  'MANUAL-PENDING LINE HAS BEEN INVOICED' , 5 ) ;
9286                                              oe_debug_pub.add(  'NOW COMPLETING THE WF BLOCK ACTIVITY' , 5 ) ;
9287                                          END IF;
9288                                          WF_ENGINE.CompleteActivityInternalName(OE_GLOBALS.G_WFI_LIN, l_line_rec.line_id, 'INVOICING_WAIT_FOR_RFR', 'COMPLETE');
9289                                       END IF;
9290                                 END IF; -- check for interface_single_line result
9291                              END IF; -- check for PTO
9292                          END IF; -- Bug2181628.Process the line.
9293                         END IF;
9294                        END IF; -- line has not been interface yet
9295                        --bug# 4094835
9296                        IF  l_line_id = p_line_id THEN
9297                            delivery_line_processed := 'Y';
9298                            current_line_return_status := x_return_status;
9299                            current_line_result_out := x_result_out;
9300                            IF l_debug_level  > 0 THEN
9301                               oe_debug_pub.add(  'Current line status:'||current_line_return_status||': Current line result_out:'||current_line_result_out);
9302                            END IF;
9303                        END IF;
9304                     END LOOP;
9305                     CLOSE delivery_lines_cursor;
9306                     -- Setting the current line status correctly. This is
9307                     -- required if the current line is not processed at the end
9308                     --bug# 4094835
9309                     IF delivery_line_processed = 'Y' THEN
9310                        IF l_debug_level  > 0 THEN
9311                           oe_debug_pub.add(  'Setting the current line status correctly.'||current_line_return_status||':'||current_line_result_out);
9312                        END IF;
9313                        x_return_status := current_line_return_status;
9314                        x_result_out := current_line_result_out;
9315                     END IF;
9316                     interface_this_line := 'N';
9317               END IF; -- are delivery lines ready?
9318           ELSE -- delivery_id is null
9319                  interface_this_line := 'Y';
9320                  generate_invoice_number := 'N';
9321                  IF l_debug_level  > 0 THEN
9322                      oe_debug_pub.add(  'DELIVERY ID IS NULL' , 5 ) ;
9323                  END IF;
9324           END IF; -- delivery id
9325         END IF;  --shipping info avaialable
9326      ELSE  -- automatic invoice numbering
9327         interface_this_line := 'Y';
9328         generate_invoice_number := 'N';
9329         IF l_debug_level  > 0 THEN
9330             oe_debug_pub.add(  'AUTOMATIC INVOICE NUMBERING' , 5 ) ;
9331         END IF;
9332      END IF;
9333      IF interface_this_line = 'Y' THEN -- for automatic invoice numbering
9334         IF l_debug_level  > 0 THEN
9335             oe_debug_pub.add(  'INTERFACING LINE ID : '||L_LINE_REC.LINE_ID , 5 ) ;
9336         END IF;
9337         IF generate_invoice_number = 'Y' THEN
9338            IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9339               l_interface_line_rec.request_id := -1 * p_line_id;
9340            ELSE
9341               l_interface_line_rec.request_id := -1 * p_header_id;
9342            END IF;
9343            IF l_debug_level  > 0 THEN
9344                oe_debug_pub.add(  'SETTING REQUEST_ID' || L_INTERFACE_LINE_REC.REQUEST_ID , 5 ) ;
9345            END IF;
9346         END IF;
9347         -- Retrobilling:
9348         -- For RMAs that reference a retrobilled order line
9349         -- We might need to create multiple credit memos
9350         IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510'
9351            and Oe_Retrobill_Pvt.retrobill_enabled
9352            and Return_Line(l_line_rec)
9353            and l_line_rec.reference_line_id IS NOT NULL
9354         THEN
9355           --dbms_output.put_line('inside retrobill rma');
9356           Oe_Retrobill_Pvt.Interface_Retrobilled_RMA(p_line_rec          => l_line_rec
9357                                                     ,p_header_rec        => l_header_rec
9358                                                     ,x_Return_status     => x_return_status
9359                                                     , x_result_out       => x_result_out);
9360         ELSE
9361         Interface_Single_line(p_line_rec              => l_line_rec
9362                              ,p_header_rec            => l_header_rec
9363                              ,p_x_interface_line_rec  => l_interface_line_rec
9364                              ,x_return_status         => x_return_status
9365                              ,x_result_out            => x_result_out);
9366         END IF;
9367         IF l_debug_level  > 0 THEN
9368             oe_debug_pub.add(  'INTERFACED W/REQUEST_ID : '||L_INTERFACE_LINE_REC.REQUEST_ID || ' X_RETURN_STATUS: '|| X_RETURN_STATUS , 5 ) ;
9369         END IF;
9370         IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9371               RAISE FND_API.G_EXC_ERROR;
9372         ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9373               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9374         END IF;
9375         -- if this line is RFR and there are lines waiting for it, interface those lines
9376         IF Is_PTO(l_line_rec) THEN
9377            IF Is_RFR(l_line_rec.line_id) THEN
9378               IF l_debug_level  > 0 THEN
9379                   oe_debug_pub.add(  'RFR: THIS LINE ITSELF IS RFR' , 5 ) ;
9380               END IF;
9381               Open Pending_Lines;
9382               LOOP
9383                     Fetch Pending_Lines Into l_pending_line_id;
9384                     IF l_debug_level  > 0 THEN
9385                         oe_debug_pub.add(  'RFR: PENDING LINE ID ' || TO_CHAR ( L_PENDING_LINE_ID ) , 5 ) ;
9386                     END IF;
9387                     EXIT WHEN Pending_Lines%NOTFOUND;
9388                     OE_Line_Util.Query_Row(p_line_id=>l_pending_line_id, x_line_rec=>l_pending_line_rec);
9389                     IF Something_To_Invoice(l_pending_line_rec) THEN -- the pending line now has something to
9390                                                                      -- invoice because current line has been shipped
9391                        -- check for delivery and invoice delivery if necessarily
9392                        IF l_debug_level  > 0 THEN
9393                            oe_debug_pub.add(  'RFR: LINE IS RFR AND DELIVERY INVOICING' , 5 ) ;
9394                        END IF;
9395                        Interface_Single_line(p_line_rec            => l_pending_line_rec
9396                                          ,p_header_rec          => l_header_rec
9397                                          ,p_x_interface_line_rec  => l_interface_line_rec
9398                                          ,x_return_status       => x_return_status
9399                                          ,x_result_out          => x_result_out);
9400                        IF l_debug_level  > 0 THEN
9401                            oe_debug_pub.add(  'RFR: INTERFACE RFR-PENDING LINE , ID: ' || L_PENDING_LINE_REC.LINE_ID , 5 ) ;
9402                        END IF;
9403                        IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9404                              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9405                              RAISE FND_API.G_EXC_ERROR;
9406                        ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9407                              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9408                              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9409                        ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9410                              IF x_result_out = OE_GLOBALS.G_WFR_PRTL_COMPLETE THEN
9411                                 IF l_debug_level  > 0 THEN
9412                                     oe_debug_pub.add(  'RFR: RFR-PENDING LINE PARTIALLY INTERFACED' , 5 ) ;
9413                                 END IF;
9414                              ELSE --x_result_out = OE_GLOBALS.G_WFR_COMPLETE THEN
9415                                 IF l_debug_level  > 0 THEN
9416                                     oe_debug_pub.add(  'RFR: RFR-PENDING LINE INTERFACED SUCCESSFULLY , COMPLETING BLOCK' , 5 ) ;
9417                                 END IF;
9418                                 WF_ENGINE.CompleteActivityInternalName(OE_GLOBALS.G_WFI_LIN, l_pending_line_rec.line_id, 'INVOICING_WAIT_FOR_RFR', 'COMPLETE');
9419                           END IF;
9420                        END IF;
9421                     END IF;
9422                 END LOOP;
9423                 -- run for the pending lines just interfaced
9424                 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9425                    IF x_result_out = OE_GLOBALS.G_WFR_COMPLETE  OR x_result_out = OE_GLOBALS.G_WFR_NOT_ELIGIBLE THEN
9426                       IF generate_invoice_number  = 'Y' THEN
9427                          IF l_debug_level  > 0 THEN
9428                              oe_debug_pub.add(  'RFR:LINE ID '||TO_CHAR ( L_LINE_REC.LINE_ID ) ||' INTERFACED SUCCESSFULLY' , 5 ) ;
9429                              oe_debug_pub.add(  'RFR: CALLING UPDATE_NUMBERS' , 5 ) ;
9430                          END IF;
9431                          IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9432                             Update_Numbers(p_line_id, x_return_status);
9433                          ELSE
9434                             Update_Numbers(p_header_id, x_return_status);
9435                          END IF;
9436                          IF l_debug_level  > 0 THEN
9437                              oe_debug_pub.add(  'RFR: RETURN STATUS : '||X_RETURN_STATUS , 5 ) ;
9438                          END IF;
9439                          IF x_return_status = FND_API.G_RET_STS_ERROR THEN
9440                                x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9441                                RAISE FND_API.G_EXC_ERROR;
9442                          ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9443                                x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9444                                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9445                          ELSE
9446                                x_result_out := OE_GLOBALS.G_WFR_COMPLETE;
9447                                IF l_debug_level  > 0 THEN
9448                                    oe_debug_pub.add(  'RFR: UPDATE NUMBER DONE FOR RFR-PENDING LINE ( CURRENT LINE IS RFR ) ' , 5 ) ;
9449                                END IF;
9450                          END IF;
9451                       ELSE
9452                          IF l_debug_level  > 0 THEN
9453                              oe_debug_pub.add(  'RFR:LINE ID '||TO_CHAR ( L_LINE_REC.LINE_ID ) ||' INTERFACED SUCCESSFULLY' , 5 ) ;
9454                              oe_debug_pub.add(  'RFR:W/AUTOMATIC NUMBERING' , 5 ) ;
9455                          END IF;
9456                       END IF;
9457                    END IF;
9458                 END IF;
9459                 close Pending_Lines;
9460          END IF; -- itself is a RFR line
9461       END IF; -- PTO line
9462     END IF; -- if interface_this_line is Y
9463     IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
9464        IF x_result_out = OE_GLOBALS.G_WFR_COMPLETE  OR x_result_out = OE_GLOBALS.G_WFR_NOT_ELIGIBLE THEN
9465           IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9466              IF generate_invoice_number  = 'Y' THEN
9467                 IF l_debug_level  > 0 THEN
9468                     oe_debug_pub.add(  'LINE ID '||TO_CHAR ( L_LINE_REC.LINE_ID ) ||' INTERFACED SUCCESSFULLY' , 2 ) ;
9469                     oe_debug_pub.add(  'CALLING UPDATE_NUMBERS' ) ;
9470                 END IF;
9471                 IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9472                    Update_Numbers(p_line_id, x_return_status);
9473                 ELSE
9474                    Update_Numbers(p_header_id, x_return_status);
9475                 END IF;
9476                 IF l_debug_level  > 0 THEN
9477                     oe_debug_pub.add(  'RETURN STATUS : '||X_RETURN_STATUS , 5 ) ;
9478                 END IF;
9479                 IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9480                       x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9481                       RAISE FND_API.G_EXC_ERROR;
9482                 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9483                       x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9484                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9485                 ELSE
9486                       x_result_out := OE_GLOBALS.G_WFR_COMPLETE;
9487                       IF l_debug_level  > 0 THEN
9488                           oe_debug_pub.add(  'EXITING INTERFACE_LINE' , 5 ) ;
9489                       END IF;
9490                       RETURN;
9491              END IF;
9492            ELSE
9493              IF l_debug_level  > 0 THEN
9494                  oe_debug_pub.add(  'LINE ID '||TO_CHAR ( L_LINE_REC.LINE_ID ) ||' INTERFACED SUCCESSFULLY' , 5 ) ;
9495                  oe_debug_pub.add(  'W/AUTOMATIC NUMBERING' , 2 ) ;
9496              END IF;
9497              RETURN;
9498            END IF;
9499          END IF;
9500       END IF;
9501     END IF;
9502 EXCEPTION
9503     WHEN FND_API.G_EXC_ERROR THEN
9504          IF l_debug_level  > 0 THEN
9505              oe_debug_pub.add(  'EXPECTED ERROR. EXIT LINE INVOICING : '||SQLERRM , 1 ) ;
9506          END IF;
9507          IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9508            ROLLBACK TO INVOICE_INTERFACE;
9509          END IF;
9510 
9511 	 IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
9512   	    IF x_result_out = OE_GLOBALS.G_WFR_ON_HOLD Then
9513 	       l_flow_status_code := 'INVOICE_HOLD';
9514 	    ELSIF x_result_out = OE_GLOBALS.G_WFR_INCOMPLETE THEN
9515 	       l_flow_status_code := 'INVOICE_INCOMPLETE';
9516 	    END IF;
9517 	    Update_line_flow_status(l_line_rec.line_id,l_flow_status_code);
9518          END IF;
9519 
9520          OE_MSG_PUB.Count_And_Get
9521                 (   p_count     =>      x_msg_count
9522                 ,   p_data      =>      x_msg_data
9523                 );
9524          x_return_status := FND_API.G_RET_STS_ERROR;
9525     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9526          IF l_debug_level  > 0 THEN
9527              oe_debug_pub.add(  'UNEXPECTED ERROR. EXITING FROM LINE INVOICING : '||SQLERRM , 1 ) ;
9528          END IF;
9529          IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9530            ROLLBACK TO INVOICE_INTERFACE;
9531          END IF;
9532          OE_MSG_PUB.Count_And_Get
9533                 (   p_count     =>      x_msg_count
9534                 ,   p_data      =>      x_msg_data
9535                 );
9536          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9537     WHEN OTHERS THEN
9538          IF l_debug_level  > 0 THEN
9539              oe_debug_pub.add(  'EXCEPTION , OTHERS. EXITING FROM LINE INVOICING : '||SQLERRM , 1 ) ;
9540          END IF;
9541          IF (delivery_lines_cursor%ISOPEN) THEN
9542             CLOSE delivery_lines_cursor;
9543          END IF;
9544          IF (Pending_Lines%ISOPEN) THEN
9545             CLOSE Pending_Lines;
9546          END IF;
9547          IF p_itemtype = OE_GLOBALS.G_WFI_LIN THEN
9548            ROLLBACK TO INVOICE_INTERFACE;
9549          END IF;
9550          IF      FND_MSG_PUB.Check_Msg_Level
9551                 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9552          THEN
9553                 OE_MSG_PUB.Add_Exc_Msg
9554                         (   G_PKG_NAME
9555                         ,   'Interface_Line'
9556                         );
9557          END IF;
9558          OE_MSG_PUB.Count_And_Get
9559                 (   p_count     =>      x_msg_count
9560                 ,   p_data      =>      x_msg_data
9561          );
9562          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9563 END Interface_Line;
9564 
9565 PROCEDURE Interface_Header
9566 (   p_header_id     IN   NUMBER
9567 ,   p_itemtype      IN   VARCHAR2
9568 ,   x_result_out    OUT  NOCOPY VARCHAR2
9569 ,   x_return_status OUT  NOCOPY VARCHAR2
9570 ) IS
9571 x_msg_count             NUMBER;
9572 x_msg_data              VARCHAR2(240);
9573 l_return_status         VARCHAR2(30);
9574 l_result_out            VARCHAR2(30);
9575 l_flow_status_code      VARCHAR2(30);
9576 CURSOR order_line_cursor IS
9577      SELECT ol.line_id
9578      FROM   oe_order_lines ol
9579      WHERE  ol.header_id = p_header_id
9580      AND    ol.open_flag = 'Y';
9581 l_line_id   NUMBER;
9582 --
9583 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
9584 --
9585 BEGIN
9586     IF l_debug_level  > 0 THEN
9587         oe_debug_pub.add(  'ENTER INTERFACE_HEADER ( ) PROCEDURE' , 5 ) ;
9588     END IF;
9589     SAVEPOINT HEADER_INVOICE_INTERFACE;
9590     -- Initialize API return status to success
9591     x_return_status := FND_API.G_RET_STS_SUCCESS;
9592 
9593  -- Header_Invoicing_Validation
9594     OPEN order_line_cursor;
9595     LOOP
9596        FETCH order_line_cursor INTO l_line_id;
9597        EXIT WHEN order_line_cursor%NOTFOUND;
9598        IF l_debug_level  > 0 THEN
9599            oe_debug_pub.add(  'PROCESSING LINE_ID: '||L_LINE_ID , 5 ) ;
9600        END IF;
9601        Interface_Line(l_line_id, p_itemtype, l_result_out, l_return_status);
9602        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9603           IF l_result_out =  OE_GLOBALS.G_WFR_ON_HOLD THEN
9604              x_result_out := OE_GLOBALS.G_WFR_ON_HOLD;
9605           ELSIF l_result_out = OE_GLOBALS.G_WFR_INCOMPLETE THEN
9606              x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9607           END IF;
9608           RAISE FND_API.G_EXC_ERROR;
9609        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9610           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9611        ELSE
9612           IF l_debug_level  > 0 THEN
9613               oe_debug_pub.add(  'CONTINUE WITH NEXT LINE IF THIS IS NOT LAST ONE' , 5 ) ;
9614           END IF;
9615        END IF;
9616     END LOOP;
9617     CLOSE order_line_cursor;
9618     IF l_debug_level  > 0 THEN
9619         oe_debug_pub.add(  'CALL UPDATE_NUMBERS FOR HEADER LEVEL INVOICING' , 5 ) ;
9620     END IF;
9621     Update_Numbers(p_header_id, x_return_status);
9622     IF l_debug_level  > 0 THEN
9623         oe_debug_pub.add(  'RETURN STATUS : '||X_RETURN_STATUS , 5 ) ;
9624     END IF;
9625     IF    x_return_status = FND_API.G_RET_STS_ERROR THEN
9626           x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9627           RAISE FND_API.G_EXC_ERROR;
9628     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9629           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9630     ELSE
9631           x_return_status := FND_API.G_RET_STS_SUCCESS;
9632           x_result_out := OE_GLOBALS.G_WFR_COMPLETE;
9633           IF l_debug_level  > 0 THEN
9634               oe_debug_pub.add(  'EXIT INTERFACE_LINE ( ) PROCEDURE' , 5 ) ;
9635           END IF;
9636     END IF;
9637 
9638     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
9639        l_flow_status_code := 'INVOICED';
9640        Update_header_flow_status(p_header_id,l_flow_status_code);
9641     END IF;
9642 
9643     IF l_debug_level  > 0 THEN
9644         oe_debug_pub.add(  'EXITING INTERFACE_HEADER ( ) PROCEDURE' , 5 ) ;
9645     END IF;
9646 
9647 EXCEPTION
9648     WHEN FND_API.G_EXC_ERROR THEN
9649          IF l_debug_level  > 0 THEN
9650              oe_debug_pub.add(  'EXPECTED ERROR. EXIT FROM HEADER INVOICING' , 5 ) ;
9651          END IF;
9652          IF (order_line_cursor%ISOPEN) THEN
9653             CLOSE order_line_cursor;
9654          END IF;
9655          ROLLBACK TO HEADER_INVOICE_INTERFACE;
9656 
9657 	 IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
9658 	    IF x_result_out = OE_GLOBALS.G_WFR_ON_HOLD Then
9659 	       l_flow_status_code := 'INVOICE_HOLD';
9660 	    ELSIF x_result_out = OE_GLOBALS.G_WFR_INCOMPLETE THEN
9661 	       l_flow_status_code := 'INVOICE_INCOMPLETE';
9662 	    END IF;
9663 	    Update_header_flow_status(p_header_id,l_flow_status_code);
9664          END IF;
9665 
9666          OE_MSG_PUB.Count_And_Get
9667                 (   p_count     =>      x_msg_count
9668                 ,   p_data      =>      x_msg_data
9669                 );
9670          x_return_status := FND_API.G_RET_STS_ERROR;
9671     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9672      	 IF l_debug_level  > 0 THEN
9673      	     oe_debug_pub.add(  'UNEXPECTED ERROR. EXITING FROM HEADER INVOICING' , 5 ) ;
9674      	 END IF;
9675          IF (order_line_cursor%ISOPEN) THEN
9676                CLOSE order_line_cursor;
9677          END IF;
9678          ROLLBACK TO HEADER_INVOICE_INTERFACE;
9679          OE_MSG_PUB.Count_And_Get
9680                 (   p_count     =>      x_msg_count
9681                 ,   p_data      =>      x_msg_data
9682                 );
9683          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9684          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9685     WHEN OTHERS THEN
9686      	 IF l_debug_level  > 0 THEN
9687      	     oe_debug_pub.add(  'EXCEPTION OTHERS. EXIT FROM HEADER INVOICING' , 5 ) ;
9688      	 END IF;
9689          IF (order_line_cursor%ISOPEN) THEN
9690             CLOSE order_line_cursor;
9691          END IF;
9692          ROLLBACK TO HEADER_INVOICE_INTERFACE;
9693          IF OE_MSG_PUB.Check_Msg_Level
9694                   (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9695          THEN
9696              OE_MSG_PUB.Add_Exc_Msg
9697                     ( G_PKG_NAME
9698                     , 'Interface_Header'
9699                     );
9700          END IF;
9701          OE_MSG_PUB.Count_And_Get
9702                 (   p_count     =>      x_msg_count
9703                 ,   p_data      =>      x_msg_data
9704                 );
9705          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9706          x_result_out := OE_GLOBALS.G_WFR_INCOMPLETE;
9707 
9708 END Interface_Header;
9709 Procedure Any_Line_ARInterfaced( p_application_id               IN NUMBER,
9710                                  p_entity_short_name            in VARCHAR2,
9711                                  p_validation_entity_short_name in VARCHAR2,
9712                                  p_validation_tmplt_short_name  in VARCHAR2,
9713                                  p_record_set_tmplt_short_name  in VARCHAR2,
9714                                  p_scope                        in VARCHAR2,
9715                                  p_result                       OUT NOCOPY NUMBER ) IS
9716 
9717 l_header_id NUMBER ;
9718 any_line_interfaced NUMBER := 0;
9719 -- 3740077
9720 line_payment_not_exists NUMBER :=0;
9721 -- 3740077
9722 
9723 BEGIN
9724 
9725    IF    p_validation_entity_short_name = 'HEADER_SCREDIT' THEN
9726          l_header_id := oe_header_scredit_security.g_record.header_id;
9727    ELSIF p_validation_entity_short_name = 'HEADER_ADJ' THEN
9728       l_header_id := oe_header_adj_security.g_record.header_id;
9729    ELSIF p_validation_entity_short_name = 'HEADER_PAYMENT' THEN
9730       l_header_id := oe_header_payment_security.g_record.header_id;
9731   END IF;
9732 
9733    IF l_header_id IS NULL OR
9734       l_header_id = FND_API.G_MISS_NUM
9735    THEN
9736       OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
9737       p_result := 0;
9738    END IF;
9739 
9740 -- 3740077 Added the If
9741 IF  p_validation_entity_short_name = 'HEADER_PAYMENT' THEN
9742   IF (nvl(oe_header_payment_security.g_record.payment_collection_event,'PREPAY')='INVOICE' and
9743      oe_header_payment_security.g_record.line_id is NULL) THEN
9744 
9745     BEGIN
9746      SELECT 1
9747      INTO  line_payment_not_exists
9748      FROM  OE_ORDER_LINES L
9749      WHERE HEADER_ID = l_header_id
9750      AND   invoice_interface_status_code = 'YES'
9751      AND   NOT EXISTS
9752      (select 'x' from oe_payments
9753        WHERE header_id = l_header_id
9754        AND   line_id = L.line_id
9755        AND   payment_type_code <> 'COMMITMENT'
9756      )
9757     AND ROWNUM=1;
9758    EXCEPTION
9759       WHEN NO_DATA_FOUND THEN
9760         p_result := 0;
9761    END;
9762 
9763    IF line_payment_not_exists = 1 THEN
9764       p_result := 1;
9765       oe_debug_pub.add('skubendr going in');
9766    ELSE
9767       p_result := 0;
9768    END IF;
9769  ELSE
9770    -- this is a prepayment.
9771    p_result := 0;
9772  END IF;
9773 ELSE
9774    BEGIN
9775      SELECT 1
9776      INTO  any_line_interfaced
9777      FROM  OE_ORDER_LINES
9778      WHERE HEADER_ID = l_header_id
9779      AND   invoice_interface_status_code = 'YES'
9780      AND   ROWNUM = 1;
9781    EXCEPTION
9782       WHEN NO_DATA_FOUND THEN
9783            any_line_interfaced := 0;
9784    END;
9785    IF any_line_interfaced = 1 THEN
9786       p_result := 1;
9787    ELSE
9788       p_result := 0;
9789    END IF;
9790 END IF;
9791 END Any_Line_ARInterfaced;
9792 
9793 Procedure All_Lines_ARInterfaced( p_application_id               IN NUMBER,
9794                                   p_entity_short_name            in VARCHAR2,
9795                                   p_validation_entity_short_name in VARCHAR2,
9796                                   p_validation_tmplt_short_name  in VARCHAR2,
9797                                   p_record_set_tmplt_short_name  in VARCHAR2,
9798                                   p_scope                        in VARCHAR2,
9799                                   p_result                       OUT NOCOPY NUMBER ) IS
9800 
9801 l_header_id             NUMBER ;
9802 any_line_not_interfaced NUMBER := 0;
9803 l_lines_exist           NUMBER := 0;
9804 BEGIN
9805    IF    p_validation_entity_short_name = 'HEADER_SCREDIT' THEN
9806          l_header_id := oe_header_scredit_security.g_record.header_id;
9807    ELSIF p_validation_entity_short_name = 'HEADER_ADJ' THEN
9808          l_header_id := oe_header_adj_security.g_record.header_id;
9809    -- 3740077
9810    ELSIF p_validation_entity_short_name = 'HEADER_PAYMENT' THEN
9811          l_header_id := oe_header_payment_security.g_record.header_id;
9812    ELSIF p_validation_entity_short_name = 'LINE_PAYMENT' THEN
9813          l_header_id := oe_line_payment_security.g_record.header_id;
9814    -- 3740077
9815    END IF;
9816 
9817    IF l_header_id IS NULL OR
9818       l_header_id = FND_API.G_MISS_NUM
9819    THEN
9820       OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
9821       p_result := 0;
9822    END IF;
9823 
9824    IF l_header_id is not null and
9825       l_header_id <> FND_API.G_MISS_NUM THEN
9826 
9827       BEGIN
9828          select 1 into l_lines_exist
9829          from oe_order_lines
9830          where header_id = l_header_id
9831          and rownum = 1;
9832 
9833       EXCEPTION
9834          WHEN NO_DATA_FOUND THEN
9835            l_lines_exist := 0;
9836            p_result := 0;
9837            any_line_not_interfaced := 1;
9838       END;
9839 
9840    END IF;
9841 
9842    IF l_lines_exist = 1 THEN
9843 
9844       BEGIN
9845         SELECT 1
9846         INTO   any_line_not_interfaced
9847         FROM   OE_ORDER_LINES
9848         WHERE  HEADER_ID = l_header_id
9849         AND    NVL(invoice_interface_status_code, 'NO') in ('NO', 'MANUAL-PENDING', 'RFR-PENDING', 'ACCEPTANCE-PENDING')
9850         AND
9851 	( --Bug 5230279
9852 		open_flag = 'Y'
9853                 OR     (nvl(cancelled_flag, 'N') = 'Y' AND open_flag = 'N') -- bug 5181988
9854 	) -- bug 5230279
9855         AND    ROWNUM = 1;
9856       EXCEPTION
9857         WHEN NO_DATA_FOUND THEN
9858            any_line_not_interfaced := 0;
9859       END;
9860 
9861    END IF; -- if l_lines_exist = 1
9862 
9863    IF any_line_not_interfaced = 1 THEN
9864       p_result := 0;
9865    ELSE
9866       p_result := 1;
9867    END IF;
9868 
9869 END All_Lines_ARInterfaced;
9870 
9871 
9872 Procedure This_Line_ARInterfaced( p_application_id               IN NUMBER,
9873                                  p_entity_short_name            in VARCHAR2,
9874                                  p_validation_entity_short_name in VARCHAR2,
9875                                  p_validation_tmplt_short_name  in VARCHAR2,
9876                                  p_record_set_tmplt_short_name  in VARCHAR2,
9877                                  p_scope                        in VARCHAR2,
9878                                  p_result                       OUT NOCOPY NUMBER ) IS
9879 
9880 l_line_id NUMBER ;
9881 this_line_interfaced NUMBER := 0;
9882 BEGIN
9883 
9884    oe_debug_pub.add(' Entering This_Line_ARInterfaced');
9885    l_line_id := OE_LINE_SECURITY.g_record.line_id;
9886 
9887    IF p_validation_entity_short_name = 'LINE_PAYMENT' THEN
9888       l_line_id := oe_line_payment_security.g_record.line_id;
9889    END IF;
9890 
9891      oe_debug_pub.add(' Line Id :'||l_line_id);
9892 
9893    IF l_line_id IS NULL OR
9894       l_line_id = FND_API.G_MISS_NUM
9895    THEN
9896       OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
9897       p_result := 0;
9898    END IF;
9899 
9900    BEGIN
9901      SELECT 1
9902      INTO  this_line_interfaced
9903      FROM  OE_ORDER_LINES
9904      WHERE LINE_ID = l_line_id
9905      AND   invoice_interface_status_code = 'YES';
9906 
9907    EXCEPTION
9908       WHEN NO_DATA_FOUND THEN
9909            this_line_interfaced := 0;
9910    END;
9911    IF this_line_interfaced = 1 THEN
9912       p_result := 1;
9913    ELSE
9914       p_result := 0;
9915    END IF;
9916 END This_Line_ARInterfaced;
9917 
9918 
9919 -- BUG# 7431368 : Performance fix : Start
9920 Procedure set_header_id ( p_header_id IN NUMBER)IS
9921 begin
9922  G_INVOICE_HEADER_ID := p_header_id;
9923 End;
9924 
9925 Procedure set_line_id ( p_line_id IN NUMBER) IS
9926 begin
9927  G_INVOICE_LINE_ID := P_line_id;
9928 END;
9929 
9930 Function  get_header_id return NUMBER IS
9931 begin
9932 	return G_INVOICE_HEADER_ID;
9933 END;
9934 
9935 Function  get_line_id return NUMBER IS
9936 begin
9937 	 return G_INVOICE_LINE_ID;
9938 END;
9939 -- BUG# 7431368 : Performance fix : End
9940 
9941 
9942 END OE_Invoice_PUB;