DBA Data[Home] [Help]

PACKAGE BODY: APPS.JAI_PO_PROC_PKG

Source


1 PACKAGE BODY jai_po_proc_pkg AS
2 /* $Header: jai_po_proc.plb 120.1.12020000.2 2013/03/19 01:13:19 vkaranam noship $ */
3 G_PKG_NAME              CONSTANT VARCHAR2(30) := 'jai_po_proc_pkg';
4 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER       := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5 G_LEVEL_UNEXPECTED      CONSTANT NUMBER       := FND_LOG.LEVEL_UNEXPECTED;
6 G_LEVEL_ERROR           CONSTANT NUMBER       := FND_LOG.LEVEL_ERROR;
7 G_LEVEL_EXCEPTION       CONSTANT NUMBER       := FND_LOG.LEVEL_EXCEPTION;
8 G_LEVEL_EVENT           CONSTANT NUMBER       := FND_LOG.LEVEL_EVENT;
9 G_LEVEL_PROCEDURE       CONSTANT NUMBER       := FND_LOG.LEVEL_PROCEDURE;
10 G_LEVEL_STATEMENT       CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
11 G_MODULE_NAME           CONSTANT VARCHAR2(30) := 'JAI.PLSQL.jai_po_proc_pkg.';
12 
13 /*----------------------------------------------------------------------------*
14  |   PRIVATE FUNCTIONS/PROCEDURES                                             |
15  *----------------------------------------------------------------------------*/
16  FUNCTION get_currency_conv_rate
17  (
18    v_inv_org_id IN NUMBER
19   ,v_currency   IN VARCHAR2
20   ,v_rate_date  IN DATE
21   ,v_rate_type  IN VARCHAR2
22   ,v_rate       IN NUMBER
23  ) RETURN NUMBER;
24  FUNCTION get_func_currency(v_inv_org_id IN NUMBER) RETURN VARCHAR2;
25  FUNCTION is_split_line
26   (
27     pn_orig_ship_id IN NUMBER
28    ,pn_po_hdr_id    IN NUMBER
29    ,pn_po_line_id   IN NUMBER
30   ) RETURN BOOLEAN;
31 
32   PROCEDURE process_split_line
33   (
34     pn_orig_ship_id     IN NUMBER
35    ,pn_line_loc_id      IN NUMBER
36    ,pn_quantity         IN NUMBER
37    ,pn_price            IN NUMBER
38    ,pv_type_lookup_code IN VARCHAR2
39   );
40 /*  PROCEDURE process_po_req_line
41   (
42     pn_requisition_line_id NUMBER
43    ,pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE DEFAULT NULL
44    ,pv_action              VARCHAR2
45   ); Move to pls file*/
46   procedure  process_req_line_inserting
47   (
48      --pn_requisition_line_id NUMBER
49      pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE
50   );
51   procedure  process_req_line_updating
52   (
53      --Pn_requisition_line_id NUMBER
54      pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE
55   );
56   procedure  po_req_tax_default
57   (
58      --pn_requisition_line_id IN NUMBER,
59      pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE,
60      pn_tax_category_id     OUT NOCOPY NUMBER,
61      pn_line_amount         OUT NOCOPY NUMBER
62   );
63   FUNCTION get_line_loc_id
64   (
65     p_from_hdr_id NUMBER
66    ,p_line_num    NUMBER
67    ,p_item_id     NUMBER
68    ,p_ship_num    NUMBER
69   ) RETURN NUMBER;
70   /*Added by Wenqiong for trigger replacement*
71   */
72   FUNCTION get_line_id
73   (
74     p_from_hdr_id NUMBER
75    ,p_line_num    NUMBER
76   ) RETURN NUMBER;
77 
78   PROCEDURE locate_source_line
79   (
80     p_header_id IN NUMBER,
81     p_line_num  IN NUMBER,
82     p_line_quantity IN NUMBER,
83     p_po_line_id       OUT NOCOPY NUMBER,
84     p_line_location_id OUT NOCOPY NUMBER,
85     p_line_id NUMBER DEFAULT NULL
86   );
87 /*-----------------------------------------------------------------------*
88  |   PUBLIC  FUNCTIONS/PROCEDURES                                        |
89  *-----------------------------------------------------------------------*/
90 
91 /*
92   REM +======================================================================+
93   REM Created By         :  Wenqiong Zhou
94   REM Creation Date      :  Jun 1, 2012
95   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
96   REM SubProgram Name    :  process_po_taxes
97   REM Type               :  processing API
98   REM Purpose            :  Processing PO's tax defaultatin.
99   REM                       It's just consolidation from jai_po_tax_pkg.Ja_In_Po_Case1
100   REM                        and jai_po_tax_pkg.Ja_In_Po_Case2.
101   REM TDD Reference      :
102   REM
103   REM Assumptions        :
104   REM
105   REM Parameter            IN/OUT         Type     Required     Description and Purpose
106   REM -------------------- ------  ------------    ----------   ------------------------------------
107   REM v_type_lookup_code    IN           VARCHAR2      Y         Indiate which type document is.
108   REM v_quot_class_code     IN           VARCHAR2      Y         quotation class
109   REM  CALLED BY
110   REM  jai_po_proc_pkg.process_po_tax_wrapper
111   REM +================================================================================================+
112 */
113   PROCEDURE process_po_taxes
114   (
115     v_type_lookup_code IN VARCHAR2
116    ,v_quot_class_code  IN VARCHAR2
117    ,v_vendor_id        IN NUMBER
118    ,v_vendor_site_id   IN NUMBER
119    ,v_currency         IN VARCHAR2
120    ,v_org_id           IN NUMBER
121    ,v_item_id          IN NUMBER
122    ,v_uom_code         IN VARCHAR2
123    ,v_line_loc_id      IN NUMBER
124    ,v_po_hdr_id        IN NUMBER
125    ,v_po_line_id       IN NUMBER
126    ,v_frm_po_line_id   IN NUMBER
127    ,v_frm_line_loc_id  IN NUMBER
128    ,v_price            IN NUMBER
129    ,v_qty              IN NUMBER
130    ,v_cre_dt           IN DATE
131    ,v_cre_by           IN NUMBER
132    ,v_last_upd_dt      IN DATE
133    ,v_last_upd_by      IN NUMBER
134    ,v_last_upd_login   IN NUMBER
135    ,flag               IN VARCHAR2
136    ,pn_conv_rate       IN NUMBER  DEFAULT 1
137    ,pn_assessable_value IN NUMBER
138    ,pn_vat_assess_value IN NUMBER
139    ,p_tax_category_id     IN NUMBER DEFAULT NULL
140    ,pv_retroprice_changed IN VARCHAR2 DEFAULT 'N'
141   ) IS
142     CURSOR fetch_focus_id_cur IS
143       SELECT line_focus_id
144       FROM jai_po_line_locations
145       WHERE po_line_id = v_po_line_id AND
146             nvl(line_location_id,0) = nvl(v_line_loc_id,0);
147 
148 
149     CURSOR fetch_taxes_cur IS
150       SELECT tax_line_no, precedence_1, precedence_2, precedence_3, precedence_4,
151              precedence_5, precedence_6, precedence_7, precedence_8,
152              precedence_9, precedence_10, tax_id, currency, tax_rate, qty_rate,
153              tax_amount, tax_type, modvat_flag, vendor_id, tax_category_id
154       FROM jai_po_taxes
155       WHERE po_line_id = v_frm_po_line_id AND
156             nvl(line_location_id,0) = nvl(v_line_loc_id,0)
157       ORDER BY tax_line_no;
158 
159     CURSOR fetch_mod_cr_cur(taxid IN NUMBER) IS
160       SELECT tax_type, mod_cr_percentage, vendor_id, adhoc_flag
161       FROM jai_cmn_taxes_all
162       WHERE tax_id = taxid;
163 
164     CURSOR c_line_tax_category_id(p_po_line_id IN NUMBER, p_line_location_id IN NUMBER) IS
165       SELECT tax_category_id
166       FROM jai_po_line_locations
167       WHERE po_line_id = p_po_line_id AND
168             nvl(line_location_id,0) = nvl(p_line_location_id,0);
169 
170     CURSOR Fetch_Sum_Cur IS
171     SELECT SUM( NVL( Tax_Amount, 0 ) )
172     FROM   JAI_PO_TAXES
173     WHERE  Po_Line_Id = v_po_line_id
174     AND nvl(Line_Location_Id,0) = nvl(v_line_loc_id,0)
175     AND   Tax_Type <> jai_constants.tax_type_tds;
176 
177     CURSOR c_tax_modified_flag(c_po_line_id NUMBER, c_line_loc_id NUMBER) IS
178     SELECT tax_modified_flag
179     FROM JAI_PO_LINE_LOCATIONS
180     WHERE po_line_id = c_po_line_id
181     AND nvl(line_location_id,0)= nvl(c_line_loc_id,0);
182     l_api_name                    CONSTANT VARCHAR2(30) := 'process_po_taxes';
183     v_seq_val           NUMBER;
184     lv_currency         VARCHAR2(30);
185     v_line_amt          NUMBER;
186     v_tax_amt           NUMBER;
187     v_tax_line_no       NUMBER;
188     v_prec1             NUMBER;
189     v_prec2             NUMBER;
190     v_prec3             NUMBER;
191     v_prec4             NUMBER;
192     v_prec5             NUMBER;
193     v_prec6  NUMBER;
194     v_prec7  NUMBER;
195     v_prec8  NUMBER;
196     v_prec9  NUMBER;
197     v_prec10 NUMBER;
198 
199     v_taxid                NUMBER;
200     v_tax_rate             NUMBER;
201     v_qty_rate             NUMBER;
202     v_tax_type             VARCHAR2(30);
203     v_mod_flag             VARCHAR2(1);
204     v_vendor2_id           NUMBER;
205     v_mod_cr               NUMBER;
206     v_vendor1_id           NUMBER;
207     lv_vendor_id           NUMBER;
208     ln_quot_qty            NUMBER ;
209     lv_adhoc_flag          VARCHAR2(1);
210     operation              VARCHAR2(2);
211     operation_flag         NUMBER;
212     trans_name            VARCHAR2(200);
213     v_tax_modified_flag   VARCHAR2(1);
214     v_tax_category_id   JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
215     v_tax_category_id_dflt  JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
216 
217   BEGIN
218 
219     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
220      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
221    END IF;
222     lv_currency   := v_currency;
223     lv_vendor_id  := v_vendor_id;
224 
225     v_line_amt := v_price * v_qty;
226     /*Move get modified flag cursor out IF branch*/
227     OPEN c_tax_modified_flag(v_frm_po_line_id,v_frm_line_loc_id);
228     FETCH c_tax_modified_flag INTO v_tax_modified_flag;
229     CLOSE c_tax_modified_flag;
230 
231     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
232       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_tax_modified_flag:'||v_tax_modified_flag);
233     END IF;
234 
235     IF v_type_lookup_code IN ('QUOTATION') AND (v_frm_po_line_id IS NOT NULL OR v_frm_line_loc_id IS NOT NULL)
236        AND v_tax_modified_flag = 'Y' THEN--Move the below condition here
237       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
238         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'enter if branch for QUOTATION and tax modified flag is Y');
239        END IF;
240 
241       /*IF v_tax_modified_flag = 'Y' THEN Move to outter IF*/
242 
243         OPEN fetch_focus_id_cur;
244         FETCH fetch_focus_id_cur
245           INTO v_seq_val;
246         CLOSE fetch_focus_id_cur;
247 
248 
249         OPEN fetch_taxes_cur;
250         LOOP
251           FETCH fetch_taxes_cur
252             INTO v_tax_line_no, v_prec1, v_prec2, v_prec3, v_prec4, v_prec5,
253           v_prec6, v_prec7, v_prec8, v_prec9, v_prec10, v_taxid, lv_currency, v_tax_rate, v_qty_rate, v_tax_amt, v_tax_type, v_mod_flag, v_vendor2_id, v_tax_category_id; -- cbabu for EnhancementBug# 2427465
254 
255           EXIT WHEN fetch_taxes_cur%NOTFOUND;
256 
257           OPEN fetch_mod_cr_cur(v_taxid);
258           FETCH fetch_mod_cr_cur
259             INTO v_tax_type, v_mod_cr, v_vendor1_id, lv_adhoc_flag;
260           CLOSE fetch_mod_cr_cur;
261 
262           IF v_mod_flag IS NULL THEN
263             v_mod_flag := v_mod_cr;
264           END IF;
265 
266           IF upper(v_tax_type) IN
267              ('CUSTOMS'
268              ,'CVD'
269              ,jai_constants.tax_type_add_cvd
270              ,jai_constants.tax_type_customs_edu_cess
271              ,jai_constants.tax_type_sh_customs_edu_cess
272              ,jai_constants.tax_type_cvd_edu_cess
273              ,jai_constants.tax_type_sh_cvd_edu_cess)
274            THEN
275             lv_vendor_id := NULL;
276           ELSIF v_tax_type = 'TDS' THEN
277             lv_vendor_id := v_vendor1_id;
278           ELSE
279             lv_vendor_id := v_vendor_id;
280           END IF;
281 
282           IF nvl(v_qty,0) <> 0 THEN
283             ln_quot_qty := v_qty;
284           ELSE
285             ln_quot_qty := 1;
286           END IF;
287 
288 
289 
290           IF nvl(lv_adhoc_flag,'N') = 'Y' THEN
291             v_tax_amt := v_tax_amt * v_qty / ln_quot_qty;
292           ELSE
293             v_tax_amt := NULL;
294           END IF;
295 
296           jai_po_proc_pkg.insert_po_taxes(
297                            v_type_lookup_code
298                           ,v_quot_class_code
299                           ,v_seq_val
300                           ,v_line_loc_id
301                           ,v_tax_line_no
302                           ,v_po_line_id
303                           ,v_po_hdr_id
304                           ,v_prec1
305                           ,v_prec2
306                           ,v_prec3
307                           ,v_prec4
308                           ,v_prec5
309                           ,v_prec6
310                           ,v_prec7
311                           ,v_prec8
312                           ,v_prec9
313                           ,v_prec10
314                           ,v_taxid
315                           ,v_price
316                           ,v_qty
317                           ,lv_currency
318                           ,v_tax_rate
319                           ,v_qty_rate
320                           ,v_uom_code
321                           ,v_tax_amt
322                           ,v_tax_type
323                           ,v_mod_flag
324                           ,lv_vendor_id
325                           ,NULL
326                           ,v_cre_dt
327                           ,v_cre_by
328                           ,v_last_upd_dt
329                           ,v_last_upd_by
330                           ,v_last_upd_login
331                           ,v_tax_category_id
332                            );
333 
334 
335           v_tax_category_id_dflt := nvl(v_tax_category_id_dflt
336                                        ,v_tax_category_id);
337 
338         END LOOP;
339         CLOSE fetch_taxes_cur;
340 
341 
342         IF v_tax_category_id_dflt IS NULL THEN
343 
344           OPEN c_line_tax_category_id(v_frm_po_line_id
345                                      ,v_frm_line_loc_id);
346           FETCH c_line_tax_category_id
347             INTO v_tax_category_id_dflt;
348           CLOSE c_line_tax_category_id;
349 
350         END IF;
351 
352         UPDATE jai_po_line_locations
353         SET tax_category_id = v_tax_category_id_dflt
354         WHERE line_focus_id = v_seq_val;
355 
356       /*END IF;*/
357     ELSE--PO is not quotation from RFQ
358       /*Get tax category id from vendor default*/
359       IF p_tax_category_id is null then
360         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
361           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'enter if branch for not QUOTATION and p_tax_category is null');
362           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'parameters for tax default:v_org_id,'||to_char(v_org_id)||'lv_vendor_id,'||to_char(lv_vendor_id)||'vendor_site_id,'||to_char(v_vendor_site_id)
363           ||'item_id,'||to_char(v_item_id)||'po_hdr_id,'||to_char(v_po_hdr_id)||'line_loc_id,'||to_char(v_line_loc_id)||'v_po_line_id,'||to_char(v_po_line_id));
364         END IF;
365 
366         IF nvl(v_line_loc_id,0) <> 0 THEN
367           jai_cmn_tax_defaultation_pkg.Ja_In_Vendor_Default_Taxes(
368             v_org_id,
369             lv_vendor_id,
370             v_vendor_site_id,
371             v_item_id,
372             v_po_hdr_id,
373             v_line_loc_id,
374             v_tax_category_id_dflt
375           );
376         ELSE
377           jai_cmn_tax_defaultation_pkg.Ja_In_Vendor_Default_Taxes(
378             v_org_id,
379             lv_vendor_id,
380             v_vendor_site_id,
381             v_item_id,
382             v_po_hdr_id,
383             v_po_line_id,
384             v_tax_category_id_dflt
385           );
386         END IF;
387 
388       ELSE --p_tax_category_id is not null then
389         DELETE Jai_Po_Taxes WHERE Po_Line_Id = v_po_line_id
390                    AND NVL( Line_Location_Id, 0 ) = NVL( v_line_loc_id, 0 );
391 
392         UPDATE Jai_Po_Line_Locations
393            SET Tax_Amount                     = NULL,
394                Total_Amount                   = NULL,
395                Last_Updated_By                = fnd_global.user_id,
396                Last_Update_Date               = sysdate,
397                Last_Update_Login              = fnd_global.login_id
398         WHERE Po_Line_Id                     = v_po_line_id
399         AND NVL( Line_Location_Id, 0 ) = NVL( v_line_loc_id, 0 );
400 
401         v_tax_category_id_dflt := p_tax_category_id;
402       END IF;
403       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
404         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after defaultation,tax_category:'||v_tax_category_id_dflt);
405       END IF;
406 
407       IF v_tax_category_id_dflt IS NOT NULL THEN
408 
409          IF flag = 'INSLINES' THEN
410             v_line_amt := -1;   -- Line Level Tax Defaulting.
411             operation_flag := -1;
412 
413           ELSE
414             v_line_amt := v_qty*v_price; -- Shipment/Price Break Level Tax Defaulting.
415             operation_flag := 0;
416 /* Move below code out of Else branch for bug14748379 by Wenqiong 2012/10/15
417         IF flag = 'U' THEN
418                 operation := '$U';  -- Updation
419               ELSE
420                 operation := '$I';  -- Insert
421               END IF;
422 */         END IF;
423         --Move above code out of Else branch for bug14748379 by Wenqiong 2012/10/15 begin
424            IF flag = 'U' THEN
425               operation := '$U';  -- Updation
426             ELSE
427               operation := '$I';  -- Insert
428             END IF;
429          --Move above code out of Else branch for bug14748379 by Wenqiong 2012/10/15 end
430 
431          IF v_type_lookup_code IN ( 'RFQ', 'QUOTATION' ) AND v_quot_class_code = 'BID'  THEN
432            trans_name := v_type_lookup_code || TO_CHAR( v_line_loc_id ) || operation;
433          ELSIF ( v_type_lookup_code IN ( 'RFQ', 'QUOTATION' ) AND v_quot_class_code = 'CATALOG' ) OR v_type_lookup_code = 'BLANKET' THEN
434 
435             IF nvl(v_line_loc_id,0) = 0 THEN
436               trans_name := v_type_lookup_code || operation;
437             ELSE
438               trans_name := v_type_lookup_code || TO_CHAR( v_line_loc_id ) || operation;
439             END IF;
440          ELSIF v_type_lookup_code IN ( 'STANDARD', 'PLANNED' , 'RELEASE' ) THEN
441            trans_name := 'OTHERS' || TO_CHAR( v_line_loc_id ) || operation;
442          ELSIF v_type_lookup_code = 'SCHEDULED' THEN
443            trans_name := v_type_lookup_code || TO_CHAR( v_line_loc_id ) || operation;
444          ELSIF v_type_lookup_code = 'BLANKET' THEN
445            trans_name := v_type_lookup_code || TO_CHAR( v_line_loc_id ) || operation;
446          END IF;
447 
448           IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
449             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after defaultation,trans_name:'||trans_name);
450           END IF;
451 
452 
453         jai_cmn_tax_defaultation_pkg.Ja_In_Calc_Prec_Taxes(
454                                   LTRIM( RTRIM( trans_name ) ),
455                                   v_tax_category_id_dflt,
456                                   v_po_hdr_id,
457                                   v_po_line_id,
458                                   pn_assessable_value,
459                                   v_line_amt,
460                                   v_item_id,
461                                   v_qty,
462                                   v_uom_code,
463                                   lv_vendor_id,
464                                   lv_currency,
465                                   1/pn_conv_rate,
466                                   v_cre_dt,
467                                   v_cre_by,
468                                   v_last_upd_dt,
469                                   v_last_upd_by,
470                                   v_last_upd_login,
471                                   operation_flag,
472                                   pn_vat_assess_value
473                                 , pv_retroprice_changed
474 
475                                 );
476        END IF;--if v_tax_category_id_dflt is not null
477     END IF;
478     --This Part of code is placed after END IF, to correct the tax_amount , Total_Amount
479     --Entry into Localization tables
480     IF ( v_quot_class_code = 'CATALOG' ) OR  ( v_type_lookup_code = 'BLANKET' ) THEN
481       UPDATE JAI_PO_TAXES
482       SET Tax_Amount = NULL,
483         Tax_Target_Amount = NULL,
484         Last_Updated_By = v_last_upd_by,
485         Last_Update_Date = v_last_upd_dt,
486         Last_Update_Login = v_last_upd_login
487       WHERE  Po_Line_Id       = v_po_line_id
488       AND   nvl(Line_Location_Id,0) = nvl(v_line_loc_id,0);
489 
490       UPDATE JAI_PO_LINE_LOCATIONS
491       SET Tax_Amount = NULL,
492         Total_Amount = NULL,
493         Last_Updated_By = v_last_upd_by,
494         Last_Update_Date = v_last_upd_dt,
495         Last_Update_Login = v_last_upd_login
496       WHERE  Po_Line_Id = v_po_line_id
497       AND   nvl(Line_Location_Id,0) = nvl(v_line_loc_id,0);
498    ELSE
499      OPEN fetch_sum_cur;
500       FETCH fetch_sum_cur INTO v_tax_amt;
501       CLOSE fetch_sum_cur;
502 
503       UPDATE jai_po_line_locations
504       SET tax_amount = nvl(v_tax_amt,0),
505           total_amount = nvl((v_qty * v_price),0) + nvl(v_tax_amt,0), last_updated_by = v_last_upd_by,
506           last_update_date = v_last_upd_dt, last_update_login = v_last_upd_login
507       WHERE Po_Line_Id = v_po_line_id
508        AND   nvl(Line_Location_Id,0) = nvl(v_line_loc_id,0);
509    END IF;
510 
511   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
512     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
513   END IF;
514  EXCEPTION
515    WHEN OTHERS THEN
516      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
517         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
518      END IF;
519   END process_po_taxes;
520 
521 /*
522   REM +======================================================================+
523   REM Created By         :  Wenqiong Zhou
524   REM Creation Date      :  Jun 1, 2012
525   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
526   REM SubProgram Name    :  process_po_tax_wrapper
527   REM Type               :  processing API
528   REM Purpose            :  process tax related logic when the event of Create and Update for PO Documents.
529   REM                       The main logic is insert/update data into JAI_PO_LINE_LOCATIONS table
530   REM                       and JAI_PO_TAXES table.
531   REM TDD Reference      :
532   REM
533   REM Assumptions        :
534   REM
535   REM Parameter                IN/OUT         Type                 Required     Description and Purpose
536   REM -----------------------  ------  ---------------------     ----------   ------------------------------------
537   REM prec_po_line              IN     PO_LINES_ALL%ROWTYPE            N         PO Line info.
538   REM prec_po_location          IN     PO_LINE_LOCATIONS_ALL%ROWTYPE   N         PO Shipment line.
539   REM pv_retro_price_flag       IN     Varchar2                        N         retroactive price changed flag.
540   REM  CALLED BY
541   REM  process_po, process_po_line, process_po_shipment_line
542   REM +================================================================================================+
543 */
544 PROCEDURE process_po_tax_wrapper (prec_po_header IN po_headers_all%ROWTYPE DEFAULT NULL--Added by Wenqiong for bug16288154
545                                  ,prec_po_line IN PO_LINES_ALL%ROWTYPE DEFAULT NULL
546                                  ,prec_po_location IN PO_LINE_LOCATIONS_ALL%ROWTYPE DEFAULT NULL
547                                  ,pv_retro_price_flag IN VARCHAR2 DEFAULT 'N'
548 )
549 IS
550   l_api_name                    CONSTANT VARCHAR2(30) := 'process_po_tax_wrapper';
551 
552   v_po_hdr_id      PO_LINES_ALL.po_header_id%type;
553   v_po_line_id     PO_LINES_ALL.po_line_id%type;
554   v_item_id        PO_LINES_ALL.item_id%type;
555   v_from_line_id   PO_LINES_ALL.from_line_id%type;
556   v_uom_measure    PO_LINES_ALL.Unit_Meas_Lookup_Code%type;
557   v_cre_dt         PO_LINES_ALL.Creation_Date%type;
558   v_cre_by         PO_LINES_ALL.Created_By%type;
559   v_last_upd_dt    PO_LINES_ALL.Last_Update_Date%type;
560   v_last_upd_by    PO_LINES_ALL.Last_Updated_By%type;
561   v_last_upd_login PO_LINES_ALL.Last_Update_Login%type;
562 
563   v_line_loc_id       PO_LINE_LOCATIONS_ALL.Line_Location_Id%TYPE;
564   v_from_line_loc_id  PO_LINE_LOCATIONS_ALL.From_Line_Location_Id%TYPE;
565   v_qty               PO_LINE_LOCATIONS_ALL.Quantity%TYPE;
566   v_old_qty           PO_LINE_LOCATIONS_ALL.Quantity%TYPE;
567   v_price             PO_LINE_LOCATIONS_ALL.Price_Override%TYPE;
568   v_shipment_type     PO_LINE_LOCATIONS_ALL.SHIPMENT_TYPE%TYPE;
569   v_src_ship_id       prec_po_location.Source_Shipment_Id%TYPE;
570   v_po_rel_id         prec_po_location.Po_Release_Id%TYPE;
571 
572   ln_line_id     NUMBER;
573   ln_line_loc_id NUMBER;
574   v_ship_loc_id  NUMBER;
575   v_org_id       NUMBER;
576   v_tax_modified_flag  VARCHAR2(1);
577   v_type_lookup_code  VARCHAR2(25);
578   v_uom_code         VARCHAR2(25);
579 
580   v_quot_class_code  VARCHAR2(25);
581   v_vendor_id        PO_HEADERS_ALL.vendor_id%TYPE;
582   v_vendor_site_id   PO_HEADERS_ALL.vendor_site_id%TYPE;
583   v_currency         PO_HEADERS_ALL.currency_code%TYPE;
584   v_default_curr       PO_HEADERS_ALL.currency_code%TYPE;
585   v_currency_conv_rate  PO_HEADERS_ALL.rate%TYPE;
586 
587   v_line_amt             NUMBER;
588 
589   v_conv_rate_type          PO_HEADERS_ALL.rate_type%TYPE;
590   v_conv_rate_date          PO_HEADERS_ALL.rate_date%TYPE;
591   v_conv_rate               PO_HEADERS_ALL.rate%TYPE;
592   v_gl_set_of_bks_id          gl_sets_of_books.set_of_books_id%type       ;
593   flag                   VARCHAR2(10);
594   v_tax_amount           NUMBER;
595   v_assessable_value     NUMBER;
596   v_vat_assess_value     NUMBER;
597   v_line_focus_id       NUMBER;
598   v_inv_org_id           NUMBER;
599 CURSOR Check_Rfq_Quot_Cur(v_po_hdr_id NUMBER) IS
600 SELECT Type_Lookup_Code, Quotation_Class_Code,vendor_id, vendor_site_id
601     ,Currency_Code, Ship_To_Location_Id,rate_type, rate_date, rate
602 FROM   Po_Headers_All
603 WHERE  Po_Header_Id = v_po_hdr_id;
604 
605 CURSOR c_line_tax_modified_flag(c_po_line_id NUMBER) IS
606 SELECT tax_modified_flag
607 FROM JAI_PO_LINE_LOCATIONS
608 WHERE po_line_id = c_po_line_id
609 AND line_location_id IS NULL;
610 
611 CURSOR c_line_loc_tax_flag(c_line_loc_id NUMBER) IS
612 SELECT tax_modified_flag
613 FROM JAI_PO_LINE_LOCATIONS
614 WHERE line_location_id = c_line_loc_id;
615 
616 CURSOR c_line_info (cn_po_line_id NUMBER)IS
617 SELECT item_id
618 FROM PO_LINES_ALL
619 WHERE po_line_id = cn_po_line_id;
620 
621 CURSOR c_old_qty(c_line_loc_id NUMBER) IS
622 SELECT quantity
623 FROM JAI_PO_LINE_LOCATIONS
624 WHERE line_location_id = c_line_loc_id;
625 
626 CURSOR Fetch_UOMCode_Cur IS
627   SELECT Uom_Code
628   FROM   Mtl_Units_Of_Measure
629   WHERE  Unit_Of_Measure = v_uom_measure;
630 
631 CURSOR Fetch_Org_Id_Cur IS
632 SELECT Inventory_Organization_Id
633 FROM   Hr_Locations
634 WHERE  Location_Id = v_ship_loc_id;
635 
636 CURSOR fetch_book_id_cur
637 IS
638 SELECT     set_of_books_id
639 FROM      org_organization_definitions
640 WHERE     operating_unit  = v_org_id;
641 CURSOR cur_get_curr_code IS
642 SELECT
643        sob.currency_code
644 FROM
645        financials_system_params_all FSP, gl_sets_of_books SOB
646 WHERE
647        FSP.set_of_books_id = SOB.set_of_books_id
648 AND    FSP.org_id  = v_org_id ;
649 
650 BEGIN
651 
652     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
653      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
654      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'prec_po_line.po_line_id:'||to_char(nvl(prec_po_line.po_line_id,0))||'line_location_id:'||to_char(nvl(prec_po_location.line_location_id,0)));
655    END IF;
656 
657     /*Populate values to variables*/
658     IF prec_po_line.po_line_id IS NOT NULL THEN -- logic from JAI_PO_LA_TRIGGER_PKG. ARI_T1
659       --only v_type_lookup_code = 'BLANKET' OR v_quot_class_code = 'CATALOG' for insert action will enter
660       v_po_hdr_id  := prec_po_line.po_header_id;
661       v_po_line_id := prec_po_line.po_line_id;
662       v_item_id    := prec_po_line.item_id;
663       v_from_line_id := prec_po_line.from_line_id;
664       v_uom_measure    := prec_po_line.Unit_Meas_Lookup_Code;
665       v_price          := prec_po_line.UNIT_PRICE;
666       v_cre_dt      := prec_po_line.Creation_Date;
667       v_cre_by      := prec_po_line.Created_By;
668       v_last_upd_dt := prec_po_line.Last_Update_Date ;
669       v_last_upd_by := prec_po_line.Last_Updated_By;
670       v_last_upd_login:= prec_po_line.Last_Update_Login;
671 
672     ELSIF prec_po_location.line_location_id IS NOT NULL THEN
673       v_po_hdr_id        := prec_po_location.po_header_id;
674       v_po_line_id       := prec_po_location.po_line_id;
675       v_line_loc_id      := prec_po_location.line_location_id;
676       v_from_line_loc_id := prec_po_location.From_Line_Location_Id;
677       v_from_line_id     := prec_po_location.From_Line_Id;
678       v_uom_measure      := prec_po_location.Unit_Meas_Lookup_Code;
679       v_qty              := prec_po_location.Quantity;
680       v_price            := prec_po_location.Price_Override;
681       v_shipment_type    := prec_po_location.SHIPMENT_TYPE;
682       v_src_ship_id      := prec_po_location.Source_Shipment_Id;
683       v_po_rel_id        := prec_po_location.Po_Release_Id;
684       v_org_id           := prec_po_location.org_id;
685       v_cre_dt      := prec_po_location.Creation_Date;
686       v_cre_by      := prec_po_location.Created_By;
687       v_last_upd_dt := prec_po_location.Last_Update_Date ;
688       v_last_upd_by := prec_po_location.Last_Updated_By;
689       v_last_upd_login:= prec_po_location.Last_Update_Login;
690 
691       OPEN c_line_info(v_po_line_id);
692       FETCH c_line_info INTO v_item_id;
693       CLOSE c_line_info;
694     END IF;
695     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
696       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after value assignment');
697     END IF;
698 
699     /*Get values from PO header*/
700     IF prec_po_header.po_header_id IS NOT NULL THEN--Added by Wenqiong for bug16288154 begin
701       v_type_lookup_code  := prec_po_header.Type_Lookup_Code;
702       v_quot_class_code   := prec_po_header.Quotation_Class_Code;
703       v_vendor_id         := prec_po_header.vendor_id;
704       v_vendor_site_id    := prec_po_header.vendor_site_id;
705       v_currency          := prec_po_header.Currency_Code;
706       v_ship_loc_id       := prec_po_header.Ship_To_Location_Id;
707       v_conv_rate_type    := prec_po_header.rate_type;
708       v_conv_rate_date    := prec_po_header.rate_date;
709       v_conv_rate         := prec_po_header.rate;
710      ELSE--Added by Wenqiong for bug16288154 end
711       OPEN Check_Rfq_Quot_Cur(v_po_hdr_id);
712       FETCH Check_Rfq_Quot_Cur INTO v_type_lookup_code,v_quot_class_code,v_vendor_id, v_vendor_site_id,v_currency,v_ship_loc_id
713                                    ,v_conv_rate_type, v_conv_rate_date, v_conv_rate;
714       CLOSE Check_Rfq_Quot_Cur;
715 
716     END IF;
717 
718     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
719       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Get values from PO header:'||'v_type_lookup_code:'||v_type_lookup_code
720       ||'v_quot_class_code:'||v_quot_class_code);
721     END IF;
722     OPEN fetch_uomcode_cur;
723     FETCH fetch_uomcode_cur INTO v_uom_code;
724     CLOSE fetch_uomcode_cur;
725     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
726       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Get v_uom_code:'||'v_uom_code:'||v_uom_code);
727     END IF;
728 
729     OPEN Fetch_Org_Id_Cur;
730     FETCH Fetch_Org_Id_Cur INTO v_inv_org_id;
731     CLOSE Fetch_Org_Id_Cur;
732 
733 
734     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
735       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Get v_org_id:'||'v_org_id:'||to_char(v_org_id));
736     END IF;
737     v_currency_conv_rate := get_currency_conv_rate (v_inv_org_id => v_inv_org_id,
738                                                     v_currency   => v_currency,
739                                                     v_rate_date  => v_conv_rate_date,
740                                                     v_rate_type  => v_conv_rate_type,
741                                                     v_rate       => v_conv_rate);
742     v_default_curr       := get_func_currency(v_inv_org_id);
743     /*Get tax_modifiable flag*/
744     ln_line_loc_id := v_line_loc_id;
745     ln_line_id     := v_po_line_id;
746 
747     IF v_quot_class_code = 'CATALOG' THEN
748       IF v_from_line_loc_id IS NOT NULL THEN
749         ln_line_loc_id := v_from_line_loc_id;
750       ELSIF v_from_line_id IS NOT NULL THEN
751         ln_line_id := v_from_line_id;
752       END IF;
753     END IF;
754 
755     IF ln_line_loc_id IS NOT NULL THEN
756         OPEN c_line_loc_tax_flag(ln_line_loc_id);
757         FETCH c_line_loc_tax_flag INTO v_tax_modified_flag;
758         CLOSE c_line_loc_tax_flag;
759     ELSIF ln_line_id IS NOT NULL THEN
760         OPEN c_line_tax_modified_flag(ln_line_id);
761         FETCH c_line_tax_modified_flag INTO v_tax_modified_flag;
762         CLOSE c_line_tax_modified_flag;
763     END IF;
764 
765     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
766       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Get v_tax_modified_flag:'||'v_tax_modified_flag:'||nvl(v_tax_modified_flag,'N'));
767     END IF;
768 
769     IF v_line_loc_id IS NOT NULL AND nvl(v_tax_modified_flag,'N') = 'Y' THEN
770       --jai_po_tax_pkg.cal_tax called in LLA while jai_po_tax_pkg.calculate_tax is called in HA
771       /*calculate av and VAT av*/
772        get_assessable_value(
773                            pn_vendor_id        =>  v_vendor_id
774                           ,pn_vendor_site_id   =>  v_vendor_site_id
775                           ,pn_item_id          =>  v_item_id
776                           ,pn_price            =>  v_price
777                           ,pn_qty              =>  v_qty
778                           ,pv_uom_code         =>  v_uom_code
779                           ,pn_po_hdr_id        =>  v_po_hdr_id
780                           ,pv_currency         =>  v_currency
781                           ,pv_action           =>  JAI_CONSTANTS.updating
782                           ,pn_conv_rate        =>  v_currency_conv_rate
783                           ,pn_assessable_value =>  v_assessable_value
784                           ,pn_vat_assess_value =>  v_vat_assess_value
785                           );
786 
787        OPEN c_old_qty(v_line_loc_id);
788        FETCH c_old_qty INTO v_old_qty;
789        CLOSE c_old_qty;
790 
791        IF v_old_qty IS NULL OR v_old_qty = 0 THEN
792         v_old_qty := 1;
793        END IF;
794 
795        UPDATE JAI_PO_TAXES a
796        SET tax_amount = (tax_amount * v_qty/ v_old_qty ),
797          tax_target_amount = (tax_target_amount * v_qty/ v_old_qty)
798        WHERE line_location_id = v_line_loc_id
799        AND EXISTS (select 1 from JAI_CMN_TAXES_ALL b where b.tax_id = a.tax_id and b.adhoc_flag = 'Y');
800 
801 
802        insert_jai_line_locs(
803                        v_line_loc_id     => v_line_loc_id
804                       ,v_po_hdr_id       => v_po_hdr_id
805                       ,v_po_line_id      => v_po_line_id
806                       ,v_cre_dt          => v_cre_dt
807                       ,v_cre_by          => v_cre_by
808                       ,v_last_upd_dt     => v_last_upd_dt
809                       ,v_last_upd_by     => v_last_upd_by
810                       ,v_last_upd_login  => v_last_upd_login
811                       ,flag              => 'U'
812                       ,v_item_id         => v_item_id
813                       ,v_vendor_id       => v_vendor_id
814                       ,v_vendor_site_id  => v_vendor_site_id
815                       ,v_qty             => v_qty
816                       ,v_price_override  => v_price
817                       ,v_currency        => v_currency
818                       ,v_line_focus_id   => v_line_focus_id
819                       );
820 
821       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
822         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'before calc_tax:'||'v_po_hdr_id:'||to_char(v_po_hdr_id)||'v_po_line_id:'||to_char(v_po_line_id)
823           ||'v_line_loc_id:'||to_char(v_line_loc_id)||'v_line_focus_id:'||to_char(v_line_focus_id)||'v_qty:'||to_char(v_qty)||'base_value:'||to_char(v_price*v_qty)||'v_assessable_value:'||to_char(v_assessable_value)||'v_vat_assess_value:'
824           ||to_char(v_vat_assess_value)||'v_default_curr:'||v_default_curr||'v_currency:'||v_currency
825           ||'p_line_quantity,'||v_qty||'p_base_value'||v_price*v_qty||'p_line_uom_code,'||v_uom_code||'p_tax_amount,'||nvl(v_tax_amount,0)||
826           'v_item_id'||v_item_id||'v_currency_conv_rate'|| 1/v_currency_conv_rate||'p_func_curr'||v_default_curr);
827 
828       END IF;
829 
830       jai_po_tax_pkg.calc_tax(
831         p_type => 'STANDARDPO',
832         p_header_id => v_po_hdr_id,
833         P_line_id => v_po_line_id,
834         p_line_location_id => v_line_loc_id,
835         p_line_focus_id => v_line_focus_id,
836         p_line_quantity => v_qty,
837         p_base_value => v_price*v_qty,
838         p_line_uom_code => v_uom_code,
839         p_tax_amount => v_tax_amount,
840         p_assessable_value => v_assessable_value,
841         p_vat_assess_value => v_vat_assess_value,
842         p_item_id => v_item_id,
843         p_conv_rate => 1/v_currency_conv_rate,
844         p_po_curr => v_currency,
845         p_func_curr => v_default_curr
846         , pv_retroprice_changed => pv_retro_price_flag
847       );
848 
849     ELSIF v_shipment_type IN ( 'SCHEDULED', 'BLANKET' ) AND nvl(v_tax_modified_flag,'N') = 'N' THEN
850         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
851 
852          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'process_release_shipment for v_shipment_type:'||v_shipment_type);
853                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'process_release_shipment,parameters:v_src_ship_id,'||v_src_ship_id||'v_line_loc_id,'||v_line_loc_id
854                        ||'v_po_line_id,'||v_po_line_id||'v_po_hdr_id,'||v_po_hdr_id||'v_qty,'||v_qty||'v_po_rel_id,'||v_po_rel_id);
855        END IF;
856        delete_po_taxes(pn_po_line_id =>v_po_line_id, pn_line_loc_id => v_line_loc_id);
857        delete_jai_po_lines(pn_line_loc_id => v_line_loc_id);
858        copy_agreement_taxes(
859                               p_src_ship_id         => v_src_ship_id
860                              ,p_qty                 => v_qty
861                              ,p_hdr_id              => v_po_hdr_id
862                              ,p_line_id             => v_po_line_id
863                              ,p_line_loc_id         => v_line_loc_id
864                              ,p_ship_type           => v_shipment_type
865                              ,p_cre_dt              => v_cre_dt
866                              ,p_cre_by              => v_cre_by
867                              ,p_last_upd_dt         => v_last_upd_dt
868                              ,p_last_upd_by         => v_last_upd_by
869                              ,p_last_upd_login      => v_last_upd_login
870                              ,pv_retroprice_changed => pv_retro_price_flag
871                             );
872 
873     ELSE
874        IF v_type_lookup_code = 'BLANKET' OR v_quot_class_code = 'CATALOG' THEN
875           if ln_line_loc_id is null then
876               flag := 'INSLINES';
877           else
878               flag := 'I';
879           end if;
880 
881         ELSE
882             flag := 'I';
883         END IF;
884        /*calculate av and VAT av*/
885        get_assessable_value(
886                            pn_vendor_id        =>  v_vendor_id
887                           ,pn_vendor_site_id   =>  v_vendor_site_id
888                           ,pn_item_id          =>  v_item_id
889                           ,pn_price            =>  v_price
890                           ,pn_qty              =>  v_qty
891                           ,pv_uom_code         =>  v_uom_code
892                           ,pn_po_hdr_id        =>  v_po_hdr_id
893                           ,pv_currency         =>  v_currency
894                           ,pv_action           =>  JAI_CONSTANTS.inserting
895                           ,pn_conv_rate        =>  v_currency_conv_rate
896                           ,pn_assessable_value =>  v_assessable_value
897                           ,pn_vat_assess_value =>  v_vat_assess_value
898                           );
899 
900        IF nvl(ln_line_loc_id,0) > 0 THEN
901          delete_po_taxes(pn_po_line_id =>v_po_line_id, pn_line_loc_id => v_line_loc_id);
902          delete_jai_po_lines(pn_line_loc_id => v_line_loc_id);
903        ELSE
904          delete_po_taxes(pn_po_line_id =>v_po_line_id);
905          delete_jai_po_lines(pn_line_id =>v_po_line_id);
906        END IF;
907        insert_jai_line_locs(
908                              v_line_loc_id     => v_line_loc_id
909                             ,v_po_hdr_id       => v_po_hdr_id
910                             ,v_po_line_id      => v_po_line_id
911                             ,v_cre_dt          => v_cre_dt
912                             ,v_cre_by          => v_cre_by
913                             ,v_last_upd_dt     => v_last_upd_dt
914                             ,v_last_upd_by     => v_last_upd_by
915                             ,v_last_upd_login  => v_last_upd_login
916                             ,flag              => 'I'
917                             ,v_item_id         => v_item_id
918                             ,v_vendor_id       => v_vendor_id
919                             ,v_vendor_site_id  => v_vendor_site_id
920                             ,v_qty             => v_qty
921                             ,v_price_override  => v_price
922                             ,v_currency        => v_currency
923                             ,v_line_focus_id   => v_line_focus_id
924                             );
925 
926        process_po_taxes(
927                       v_type_lookup_code      =>  v_Type_Lookup_Code
928                      ,v_quot_class_code       =>  v_Quot_Class_Code
929                      ,v_vendor_id             =>  v_vendor_id
930                      ,v_vendor_site_id        =>  v_Vendor_Site_Id
931                      ,v_currency              =>  v_currency
932                      ,v_org_id                =>  v_inv_org_id
933                      ,v_item_id               =>  v_item_id
934                      ,v_uom_code              =>  v_uom_code
935                      ,v_line_loc_id           =>  v_line_loc_id
936                      ,v_po_hdr_id             =>  v_po_hdr_id
937                      ,v_po_line_id            =>  v_po_line_id
938                      ,v_frm_po_line_id        =>  v_from_line_id
939                      ,v_frm_line_loc_id       =>  v_from_line_loc_id
940                      ,v_price                 =>  v_price
941                      ,v_qty                   =>  v_qty
942                      ,v_cre_dt                =>  v_cre_dt
943                      ,v_cre_by                =>  v_cre_by
944                      ,v_last_upd_dt           =>  v_last_upd_dt
945                      ,v_last_upd_by           =>  v_last_upd_by
946                      ,v_last_upd_login        =>  v_last_upd_login
947                      ,flag                    =>  flag
948                      ,pn_assessable_value     =>  v_assessable_value
949                      ,pn_vat_assess_value     =>  v_vat_assess_value
950                      ,pn_conv_rate            =>  v_currency_conv_rate
951                      ,p_tax_category_id       =>  NULL
952                      ,pv_retroprice_changed   =>  pv_retro_price_flag
953                 );
954     END IF;
955   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
956     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
957   END IF;
958  EXCEPTION
959    WHEN OTHERS THEN
960 
961 
962      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
963         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
964      END IF;
965 END process_po_tax_wrapper;
966 /*
967   REM +======================================================================+
968   REM Created By         :  Wenqiong Zhou
969   REM Creation Date      :  Jun 1, 2012
970   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
971   REM SubProgram Name    :  copy_source_taxes
972   REM Type               :  processing API
973   REM Purpose            :  Copy Document for defaulting taxes in  Quotation to PO and PO to PO.
974   REM                       The main code is like jai_po_tax_pkg.copy_source_taxes.
975   REM TDD Reference      :
976   REM
977   REM Assumptions        :
978   REM
979   REM Parameter                IN/OUT         Type     Required     Description and Purpose
980   REM -----------------------  ------  ------------    ----------   ------------------------------------
981   REM p_type                    IN           VARCHAR2      Y         Indiate copy at line level or shipment level
982   REM p_po_hdr_id               IN           NUMBER        Y         PO header id
983   REM p_po_line_id              IN           NUMBER        Y         PO line id
984   REM p_po_line_loc_id          IN           NUMBER        Y         PO shipment line id
985   REM p_line_num                IN           NUMBER        N         PO line number
986   REM p_ship_num                IN           NUMBER        N         PO shipment number
987   REM p_item_id                 IN           NUMBER        Y         Item id
988   REM p_from_hdr_id             IN           NUMBER        Y         PO header id which copy from
989   REM p_from_type_lookup_code   IN           VARCHAR2      Y         type code of PO which copy from
990   REM p_cre_dt                  IN           DATE          Y         creation date
991   REM p_cre_by                  IN           NUMBER        Y         created by
992   REM p_last_upd_dt             IN           DATE          Y         last update date
993   REM p_last_upd_by             IN           NUMBER        Y         last update by
994   REM p_last_upd_login          IN           NUMBER        Y         last update login
995   REM  CALLED BY
996   REM  process_po_line, process_po_shipment_line
997   REM +================================================================================================+
998 */
999 PROCEDURE copy_source_taxes (
1000     p_type          VARCHAR2,
1001     p_po_hdr_id     NUMBER,
1002     p_po_line_id    NUMBER,
1003     p_po_line_loc_id  NUMBER,
1004     p_line_num      NUMBER,
1005     p_ship_num      NUMBER,
1006     p_item_id     NUMBER,
1007     p_from_hdr_id   NUMBER,
1008     p_from_type_lookup_code VARCHAR2,
1009     p_source_line_id  NUMBER,
1010     p_source_loc_id   NUMBER,
1011     p_cre_dt      DATE,
1012     p_cre_by      NUMBER,
1013     p_last_upd_dt   DATE,
1014     p_last_upd_by   NUMBER,
1015     p_last_upd_login  NUMBER
1016   ) IS
1017     l_api_name                    CONSTANT VARCHAR2(30) := 'copy_source_taxes';
1018     v_ln_loc_id   NUMBER  := p_source_loc_id;
1019     v_line_id     NUMBER  := p_source_line_id;
1020     v_vendor_id number;
1021     v_vendor_site_id  number;
1022     v_service_type_code varchar2(30);
1023 
1024 /* move to function get_line_loc_id since mutating error.
1025    --  Cursor definition for picking line_location_id from po_line_locations_all
1026     CURSOR Fetch_Line_Loc_Id_Cur IS
1027       SELECT jpll.Line_Location_Id
1028       FROM po_line_locations_all plla, JAI_PO_LINE_LOCATIONS jpll,
1029         po_lines_all pla, po_headers_all pha
1030       WHERE pha.po_header_id = pla.po_header_id
1031       AND jpll.line_location_id = plla.line_location_id
1032       AND pha.po_header_id = plla.po_header_id
1033       AND pla.po_line_id = plla.po_line_id
1034       AND pha.po_header_id = p_from_hdr_id
1035       AND pla.line_num = p_line_num
1036       AND pla.item_id = p_item_id
1037       AND plla.shipment_num = p_ship_num;*/
1038 
1039 /* move to function get_line_id since mutating error.
1040    --  Cursor definition for picking po_line_id from po_lines_all
1041     CURSOR fetch_line_id_cur IS
1042       SELECT pla.Po_Line_Id
1043       FROM po_lines_all pla, po_headers_all pha
1044       WHERE pha.Po_Header_Id = p_from_hdr_id
1045       AND pla.line_num = p_line_num
1046       AND pha.po_header_id =pla.po_header_id;*/
1047 
1048     -- Cursor definition for picking values from JAI_PO_LINE_LOCATIONS
1049     CURSOR fetch_jain_line_cur IS
1050       SELECT line_location_id, po_line_id, po_header_id, item_id,tax_modified_flag,
1051         tax_amount, total_amount, line_focus_id, creation_date,
1052         created_by, last_update_date, last_updated_by, last_update_login,
1053         tax_category_id ,quantity,PRICE_OVERRIDE, currency    -- cbabu for EnhancementBug# 2427465
1054       FROM JAI_PO_LINE_LOCATIONS
1055       WHERE Po_Line_Id = v_line_id
1056       AND po_header_id = p_from_hdr_id
1057       AND ( line_location_id IS NULL
1058         OR line_location_id = 0 );
1059 
1060     -- Cursor definition for picking values from JAI_PO_TAXES
1061     CURSOR fetch_jain_line_tax_cur IS
1062       SELECT line_location_id,
1063              tax_line_no,
1064        po_line_id,
1065        po_header_id,
1066        precedence_1,
1067        precedence_2,
1068        precedence_3,
1069        precedence_4,
1070        precedence_5,
1071        precedence_6,
1072        precedence_7,
1073        precedence_8,
1074        precedence_9,
1075        precedence_10,
1076        tax_id,
1077        currency,
1078        tax_rate,
1079        qty_rate,
1080        uom,
1081        tax_amount,
1082        tax_type,
1083        vendor_id,
1084        modvat_flag,
1085        tax_target_amount,
1086        line_focus_id,
1087        creation_date,
1088        created_by,
1089        last_update_date,
1090        last_updated_by,
1091        last_update_login,
1092        tax_category_id
1093       FROM  JAI_PO_TAXES
1094       WHERE  Po_Line_Id = v_line_id
1095       AND po_header_id = p_from_hdr_id
1096       AND ( line_location_id IS NULL
1097         OR line_location_id = 0 );
1098 
1099     -- Cursor definition for picking values from JAI_PO_LINE_LOCATIONS
1100     CURSOR Fetch_Ja_In_Po_Ln_Loc_Cur IS
1101       SELECT line_location_id, po_line_id, po_header_id, tax_modified_flag,
1102         tax_amount, total_amount, line_focus_id, creation_date,
1103         created_by, last_update_date, last_updated_by, last_update_login,
1104         tax_category_id,item_id, quantity,PRICE_OVERRIDE,currency
1105       FROM JAI_PO_LINE_LOCATIONS
1106       WHERE Line_Location_Id = v_ln_loc_id;
1107 
1108     -- Cursor definition for picking values from JAI_PO_TAXES
1109     -- using line_location_id as where clause
1110     CURSOR fetch_po_ln_loc_tax_cur IS
1111       SELECT line_location_id,
1112              tax_line_no,
1113        po_line_id,
1114        po_header_id,
1115        precedence_1,
1116        precedence_2,
1117        precedence_3,
1118        precedence_4,
1119        precedence_5,
1120        precedence_6,
1121        precedence_7,
1122        precedence_8,
1123        precedence_9,
1124        precedence_10,
1125        tax_id,
1126        currency,
1127        tax_rate,
1128        qty_rate,
1129        uom,
1130        tax_amount,
1131        tax_type,
1132        vendor_id,
1133        modvat_flag,
1134        tax_target_amount,
1135        line_focus_id,
1136              creation_date,
1137        created_by,
1138        last_update_date,
1139        last_updated_by,
1140        last_update_login,
1141        tax_category_id
1142       FROM JAI_PO_TAXES
1143       WHERE Line_Location_Id = v_ln_loc_id;
1144 
1145       cursor fetch_vendor_id_cur IS
1146       select vendor_id,vendor_site_id
1147       from po_headers_all
1148       where po_header_id=p_po_hdr_id;
1149 
1150 
1151 fetch_ja_in_po_ln_loc_rec   FETCH_JA_IN_PO_LN_LOC_CUR%ROWTYPE;
1152 v_seq_val                   JAI_PO_LINE_LOCATIONS.line_focus_id%TYPE;
1153 
1154 BEGIN
1155 
1156     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1157      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
1158    END IF;
1159 /*    OPEN Fetch_Line_Loc_Id_Cur;
1160     FETCH Fetch_Line_Loc_Id_Cur INTO v_ln_loc_id ;
1161     CLOSE Fetch_Line_Loc_Id_Cur;*/
1162    -- v_ln_loc_id := get_line_loc_id(p_from_hdr_id ,p_line_num ,p_item_id , p_ship_num);
1163 
1164 /*    OPEN Fetch_Line_Id_Cur;
1165     FETCH Fetch_Line_Id_Cur INTO v_line_id;
1166     CLOSE Fetch_Line_Id_Cur;*/
1167    /* v_line_id := get_line_id(p_from_hdr_id ,p_line_num); Commented out since no use for v_line_id*/
1168 
1169     open fetch_vendor_id_cur;
1170     fetch fetch_vendor_id_cur into v_vendor_id, v_vendor_site_id;
1171     close fetch_vendor_id_cur;
1172 
1173 
1174      v_service_type_code :=jai_ar_rctla_trigger_pkg.get_service_type(v_vendor_id,v_vendor_site_id,'V');
1175 
1176     IF p_type = 'L' THEN--It's for copy from quotation to po. L means from line level.
1177 
1178         FOR rec1 in Fetch_Jain_Line_Cur LOOP
1179 
1180             insert_jai_line_locs(
1181                              v_line_loc_id     => p_po_line_loc_id
1182                             ,v_po_hdr_id       => p_po_hdr_id
1183                             ,v_po_line_id      => p_po_line_id
1184                             ,v_cre_dt          => p_cre_dt
1185                             ,v_cre_by          => p_cre_by
1186                             ,v_last_upd_dt     => p_last_upd_dt
1187                             ,v_last_upd_by     => p_last_upd_by
1188                             ,v_last_upd_login  => p_last_upd_login
1189                             ,flag              => 'I'
1190                             ,v_item_id         => rec1.item_id
1191                             ,v_vendor_id       => v_vendor_id
1192                             ,v_vendor_site_id  => v_vendor_site_id
1193                             ,v_price_override  => rec1.PRICE_OVERRIDE
1194                             ,v_qty             => rec1.quantity
1195                             ,v_tax_modified_flag => 'Y'
1196                             ,v_tax_category_id   => rec1.tax_category_id
1197                             ,v_tax_amount        => rec1.tax_amount
1198                             ,v_total_amount      => rec1.total_amount
1199                             ,v_currency          => rec1.currency
1200                             ,v_line_focus_id     => v_seq_val
1201                             );
1202 
1203 
1204         END LOOP;
1205 
1206         FOR rec2 in Fetch_Jain_Line_Tax_Cur LOOP
1207           insert_po_taxes
1208           ( p_from_type_lookup_code, NULL,
1209             v_seq_val, p_po_line_loc_id,
1210             rec2.tax_line_no, p_po_line_id,  p_po_hdr_id,
1211             rec2.precedence_1, rec2.precedence_2, rec2.precedence_3,
1212             rec2.precedence_4, rec2.precedence_5,
1213             rec2.precedence_6, rec2.precedence_7, rec2.precedence_8,
1214             rec2.precedence_9, rec2.precedence_10,
1215             rec2.tax_id, NULL, 0, rec2.currency,
1216             rec2.tax_rate, rec2.qty_rate, rec2.uom,
1217             rec2.tax_amount , rec2.tax_type,  rec2.modvat_flag,
1218             rec2.vendor_id, rec2.tax_target_amount ,
1219             p_cre_dt,  p_cre_by, p_last_upd_dt,
1220             p_last_upd_by, p_last_upd_login,
1221             rec2.tax_category_id
1222           );
1223          END LOOP;
1224 
1225      ELSIF p_type = 'S' THEN --It's for copy from po to po. S means from shipment line level.
1226 
1227       IF v_ln_loc_id IS NOT NULL THEN
1228 
1229         OPEN Fetch_Ja_In_Po_Ln_Loc_Cur ;
1230         FETCH Fetch_Ja_In_Po_Ln_Loc_Cur INTO Fetch_Ja_In_Po_Ln_Loc_Rec;
1231 
1232 
1233         insert_jai_line_locs(
1234                v_line_loc_id     => p_po_line_loc_id
1235               ,v_po_hdr_id       => p_po_hdr_id
1236               ,v_po_line_id      => p_po_line_id
1237               ,v_cre_dt          => p_cre_dt
1238               ,v_cre_by          => p_cre_by
1239               ,v_last_upd_dt     => p_last_upd_dt
1240               ,v_last_upd_by     => p_last_upd_by
1241               ,v_last_upd_login  => p_last_upd_login
1242               ,flag              => 'I'
1243               ,v_item_id         => fetch_ja_in_po_ln_loc_rec.item_id
1244               ,v_vendor_id       => v_vendor_id
1245               ,v_vendor_site_id  => v_vendor_site_id
1246               ,v_price_override  => fetch_ja_in_po_ln_loc_rec.PRICE_OVERRIDE
1247               ,v_qty             => fetch_ja_in_po_ln_loc_rec.quantity
1248               ,v_tax_modified_flag => 'Y'
1249               ,v_tax_category_id   => fetch_ja_in_po_ln_loc_rec.tax_category_id
1250               ,v_tax_amount        => fetch_ja_in_po_ln_loc_rec.tax_amount
1251               ,v_total_amount      => fetch_ja_in_po_ln_loc_rec.total_amount
1252               ,v_currency          => fetch_ja_in_po_ln_loc_rec.currency
1253               ,v_line_focus_id     => v_seq_val
1254               );
1255 
1256         CLOSE Fetch_Ja_In_Po_Ln_Loc_Cur;
1257 
1258         FOR rec in Fetch_Po_Ln_Loc_Tax_Cur LOOP
1259             insert_po_taxes
1260           ( p_from_type_lookup_code, NULL,
1261             v_seq_val, p_po_line_loc_id,
1262             rec.tax_line_no, p_po_line_id,  p_po_hdr_id,
1263             rec.precedence_1, rec.precedence_2, rec.precedence_3,
1264             rec.precedence_4, rec.precedence_5,
1265             rec.precedence_6, rec.precedence_7, rec.precedence_8,
1266             rec.precedence_9, rec.precedence_10,
1267             rec.tax_id, NULL, 0, rec.currency,
1268             rec.tax_rate, rec.qty_rate, rec.uom,
1269             rec.tax_amount , rec.tax_type,  rec.modvat_flag,
1270             rec.vendor_id, rec.tax_target_amount ,
1271             p_cre_dt,  p_cre_by, p_last_upd_dt,
1272             p_last_upd_by, p_last_upd_login,
1273             rec.tax_category_id
1274           );
1275         END LOOP;
1276 
1277       END IF;
1278     END IF;
1279 
1280   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1281     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
1282   END IF;
1283  EXCEPTION
1284    WHEN OTHERS THEN
1285 
1286 
1287      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1288         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
1289      END IF;
1290      app_exception.raise_exception;
1291 
1292 
1293 END copy_source_taxes;
1294 
1295 -----------------------------------------------------------------------
1296 --  PUBLIC PROCEDURE
1297 --  copy_quot_taxes
1298 --
1299 --  DESCRIPTION
1300 --
1301 --
1302 --  CALLED BY
1303 --     process_po_line, process_po_shipment_line
1304 -----------------------------------------------------------------------
1305 /*
1306   REM +======================================================================+
1307   REM Created By         :  Wenqiong Zhou
1308   REM Creation Date      :  Jun 1, 2012
1309   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
1310   REM SubProgram Name    :  copy_quot_taxes
1311   REM Type               :  processing API
1312   REM Purpose            :  Processing PO's tax defaultatin for the PO which
1313   REM                       has been linked by a quotation, copy taxes from quotation.
1314   REM                       The main code is like jai_po_tax_pkg.copy_quot_taxes.
1315   REM TDD Reference      :
1316   REM
1317   REM Assumptions        :
1318   REM
1319   REM Parameter                IN/OUT         Type     Required     Description and Purpose
1320   REM -----------------------  ------  ------------    ----------   ------------------------------------
1321   REM p_line_loc_id             IN           NUMBER        Y         PO shipment line id
1322   REM p_po_hdr_id               IN           NUMBER        Y         PO header id
1323   REM p_po_line_id              IN           NUMBER        Y         PO line id
1324   REM p_qty                     IN           NUMBER        N         Quantity of item
1325   REM p_frm_hdr_id              IN           NUMBER        Y         PO header id which copy from
1326   REM p_frm_line_id             IN           NUMBER        Y         PO line id which copy from
1327   REM p_price                   IN           NUMBER        Y         price of item
1328   REM p_unit_code               IN           VARCHAR2      Y         Unit code of item
1329   REM p_cre_dt                  IN           DATE          Y         creation date
1330   REM p_cre_by                  IN           NUMBER        Y         created by
1331   REM p_last_upd_dt             IN           DATE          Y         last update date
1332   REM p_last_upd_by             IN           NUMBER        Y         last update by
1333   REM p_last_upd_login          IN           NUMBER        Y         last update login
1334   REM  CALLED BY
1335   REM  process_po_line, process_po_shipment_line
1336   REM +================================================================================================+
1337 */
1338   PROCEDURE copy_quot_taxes
1339   (
1340     p_line_loc_id IN NUMBER,
1341     p_po_hdr_id IN NUMBER,
1342     p_po_line_id IN NUMBER,
1343     p_item_id IN NUMBER,--Added by Wenqiong for avoid trigger mutating
1344     p_qty IN NUMBER,
1345     p_frm_hdr_id IN NUMBER,
1346     p_frm_line_id IN NUMBER,
1347     p_price IN NUMBER,
1348     p_unit_code IN VARCHAR2,
1349     p_cre_dt IN DATE,
1350     p_cre_by IN NUMBER,
1351     p_last_upd_dt IN DATE,
1352     p_last_upd_by IN NUMBER,
1353     p_last_upd_login IN NUMBER,
1354     p_call_from    IN VARCHAR2
1355   )
1356   IS
1357     l_api_name                    CONSTANT VARCHAR2(30) := 'copy_quot_taxes';
1358     v_quot_line_loc_id            NUMBER;
1359     v_line_focus_id               NUMBER;
1360 
1361     v_tax_amt                     NUMBER;
1362     dummy                         NUMBER;
1363 
1364     v_vendor_id                   po_headers_all.vendor_id%TYPE;
1365     v_vendor_site_id              po_headers_all.vendor_site_id%TYPE;
1366     v_currency                    po_headers_all.currency_code%TYPE;
1367     v_item_id                     po_lines_all.item_id%TYPE;
1368     v_assessable_value            NUMBER;
1369     v_vat_assess_value            NUMBER;
1370     v_tax_category_id_holder JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
1371 
1372     ------------------------------>
1373 
1374     CURSOR tax_cur IS
1375        SELECT a.Po_Line_Id, a.tax_line_no, a.tax_id,
1376               a.precedence_1,
1377               a.precedence_2,
1378               a.precedence_3,
1379               a.precedence_4,
1380               a.precedence_5,
1381               a.precedence_6,
1382               a.precedence_7,
1383               a.precedence_8,
1384               a.precedence_9,
1385               a.precedence_10,
1386               a.currency, a.tax_rate, a.qty_rate, a.uom, a.tax_amount, a.tax_type,
1387               a.vendor_id, a.modvat_flag,
1388               tax_category_id
1389       FROM   JAI_PO_TAXES a
1390       WHERE  ((a.line_location_id IS NULL AND v_quot_line_loc_id=-999) OR (a.line_location_id = v_quot_line_loc_id))
1391              AND  Po_Line_Id = p_frm_line_id
1392      ORDER BY  a.tax_line_no;
1393 
1394     CURSOR c_line_tax_category_id_1(p_po_line_id IN NUMBER) IS
1395       SELECT tax_category_id
1396       FROM JAI_PO_LINE_LOCATIONS
1397       WHERE po_line_id = p_po_line_id
1398       AND line_location_id IS NULL;
1399 
1400     CURSOR c_line_tax_category_id_2(p_po_line_id IN NUMBER, p_line_location_id IN NUMBER) IS
1401       SELECT tax_category_id
1402       FROM JAI_PO_LINE_LOCATIONS
1403       WHERE po_line_id = p_po_line_id
1404       AND line_location_id = p_line_location_id;
1405 
1406   CURSOR c_check_adhoc_flag(p_tax_id number) IS
1407   select nvl(adhoc_flag,'N')
1408   from JAI_CMN_TAXES_ALL
1409   where tax_id = p_tax_id;
1410 
1411 
1412   CURSOR cur_vendor_curr
1413   IS
1414   SELECT vendor_id,vendor_site_id,currency_code
1415     FROM po_headers_all
1416    WHERE po_header_id = p_po_hdr_id;
1417 
1418 /* Replace it with separate function since trigger mutating
1419   CURSOR cur_item
1420   IS
1421   SELECT ITEM_ID
1422     FROM po_lines_all
1423    WHERE po_line_id = p_po_line_id;*/
1424 
1425   v_check_adhoc_flag JAI_CMN_TAXES_ALL.adhoc_flag%type;
1426   v_tax_amount       NUMBER;
1427 
1428   BEGIN
1429 
1430     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1431      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
1432    END IF;
1433 
1434 
1435     OPEN cur_vendor_curr;
1436     FETCH cur_vendor_curr INTO v_vendor_id,v_vendor_site_id,v_currency;
1437     CLOSE cur_vendor_curr;
1438 
1439    /* OPEN cur_item;
1440     FETCH cur_item INTO v_item_id;
1441     CLOSE cur_item;*/
1442    /* v_item_id := get_item_id(p_po_line_id);*/
1443     v_item_id := p_item_id;
1444     IF nvl(p_call_from,'ZX') = 'TRIGGER' THEN
1445       jai_po_proc_pkg.locate_source_line
1446                          ( p_frm_hdr_id,
1447                            p_frm_line_id,
1448                            p_qty,
1449                            dummy,
1450                            v_quot_line_loc_id,
1451                            p_frm_line_id
1452                           );
1453      ELSE
1454       jai_po_cmn_pkg.locate_source_line
1455                          ( p_frm_hdr_id,
1456                            p_frm_line_id,
1457                            p_qty,
1458                            dummy,
1459                            v_quot_line_loc_id,
1460                            p_frm_line_id
1461                           );
1462      END IF;
1463     jai_po_proc_pkg.delete_jai_po_lines(pn_line_id=>p_po_line_id);
1464     jai_po_proc_pkg.delete_po_taxes(pn_po_line_id=>p_po_line_id);
1465 
1466     insert_jai_line_locs(
1467                v_line_loc_id     => p_line_loc_id
1468               ,v_po_hdr_id       => p_po_hdr_id
1469               ,v_po_line_id      => p_po_line_id
1470               ,v_cre_dt          => p_cre_dt
1471               ,v_cre_by          => p_cre_by
1472               ,v_last_upd_dt     => p_last_upd_dt
1473               ,v_last_upd_by     => p_last_upd_by
1474               ,v_last_upd_login  => p_last_upd_login
1475               ,flag              => 'I'
1476               ,v_item_id         => v_item_id
1477               ,v_vendor_id       => v_vendor_id
1478               ,v_vendor_site_id  => v_vendor_site_id
1479               ,v_price_override  => p_price
1480               ,v_qty             => p_qty
1481               ,v_currency        => v_currency
1482               ,v_line_focus_id   => v_line_focus_id
1483               );
1484 
1485 
1486        FOR rec in tax_cur LOOP
1487         open c_check_adhoc_flag(rec.tax_id);
1488         fetch c_check_adhoc_flag into v_check_adhoc_flag;
1489         close c_check_adhoc_flag;
1490 
1491             --If this is an Adhoc Flag, then Tax Amount is to be the same Tax Amount as in Catalog Quotation
1492             --Else Tax Amount is Zero as before.
1493 
1494         if v_check_adhoc_flag ='Y' then
1495          v_tax_amount := rec.tax_amount;
1496         else
1497          v_tax_amount := 0;
1498         end if;
1499 
1500 
1501         insert_po_taxes
1502         ( 'STANDARD', NULL,
1503           v_line_focus_id, p_line_loc_id,
1504           rec.tax_line_no, p_po_line_id,  p_po_hdr_id,
1505           rec.precedence_1, rec.precedence_2, rec.precedence_3,
1506           rec.precedence_4, rec.precedence_5,
1507           rec.precedence_6, rec.precedence_7, rec.precedence_8,
1508           rec.precedence_9, rec.precedence_10,
1509           rec.tax_id, NULL, 0, rec.currency,
1510           rec.tax_rate, rec.qty_rate, rec.uom,
1511           rec.tax_amount , rec.tax_type,  rec.modvat_flag,
1512           rec.vendor_id, 0 ,
1513           p_cre_dt,  p_cre_by, p_last_upd_dt,
1514           p_last_upd_by, p_last_upd_login,
1515           rec.tax_category_id
1516         );
1517 
1518         v_tax_category_id_holder := nvl( rec.tax_category_id, v_tax_category_id_holder);
1519 
1520         v_check_adhoc_flag :=NULL;
1521         v_tax_amount       :=0;
1522     END LOOP;
1523 
1524 
1525     If v_tax_category_id_holder IS NULL THEN
1526       IF v_quot_line_loc_id = -999 THEN
1527         OPEN c_line_tax_category_id_1(p_frm_line_id);
1528         FETCH c_line_tax_category_id_1 INTO v_tax_category_id_holder;
1529         CLOSE c_line_tax_category_id_1;
1530       ELSE
1531         OPEN c_line_tax_category_id_2(p_frm_line_id, v_quot_line_loc_id);
1532         FETCH c_line_tax_category_id_2 INTO v_tax_category_id_holder;
1533         CLOSE c_line_tax_category_id_2;
1534       END IF;
1535     end if;
1536 
1537     UPDATE JAI_PO_LINE_LOCATIONS
1538     SET tax_category_id = v_tax_category_id_holder
1539     WHERE line_focus_id = v_line_focus_id;
1540 
1541     /*calculate av and VAT av*/
1542      get_assessable_value(
1543                          pn_vendor_id        =>  v_vendor_id
1544                         ,pn_vendor_site_id   =>  v_vendor_site_id
1545                         ,pn_item_id          =>  v_item_id
1546                         ,pn_price            =>  p_price
1547                         ,pn_qty              =>  p_qty
1548                         ,pv_uom_code         =>  p_unit_code
1549                         ,pn_po_hdr_id        =>  p_po_hdr_id
1550                         ,pv_currency         =>  v_currency
1551                         ,pv_action           =>  JAI_CONSTANTS.updating
1552                         ,pn_assessable_value =>  v_assessable_value
1553                         ,pn_vat_assess_value =>  v_vat_assess_value
1554                         );
1555 
1556   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1557     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': p_po_hdr_id,'||p_po_hdr_id||'p_po_line_id,'||p_po_line_id||'p_line_loc_id,'||p_line_loc_id);
1558   END IF;
1559      jai_po_tax_pkg.calculate_tax(
1560      p_type                 =>    'STANDARDPO'
1561     ,p_header_id            =>    p_po_hdr_id
1562     ,P_line_id              =>    p_po_line_id
1563     ,p_line_loc_id          =>    p_line_loc_id
1564     ,p_line_quantity        =>    p_qty
1565     ,p_price                =>    p_price*p_qty
1566     ,p_line_uom_code        =>    p_unit_code
1567     ,p_tax_amount           =>    v_tax_amt
1568     ,p_assessable_value     =>    v_assessable_value
1569     ,p_vat_assess_value     =>    v_vat_assess_value
1570     ,p_item_id              =>    v_item_id
1571     );
1572       /*jai_po_tax_pkg.calc_tax(
1573         p_type => 'STANDARDPO',
1574         p_header_id => p_po_hdr_id,
1575         P_line_id => p_po_line_id,
1576         p_line_location_id => p_line_loc_id,
1577         p_line_focus_id => v_line_focus_id,
1578         p_line_quantity => p_qty,
1579         p_base_value => p_price*p_qty,
1580         p_line_uom_code => p_unit_code,
1581         p_tax_amount => v_tax_amt,
1582         p_assessable_value => v_assessable_value,
1583         p_vat_assess_value => v_vat_assess_value,
1584         p_item_id => v_item_id,
1585         p_po_curr => v_currency
1586 
1587 
1588       );*/
1589 
1590   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1591     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
1592   END IF;
1593  EXCEPTION
1594    WHEN OTHERS THEN
1595 
1596 
1597      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1598         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
1599      END IF;
1600      app_exception.raise_exception;
1601 
1602   END copy_quot_taxes;
1603 /*
1604   REM +======================================================================+
1605   REM Created By         :  Wenqiong Zhou
1606   REM Creation Date      :  Jun 1, 2012
1607   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
1608   REM SubProgram Name    :  process_po
1609   REM Type               :  processing API
1610   REM Purpose            :  Processing PO's creation or updation
1611   REM TDD Reference      :
1612   REM
1613   REM Assumptions        :
1614   REM
1615   REM Parameter            IN/OUT         Type     Required     Description and Purpose
1616   REM -------------------- ------  ------------    ----------   ------------------------------------
1617   REM pn_header_id          IN           NUMBER        Y         Indiate which PO is processed.
1618   REM pv_action             IN           VARCHAR2      Y         Indiate action is inserting/updating.
1619   REM  CALLED BY
1620   REM  JAI_TAX_PROCESSING_PKG.calculate_tax
1621   REM +================================================================================================+
1622 */
1623 PROCEDURE process_po (pn_header_id IN Number, pv_action IN VARCHAR2) IS
1624 CURSOR c_po_line IS
1625 SELECT * FROM PO_LINES_ALL
1626 WHERE Po_Header_Id = pn_header_id;
1627 
1628 CURSOR c_po_header IS
1629 SELECT * FROM PO_HEADERS_ALL
1630 WHERE po_header_id = pn_header_id;
1631 
1632 
1633 CURSOR c_old_curr_vendor IS
1634 SELECT DISTINCT currency,vendor_id, vendor_site_id
1635 FROM JAI_PO_LINE_LOCATIONS
1636 WHERE po_header_id = pn_header_id;
1637 
1638 CURSOR Line_exist_cur(line_id NUMBER) IS
1639 SELECT 1
1640 FROM JAI_PO_LINE_LOCATIONS
1641 WHERE  Po_Line_Id = line_id;
1642 
1643 l_api_name                    CONSTANT VARCHAR2(30) := 'process_po';
1644 lv_action               VARCHAR2(10);
1645 r_po_line               PO_LINES_ALL%ROWTYPE;
1646 r_po_header             PO_HEADERS_ALL%ROWTYPE;
1647 
1648 v_old_currency          PO_HEADERS_ALL.currency_code%TYPE;
1649 v_old_vendor_id         PO_HEADERS_ALL.vendor_id%TYPE;
1650 
1651 v_old_vendor_site_id    PO_HEADERS_ALL.vendor_site_id%TYPE;
1652 
1653 
1654 v_curr                  VARCHAR2(100);
1655 v_Last_Upd_Dt           Date;
1656 v_Last_Upd_By           Number;
1657 v_Last_Upd_Login        Number;
1658 v_line_exists_flag      NUMBER;
1659 
1660 
1661 BEGIN
1662 
1663     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1664      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
1665     END IF;
1666     OPEN c_po_header;
1667     FETCH c_po_header INTO r_po_header;
1668     CLOSE c_po_header;
1669 
1670 
1671     v_last_upd_dt           := r_po_header.Last_Update_Date ;
1672     v_last_upd_by           := r_po_header.Last_Updated_By;
1673     v_last_upd_login        := r_po_header.Last_Update_Login;
1674 
1675 
1676    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1677      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'pv_action:'||pv_action);
1678     END IF;
1679   IF pv_action = JAI_CONSTANTS.inserting THEN
1680     FOR r_po_line IN c_po_line
1681     LOOP
1682       process_po_line(r_po_line.po_line_id,r_po_header,pv_action);
1683     END LOOP;
1684   ELSIF pv_action = JAI_CONSTANTS.updating THEN
1685 
1686     OPEN c_old_curr_vendor;
1687     FETCH c_old_curr_vendor INTO v_old_currency,v_old_vendor_id,v_old_vendor_site_id;
1688     CLOSE c_old_curr_vendor;
1689     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1690      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_old_currency:'||v_old_currency||'v_old_vendor_id:'||nvl(v_old_vendor_id,-999)||'v_old_vendor_site_id:'||nvl(v_old_vendor_site_id,-999));
1691     END IF;
1692 
1693     /*************************************** Part 1 ********************************************************/
1694     /************************** Processing For Po Currency Changed *************************************/
1695     /*******************************************************************************************************/
1696     IF nvl(v_old_currency,'INR') <> r_po_header.Currency_Code THEN
1697       jai_po_proc_pkg.update_currency(
1698                         pn_po_header_id        => pn_header_id
1699                        ,pv_old_currency        => v_old_currency
1700                        ,pv_currency            => r_po_header.Currency_Code
1701                        ,pd_last_upd_dt         => v_last_upd_dt
1702                        ,pn_last_upd_by         => v_last_upd_by
1703                        ,pn_last_upd_login      => v_last_upd_login
1704                        );
1705 
1706     END IF;
1707    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1708      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after po curr changed checking');
1709     END IF;
1710     /*************************************** Part 2 ********************************************************/
1711     /************************** Processing For Po Vendor Changed *************************************/
1712     /*******************************************************************************************************/
1713     IF nvl(v_old_vendor_id,-999) <> nvl(r_po_header.vendor_id,-999) OR ( NVL(v_old_vendor_site_id, -999 ) <> NVL( r_po_header.Vendor_Site_Id, -999 ) )  THEN
1714        IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1715          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after po vendor changed checking');
1716         END IF;
1717        process_vendor_change(
1718         prec_po_header   => r_po_header
1719        ,pn_old_vendor_id => v_old_vendor_id);
1720 /* Move to function process_vendor_change.
1721         IF jai_cmn_utils_pkg.validate_po_type(p_style_id => r_po_header.style_id) = FALSE THEN
1722           return;
1723         END IF;
1724 
1725 
1726          \*For vendor merge case, need update vendor in receipts,
1727            todo, seemed to be removed since vendor merge case will not fire through ZX.
1728          *\
1729          IF v_vendor_id <> v_old_vendor_id then
1730             for c_receipt_rec in
1731             (
1732             select  distinct shipment_header_id, shipment_line_id
1733             from    rcv_transactions
1734             where   po_header_id = v_vendor_id
1735             )
1736            loop
1737               update JAI_RCV_LINE_TAXES
1738               set    vendor_id = v_vendor_id
1739               where  shipment_header_id =  c_receipt_rec.shipment_header_id
1740               and    shipment_line_id =  c_receipt_rec.shipment_line_id
1741               and    vendor_id  = v_old_vendor_id;
1742            end loop;
1743          END IF;
1744 
1745         FOR Rec IN Lines_Cur  LOOP
1746             FOR Rec1 IN Line_Loc_Cur( Rec.Po_Line_Id )  LOOP
1747               v_po_line_id  := Rec.po_line_id;
1748               v_line_loc_id := Rec1.Line_Location_Id;
1749 
1750               OPEN c_po_line_dtl(Rec.Po_Line_Id);
1751               FETCH c_po_line_dtl INTO r_po_line;
1752               CLOSE c_po_line_dtl;
1753 
1754               v_item_id := r_po_line.item_id;
1755 
1756               OPEN Fetch_UOMCode_Cur(r_po_line.Unit_Meas_Lookup_Code);
1757               FETCH Fetch_UOMCode_Cur INTO v_uom_code;
1758               CLOSE Fetch_UOMCode_Cur;
1759 
1760               OPEN tax_override_flag_cur(v_Vendor_Id,v_Vendor_Site_Id);
1761               FETCH tax_override_flag_cur INTO v_override_flag;
1762               CLOSE tax_override_flag_cur;
1763               \*Only for PO Type Blank and Quotation, line_location_id is null*\
1764               IF NVL( v_line_loc_id, -999 ) = -999  THEN
1765 
1766                 IF nvl(v_override_flag,'N') = 'Y' THEN
1767                     delete_po_taxes(pn_po_hdr_id => pn_header_id);
1768 
1769                     jai_po_tax_pkg.copy_reqn_taxes
1770                     (
1771                     v_Vendor_Id ,
1772                     v_Vendor_Site_Id,
1773                     pn_header_id ,
1774                     v_po_line_id,
1775                     Rec1.Line_Location_Id,
1776                     v_Type_Lookup_Code ,
1777                     v_Quot_Class_Code ,
1778                     v_Ship_To_Loc_Id ,
1779                     v_Org_Id ,
1780                     v_Cre_Dt ,
1781                     v_Cre_By ,
1782                     v_Last_Upd_Dt ,
1783                     v_Last_Upd_By ,
1784                     v_Last_Upd_Login
1785                     ,v_rate
1786                     ,v_rate_type
1787                     ,v_rate_date
1788                     ,v_curr
1789                     );
1790                     RETURN;
1791                 END IF;
1792 
1793                 jai_po_proc_pkg.process_po_tax_wrapper ( prec_po_line => r_po_line);
1794               ELSE
1795                 OPEN PO_Line_loc_cur(v_line_loc_id);
1796                 FETCH PO_Line_loc_cur INTO r_po_line_loc;
1797                 CLOSE PO_Line_loc_cur;
1798 
1799                 jai_po_proc_pkg.process_po_tax_wrapper ( prec_po_location => r_po_line_loc);
1800               END IF;
1801             END LOOP;
1802         END LOOP;
1803         jai_po_proc_pkg.update_vendor(
1804                       pn_po_header_id        => pn_header_id
1805                      ,pn_old_vendor_id       => v_old_vendor_id
1806                      ,pn_vendor_id           => v_vendor_id
1807                      ,pn_vendor_site_id      => v_vendor_site_id
1808                      ,pd_last_upd_dt         => v_last_upd_dt
1809                      ,pn_last_upd_by         => v_last_upd_by
1810                      ,pn_last_upd_login      => v_last_upd_login
1811                      );
1812 */
1813     END IF;
1814 
1815     FOR r_po_line IN c_po_line
1816     LOOP
1817       v_line_exists_flag  := 0;
1818       OPEN Line_exist_cur(r_po_line.po_line_id);
1819       FETCH Line_exist_cur INTO v_line_exists_flag;
1820       CLOSE Line_exist_cur;
1821 
1822       IF nvl(v_line_exists_flag,0) = 1 THEN
1823         lv_action := JAI_CONSTANTS.updating;
1824       ELSE
1825         lv_action := JAI_CONSTANTS.inserting;
1826       END IF;
1827         jai_po_proc_pkg.process_po_line(r_po_line.po_line_id,r_po_header,lv_action);
1828 
1829     END LOOP;
1830 
1831 
1832   END IF;
1833   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1834     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
1835   END IF;
1836  EXCEPTION
1837    WHEN OTHERS THEN
1838      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1839         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
1840      END IF;
1841      app_exception.raise_exception;
1842 
1843 END process_po;
1844 /*
1845   REM +==========================================================================================================+
1846   REM Created By         :  Wenqiong Zhou
1847   REM Creation Date      :  Jun 1, 2012
1848   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
1849   REM SubProgram Name    :  process_po_line
1850   REM Type               :  processing API
1851   REM Purpose            :  Processing PO Line's creation or updation
1852   REM TDD Reference      :
1853   REM
1854   REM Assumptions        :
1855   REM
1856   REM Parameter            IN/OUT         Type                Required     Description and Purpose
1857   REM -------------------- ------  ------------------------   ----------   ------------------------------------
1858   REM pn_line_id            IN       NUMBER                    Y           Indiate which PO line is processed.
1859   REM pr_po_header          IN       PO_HEADERS_ALL%ROWTYPE    N           PO header info.
1860   REM pv_action             IN       VARCHAR2                  Y           Indiate action is inserting/updating.
1861   REM  CALLED BY
1862   REM  jai_po_proc_pkg.process_po
1863   REM +=========================================================================================================+
1864 */
1865 PROCEDURE process_po_line (pn_line_id IN NUMBER,pr_po_header IN PO_HEADERS_ALL%ROWTYPE  DEFAULT NULL, pv_action IN VARCHAR2) IS
1866 
1867 l_api_name                    CONSTANT VARCHAR2(30) := 'process_po_line';
1868 v_po_line_id            NUMBER;
1869 v_po_hdr_id             NUMBER;
1870 v_frm_hdr_id            NUMBER;
1871 v_frm_po_line_id        NUMBER;
1872 v_currency              po_headers_all.Currency_Code%TYPE;
1873 v_type_lookup_code      po_headers_all.type_lookup_code%TYPE;
1874 v_from_type_lookup_code po_headers_all.from_type_lookup_code%TYPE;
1875 v_quot_class_code       po_headers_all.from_type_lookup_code%TYPE;
1876 v_qty                   NUMBER;
1877 v_price                 NUMBER;
1878 v_uom_code              VARCHAR2(30);
1879 v_line_uom              VARCHAR2(30);
1880 v_vendor_id             NUMBER;
1881 v_vendor_site_id        NUMBER;
1882 v_line_loc_id           NUMBER;
1883 v_line_loc_exists       NUMBER;
1884 v_hook_value            VARCHAR2(10);
1885 v_style_id              NUMBER;
1886 v_Cre_Dt                Date;
1887 v_Cre_By                Number;
1888 v_Last_Upd_Dt           Date;
1889 v_Last_Upd_By           Number;
1890 v_Last_Upd_Login        Number;
1891 v_src_line_id           NUMBER;
1892 
1893 CURSOR c_po_line IS
1894 SELECT * FROM PO_LINES_ALL
1895 WHERE po_line_id = pn_line_id;
1896 
1897 CURSOR po_line_loc_cur IS
1898 SELECT * FROM PO_LINE_LOCATIONS_ALL
1899 WHERE po_line_id = pn_line_id
1900 AND   shipment_type NOT IN ( 'SCHEDULED', 'BLANKET' );
1901 
1902 CURSOR Fetch_Lines_Cur IS
1903 SELECT Line_location_id, Price_Override, Quantity
1904 FROM   Po_Line_Locations_All
1905 WHERE  Po_Line_Id = pn_line_id;
1906 
1907 CURSOR Fetch_UOMCode_Cur( v_uom IN VARCHAR2 ) IS
1908 SELECT Uom_Code
1909 FROM   Mtl_Units_Of_Measure
1910 WHERE  Unit_Of_Measure = v_uom;
1911 
1912 CURSOR c_get_po_line_loc_details IS
1913 SELECT DISTINCT item_id
1914 FROM JAI_PO_LINE_LOCATIONS
1915 WHERE po_line_id = pn_line_id;
1916 
1917 CURSOR c_po_line_loc_exists(cn_line_loc_id NUMBER) IS
1918 SELECT 1
1919 FROM JAI_PO_LINE_LOCATIONS
1920 WHERE Line_Location_Id = cn_line_loc_id;
1921 
1922 CURSOR c_po_hdr(cn_po_hdr_id NUMBER) IS
1923 SELECT *
1924 FROM PO_HEADERS_ALL
1925 WHERE po_header_id = cn_po_hdr_id;
1926 
1927 
1928 --  Cursor definition for picking po_line_id from po_lines_all
1929 CURSOR fetch_line_id_cur(p_from_hdr_id NUMBER, p_line_num NUMBER) IS
1930   SELECT pla.Po_Line_Id
1931   FROM po_lines_all pla, po_headers_all pha
1932   WHERE pha.Po_Header_Id = p_from_hdr_id
1933   AND pla.line_num = p_line_num
1934   AND pha.po_header_id =pla.po_header_id;
1935 
1936 r_po_header            PO_HEADERS_ALL%ROWTYPE;
1937 r_po_line              PO_LINES_ALL%ROWTYPE;
1938 r_po_line_loc          PO_LINE_LOCATIONS_ALL%ROWTYPE;
1939 r_jai_po_line_loc      c_get_po_line_loc_details%ROWTYPE;
1940 
1941 BEGIN
1942 
1943    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1944      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
1945      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'po_line_id:'||pn_line_id||'pv_action:'||pv_action);
1946    END IF;
1947 
1948 
1949   OPEN c_po_line;
1950   FETCH c_po_line INTO r_po_line;
1951   CLOSE c_po_line;
1952   v_po_line_id            := r_po_line.Po_Line_Id ;
1953   v_po_hdr_id             := r_po_line.Po_Header_Id;
1954   v_frm_hdr_id            := r_po_line.From_HEADER_Id;
1955   v_frm_po_line_id        := r_po_line.From_Line_Id;
1956   v_qty                   := r_po_line.QUANTITY;
1957   v_line_uom              := r_po_line.Unit_Meas_Lookup_Code;
1958   v_hook_value            := 'TRUE';
1959 
1960   v_hook_value := jai_cmn_hook_pkg.Ja_In_po_lines_all(
1961         r_po_line.PO_LINE_ID                          ,
1962         r_po_line.PO_HEADER_ID                       ,
1963         r_po_line.LINE_TYPE_ID                       ,
1964         r_po_line.LINE_NUM                            ,
1965         r_po_line.ITEM_ID                                  ,
1966         r_po_line.ITEM_REVISION                            ,
1967         r_po_line.CATEGORY_ID                              ,
1968         r_po_line.ITEM_DESCRIPTION                         ,
1969         r_po_line.UNIT_MEAS_LOOKUP_CODE                    ,
1970         r_po_line.QUANTITY_COMMITTED                       ,
1971         r_po_line.COMMITTED_AMOUNT                         ,
1972         r_po_line.ALLOW_PRICE_OVERRIDE_FLAG                ,
1973         r_po_line.NOT_TO_EXCEED_PRICE                      ,
1974         r_po_line.LIST_PRICE_PER_UNIT                      ,
1975         r_po_line.UNIT_PRICE                               ,
1976         r_po_line.QUANTITY                                 ,
1977         r_po_line.UN_NUMBER_ID                             ,
1978         r_po_line.HAZARD_CLASS_ID                          ,
1979         r_po_line.NOTE_TO_VENDOR                           ,
1980         r_po_line.FROM_HEADER_ID                           ,
1981         r_po_line.FROM_LINE_ID                             ,
1982         r_po_line.MIN_ORDER_QUANTITY                       ,
1983         r_po_line.MAX_ORDER_QUANTITY                       ,
1984         r_po_line.QTY_RCV_TOLERANCE                        ,
1985         r_po_line.OVER_TOLERANCE_ERROR_FLAG                ,
1986         r_po_line.MARKET_PRICE                             ,
1987         r_po_line.UNORDERED_FLAG                           ,
1988         r_po_line.CLOSED_FLAG                   ,
1989         r_po_line.USER_HOLD_FLAG                           ,
1990         r_po_line.CANCEL_FLAG                              ,
1991         r_po_line.CANCELLED_BY                             ,
1992         r_po_line.CANCEL_DATE                              ,
1993         r_po_line.CANCEL_REASON                            ,
1994         r_po_line.FIRM_STATUS_LOOKUP_CODE                  ,
1995         r_po_line.FIRM_DATE                                ,
1996         r_po_line.VENDOR_PRODUCT_NUM                       ,
1997         r_po_line.CONTRACT_NUM                             ,
1998         r_po_line.TAXABLE_FLAG                             ,
1999         r_po_line.TAX_NAME                                 ,
2000         r_po_line.TYPE_1099                                ,
2001         r_po_line.CAPITAL_EXPENSE_FLAG                     ,
2002         r_po_line.NEGOTIATED_BY_PREPARER_FLAG              ,
2003         r_po_line.ATTRIBUTE_CATEGORY                       ,
2004         r_po_line.ATTRIBUTE1                               ,
2005         r_po_line.ATTRIBUTE2                               ,
2006         r_po_line.ATTRIBUTE3                               ,
2007         r_po_line.ATTRIBUTE4                               ,
2008         r_po_line.ATTRIBUTE5                               ,
2009         r_po_line.ATTRIBUTE6                               ,
2010         r_po_line.ATTRIBUTE7                               ,
2011         r_po_line.ATTRIBUTE8                               ,
2012         r_po_line.ATTRIBUTE9                               ,
2013         r_po_line.ATTRIBUTE10                              ,
2014         r_po_line.REFERENCE_NUM                            ,
2015         r_po_line.ATTRIBUTE11                              ,
2016         r_po_line.ATTRIBUTE12                              ,
2017         r_po_line.ATTRIBUTE13                              ,
2018         r_po_line.ATTRIBUTE14                              ,
2019         r_po_line.ATTRIBUTE15                              ,
2020         r_po_line.MIN_RELEASE_AMOUNT                       ,
2021         r_po_line.PRICE_TYPE_LOOKUP_CODE                   ,
2022         r_po_line.CLOSED_CODE                              ,
2023         r_po_line.PRICE_BREAK_LOOKUP_CODE                  ,
2024         r_po_line.USSGL_TRANSACTION_CODE                   ,
2025         r_po_line.GOVERNMENT_CONTEXT                       ,
2026         r_po_line.REQUEST_ID                               ,
2027         r_po_line.PROGRAM_APPLICATION_ID                   ,
2028         r_po_line.PROGRAM_ID                               ,
2029         r_po_line.PROGRAM_UPDATE_DATE                      ,
2030         r_po_line.CLOSED_DATE                              ,
2031         r_po_line.CLOSED_REASON                            ,
2032         r_po_line.CLOSED_BY                                ,
2033         r_po_line.TRANSACTION_REASON_CODE                  ,
2034         r_po_line.ORG_ID                                   ,
2035         r_po_line.QC_GRADE                                 ,
2036         r_po_line.BASE_UOM                                 ,
2037         r_po_line.BASE_QTY                                 ,
2038         r_po_line.SECONDARY_UOM                            ,
2039         r_po_line.SECONDARY_QTY                            ,
2040         r_po_line.LINE_REFERENCE_NUM                       ,
2041         r_po_line.PROJECT_ID                               ,
2042         r_po_line.TASK_ID                                  ,
2043         r_po_line.EXPIRATION_DATE                          ,
2044         r_po_line.TAX_CODE_ID
2045 );
2046 
2047   IF v_hook_value = 'FALSE' THEN
2048       RETURN;
2049   END IF;
2050 
2051   IF pr_po_header.po_header_id IS NULL THEN
2052     OPEN c_po_hdr(v_po_hdr_id);
2053     FETCH c_po_hdr INTO r_po_header;
2054     CLOSE c_po_hdr;
2055   ELSE
2056     r_po_header := pr_po_header;
2057   END IF;
2058 
2059   v_type_lookup_code         := r_po_header.type_lookup_code;
2060   v_from_type_lookup_code    := r_po_header.from_type_lookup_code;
2061   v_quot_class_code          := r_po_header.Quotation_Class_Code;
2062   v_Vendor_id                := r_po_header.vendor_id;
2063   v_Vendor_Site_Id           := r_po_header.vendor_site_id;
2064   v_currency                 := r_po_header.currency_code;
2065   v_style_id                 := r_po_header.style_id;
2066 
2067 
2068   OPEN Fetch_UOMCode_Cur(v_line_uom);
2069   FETCH Fetch_UOMCode_Cur INTO v_uom_code;
2070   CLOSE Fetch_UOMCode_Cur;
2071 
2072   IF pv_action = JAI_CONSTANTS.inserting THEN
2073     IF v_type_lookup_code = 'BLANKET' OR v_quot_class_code = 'CATALOG' THEN
2074       IF v_type_lookup_code = 'BLANKET' AND v_frm_hdr_id IS NOT NULL THEN
2075 
2076 
2077       OPEN Fetch_Line_Id_Cur( v_frm_hdr_id,r_po_line.line_num);
2078       FETCH Fetch_Line_Id_Cur INTO v_src_line_id;
2079       CLOSE Fetch_Line_Id_Cur;
2080 
2081         jai_po_proc_pkg.copy_source_taxes(
2082                          p_type                    => 'L'
2083                         ,p_po_hdr_id               => r_po_line.po_header_id
2084                         ,p_po_line_id              => r_po_line.PO_LINE_ID
2085                         ,p_po_line_loc_id          => NULL
2086                         ,p_line_num                => r_po_line.line_num
2087                         ,p_ship_num                => NULL
2088                         ,p_item_id                 => r_po_line.item_id
2089                         ,p_from_hdr_id             => v_frm_hdr_id
2090                         ,p_from_type_lookup_code   => v_from_type_lookup_code
2091                         ,p_source_line_id          => v_src_line_id
2092                         ,p_source_loc_id           => NULL
2093                         ,p_cre_dt                  => r_po_line.Creation_Date
2094                         ,p_cre_by                  => r_po_line.Created_By
2095                         ,p_last_upd_dt             => r_po_line.Last_Update_Date
2096                         ,p_last_upd_by             => r_po_line.Last_Updated_By
2097                         ,p_last_upd_login          => r_po_line.Last_Update_Login
2098                        );
2099         RETURN;
2100       END IF;
2101 
2102 
2103       jai_po_proc_pkg.process_po_tax_wrapper(prec_po_line => r_po_line);
2104     END IF;
2105 
2106     FOR r_po_line_loc IN po_line_loc_cur
2107     LOOP
2108       process_po_shipment_line(r_po_line_loc.LINE_LOCATION_ID,
2109                                  pr_po_header=> r_po_header,
2110                                  pr_po_line  => r_po_line,
2111                                  pv_action   => JAI_CONSTANTS.inserting);
2112     END LOOP;
2113   ELSE-- pv_action = JAI_CONSTANTS.updating
2114 
2115     IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
2116       return;
2117     END IF;
2118 
2119     IF v_type_lookup_code IN ('STANDARD', 'PLANNED') AND (v_frm_hdr_id is NOT NULL and v_frm_po_line_id is NOT NULL) THEN
2120         Open Fetch_Lines_Cur;
2121         Fetch Fetch_Lines_Cur INTO v_line_loc_id, v_price, v_qty;
2122         Close Fetch_Lines_Cur;
2123 
2124          /*commented out since it has been processed by trigger
2125            jai_po_proc_pkg.copy_quot_taxes(
2126                        p_line_loc_id        =>   v_line_loc_id
2127                       ,p_po_hdr_id          =>   v_po_hdr_id
2128                       ,p_po_line_id         =>   v_po_line_id
2129                       ,p_item_id            =>   r_po_line.item_id
2130                       ,p_qty                =>   v_qty
2131                       ,p_frm_hdr_id         =>   v_frm_hdr_id
2132                       ,p_frm_line_id        =>   v_frm_po_line_id
2133                       ,p_price              =>   v_price
2134                       ,p_unit_code          =>   v_uom_code
2135                       ,p_cre_dt             =>   v_cre_dt
2136                       ,p_cre_by             =>   v_cre_by
2137                       ,p_last_upd_dt        =>   v_last_upd_dt
2138                       ,p_last_upd_by        =>   v_last_upd_by
2139                       ,p_last_upd_login     =>   v_last_upd_login
2140                       );*/
2141     END IF;
2142     /*Get old item id from JAI table*/
2143     OPEN c_get_po_line_loc_details;
2144     FETCH c_get_po_line_loc_details INTO r_jai_po_line_loc;
2145     CLOSE c_get_po_line_loc_details;
2146     IF r_jai_po_line_loc.item_id <> r_po_line.item_id THEN
2147       FOR r_po_line_loc IN po_line_loc_cur
2148       LOOP
2149        jai_po_proc_pkg.process_po_tax_wrapper (prec_po_location =>r_po_line_loc);
2150       END LOOP;
2151     END IF;
2152 
2153     FOR r_po_line_loc IN po_line_loc_cur
2154     LOOP
2155       v_line_loc_exists := 0;
2156       OPEN c_po_line_loc_exists(r_po_line_loc.LINE_LOCATION_ID);
2157       FETCH c_po_line_loc_exists INTO v_line_loc_exists;
2158       CLOSE c_po_line_loc_exists;
2159       IF nvl(v_line_loc_exists,0) = 1 THEN
2160         jai_po_proc_pkg.process_po_shipment_line(r_po_line_loc.LINE_LOCATION_ID,
2161                                                  pr_po_header=> r_po_header,
2162                                                  pr_po_line  => r_po_line,
2163                                                  pv_action   => JAI_CONSTANTS.updating);
2164 
2165       ELSE
2166         jai_po_proc_pkg.process_po_shipment_line(
2167                                  r_po_line_loc.LINE_LOCATION_ID,
2168                                  pr_po_header=>r_po_header,
2169                                  pr_po_line  =>r_po_line,
2170                                  pv_action   =>JAI_CONSTANTS.inserting);
2171       END IF;
2172     END LOOP;
2173   END IF;
2174   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2175     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
2176   END IF;
2177  EXCEPTION
2178    WHEN OTHERS THEN
2179 
2180 
2181      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2182         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2183      END IF;
2184      app_exception.raise_exception;
2185 
2186 END process_po_line;
2187 /*
2188   REM +==========================================================================================================+
2189   REM Created By         :  Wenqiong Zhou
2190   REM Creation Date      :  Jun 1, 2012
2191   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2192   REM SubProgram Name    :  process_po_shipment_line
2193   REM Type               :  processing API
2194   REM Purpose            :  Processing PO Shipment Line's creation or updation
2195   REM TDD Reference      :
2196   REM
2197   REM Assumptions        :
2198   REM
2199   REM Parameter            IN/OUT         Type                Required     Description and Purpose
2200   REM -------------------- ------  ------------------------   ----------   ------------------------------------
2201   REM pn_line_loc_id        IN       NUMBER                    Y           Indiate which PO shipment line is processed.
2202   REM pr_po_header          IN       PO_HEADERS_ALL%ROWTYPE    N           PO header info.
2203   REM pr_po_line            IN       PO_LINES_ALL%ROWTYPE      N           PO line info.
2204   REM pv_action             IN       VARCHAR2                  Y           Indiate action is inserting/updating.
2205   REM  CALLED BY
2206   REM  jai_po_proc_pkg.process_po
2207   REM +=========================================================================================================+
2208 */
2209 PROCEDURE process_po_shipment_line (pn_line_loc_id IN NUMBER,pr_po_header IN PO_HEADERS_ALL%ROWTYPE DEFAULT NULL,pr_po_line IN PO_LINES_ALL%ROWTYPE DEFAULT NULL, pv_action IN VARCHAR2) IS
2210 l_api_name                    CONSTANT VARCHAR2(30) := 'process_po_shipment_line';
2211 r_get_po_line_loc_details JAI_PO_LINE_LOCATIONS%ROWTYPE;
2212 po_line_loc_rec           PO_LINE_LOCATIONS_ALL%ROWTYPE;
2213 old_po_line_loce_rec      PO_LINE_LOCATIONS_ALL%ROWTYPE;
2214 
2215 
2216 lv_retro_price_flag        VARCHAR2(1) := 'N';
2217 lv_process_flag            VARCHAR2(10);
2218 lv_process_message         VARCHAR2(2000);
2219 
2220 
2221 v_po_hdr_id                NUMBER;
2222 v_po_line_id               NUMBER;
2223 v_orig_ship_id             NUMBER;
2224 v_shipment_type            VARCHAR2(25);
2225 v_uom_measure              VARCHAR2(30);
2226 v_uom_code                 VARCHAR2(30);
2227 v_shipment_num             NUMBER;
2228 v_src_ship_id              NUMBER;
2229 v_from_line_loc_id         NUMBER;
2230 v_from_line_id             NUMBER;
2231 v_from_hdr_id              NUMBER;
2232 v_line_loc_id              NUMBER;
2233 v_price                    NUMBER;
2234 v_qty                      NUMBER;
2235 v_cre_dt                   DATE  ;
2236 v_cre_by                   NUMBER ;
2237 v_last_upd_dt              DATE  ;
2238 v_last_upd_by              NUMBER ;
2239 v_last_upd_login           NUMBER ;
2240 
2241 v_ship_to_org_id           NUMBER;
2242 v_from_type_lookup_code    VARCHAR2(25);
2243 v_type_lookup_code         VARCHAR2(25);
2244 v_vendor_id                NUMBER;
2245 v_vendor_site_id           NUMBER;
2246 v_currency                 VARCHAR2(3);
2247 v_ship_loc_id              NUMBER;
2248 v_quot_from_hdr_id         NUMBER;
2249 v_service_type_code        VARCHAR2(30);
2250 v_count                    NUMBER;
2251 
2252 v_item_id                  NUMBER;
2253 v_line_num                 PO_LINES_ALL.line_num%TYPE;
2254 v_style_id                 NUMBER;
2255 
2256 v_q_line_id                NUMBER;
2257 v_hook_value               VARCHAR2(10);
2258 v_src_loc_id               NUMBER;
2259 
2260 CURSOR po_line_loc_cur IS
2261 SELECT * FROM PO_LINE_LOCATIONS_ALL
2262 WHERE line_location_id = pn_line_loc_id;
2263 
2264 CURSOR c_get_po_line_loc_details (p_line_location_id IN NUMBER) IS
2265 SELECT *
2266 FROM JAI_PO_LINE_LOCATIONS
2267 WHERE line_location_id = p_line_location_id;
2268 
2269 CURSOR fetch_uomcode_cur IS
2270 SELECT uom_code
2271 FROM   mtl_units_of_measure
2272 WHERE unit_of_measure = v_uom_measure;
2273 
2274 CURSOR Fetch_Count_Cur (cn_po_hdr_id NUMBER)IS
2275   SELECT COUNT(Line_Location_Id)
2276   FROM   JAI_PO_LINE_LOCATIONS
2277   WHERE  Po_Header_Id = cn_po_hdr_id ;
2278 
2279 CURSOR c_po_hdr(cn_po_hdr_id NUMBER) IS
2280 SELECT *
2281 FROM PO_HEADERS_ALL
2282 WHERE po_header_id = cn_po_hdr_id;
2283 
2284 CURSOR c_po_line(cn_po_line_id NUMBER) IS
2285 SELECT *
2286 FROM PO_LINES_ALL
2287 WHERE po_line_id = cn_po_line_id;
2288 
2289 --  Cursor definition for picking line_location_id from po_line_locations_all
2290 CURSOR Fetch_Line_Loc_Id_Cur(p_from_hdr_id NUMBER,p_line_num NUMBER ,p_item_id NUMBER, p_ship_num NUMBER) IS
2291   SELECT jpll.Line_Location_Id
2292   FROM po_line_locations_all plla, JAI_PO_LINE_LOCATIONS jpll,
2293     po_lines_all pla, po_headers_all pha
2294   WHERE pha.po_header_id = pla.po_header_id
2295   AND jpll.line_location_id = plla.line_location_id
2296   AND pha.po_header_id = plla.po_header_id
2297   AND pla.po_line_id = plla.po_line_id
2298   AND pha.po_header_id = p_from_hdr_id
2299   AND pla.line_num = p_line_num
2300   AND pla.item_id = p_item_id
2301   AND plla.shipment_num = p_ship_num;
2302 
2303 r_po_header            PO_HEADERS_ALL%ROWTYPE;
2304 r_po_line              PO_LINES_ALL%ROWTYPE;
2305 
2306 BEGIN
2307 
2308   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2309      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
2310      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'pn_line_loc_id:'||pn_line_loc_id||'pv_action:'||pv_action);
2311   END IF;
2312   OPEN po_line_loc_cur;
2313   FETCH po_line_loc_cur INTO po_line_loc_rec;
2314   CLOSE po_line_loc_cur;
2315 
2316    v_hook_value := jai_cmn_hook_pkg.Ja_In_po_line_locations_all(
2317     po_line_loc_rec.LINE_LOCATION_ID                  ,
2318     po_line_loc_rec.PO_HEADER_ID                      ,
2319     po_line_loc_rec.PO_LINE_ID                        ,
2320     po_line_loc_rec.QUANTITY                                 ,
2321     po_line_loc_rec.QUANTITY_RECEIVED                        ,
2322     po_line_loc_rec.QUANTITY_ACCEPTED                        ,
2323     po_line_loc_rec.QUANTITY_REJECTED                        ,
2324     po_line_loc_rec.QUANTITY_BILLED                          ,
2325     po_line_loc_rec.QUANTITY_CANCELLED                       ,
2326     po_line_loc_rec.UNIT_MEAS_LOOKUP_CODE                    ,
2327     po_line_loc_rec.PO_RELEASE_ID                            ,
2328     po_line_loc_rec.SHIP_TO_LOCATION_ID                      ,
2329     po_line_loc_rec.SHIP_VIA_LOOKUP_CODE                     ,
2330     po_line_loc_rec.NEED_BY_DATE                             ,
2331     po_line_loc_rec.PROMISED_DATE                            ,
2332     po_line_loc_rec.LAST_ACCEPT_DATE                         ,
2333     po_line_loc_rec.PRICE_OVERRIDE                           ,
2334     po_line_loc_rec.ENCUMBERED_FLAG                          ,
2335     po_line_loc_rec.ENCUMBERED_DATE                          ,
2336     po_line_loc_rec.UNENCUMBERED_QUANTITY                    ,
2337     po_line_loc_rec.FOB_LOOKUP_CODE                          ,
2338     po_line_loc_rec.FREIGHT_TERMS_LOOKUP_CODE                ,
2339     po_line_loc_rec.TAXABLE_FLAG                             ,
2340     po_line_loc_rec.TAX_NAME                                 ,
2341     po_line_loc_rec.ESTIMATED_TAX_AMOUNT                     ,
2342     po_line_loc_rec.FROM_HEADER_ID                           ,
2343     po_line_loc_rec.FROM_LINE_ID                             ,
2344     po_line_loc_rec.FROM_LINE_LOCATION_ID                    ,
2345     po_line_loc_rec.START_DATE                               ,
2346     po_line_loc_rec.END_DATE                                 ,
2347     po_line_loc_rec.LEAD_TIME                                ,
2348     po_line_loc_rec.LEAD_TIME_UNIT                           ,
2349     po_line_loc_rec.PRICE_DISCOUNT                           ,
2350     po_line_loc_rec.TERMS_ID                                 ,
2351     po_line_loc_rec.APPROVED_FLAG                            ,
2352     po_line_loc_rec.APPROVED_DATE                            ,
2353     po_line_loc_rec.CLOSED_FLAG                              ,
2354     po_line_loc_rec.CANCEL_FLAG                              ,
2355     po_line_loc_rec.CANCELLED_BY                             ,
2356     po_line_loc_rec.CANCEL_DATE                              ,
2357     po_line_loc_rec.CANCEL_REASON                            ,
2358     po_line_loc_rec.FIRM_STATUS_LOOKUP_CODE                  ,
2359     po_line_loc_rec.FIRM_DATE                                ,
2360     po_line_loc_rec.ATTRIBUTE_CATEGORY                       ,
2361     po_line_loc_rec.ATTRIBUTE1                               ,
2362     po_line_loc_rec.ATTRIBUTE2                               ,
2363     po_line_loc_rec.ATTRIBUTE3                               ,
2364     po_line_loc_rec.ATTRIBUTE4                               ,
2365     po_line_loc_rec.ATTRIBUTE5                               ,
2366     po_line_loc_rec.ATTRIBUTE6                               ,
2367     po_line_loc_rec.ATTRIBUTE7                               ,
2368     po_line_loc_rec.ATTRIBUTE8                               ,
2369     po_line_loc_rec.ATTRIBUTE9                               ,
2370     po_line_loc_rec.ATTRIBUTE10                              ,
2371     po_line_loc_rec.UNIT_OF_MEASURE_CLASS                    ,
2372     po_line_loc_rec.ENCUMBER_NOW                             ,
2373     po_line_loc_rec.ATTRIBUTE11                              ,
2374     po_line_loc_rec.ATTRIBUTE12                              ,
2375     po_line_loc_rec.ATTRIBUTE13                              ,
2376     po_line_loc_rec.ATTRIBUTE14                              ,
2377     po_line_loc_rec.ATTRIBUTE15                              ,
2378     po_line_loc_rec.INSPECTION_REQUIRED_FLAG                 ,
2379     po_line_loc_rec.RECEIPT_REQUIRED_FLAG                    ,
2380     po_line_loc_rec.QTY_RCV_TOLERANCE                        ,
2381     po_line_loc_rec.QTY_RCV_EXCEPTION_CODE                   ,
2382     po_line_loc_rec.ENFORCE_SHIP_TO_LOCATION_CODE            ,
2383     po_line_loc_rec.ALLOW_SUBSTITUTE_RECEIPTS_FLAG           ,
2384     po_line_loc_rec.DAYS_EARLY_RECEIPT_ALLOWED               ,
2385     po_line_loc_rec.DAYS_LATE_RECEIPT_ALLOWED                ,
2386     po_line_loc_rec.RECEIPT_DAYS_EXCEPTION_CODE              ,
2387     po_line_loc_rec.INVOICE_CLOSE_TOLERANCE                  ,
2388     po_line_loc_rec.RECEIVE_CLOSE_TOLERANCE                  ,
2389     po_line_loc_rec.SHIP_TO_ORGANIZATION_ID                  ,
2390     po_line_loc_rec.SHIPMENT_NUM                             ,
2391     po_line_loc_rec.SOURCE_SHIPMENT_ID                       ,
2392     po_line_loc_rec.SHIPMENT_TYPE                      ,
2393     po_line_loc_rec.CLOSED_CODE                              ,
2394     po_line_loc_rec.REQUEST_ID                               ,
2395     po_line_loc_rec.PROGRAM_APPLICATION_ID                   ,
2396     po_line_loc_rec.PROGRAM_ID                               ,
2397     po_line_loc_rec.PROGRAM_UPDATE_DATE                      ,
2398     po_line_loc_rec.USSGL_TRANSACTION_CODE                   ,
2399     po_line_loc_rec.GOVERNMENT_CONTEXT                       ,
2400     po_line_loc_rec.RECEIVING_ROUTING_ID                     ,
2401     po_line_loc_rec.ACCRUE_ON_RECEIPT_FLAG                   ,
2402     po_line_loc_rec.CLOSED_REASON                            ,
2403     po_line_loc_rec.CLOSED_DATE                              ,
2404     po_line_loc_rec.CLOSED_BY                                ,
2405     po_line_loc_rec.ORG_ID                                   ,
2406     po_line_loc_rec.QUANTITY_SHIPPED                         ,
2407     po_line_loc_rec.COUNTRY_OF_ORIGIN_CODE                   ,
2408     po_line_loc_rec.TAX_USER_OVERRIDE_FLAG                   ,
2409     po_line_loc_rec.MATCH_OPTION                             ,
2410     po_line_loc_rec.TAX_CODE_ID                              ,
2411     po_line_loc_rec.CALCULATE_TAX_FLAG                       ,
2412     po_line_loc_rec.CHANGE_PROMISED_DATE_REASON
2413   );
2414 
2415   IF v_hook_value = 'FALSE' THEN
2416     RETURN;
2417   END IF;
2418   v_po_hdr_id           := po_line_loc_rec.PO_HEADER_ID;
2419   v_po_line_id          := po_line_loc_rec.PO_LINE_ID;
2420   v_orig_ship_id        := po_line_loc_rec.original_shipment_id;
2421   v_shipment_type       := po_line_loc_rec.SHIPMENT_TYPE;
2422   v_shipment_num        := po_line_loc_rec.Shipment_Num;
2423   v_src_ship_id         := po_line_loc_rec.Source_Shipment_Id;
2424   v_from_line_loc_id    := po_line_loc_rec.From_Line_Location_Id;
2425   v_from_line_id        := po_line_loc_rec.From_Line_Id;
2426   v_from_hdr_id         := po_line_loc_rec.From_Header_Id;
2427   v_line_loc_id         := po_line_loc_rec.Line_Location_Id;
2428   v_price               := po_line_loc_rec.Price_Override;
2429   v_qty                 := po_line_loc_rec.Quantity;
2430   v_cre_dt              := po_line_loc_rec.Creation_Date;
2431   v_cre_by              := po_line_loc_rec.Created_By;
2432   v_last_upd_dt         := po_line_loc_rec.Last_Update_Date ;
2433   v_last_upd_by         := po_line_loc_rec.Last_Updated_By;
2434   v_last_upd_login      := po_line_loc_rec.Last_Update_Login;
2435   v_uom_measure         := po_line_loc_rec.Unit_Meas_Lookup_Code;
2436   v_orig_ship_id        := po_line_loc_rec.original_shipment_id;
2437   v_ship_to_org_id      := po_line_loc_rec.SHIP_TO_ORGANIZATION_ID;
2438 
2439   IF pr_po_header.po_header_id IS NULL THEN
2440     OPEN c_po_hdr(v_po_hdr_id);
2441     FETCH c_po_hdr INTO r_po_header;
2442     CLOSE c_po_hdr;
2443   ELSE
2444     r_po_header := pr_po_header;
2445   END IF;
2446 
2447   IF pr_po_line.po_line_id IS NULL THEN
2448     OPEN c_po_line(v_po_line_id);
2449     FETCH c_po_line INTO r_po_line;
2450     CLOSE c_po_line;
2451   ELSE
2452     r_po_line   := pr_po_line;
2453   END IF;
2454 
2455   v_from_type_lookup_code  := r_po_header.from_type_lookup_code;
2456   v_quot_from_hdr_id       := r_po_header.from_header_id;
2457   v_type_lookup_code       := r_po_header.type_lookup_code;
2458   v_Vendor_id              := r_po_header.vendor_id;
2459   v_Vendor_site_id         := r_po_header.vendor_site_id;
2460   v_currency               := r_po_header.currency_code;
2461   v_style_id               := r_po_header.style_id;
2462 
2463   v_item_id                := r_po_line.item_id;
2464   v_line_num               := r_po_line.line_num;
2465 
2466   IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
2467      return;
2468   END IF;
2469 
2470   OPEN fetch_uomcode_cur;
2471   FETCH fetch_uomcode_cur INTO v_uom_code;
2472   CLOSE fetch_uomcode_cur;
2473 
2474   IF pv_action = JAI_CONSTANTS.inserting THEN
2475 
2476     IF is_split_line(v_orig_ship_id, v_po_hdr_id, v_po_line_id) = TRUE THEN
2477        -- process for split line;
2478         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2479            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_orig_ship_id:'||v_orig_ship_id||'its split line.');
2480         END IF;
2481 
2482        jai_po_proc_pkg.process_split_line(v_orig_ship_id ,v_line_loc_id,v_qty,v_price,v_type_lookup_code);
2483     ELSE
2484 
2485       IF v_shipment_type NOT IN ( 'SCHEDULED' , 'BLANKET' ) THEN
2486         --Process for copy documents, from quotation to po and po to po.
2487         IF v_from_type_lookup_code IN ('QUOTATION','PLANNED','BLANKET','STANDARD') AND v_quot_from_hdr_id IS NOT NULL THEN
2488 
2489            OPEN Fetch_Count_Cur(v_quot_from_hdr_id);
2490            FETCH Fetch_Count_Cur INTO v_count;
2491            CLOSE Fetch_Count_Cur;
2492 
2493            IF v_count > 0 THEN
2494               IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2495                  FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Process for copy documents,copy_source_taxes');
2496               END IF;
2497               OPEN Fetch_Line_Loc_Id_Cur(v_quot_from_hdr_id,v_line_num,v_item_id,v_shipment_num);
2498               FETCH Fetch_Line_Loc_Id_Cur INTO v_src_loc_id ;
2499               CLOSE Fetch_Line_Loc_Id_Cur;
2500               jai_po_proc_pkg.copy_source_taxes(
2501                                                  p_type                    => 'S'
2502                                                 ,p_po_hdr_id               => v_po_hdr_id
2503                                                 ,p_po_line_id              => v_po_line_id
2504                                                 ,p_po_line_loc_id          => v_line_loc_id
2505                                                 ,p_line_num                => v_line_num
2506                                                 ,p_ship_num                => v_shipment_num
2507                                                 ,p_item_id                 => v_item_id
2508                                                 ,p_from_hdr_id             => v_quot_from_hdr_id
2509                                                 ,p_from_type_lookup_code   => v_from_type_lookup_code
2510                                                 ,p_source_line_id          => NULL
2511                                                 ,p_source_loc_id           => v_src_loc_id
2512                                                 ,p_cre_dt                  => v_cre_dt
2513                                                 ,p_cre_by                  => v_cre_by
2514                                                 ,p_last_upd_dt             => v_last_upd_dt
2515                                                 ,p_last_upd_by             => v_last_upd_by
2516                                                 ,p_last_upd_login          => v_last_upd_login
2517                                                );
2518               RETURN;
2519            END IF;
2520         END IF;
2521 
2522         v_q_line_id    := v_from_line_id;
2523         --If the following if is satisfied, it implies that PO has been linked by a quotation.
2524         IF v_type_lookup_code IN ( 'STANDARD', 'PLANNED') AND v_q_line_id IS NOT NULL THEN
2525             OPEN fetch_uomcode_cur;
2526             FETCH fetch_uomcode_cur INTO v_uom_code;
2527             CLOSE fetch_uomcode_cur;
2528             IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2529                FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Process for copy documents from quotation,copy_quot_taxes');
2530             END IF;
2531             /*jai_po_proc_pkg.copy_quot_taxes(
2532                                            p_line_loc_id        =>   v_line_loc_id
2533                                           ,p_po_hdr_id          =>   v_po_hdr_id
2534                                           ,p_po_line_id         =>   v_po_line_id
2535                                           ,p_item_id            =>   v_item_id
2536                                           ,p_qty                =>   v_qty
2537                                           ,p_frm_hdr_id         =>   v_from_hdr_id
2538                                           ,p_frm_line_id        =>   v_from_line_id
2539                                           ,p_price              =>   v_price
2540                                           ,p_unit_code          =>   v_uom_code
2541                                           ,p_cre_dt             =>   v_cre_dt
2542                                           ,p_cre_by             =>   v_cre_by
2543                                           ,p_last_upd_dt        =>   v_last_upd_dt
2544                                           ,p_last_upd_by        =>   v_last_upd_by
2545                                           ,p_last_upd_login     =>   v_last_upd_login
2546                         );*/
2547              RETURN;
2548         END IF;
2549 
2550       END IF;
2551       IF v_type_lookup_code = 'QUOTATION' OR v_shipment_type IN ( 'SCHEDULED' , 'BLANKET' ) THEN
2552         JAI_AVLIST_VALIDATE_PKG.Check_AvList_Validation( pn_party_id          => v_vendor_id
2553                                                        , pn_party_site_id     => v_vendor_site_id
2554                                                        , pn_inventory_item_id => v_item_id
2555                                                        , pd_ordered_date      => trunc(sysdate)
2556                                                        , pv_party_type        => 'V'
2557                                                        , pn_pricing_list_id   => null
2558                                                        );
2559       END IF;
2560       jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec);
2561     END IF;
2562 
2563     jai_po_proc_pkg.process_dist(prec_po_location=>po_line_loc_rec);
2564 
2565     jai_po_proc_pkg.copy_req_to_po(prec_po_location => po_line_loc_rec);
2566 
2567   ELSIF pv_action = JAI_CONSTANTS.updating THEN
2568     open c_get_po_line_loc_details(v_line_loc_id);
2569     fetch c_get_po_line_loc_details into r_get_po_line_loc_details;
2570     close c_get_po_line_loc_details;
2571 
2572 
2573     IF po_line_loc_rec.RETROACTIVE_DATE IS NOT NULL
2574      AND (r_get_po_line_loc_details.PRICE_OVERRIDE <> v_price)
2575     THEN
2576       lv_retro_price_flag := 'Y';
2577     END IF;
2578 
2579     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2580        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'old_price:'||r_get_po_line_loc_details.PRICE_OVERRIDE||'new_price:'||v_price||'lv_retro_price_flag is'||lv_retro_price_flag);
2581     END IF;
2582  --   IF (r_get_po_line_loc_details.quantity <> v_qty OR lv_retro_price_flag = 'Y') THEN
2583 
2584       IF lv_retro_price_flag = 'Y' THEN
2585         old_po_line_loce_rec := po_line_loc_rec;
2586 
2587         old_po_line_loce_rec.PRICE_OVERRIDE := r_get_po_line_loc_details.PRICE_OVERRIDE;
2588 
2589         JAI_RETRO_PRC_PKG.Insert_Price_Changes( pr_old             => old_po_line_loce_rec
2590                                               , pr_new             => po_line_loc_rec
2591                                               , pv_process_flag    => lv_process_flag
2592                                               , pv_process_message => lv_process_message
2593                                               );
2594 
2595         IF lv_process_flag IN ('EE', 'UE')
2596         THEN
2597           FND_MESSAGE.SET_NAME ('JA','JAI_EXCEPTION_OCCURED');
2598           FND_MESSAGE.SET_TOKEN('JAI_PROCESS_MSG','JAI_PO_PROC_PKG.JAI_PO_SHIPMENT_LINE.Err:'||lv_process_message);
2599           app_exception.raise_exception;
2600         END IF;
2601       END IF;
2602 
2603       jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec,pv_retro_price_flag => lv_retro_price_flag);
2604    -- END IF;
2605 
2606 
2607   END IF;
2608   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2609     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
2610   END IF;
2611  EXCEPTION
2612    WHEN OTHERS THEN
2613 
2614 
2615      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2616         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2617      END IF;
2618      app_exception.raise_exception;
2619 
2620 END process_po_shipment_line;
2621 /*
2622   REM +======================================================================+
2623   REM Created By         :  Wenqiong Zhou
2624   REM Creation Date      :  Jun 1, 2012
2625   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2626   REM SubProgram Name    :  update_currency
2627   REM Type               :  table handler API
2628   REM Purpose            :  Update currency in JAI_PO_LINE_LOCATIONS and JAI_PO_TAXES
2629   REM
2630   REM TDD Reference      :
2631   REM
2632   REM Assumptions        :
2633   REM
2634   REM Parameter                IN/OUT         Type     Required     Description and Purpose
2635   REM -----------------------  ------  ------------    ----------   ------------------------------------
2636   REM pn_po_header_id           IN           NUMBER        Y         PO header id
2637   REM pv_old_currency           IN           VARCHAR2      Y         old currency before change.
2638   REM pv_currency               IN           VARCHAR2      Y         new currency after change.
2639   REM pd_last_upd_dt            IN           DATE          Y         last update date
2640   REM pn_last_upd_by            IN           NUMBER        Y         last update by
2641   REM pn_last_upd_login         IN           NUMBER        Y         last update login
2642   REM  CALLED BY
2643   REM  process_po
2644   REM +================================================================================================+
2645 */
2646 PROCEDURE update_currency(pn_po_header_id NUMBER,pv_old_currency VARCHAR2, pv_currency VARCHAR2,pd_last_upd_dt IN DATE,
2647     pn_last_upd_by IN NUMBER,
2648     pn_last_upd_login IN NUMBER
2649  ) IS
2650  l_api_name                    CONSTANT VARCHAR2(30) := 'update_currency';
2651 BEGIN
2652 
2653     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2654      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
2655    END IF;
2656    UPDATE JAI_PO_TAXES
2657        SET    Currency = pv_currency,
2658              Last_Update_Date = pd_last_upd_dt,
2659              Last_Updated_By = pn_last_upd_by,
2660              Last_Update_Login = pn_last_upd_login
2661        WHERE  Po_Header_Id = pn_po_header_id
2662          AND   Currency = pv_old_currency;
2663    UPDATE JAI_PO_LINE_LOCATIONS
2664       SET Currency = pv_currency,
2665            Last_Update_Date = pd_last_upd_dt,
2666            Last_Updated_By = pn_last_upd_by,
2667            Last_Update_Login = pn_last_upd_login
2668    WHERE  Po_Header_Id = pn_po_header_id;
2669 
2670   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2671     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
2672   END IF;
2673  EXCEPTION
2674    WHEN OTHERS THEN
2675 
2676 
2677      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2678         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2679      END IF;
2680      app_exception.raise_exception;
2681 
2682 END update_currency;
2683 /*
2684   REM +======================================================================+
2685   REM Created By         :  Wenqiong Zhou
2686   REM Creation Date      :  Jun 1, 2012
2687   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2688   REM SubProgram Name    :  update_vendor
2689   REM Type               :  table handler API
2690   REM Purpose            :  Update currency in JAI_PO_LINE_LOCATIONS and JAI_PO_TAXES
2691   REM
2692   REM TDD Reference      :
2693   REM
2694   REM Assumptions        :
2695   REM
2696   REM Parameter                IN/OUT         Type     Required     Description and Purpose
2697   REM -----------------------  ------  ------------    ----------   ------------------------------------
2698   REM pn_po_header_id            IN          NUMBER        Y         PO header id
2699   REM pn_old_vendor_id           IN          NUMBER        Y         old vendor id before change.
2700   REM pn_vendor_id               IN          NUMBER        Y         new vendor id after change.
2701   REM pn_vendor_site_id          IN          NUMBER        Y         new vendor id after change.
2702   REM pd_last_upd_dt             IN          DATE          Y         last update date
2703   REM pn_last_upd_by             IN          NUMBER        Y         last update by
2704   REM pn_last_upd_login          IN          NUMBER        Y         last update login
2705   REM  CALLED BY
2706   REM  process_po
2707   REM +================================================================================================+
2708 */
2709 PROCEDURE update_vendor
2710 (
2711   pn_po_header_id   NUMBER
2712  ,pn_old_vendor_id  IN NUMBER
2713  ,pn_vendor_id      IN NUMBER
2714  ,pn_vendor_site_id IN NUMBER
2715  ,pd_last_upd_dt    IN DATE
2716  ,pn_last_upd_by    IN NUMBER
2717  ,pn_last_upd_login IN NUMBER
2718 ) IS
2719   l_api_name CONSTANT VARCHAR2(30) := 'update_vendor';
2720 BEGIN
2721 
2722   IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
2723     fnd_log.STRING(g_level_procedure,g_module_name || l_api_name || '.BEGIN',g_pkg_name || ': ' || l_api_name || '()+');
2724   END IF;
2725 
2726   UPDATE jai_po_taxes
2727   SET vendor_id = pn_vendor_id, last_update_date = pd_last_upd_dt,
2728       last_updated_by = pn_last_upd_by, last_update_login = pn_last_upd_login
2729   WHERE po_header_id = pn_po_header_id
2730     AND vendor_id = pn_old_vendor_id;
2731 
2732    UPDATE JAI_PO_LINE_LOCATIONS
2733       SET vendor_id = pn_vendor_id,
2734           vendor_site_id = pn_vendor_site_id,
2735            Last_Update_Date = pd_last_upd_dt,
2736            Last_Updated_By = pn_last_upd_by,
2737            Last_Update_Login = pn_last_upd_login
2738    WHERE  Po_Header_Id = pn_po_header_id;
2739   IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
2740     fnd_log.STRING(g_level_procedure,g_module_name || l_api_name || '.END',g_pkg_name || ': ' || l_api_name);
2741   END IF;
2742 EXCEPTION
2743   WHEN OTHERS THEN
2744 
2745     IF (g_level_unexpected >= g_current_runtime_level) THEN
2746       fnd_log.STRING(g_level_unexpected,g_module_name || l_api_name,SQLERRM);
2747     END IF;
2748     app_exception.raise_exception;
2749 
2750 END update_vendor;
2751 /*
2752   REM +======================================================================+
2753   REM Created By         :  Wenqiong Zhou
2754   REM Creation Date      :  Jun 1, 2012
2755   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2756   REM SubProgram Name    :  delete_jai_po_lines
2757   REM Type               :  table handler API
2758   REM Purpose            :  delete JAI_PO_LINE_LOCATIONS
2759   REM
2760   REM TDD Reference      :
2761   REM
2762   REM Assumptions        :
2763   REM
2764   REM Parameter                IN/OUT         Type     Required     Description and Purpose
2765   REM -----------------------  ------  ------------    ----------   ------------------------------------
2766   REM pn_line_id                IN          NUMBER        N         PO line id
2767   REM pn_line_loc_id            IN          NUMBER        N         PO line location id
2768   REM  CALLED BY
2769   REM  process_po_tax_wrapper
2770   REM +================================================================================================+
2771 */
2772 PROCEDURE delete_jai_po_lines(pn_line_id IN NUMBER DEFAULT NULL,pn_line_loc_id IN NUMBER DEFAULT NULL)
2773 IS
2774 l_api_name                    CONSTANT VARCHAR2(30) := 'delete_jai_po_lines';
2775 BEGIN
2776 
2777     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2778      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
2779    END IF;
2780   IF pn_line_loc_id IS NOT NULL THEN
2781     DELETE FROM JAI_PO_LINE_LOCATIONS WHERE Line_Location_Id = pn_line_loc_id;
2782   ELSIF pn_line_id IS NOT NULL THEN
2783     DELETE FROM JAI_PO_LINE_LOCATIONS WHERE po_line_id = pn_line_id;
2784   END IF;
2785   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2786     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
2787   END IF;
2788  EXCEPTION
2789    WHEN OTHERS THEN
2790 
2791 
2792      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2793         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2794      END IF;
2795      app_exception.raise_exception;
2796 
2797 END delete_jai_po_lines;
2798 /*
2799   REM +======================================================================+
2800   REM Created By         :  Wenqiong Zhou
2801   REM Creation Date      :  Jun 1, 2012
2802   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2803   REM SubProgram Name    :  delete_po_taxes
2804   REM Type               :  table handler API
2805   REM Purpose            :  delete data from JAI_PO_TAXES
2806   REM
2807   REM TDD Reference      :
2808   REM
2809   REM Assumptions        :
2810   REM
2811   REM Parameter                IN/OUT         Type     Required     Description and Purpose
2812   REM -----------------------  ------  ------------    ----------   ------------------------------------
2813   REM pn_po_hdr_id              IN          NUMBER        N         PO header id
2814   REM pn_line_id                IN          NUMBER        N         PO line id
2815   REM pn_line_loc_id            IN          NUMBER        N         PO line location id
2816   REM  CALLED BY
2817   REM  process_po_tax_wrapper
2818   REM +================================================================================================+
2819 */
2820 PROCEDURE delete_po_taxes(pn_po_hdr_id IN NUMBER DEFAULT NULL,pn_po_line_id IN NUMBER DEFAULT NULL ,pn_line_loc_id IN NUMBER  DEFAULT NULL)
2821 IS
2822 l_api_name                    CONSTANT VARCHAR2(30) := 'delete_po_taxes';
2823 BEGIN
2824 
2825     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2826      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
2827    END IF;
2828 IF pn_po_hdr_id IS NOT NULL THEN
2829   DELETE FROM JAI_PO_TAXES
2830         WHERE po_header_id = pn_po_hdr_id;
2831 ELSIF pn_po_line_id IS NOT NULL THEN
2832    DELETE FROM JAI_PO_TAXES
2833  WHERE Po_Line_Id = pn_po_line_id
2834    AND NVL( Line_Location_Id, -999 ) = NVL( pn_line_loc_id, -999 );
2835 END IF;
2836   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2837     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
2838   END IF;
2839  EXCEPTION
2840    WHEN OTHERS THEN
2841 
2842 
2843      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2844         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2845      END IF;
2846      app_exception.raise_exception;
2847 
2848 END delete_po_taxes;
2849 /*
2850   REM +======================================================================+
2851   REM Created By         :  Wenqiong Zhou
2852   REM Creation Date      :  Jun 1, 2012
2853   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2854   REM SubProgram Name    :  delete_po_taxes
2855   REM Type               :  table handler API
2856   REM Purpose            :  insert data in JAI_PO_LINE_LOCATIONS
2857   REM
2858   REM TDD Reference      :
2859   REM
2860   REM Assumptions        :
2861   REM
2862   REM Parameter                IN/OUT         Type     Required     Description and Purpose
2863   REM -----------------------  ------  ------------    ----------   ------------------------------------
2864   REM v_line_loc_id             IN           NUMBER        N         PO shipment line id
2865   REM v_po_hdr_id               IN           NUMBER        Y         PO header id
2866   REM v_po_line_id              IN           NUMBER        Y         PO line id
2867   REM v_vendor_id               IN           NUMBER        N         PO vendor id
2868   REM v_vendor_site_id          IN           NUMBER        N         PO vendor site id
2869   REM v_item_id                 IN           NUMBER        Y         Item id
2870   REM v_qty                     IN           NUMBER        Y         Quantity of item
2871   REM v_price_override          IN           NUMBER        N         price of item
2872   REM v_tax_category_id         IN           NUMBER        N         tax category id of the line
2873   REM v_tax_amount              IN           NUMBER        N         tax amount of the line
2874   REM v_total_amount            IN           NUMBER        N         total amount of the line
2875   REM v_currency                IN           VARCHAR2      N         currency of the PO
2876   REM v_tax_modified_flag       IN           VARCHAR2      N         tax modified flag
2877   REM flag                      IN           VARCHAR2      Y         flag to indicate insert or udate
2878   REM v_cre_dt                  IN           DATE          Y         creation date
2879   REM v_cre_by                  IN           NUMBER        Y         created by
2880   REM v_last_upd_dt             IN           DATE          Y         last update date
2881   REM v_last_upd_by             IN           NUMBER        Y         last update by
2882   REM v_last_upd_login          IN           NUMBER        Y         last update login
2883   REM v_line_focus_id          OUT           NUMBER        Y         Return the line focus id after insert.
2884   REM
2885   REM Call by  process_po_tax_wrapper
2886   REM +================================================================================================+
2887 */
2888 PROCEDURE insert_jai_line_locs
2889                 (
2890                   v_line_loc_id IN NUMBER,
2891                   v_po_hdr_id IN NUMBER,
2892                   v_po_line_id IN NUMBER,
2893                   v_cre_dt IN DATE,
2894                   v_cre_by IN NUMBER,
2895                   v_last_upd_dt IN DATE,
2896                   v_last_upd_by IN NUMBER,
2897                   v_last_upd_login IN NUMBER,
2898                   flag IN VARCHAR2,
2899                   v_item_id IN NUMBER ,
2900                   v_vendor_id IN NUMBER ,
2901                   v_vendor_site_id IN NUMBER,
2902                   v_qty   IN NUMBER DEFAULT NULL,
2903                   v_price_override IN NUMBER DEFAULT NULL,
2904                   v_tax_category_id IN NUMBER DEFAULT NULL,
2905                   v_tax_amount IN NUMBER DEFAULT NULL,
2906                   v_total_amount IN NUMBER DEFAULT NULL,
2907                   v_currency     IN VARCHAR2,
2908                   v_tax_modified_flag IN VARCHAR2 DEFAULT 'N',
2909                   v_line_focus_id     OUT NOCOPY NUMBER
2910                 )
2911    IS
2912    l_api_name                    CONSTANT VARCHAR2(30) := 'insert_jai_line_locs';
2913    v_service_type_code  VARCHAR2(30);
2914    v_seq_val     NUMBER;
2915 
2916 
2917     CURSOR Fetch_Focus_Id IS
2918     SELECT JAI_PO_LINE_LOCATIONS_S.NEXTVAL
2919     FROM   Dual;
2920 
2921     CURSOR cur_Line_Focus_Id IS
2922     SELECT Line_Focus_Id
2923     FROM JAI_PO_LINE_LOCATIONS
2924      WHERE  Line_Location_Id = v_line_Loc_id AND
2925                   Po_Line_Id = v_po_line_id        AND
2926                   Po_Header_Id = v_po_hdr_id;
2927    BEGIN
2928 
2929     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2930      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
2931    END IF;
2932       v_service_type_code :=jai_ar_rctla_trigger_pkg.get_service_type(v_vendor_id,v_vendor_site_id,'V');
2933 
2934 
2935        IF flag = 'I' THEN
2936 
2937           OPEN  Fetch_Focus_Id;
2938           FETCH Fetch_Focus_Id INTO v_seq_val;
2939           CLOSE Fetch_Focus_Id;
2940           INSERT INTO JAI_PO_LINE_LOCATIONS( Line_Focus_Id, Line_Location_Id, Po_Line_Id, Po_Header_Id,
2941                               Tax_Modified_Flag, Tax_Amount, Total_Amount,currency,
2942                         Creation_Date, Created_By, Last_Update_Date, Last_Updated_By,tax_category_id,Last_Update_Login,Service_type_code
2943                  ,item_id,vendor_id, vendor_site_id ,quantity
2944                  ,PRICE_OVERRIDE
2945                    )
2946            VALUES
2947                 ( v_seq_val, v_line_loc_id , v_po_line_id, v_po_hdr_id,
2948                   v_tax_modified_flag, v_tax_amount, v_total_amount,v_currency,
2949                   v_cre_dt, v_cre_by, v_last_upd_dt, v_last_upd_by,v_tax_category_id,
2950                   v_last_upd_login,v_service_type_code
2951                   , v_item_id,
2952                     v_vendor_id,v_vendor_site_id, v_qty,
2953                     v_price_override
2954                   );
2955 
2956        ELSIF flag = 'U' THEN
2957 
2958            UPDATE JAI_PO_LINE_LOCATIONS
2959            SET
2960                   Last_Update_Date = v_last_upd_dt,
2961                   Last_Updated_By  = v_last_upd_by,
2962                   Last_Update_Login = v_last_upd_login
2963                  ,item_id                  = v_item_id
2964                  ,price_override           = v_price_override
2965                  ,vendor_id                = v_vendor_id
2966                  ,vendor_site_id           = v_vendor_site_id
2967                  ,quantity                 = v_qty
2968                  ,currency                 = v_currency
2969            WHERE  Line_Location_Id = v_line_Loc_id AND
2970                   Po_Line_Id = v_po_line_id        AND
2971                   Po_Header_Id = v_po_hdr_id;
2972 
2973            OPEN cur_Line_Focus_Id;
2974            FETCH cur_Line_Focus_Id INTO v_seq_val;
2975            CLOSE cur_Line_Focus_Id;
2976        END IF;
2977        v_line_focus_id := v_seq_val;
2978   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2979     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
2980   END IF;
2981  EXCEPTION
2982    WHEN OTHERS THEN
2983 
2984 
2985      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2986         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2987      END IF;
2988      app_exception.raise_exception;
2989 
2990   END insert_jai_line_locs;
2991 /*
2992   REM +======================================================================+
2993   REM Created By         :  Wenqiong Zhou
2994   REM Creation Date      :  Jun 1, 2012
2995   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
2996   REM SubProgram Name    :  get_assessable_value
2997   REM Type               :  Utility API
2998   REM Purpose            :  Get assessable value and vat assessable value
2999   REM
3000   REM TDD Reference      :
3001   REM
3002   REM Assumptions        :
3003   REM
3004   REM Parameter                IN/OUT         Type     Required     Description and Purpose
3005   REM -----------------------  ------  ------------    ----------   ------------------------------------
3006   REM pn_po_hdr_id               IN           NUMBER        Y         PO header id
3007   REM pn_vendor_id               IN           NUMBER        Y         PO vendor id
3008   REM pn_vendor_site_id          IN           NUMBER        Y         PO vendor site id
3009   REM pn_item_id                 IN           NUMBER        Y         Item id
3010   REM pn_qty                     IN           NUMBER        Y         Quantity of item
3011   REM pn_price                   IN           NUMBER        N         price of item
3012   REM pv_uom_code                IN           VARCHAR2      Y         UOM code of itme
3013   REM pv_currency                IN           VARCHAR2      Y         currency of the PO
3014   REM pv_action                  IN           VARCHAR2      N         Indicate action is insert or update
3015   REM pn_conv_rate               IN            NUMBER       N         convert rate for currency to functional currency
3016   REM pn_assessable_value        OUT           NUMBER       Y         Return the assessable value calculated.
3017   REM pn_vat_assess_value        OUT           NUMBER       Y         Return the VAT assessable value calculated.
3018   REM
3019   REM Call by  process_po_tax_wrapper
3020   REM +================================================================================================+
3021 */
3022 PROCEDURE get_assessable_value(
3023 pn_po_hdr_id        IN NUMBER,
3024 pn_vendor_id        IN NUMBER,
3025 pn_vendor_site_id   IN NUMBER,
3026 pn_item_id          IN NUMBER,
3027 pn_price            IN NUMBER,
3028 pn_qty              IN NUMBER,
3029 pv_uom_code         IN VARCHAR2,
3030 pv_currency         IN VARCHAR2,
3031 pv_action           IN VARCHAR2 DEFAULT NULL,
3032 pn_conv_rate        IN NUMBER  DEFAULT 1,
3033 pn_assessable_value OUT NOCOPY NUMBER,
3034 pn_vat_assess_value OUT NOCOPY NUMBER
3035 )
3036 IS
3037   l_api_name                CONSTANT VARCHAR2(30) := 'get_assessable_value';
3038   v_assessable_value        NUMBER;
3039   ln_vat_assess_value       NUMBER;
3040   ln_default_price          NUMBER;
3041 BEGIN
3042 
3043     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3044      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
3045      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'parameters:pn_vendor_id,'||to_char(nvl(pn_vendor_id,0))||'pn_vendor_site_id,'||to_char(nvl(pn_vendor_site_id,0))
3046      ||'pn_item_id,'||to_char(nvl(pn_item_id,0))||'pn_price,'||to_char(nvl(pn_price,0))||'pn_qty,'||to_char(nvl(pn_qty,0))||'pv_uom_code,'||to_char(nvl(pv_uom_code,0))
3047      ||'pn_po_hdr_id,'||to_char(nvl(pn_po_hdr_id,0))||'pv_currency,'||to_char(nvl(pv_currency,0))||'pv_action,'||pv_action);
3048    END IF;
3049 
3050    v_assessable_value := jai_cmn_setup_pkg.get_po_assessable_value(pn_vendor_id
3051                                                                   ,pn_vendor_site_id
3052                                                                   ,pn_item_id
3053                                                                   ,pv_uom_code);
3054    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3055      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after get_po_assessable_value,v_assessable_value:'||to_char(nvl(v_assessable_value,0)));
3056    END IF;
3057 
3058    IF nvl(v_assessable_value,0) = 0 THEN
3059       v_assessable_value := pn_price * pn_qty;
3060    ELSE
3061       v_assessable_value := v_assessable_value * pn_qty;
3062 	  v_assessable_value := v_assessable_value * nvl(pn_conv_rate,1);--Modified by Junjian for bug#14729941 on 10-Oct-2012
3063    END IF;
3064 
3065    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3066      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after ja_in_po_func_curr,v_assessable_value:'||to_char(nvl(v_assessable_value,0))||'factor:'||pn_conv_rate);
3067    END IF;
3068 
3069    IF pv_action = JAI_CONSTANTS.inserting THEN
3070       ln_default_price := 0;
3071    ELSE
3072       ln_default_price := pn_price;
3073    END IF;
3074    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3075      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'parameters:ln_default_price,'||to_char(nvl(ln_default_price,0)));
3076    END IF;
3077     ln_vat_assess_value := jai_general_pkg.ja_in_vat_assessable_value(p_party_id          => pn_vendor_id
3078                                                                        ,p_party_site_id     => pn_vendor_site_id
3079                                                                        ,p_inventory_item_id => pn_item_id
3080                                                                        ,p_uom_code          => pv_uom_code
3081                                                                        ,p_default_price     => ln_default_price
3082                                                                        ,p_ass_value_date    => trunc(SYSDATE)
3083                                                                        ,p_party_type        => 'V');
3084 
3085       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3086         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after ja_in_vat_assessable_value,ln_vat_assess_value:'||to_char(nvl(ln_vat_assess_value,0))||'factor:'||v_assessable_value);
3087       END IF;
3088       IF nvl(ln_vat_assess_value,0) = 0 THEN
3089         ln_vat_assess_value := pn_price * pn_qty;
3090       ELSE
3091         ln_vat_assess_value := ln_vat_assess_value * pn_qty;
3092         ln_vat_assess_value := ln_vat_assess_value * nvl(pn_conv_rate,1);
3093 
3094          IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3095            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after ja_in_po_func_curr,ln_vat_assess_value:'||to_char(nvl(ln_vat_assess_value,0))||'factor:'||v_assessable_value);
3096          END IF;
3097       END IF;
3098       pn_assessable_value  := v_assessable_value;
3099       pn_vat_assess_value  := ln_vat_assess_value;
3100   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3101    FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after all,ln_vat_assess_value:'||to_char(nvl(ln_vat_assess_value,0))||'v_assessable_value:'||v_assessable_value);
3102     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3103   END IF;
3104  EXCEPTION
3105    WHEN OTHERS THEN
3106 
3107 
3108      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3109         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3110      END IF;
3111      app_exception.raise_exception;
3112 
3113 END get_assessable_value;
3114 /*
3115   REM +======================================================================+
3116   REM Created By         :  Wenqiong Zhou
3117   REM Creation Date      :  Jun 1, 2012
3118   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
3119   REM SubProgram Name    :  is_split_line
3120   REM Type               :  Utility API
3121   REM Purpose            :  To check the new shipment line is split from old line or not.
3122   REM
3123   REM TDD Reference      :
3124   REM
3125   REM Assumptions        :
3126   REM
3127   REM Parameter                IN/OUT         Type     Required     Description and Purpose
3128   REM -----------------------  ------  ------------    ----------   ------------------------------------
3129   REM pn_orig_ship_id             IN           NUMBER        Y         Original Shipment ID.
3130   REM pn_po_hdr_id                IN           NUMBER        Y         PO header id
3131   REM pn_po_line_id               IN           NUMBER        Y         PO Line id
3132   REM
3133   REM Call by  process_po_tax_wrapper
3134   REM +================================================================================================+
3135 */
3136 FUNCTION is_split_line(pn_orig_ship_id IN NUMBER, pn_po_hdr_id IN  NUMBER, pn_po_line_id IN NUMBER) RETURN BOOLEAN IS
3137 l_api_name                    CONSTANT VARCHAR2(30) := 'is_split_line';
3138 CURSOR c_get_po_line_loc_details (p_line_location_id IN NUMBER) IS
3139 SELECT po_header_id, po_line_id
3140 FROM JAI_PO_LINE_LOCATIONS
3141 WHERE line_location_id = p_line_location_id;
3142   lb_split_line_flag BOOLEAN;
3143   ln_orig_po_hdr_id  NUMBER;
3144   ln_orig_po_line_id NUMBER;
3145 BEGIN
3146 
3147     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3148      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
3149    END IF;
3150   lb_split_line_flag := FALSE;
3151   IF pn_orig_ship_id IS NOT NULL THEN
3152     OPEN c_get_po_line_loc_details(pn_orig_ship_id);
3153     FETCH c_get_po_line_loc_details INTO ln_orig_po_hdr_id,ln_orig_po_line_id;
3154     CLOSE c_get_po_line_loc_details;
3155     IF  ln_orig_po_hdr_id = pn_po_hdr_id AND ln_orig_po_line_id = pn_po_line_id THEN
3156       lb_split_line_flag := TRUE;
3157     END IF;
3158   END IF;
3159 
3160   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3161 
3162     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3163   END IF;
3164   RETURN lb_split_line_flag;
3165   EXCEPTION
3166    WHEN OTHERS THEN
3167 
3168 
3169      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3170         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3171      END IF;
3172      app_exception.raise_exception;
3173 
3174 END is_split_line;
3175 /*
3176   REM +======================================================================+
3177   REM Created By         :  Wenqiong Zhou
3178   REM Creation Date      :  Jun 1, 2012
3179   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
3180   REM SubProgram Name    :  process_split_line
3181   REM Type               :  Process API
3182   REM Purpose            :  Update original shipment line in JAI tables and create new data in JAI for split line.
3183   REM
3184   REM TDD Reference      :
3185   REM
3186   REM Assumptions        :
3187   REM
3188   REM Parameter                IN/OUT         Type     Required     Description and Purpose
3189   REM -----------------------  ------  ------------    ----------   ------------------------------------
3190   REM pn_orig_ship_id             IN           NUMBER        Y         Original Shipment ID.
3191   REM pn_po_hdr_id                IN           NUMBER        Y         PO header id
3192   REM pn_po_line_id               IN           NUMBER        Y         PO Line id
3193   REM
3194   REM Call by  process_po_tax_wrapper
3195   REM +================================================================================================+
3196 */
3197 PROCEDURE process_split_line
3198 (
3199   pn_orig_ship_id     IN NUMBER
3200  ,pn_line_loc_id      IN NUMBER
3201  ,pn_quantity         IN NUMBER
3202  ,pn_price            IN NUMBER
3203  ,pv_type_lookup_code IN VARCHAR2
3204 )
3205  IS
3206 l_api_name                    CONSTANT VARCHAR2(30) := 'process_split_line';
3207 CURSOR cur_get_prev_qty IS
3208 select quantity
3209 from po_line_locations_all
3210 where line_location_id =  pn_orig_ship_id;
3211 
3212 CURSOR c_get_po_line_loc_details  IS
3213 SELECT *
3214 FROM JAI_PO_LINE_LOCATIONS
3215 WHERE line_location_id = pn_orig_ship_id;
3216 
3217 CURSOR c_get_po_taxes (p_line_location_id IN NUMBER) IS
3218 SELECT *
3219 FROM JAI_PO_TAXES
3220 WHERE line_location_id = p_line_location_id;
3221 
3222 l_prev_quantity   NUMBER;
3223 l_ship_line_amount  NUMBER;
3224 l_tax_amount       NUMBER;
3225 l_line_focus_id    NUMBER;
3226 
3227 rec_jai_line      JAI_PO_LINE_LOCATIONS%ROWTYPE;
3228 
3229 BEGIN
3230 
3231     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3232      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
3233    END IF;
3234     /*Get the Quantity of the parent Line */
3235     OPEN cur_get_prev_qty;
3236     FETCH cur_get_prev_qty INTO l_prev_quantity;
3237     CLOSE cur_get_prev_qty;
3238 
3239     OPEN c_get_po_line_loc_details;
3240     FETCH c_get_po_line_loc_details INTO rec_jai_line;
3241     CLOSE c_get_po_line_loc_details;
3242 
3243     /*Insert into JAI_PO_LINE_LOCATIONS*/
3244     insert_jai_line_locs(
3245                v_line_loc_id     => pn_line_loc_id
3246               ,v_po_hdr_id       => rec_jai_line.po_header_id
3247               ,v_po_line_id      => rec_jai_line.po_line_id
3248               ,v_cre_dt          => rec_jai_line.creation_date
3249               ,v_cre_by          => rec_jai_line.created_by
3250               ,v_last_upd_dt     => rec_jai_line.last_update_date
3251               ,v_last_upd_by     => rec_jai_line.last_updated_by
3252               ,v_last_upd_login  => rec_jai_line.LAST_UPDATE_LOGIN
3253               ,flag              => 'I'
3254               ,v_item_id         => rec_jai_line.item_id
3255               ,v_vendor_id       => rec_jai_line.vendor_id
3256               ,v_vendor_site_id  => rec_jai_line.vendor_site_id
3257               ,v_tax_category_id => rec_jai_line.tax_category_id
3258               ,v_price_override  => pn_price
3259               ,v_qty             => pn_QUANTITY
3260               ,v_currency        => rec_jai_line.currency
3261               ,v_line_focus_id   => l_line_focus_id
3262               );
3263 
3264 
3265 
3266     /*Insert Taxes of the parent line in to the split line after adjusting the Tax Amount and Tax Target Amount*/
3267     for r_get_po_taxes in c_get_po_taxes(pn_orig_ship_id) loop
3268 
3269         insert_po_taxes
3270         ( pv_type_lookup_code, NULL,
3271           l_line_focus_id, pn_line_loc_id,
3272           r_get_po_taxes.tax_line_no, r_get_po_taxes.po_line_id,  r_get_po_taxes.po_header_id,
3273           r_get_po_taxes.precedence_1, r_get_po_taxes.precedence_2, r_get_po_taxes.precedence_3,
3274           r_get_po_taxes.precedence_4, r_get_po_taxes.precedence_5,
3275           r_get_po_taxes.precedence_6, r_get_po_taxes.precedence_7, r_get_po_taxes.precedence_8,
3276           r_get_po_taxes.precedence_9, r_get_po_taxes.precedence_10,
3277           r_get_po_taxes.tax_id, NULL, 0, r_get_po_taxes.currency,
3278           r_get_po_taxes.tax_rate, r_get_po_taxes.qty_rate, r_get_po_taxes.uom,
3279           (r_get_po_taxes.tax_amount * pn_QUANTITY/l_prev_quantity), r_get_po_taxes.tax_type,  r_get_po_taxes.modvat_flag,
3280           r_get_po_taxes.vendor_id, (r_get_po_taxes.tax_target_amount * pn_QUANTITY/l_prev_quantity),
3281           r_get_po_taxes.creation_date,  r_get_po_taxes.created_by, r_get_po_taxes.last_update_date,
3282           r_get_po_taxes.last_updated_by, r_get_po_taxes.last_update_login,
3283           r_get_po_taxes.tax_category_id
3284         );
3285 
3286     END LOOP;
3287 
3288     select sum(tax_amount) into l_tax_amount
3289     from jai_po_taxes
3290     where line_location_id = pn_line_loc_id;
3291 
3292     l_ship_line_amount :=  pn_QUANTITY * pn_price;
3293 
3294     UPDATE JAI_PO_LINE_LOCATIONS
3295     SET tax_modified_flag = 'N',
3296         tax_amount = l_tax_amount,
3297         total_amount = l_ship_line_amount + l_tax_amount
3298 
3299     WHERE line_location_id = pn_line_loc_id;
3300   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3301     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3302   END IF;
3303  EXCEPTION
3304    WHEN OTHERS THEN
3305 
3306 
3307      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3308         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3309      END IF;
3310      app_exception.raise_exception;
3311 
3312 END process_split_line;
3313 
3314 /*
3315   REM +======================================================================+
3316   REM Created By         :  Wenqiong Zhou
3317   REM Creation Date      :  Jun 1, 2012
3318   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
3319   REM SubProgram Name    :  process_dist
3320   REM Type               :  Process API
3321   REM Purpose            :  Replace the logic in JAI_PO_DA_TRIGGER_PKG,will be fired when
3322   REM                       autocreate PO copy from requisition.
3323   REM
3324   REM TDD Reference      :
3325   REM
3326   REM Assumptions        :
3327   REM
3328   REM Parameter                IN/OUT         Type                      Required     Description and Purpose
3329   REM -----------------------  ------  -----------------------------    ----------   ------------------------------------
3330   REM prec_po_location          IN     PO_LINE_LOCATIONS_ALL%ROWTYPE       Y         PO Line location
3331   REM
3332   REM Call by  process_po_shipment_line
3333   REM +================================================================================================+
3334 */
3335 PROCEDURE process_dist(prec_po_location IN PO_LINE_LOCATIONS_ALL%ROWTYPE) IS
3336 
3337 rec_dist                      PO_DISTRIBUTIONS_ALL%ROWTYPE;
3338 
3339 /*v_po_line_id                  PO_DISTRIBUTIONS_ALL.Po_Line_Id%TYPE ;
3340 v_po_hdr_id                   PO_DISTRIBUTIONS_ALL.Po_Header_Id%TYPE;
3341 v_cre_dt                      PO_DISTRIBUTIONS_ALL.Creation_Date%TYPE;
3342 v_cre_by                      PO_DISTRIBUTIONS_ALL.Created_By%TYPE;
3343 v_last_upd_dt                 PO_DISTRIBUTIONS_ALL.Last_Update_Date%TYPE ;
3344 v_last_upd_by                 PO_DISTRIBUTIONS_ALL.Last_Updated_By%TYPE;
3345 v_last_upd_login              PO_DISTRIBUTIONS_ALL.Last_Update_Login%TYPE;
3346 
3347 v_line_location_id            PO_DISTRIBUTIONS_ALL.line_location_id%TYPE;
3348 
3349 v_type_lookup_code            po_headers_all.type_lookup_code%TYPE;
3350 v_Quot_Class_Code             po_headers_all.Quotation_Class_Code%TYPE;
3351 v_Ship_Loc_Id                 po_headers_all.Ship_To_Location_Id%TYPE;
3352 v_vendor_id                   po_headers_all.Vendor_id%TYPE;
3353 v_vendor_site_id              po_headers_all.vendor_Site_Id%TYPE;
3354 v_curr                        po_headers_all.currency_code%TYPE;
3355 v_rate                        po_headers_all.rate%TYPE;
3356 v_rate_type                   po_headers_all.rate_type%TYPE;
3357 v_rate_date                   po_headers_all.rate_date%TYPE;
3358 
3359 v_style_id                    po_headers_all.style_id%TYPE;
3360 v_override_flag               JAI_CMN_VENDOR_SITES.override_flag%TYPE;
3361 v_tax_modified_flag           JAI_PO_LINE_LOCATIONS.tax_modified_flag%TYPE;
3362 */
3363 CURSOR c_dist IS
3364 SELECT *
3365 FROM PO_DISTRIBUTIONS_ALL
3366 WHERE PO_HEADER_ID = prec_po_location.po_header_id
3367 AND   PO_LINE_ID   = prec_po_location.po_line_id
3368 AND   LINE_LOCATION_ID = prec_po_location.line_location_id;
3369 
3370 /*CURSOR get_po_hdr(c_po_header_id number) IS
3371  SELECT type_lookup_code,Quotation_Class_Code,Ship_To_Location_Id,
3372         rate, rate_type, rate_date,currency_code,
3373         nvl(Vendor_id,0), nvl(vendor_Site_Id,0),style_id
3374    FROM po_headers_all
3375   WHERE po_header_id = v_po_hdr_id;
3376 
3377 CURSOR tax_override_flag_cur(c_supplier_id number, c_supp_site_id number) IS
3378 SELECT override_flag
3379 FROM   JAI_CMN_VENDOR_SITES
3380 WHERE  vendor_id = c_supplier_id
3381 AND    vendor_site_id = c_supp_site_id;
3382 
3383 Cursor c_get_tax_modified_flag IS
3384 SELECT tax_modified_flag
3385     FROM JAI_PO_LINE_LOCATIONS
3386   WHERE line_location_id = v_line_location_id;
3387 
3388 CURSOR c_loc_line_cnt IS
3389 SELECT count(line_location_id)
3390 FROM   JAI_PO_LINE_LOCATIONS
3391 WHERE  line_location_id=v_line_location_id;
3392 
3393 
3394 v_count             NUMBER;
3395 */
3396 lv_return_code     VARCHAR2(30);
3397 lv_return_message  VARCHAR2(200);
3398 l_api_name         CONSTANT VARCHAR2(200) := 'process_dist';
3399 BEGIN
3400 
3401     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3402      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
3403 
3404    END IF;
3405 
3406   OPEN c_dist;
3407   LOOP
3408   FETCH c_dist INTO rec_dist;
3409   EXIT WHEN c_dist%NOTFOUND;
3410     process_distribution_line(rec_dist,
3411                               pv_return_code    =>  lv_return_code    ,
3412                               pv_return_message =>  lv_return_message
3413                             );
3414 
3415 
3416 
3417 /*  Move below code to process_distribution_line;
3418     IF nvl(rec_dist.req_distribution_id,0) <> 0 THEN
3419       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3420        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Its copied from requisition by autocreate.');
3421       END IF;
3422 
3423 
3424       v_po_line_id                  := rec_dist.Po_Line_Id ;
3425       v_po_hdr_id                   := rec_dist.Po_Header_Id;
3426       v_cre_dt                      := rec_dist.Creation_Date;
3427       v_cre_by                      := rec_dist.Created_By;
3428       v_last_upd_dt                 := rec_dist.Last_Update_Date ;
3429       v_last_upd_by                 := rec_dist.Last_Updated_By;
3430       v_last_upd_login              := rec_dist.Last_Update_Login;
3431       v_rate                        := rec_dist.rate;
3432       v_line_location_id            := rec_dist.line_location_id;
3433       OPEN get_po_hdr(v_po_hdr_id);
3434       FETCH get_po_hdr into v_type_lookup_code,v_Quot_Class_Code,v_Ship_Loc_Id,
3435            v_rate, v_rate_type, v_rate_date,v_curr,v_vendor_id, v_vendor_site_id,
3436            v_style_id;
3437       CLOSE get_po_hdr;
3438 
3439       IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
3440           IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3441            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'style_id:'||to_char(v_style_id)||'validate_po_type is false,return');
3442            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3443          END IF;
3444 
3445         return;
3446       END IF;
3447 
3448       OPEN  tax_override_flag_cur(v_vendor_id, v_vendor_site_id);
3449       FETCH tax_override_flag_cur into v_override_flag;
3450       CLOSE tax_override_flag_cur;
3451 
3452       OPEN c_get_tax_modified_flag ;
3453       FETCH c_get_tax_modified_flag INTO v_tax_modified_flag ;
3454       CLOSE c_get_tax_modified_flag;
3455 
3456       IF nvl(rec_dist.po_release_id,0) = 0 THEN
3457         IF nvl(v_override_flag,'N') = 'N' and NVL(v_tax_modified_flag, 'N') = 'N' THEN
3458            delete_po_taxes(pn_po_line_id =>v_po_line_id, pn_line_loc_id => v_line_location_id);
3459            delete_jai_po_lines(pn_line_loc_id =>v_line_location_id);
3460          END IF ;
3461          IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3462            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'po_release_id is null, delete jai data before return.');
3463            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3464          END IF;
3465          return;
3466       ELSE
3467          OPEN c_loc_line_cnt;
3468          FETCH c_loc_line_cnt INTO v_count;
3469          CLOSE c_loc_line_cnt;
3470          IF v_count > 0 THEN
3471            IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3472              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'po_release_id is not null and jai data exists, just return.');
3473              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3474            END IF;
3475            RETURN;
3476          END IF;
3477       END IF;
3478       IF nvl(v_override_flag,'N') = 'Y' THEN
3479            jai_po_tax_pkg.copy_reqn_taxes(v_vendor_id     ,
3480                                       v_vendor_Site_Id    ,
3481                                       v_Po_Hdr_Id         ,
3482                                       v_Po_Line_Id        ,
3483                                       v_Line_Location_id  ,
3484                                       v_Type_Lookup_Code  ,
3485                                       v_Quot_Class_Code   ,
3486                                       v_Ship_Loc_Id       ,
3487                                       NULL,--v_Org_Id            ,
3488                                       v_Cre_Dt            ,
3489                                       v_Cre_By            ,
3490                                       v_Last_Upd_Dt       ,
3491                                       v_Last_Upd_By       ,
3492                                       v_Last_Upd_Login
3493                                        , v_rate
3494                                        , v_rate_type
3495                                        , v_rate_date
3496                                        , v_curr
3497              );
3498 
3499       END IF;
3500 
3501     END IF;
3502 */  END LOOP;
3503   CLOSE c_dist;
3504   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3505     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3506   END IF;
3507  EXCEPTION
3508    WHEN OTHERS THEN
3509 
3510 
3511      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3512         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3513      END IF;
3514      app_exception.raise_exception;
3515 
3516 END process_dist;
3517 /*
3518   REM +======================================================================+
3519   REM Created By         :  Qiong Liu
3520   REM Creation Date      :  Jun 1, 2012
3521   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
3522   REM SubProgram Name    :  process_requisition
3523   REM Type               :  Process API
3524   REM Purpose            :  Process Requistion's creation/updating.
3525   REM
3526   REM
3527   REM TDD Reference      :
3528   REM
3529   REM Assumptions        :
3530   REM
3531   REM Parameter                IN/OUT         Type           Required     Description and Purpose
3532   REM -----------------------  ------  -------------------    ----------   ------------------------------------
3533   REM pn_requisition_hdr_id        IN     NUMBer              Y            PO Requisition Header Id.
3534   REM
3535   REM  CALLED BY
3536   REM  JAI_TAX_PROCESSING_PKG.calculate_tax
3537   REM +================================================================================================+
3538 */
3539 PROCEDURE process_requisition(pn_requisition_hdr_id IN NUMBER) IS
3540 
3541 CURSOR c_all_req_lines IS
3542 SELECT REQUISITION_LINE_ID
3543 FROM PO_REQUISITION_LINES_ALL
3544 WHERE REQUISITION_HEADER_ID = pn_requisition_hdr_id;
3545 
3546 CURSOR c_line_exist(cn_req_line_id NUMBER) IS
3547 SELECT 1
3548 FROM JAI_PO_REQ_LINES
3549 WHERE Requisition_Line_Id = cn_req_line_id
3550 AND Requisition_Header_Id = pn_requisition_hdr_id;
3551 
3552 ln_line_exist     NUMBER;
3553 lv_action         VARCHAR2(20);
3554 l_api_name        CONSTANT VARCHAR2(200) := 'process_requisition';
3555 BEGIN
3556   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3557      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
3558   END IF;
3559 
3560 
3561   FOR line_rec IN c_all_req_lines
3562   LOOP
3563 
3564     OPEN c_line_exist(line_rec.REQUISITION_LINE_ID);
3565     FETCH c_line_exist INTO ln_line_exist;
3566     CLOSE c_line_exist;
3567     IF nvl(ln_line_exist,0) = 0 THEN
3568       lv_action := JAI_CONSTANTS.inserting;
3569     ELSIF nvl(ln_line_exist,0) = 1 THEN
3570       lv_action := JAI_CONSTANTS.updating;
3571     END IF;
3572 
3573     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3574       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3575                      ,module =>l_api_name
3576                      ,message => '**********begin requisition*********************'||lv_action);
3577     END IF;
3578     process_po_req_line(line_rec.REQUISITION_LINE_ID,null,lv_action);
3579     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3580       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3581                      ,module =>l_api_name
3582                      ,message => '**********end  requisition*********************'||lv_action);
3583     END IF;
3584   END LOOP;
3585   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3586     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
3587   END IF;
3588  EXCEPTION
3589    WHEN OTHERS THEN
3590      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3591         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3592      END IF;
3593 END process_requisition;
3594 /*
3595   REM +======================================================================+
3596   REM Created By         :  Qiong Liu
3597   REM Creation Date      :  Jun 1, 2012
3598   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
3599   REM SubProgram Name    :  process_po_req_line
3600   REM Type               :  Process API
3601   REM Purpose            :  Process Requistion Line's creation/updating.
3602   REM
3603   REM
3604   REM TDD Reference      :
3605   REM
3606   REM Assumptions        :
3607   REM
3608   REM Parameter                IN/OUT         Type           Required     Description and Purpose
3609   REM -----------------------  ------  -------------------    ----------   ------------------------------------
3610   REM pn_requisition_line_id       IN     NUMBER              Y            PO Requisition Line Id.
3611   REM pv_action                    IN     VARCHAR2            Y            Indicate action is insert/update.
3612   REM
3613   REM  CALLED BY
3614   REM  process_requisition
3615   REM +================================================================================================+
3616 */
3617 procedure process_po_req_line
3618   (
3619       pn_requisition_line_id NUMBER,
3620       pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE DEFAULT NULL,--added by Wenqiong for bug16288154 .
3621       pv_action              VARCHAR2
3622   ) IS
3623   CURSOR get_requesition_info IS
3624   SELECT *
3625     FROM PO_REQUISITION_LINES_ALL
3626    WHERE requisition_line_id = pn_requisition_line_id;
3627   r_requisition_line         PO_REQUISITION_LINES_ALL%ROWTYPE;
3628   l_api_name                 CONSTANT VARCHAR2(200) := 'process_po_req_line';
3629   BEGIN
3630     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3631       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3632                        ,module =>G_MODULE_NAME||l_api_name||'.BEGIN'
3633                        ,message => G_PKG_NAME||':'||l_api_name||'()+');
3634       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3635                        ,module =>G_MODULE_NAME||l_api_name
3636                        ,message => 'pn_requisition_line_id'||pn_requisition_line_id||' pv_action='||pv_action);
3637     END IF;
3638     IF pr_requisition_line.REQUISITION_LINE_ID IS NULL THEN
3639       OPEN get_requesition_info;
3640       FETCH get_requesition_info INTO r_requisition_line;
3641       CLOSE get_requesition_info;
3642     ELSE
3643       r_requisition_line.REQUISITION_LINE_ID                      := pr_requisition_line.REQUISITION_LINE_ID                           ;
3644       r_requisition_line.REQUISITION_HEADER_ID                    := pr_requisition_line.REQUISITION_HEADER_ID                         ;
3645       r_requisition_line.LINE_NUM                                 := pr_requisition_line.LINE_NUM                                      ;
3646       r_requisition_line.LINE_TYPE_ID                             := pr_requisition_line.LINE_TYPE_ID                                  ;
3647       r_requisition_line.CATEGORY_ID                              := pr_requisition_line.CATEGORY_ID                                   ;
3648       r_requisition_line.ITEM_DESCRIPTION                         := pr_requisition_line.ITEM_DESCRIPTION                              ;
3649       r_requisition_line.UNIT_MEAS_LOOKUP_CODE                    := pr_requisition_line.UNIT_MEAS_LOOKUP_CODE                         ;
3650       r_requisition_line.UNIT_PRICE                               := pr_requisition_line.UNIT_PRICE                                    ;
3651       r_requisition_line.QUANTITY                                 := pr_requisition_line.QUANTITY                                      ;
3652       r_requisition_line.DELIVER_TO_LOCATION_ID                   := pr_requisition_line.DELIVER_TO_LOCATION_ID                        ;
3653       r_requisition_line.TO_PERSON_ID                             := pr_requisition_line.TO_PERSON_ID                                  ;
3654       r_requisition_line.LAST_UPDATE_DATE                         := pr_requisition_line.LAST_UPDATE_DATE                              ;
3655       r_requisition_line.LAST_UPDATED_BY                          := pr_requisition_line.LAST_UPDATED_BY                               ;
3656       r_requisition_line.SOURCE_TYPE_CODE                         := pr_requisition_line.SOURCE_TYPE_CODE                              ;
3657       r_requisition_line.LAST_UPDATE_LOGIN                        := pr_requisition_line.LAST_UPDATE_LOGIN                             ;
3658       r_requisition_line.CREATION_DATE                            := pr_requisition_line.CREATION_DATE                                 ;
3659       r_requisition_line.CREATED_BY                               := pr_requisition_line.CREATED_BY                                    ;
3660       r_requisition_line.ITEM_ID                                  := pr_requisition_line.ITEM_ID                                       ;
3661       r_requisition_line.ITEM_REVISION                            := pr_requisition_line.ITEM_REVISION                                 ;
3662       r_requisition_line.QUANTITY_DELIVERED                       := pr_requisition_line.QUANTITY_DELIVERED                            ;
3663       r_requisition_line.SUGGESTED_BUYER_ID                       := pr_requisition_line.SUGGESTED_BUYER_ID                            ;
3664       r_requisition_line.ENCUMBERED_FLAG                          := pr_requisition_line.ENCUMBERED_FLAG                               ;
3665       r_requisition_line.RFQ_REQUIRED_FLAG                        := pr_requisition_line.RFQ_REQUIRED_FLAG                             ;
3666       r_requisition_line.NEED_BY_DATE                             := pr_requisition_line.NEED_BY_DATE                                  ;
3667       r_requisition_line.LINE_LOCATION_ID                         := pr_requisition_line.LINE_LOCATION_ID                              ;
3668       r_requisition_line.MODIFIED_BY_AGENT_FLAG                   := pr_requisition_line.MODIFIED_BY_AGENT_FLAG                        ;
3669       r_requisition_line.PARENT_REQ_LINE_ID                       := pr_requisition_line.PARENT_REQ_LINE_ID                            ;
3670       r_requisition_line.JUSTIFICATION                            := pr_requisition_line.JUSTIFICATION                                 ;
3671       r_requisition_line.NOTE_TO_AGENT                            := pr_requisition_line.NOTE_TO_AGENT                                 ;
3672       r_requisition_line.NOTE_TO_RECEIVER                         := pr_requisition_line.NOTE_TO_RECEIVER                              ;
3673       r_requisition_line.PURCHASING_AGENT_ID                      := pr_requisition_line.PURCHASING_AGENT_ID                           ;
3674       r_requisition_line.DOCUMENT_TYPE_CODE                       := pr_requisition_line.DOCUMENT_TYPE_CODE                            ;
3675       r_requisition_line.BLANKET_PO_HEADER_ID                     := pr_requisition_line.BLANKET_PO_HEADER_ID                          ;
3676       r_requisition_line.BLANKET_PO_LINE_NUM                      := pr_requisition_line.BLANKET_PO_LINE_NUM                           ;
3677       r_requisition_line.CURRENCY_CODE                            := pr_requisition_line.CURRENCY_CODE                                 ;
3678       r_requisition_line.RATE_TYPE                                := pr_requisition_line.RATE_TYPE                                     ;
3679       r_requisition_line.RATE_DATE                                := pr_requisition_line.RATE_DATE                                     ;
3680       r_requisition_line.RATE                                     := pr_requisition_line.RATE                                          ;
3681       r_requisition_line.CURRENCY_UNIT_PRICE                      := pr_requisition_line.CURRENCY_UNIT_PRICE                           ;
3682       r_requisition_line.SUGGESTED_VENDOR_NAME                    := pr_requisition_line.SUGGESTED_VENDOR_NAME                         ;
3683       r_requisition_line.SUGGESTED_VENDOR_LOCATION                := pr_requisition_line.SUGGESTED_VENDOR_LOCATION                     ;
3684       r_requisition_line.SUGGESTED_VENDOR_CONTACT                 := pr_requisition_line.SUGGESTED_VENDOR_CONTACT                      ;
3685       r_requisition_line.SUGGESTED_VENDOR_PHONE                   := pr_requisition_line.SUGGESTED_VENDOR_PHONE                        ;
3686       r_requisition_line.SUGGESTED_VENDOR_PRODUCT_CODE            := pr_requisition_line.SUGGESTED_VENDOR_PRODUCT_CODE                 ;
3687       r_requisition_line.UN_NUMBER_ID                             := pr_requisition_line.UN_NUMBER_ID                                  ;
3688       r_requisition_line.HAZARD_CLASS_ID                          := pr_requisition_line.HAZARD_CLASS_ID                               ;
3689       r_requisition_line.MUST_USE_SUGG_VENDOR_FLAG                := pr_requisition_line.MUST_USE_SUGG_VENDOR_FLAG                     ;
3690       r_requisition_line.REFERENCE_NUM                            := pr_requisition_line.REFERENCE_NUM                                 ;
3691       r_requisition_line.ON_RFQ_FLAG                              := pr_requisition_line.ON_RFQ_FLAG                                   ;
3692       r_requisition_line.URGENT_FLAG                              := pr_requisition_line.URGENT_FLAG                                   ;
3693       r_requisition_line.CANCEL_FLAG                              := pr_requisition_line.CANCEL_FLAG                                   ;
3694       r_requisition_line.SOURCE_ORGANIZATION_ID                   := pr_requisition_line.SOURCE_ORGANIZATION_ID                        ;
3695       r_requisition_line.SOURCE_SUBINVENTORY                      := pr_requisition_line.SOURCE_SUBINVENTORY                           ;
3696       r_requisition_line.DESTINATION_TYPE_CODE                    := pr_requisition_line.DESTINATION_TYPE_CODE                         ;
3697       r_requisition_line.DESTINATION_ORGANIZATION_ID              := pr_requisition_line.DESTINATION_ORGANIZATION_ID                   ;
3698       r_requisition_line.DESTINATION_SUBINVENTORY                 := pr_requisition_line.DESTINATION_SUBINVENTORY                      ;
3699       r_requisition_line.QUANTITY_CANCELLED                       := pr_requisition_line.QUANTITY_CANCELLED                            ;
3700       r_requisition_line.CANCEL_DATE                              := pr_requisition_line.CANCEL_DATE                                   ;
3701       r_requisition_line.CANCEL_REASON                            := pr_requisition_line.CANCEL_REASON                                 ;
3702       r_requisition_line.CLOSED_CODE                              := pr_requisition_line.CLOSED_CODE                                   ;
3703       r_requisition_line.AGENT_RETURN_NOTE                        := pr_requisition_line.AGENT_RETURN_NOTE                             ;
3704       r_requisition_line.CHANGED_AFTER_RESEARCH_FLAG              := pr_requisition_line.CHANGED_AFTER_RESEARCH_FLAG                   ;
3705       r_requisition_line.VENDOR_ID                                := pr_requisition_line.VENDOR_ID                                     ;
3706       r_requisition_line.VENDOR_SITE_ID                           := pr_requisition_line.VENDOR_SITE_ID                                ;
3707       r_requisition_line.VENDOR_CONTACT_ID                        := pr_requisition_line.VENDOR_CONTACT_ID                             ;
3708       r_requisition_line.RESEARCH_AGENT_ID                        := pr_requisition_line.RESEARCH_AGENT_ID                             ;
3709       r_requisition_line.ON_LINE_FLAG                             := pr_requisition_line.ON_LINE_FLAG                                  ;
3710       r_requisition_line.WIP_ENTITY_ID                            := pr_requisition_line.WIP_ENTITY_ID                                 ;
3711       r_requisition_line.WIP_LINE_ID                              := pr_requisition_line.WIP_LINE_ID                                   ;
3712       r_requisition_line.WIP_REPETITIVE_SCHEDULE_ID               := pr_requisition_line.WIP_REPETITIVE_SCHEDULE_ID                    ;
3713       r_requisition_line.WIP_OPERATION_SEQ_NUM                    := pr_requisition_line.WIP_OPERATION_SEQ_NUM                         ;
3714       r_requisition_line.WIP_RESOURCE_SEQ_NUM                     := pr_requisition_line.WIP_RESOURCE_SEQ_NUM                          ;
3715       r_requisition_line.ATTRIBUTE_CATEGORY                       := pr_requisition_line.ATTRIBUTE_CATEGORY                            ;
3716       r_requisition_line.DESTINATION_CONTEXT                      := pr_requisition_line.DESTINATION_CONTEXT                           ;
3717       r_requisition_line.INVENTORY_SOURCE_CONTEXT                 := pr_requisition_line.INVENTORY_SOURCE_CONTEXT                      ;
3718       r_requisition_line.VENDOR_SOURCE_CONTEXT                    := pr_requisition_line.VENDOR_SOURCE_CONTEXT                         ;
3719       r_requisition_line.ATTRIBUTE1                               := pr_requisition_line.ATTRIBUTE1                                    ;
3720       r_requisition_line.ATTRIBUTE2                               := pr_requisition_line.ATTRIBUTE2                                    ;
3721       r_requisition_line.ATTRIBUTE3                               := pr_requisition_line.ATTRIBUTE3                                    ;
3722       r_requisition_line.ATTRIBUTE4                               := pr_requisition_line.ATTRIBUTE4                                    ;
3723       r_requisition_line.ATTRIBUTE5                               := pr_requisition_line.ATTRIBUTE5                                    ;
3724       r_requisition_line.ATTRIBUTE6                               := pr_requisition_line.ATTRIBUTE6                                    ;
3725       r_requisition_line.ATTRIBUTE7                               := pr_requisition_line.ATTRIBUTE7                                    ;
3726       r_requisition_line.ATTRIBUTE8                               := pr_requisition_line.ATTRIBUTE8                                    ;
3727       r_requisition_line.ATTRIBUTE9                               := pr_requisition_line.ATTRIBUTE9                                    ;
3728       r_requisition_line.ATTRIBUTE10                              := pr_requisition_line.ATTRIBUTE10                                   ;
3729       r_requisition_line.ATTRIBUTE11                              := pr_requisition_line.ATTRIBUTE11                                   ;
3730       r_requisition_line.ATTRIBUTE12                              := pr_requisition_line.ATTRIBUTE12                                   ;
3731       r_requisition_line.ATTRIBUTE13                              := pr_requisition_line.ATTRIBUTE13                                   ;
3732       r_requisition_line.ATTRIBUTE14                              := pr_requisition_line.ATTRIBUTE14                                   ;
3733       r_requisition_line.ATTRIBUTE15                              := pr_requisition_line.ATTRIBUTE15                                   ;
3734       r_requisition_line.BOM_RESOURCE_ID                          := pr_requisition_line.BOM_RESOURCE_ID                               ;
3735       r_requisition_line.REQUEST_ID                               := pr_requisition_line.REQUEST_ID                                    ;
3736       r_requisition_line.PROGRAM_APPLICATION_ID                   := pr_requisition_line.PROGRAM_APPLICATION_ID                        ;
3737       r_requisition_line.PROGRAM_ID                               := pr_requisition_line.PROGRAM_ID                                    ;
3738       r_requisition_line.PROGRAM_UPDATE_DATE                      := pr_requisition_line.PROGRAM_UPDATE_DATE                           ;
3739       r_requisition_line.USSGL_TRANSACTION_CODE                   := pr_requisition_line.USSGL_TRANSACTION_CODE                        ;
3740       r_requisition_line.GOVERNMENT_CONTEXT                       := pr_requisition_line.GOVERNMENT_CONTEXT                            ;
3741       r_requisition_line.CLOSED_REASON                            := pr_requisition_line.CLOSED_REASON                                 ;
3742       r_requisition_line.CLOSED_DATE                              := pr_requisition_line.CLOSED_DATE                                   ;
3743       r_requisition_line.TRANSACTION_REASON_CODE                  := pr_requisition_line.TRANSACTION_REASON_CODE                       ;
3744       r_requisition_line.QUANTITY_RECEIVED                        := pr_requisition_line.QUANTITY_RECEIVED                             ;
3745       r_requisition_line.SOURCE_REQ_LINE_ID                       := pr_requisition_line.SOURCE_REQ_LINE_ID                            ;
3746       r_requisition_line.ORG_ID                                   := pr_requisition_line.ORG_ID                                        ;
3747       r_requisition_line.GLOBAL_ATTRIBUTE1                        := pr_requisition_line.GLOBAL_ATTRIBUTE1                             ;
3748       r_requisition_line.GLOBAL_ATTRIBUTE2                        := pr_requisition_line.GLOBAL_ATTRIBUTE2                             ;
3749       r_requisition_line.GLOBAL_ATTRIBUTE3                        := pr_requisition_line.GLOBAL_ATTRIBUTE3                             ;
3750       r_requisition_line.GLOBAL_ATTRIBUTE4                        := pr_requisition_line.GLOBAL_ATTRIBUTE4                             ;
3751       r_requisition_line.GLOBAL_ATTRIBUTE5                        := pr_requisition_line.GLOBAL_ATTRIBUTE5                             ;
3752       r_requisition_line.GLOBAL_ATTRIBUTE6                        := pr_requisition_line.GLOBAL_ATTRIBUTE6                             ;
3753       r_requisition_line.GLOBAL_ATTRIBUTE7                        := pr_requisition_line.GLOBAL_ATTRIBUTE7                             ;
3754       r_requisition_line.GLOBAL_ATTRIBUTE8                        := pr_requisition_line.GLOBAL_ATTRIBUTE8                             ;
3755       r_requisition_line.GLOBAL_ATTRIBUTE9                        := pr_requisition_line.GLOBAL_ATTRIBUTE9                             ;
3756       r_requisition_line.GLOBAL_ATTRIBUTE10                       := pr_requisition_line.GLOBAL_ATTRIBUTE10                            ;
3757       r_requisition_line.GLOBAL_ATTRIBUTE11                       := pr_requisition_line.GLOBAL_ATTRIBUTE11                            ;
3758       r_requisition_line.GLOBAL_ATTRIBUTE12                       := pr_requisition_line.GLOBAL_ATTRIBUTE12                            ;
3759       r_requisition_line.GLOBAL_ATTRIBUTE13                       := pr_requisition_line.GLOBAL_ATTRIBUTE13                            ;
3760       r_requisition_line.GLOBAL_ATTRIBUTE14                       := pr_requisition_line.GLOBAL_ATTRIBUTE14                            ;
3761       r_requisition_line.GLOBAL_ATTRIBUTE15                       := pr_requisition_line.GLOBAL_ATTRIBUTE15                            ;
3762       r_requisition_line.GLOBAL_ATTRIBUTE16                       := pr_requisition_line.GLOBAL_ATTRIBUTE16                            ;
3763       r_requisition_line.GLOBAL_ATTRIBUTE17                       := pr_requisition_line.GLOBAL_ATTRIBUTE17                            ;
3764       r_requisition_line.GLOBAL_ATTRIBUTE18                       := pr_requisition_line.GLOBAL_ATTRIBUTE18                            ;
3765       r_requisition_line.GLOBAL_ATTRIBUTE19                       := pr_requisition_line.GLOBAL_ATTRIBUTE19                            ;
3766       r_requisition_line.GLOBAL_ATTRIBUTE20                       := pr_requisition_line.GLOBAL_ATTRIBUTE20                            ;
3767       r_requisition_line.GLOBAL_ATTRIBUTE_CATEGORY                := pr_requisition_line.GLOBAL_ATTRIBUTE_CATEGORY                     ;
3768       r_requisition_line.KANBAN_CARD_ID                           := pr_requisition_line.KANBAN_CARD_ID                                ;
3769       r_requisition_line.CATALOG_TYPE                             := pr_requisition_line.CATALOG_TYPE                                  ;
3770       r_requisition_line.CATALOG_SOURCE                           := pr_requisition_line.CATALOG_SOURCE                                ;
3771       r_requisition_line.MANUFACTURER_ID                          := pr_requisition_line.MANUFACTURER_ID                               ;
3772       r_requisition_line.MANUFACTURER_NAME                        := pr_requisition_line.MANUFACTURER_NAME                             ;
3773       r_requisition_line.MANUFACTURER_PART_NUMBER                 := pr_requisition_line.MANUFACTURER_PART_NUMBER                      ;
3774       r_requisition_line.REQUESTER_EMAIL                          := pr_requisition_line.REQUESTER_EMAIL                               ;
3775       r_requisition_line.REQUESTER_FAX                            := pr_requisition_line.REQUESTER_FAX                                 ;
3776       r_requisition_line.REQUESTER_PHONE                          := pr_requisition_line.REQUESTER_PHONE                               ;
3777       r_requisition_line.UNSPSC_CODE                              := pr_requisition_line.UNSPSC_CODE                                   ;
3778       r_requisition_line.OTHER_CATEGORY_CODE                      := pr_requisition_line.OTHER_CATEGORY_CODE                           ;
3779       r_requisition_line.SUPPLIER_DUNS                            := pr_requisition_line.SUPPLIER_DUNS                                 ;
3780       r_requisition_line.TAX_STATUS_INDICATOR                     := pr_requisition_line.TAX_STATUS_INDICATOR                          ;
3781       r_requisition_line.PCARD_FLAG                               := pr_requisition_line.PCARD_FLAG                                    ;
3782       r_requisition_line.NEW_SUPPLIER_FLAG                        := pr_requisition_line.NEW_SUPPLIER_FLAG                             ;
3783       r_requisition_line.AUTO_RECEIVE_FLAG                        := pr_requisition_line.AUTO_RECEIVE_FLAG                             ;
3784       r_requisition_line.TAX_USER_OVERRIDE_FLAG                   := pr_requisition_line.TAX_USER_OVERRIDE_FLAG                        ;
3785       r_requisition_line.TAX_CODE_ID                              := pr_requisition_line.TAX_CODE_ID                                   ;
3786       r_requisition_line.NOTE_TO_VENDOR                           := pr_requisition_line.NOTE_TO_VENDOR                                ;
3787       r_requisition_line.OKE_CONTRACT_VERSION_ID                  := pr_requisition_line.OKE_CONTRACT_VERSION_ID                       ;
3788       r_requisition_line.OKE_CONTRACT_HEADER_ID                   := pr_requisition_line.OKE_CONTRACT_HEADER_ID                        ;
3789       r_requisition_line.ITEM_SOURCE_ID                           := pr_requisition_line.ITEM_SOURCE_ID                                ;
3790       r_requisition_line.SUPPLIER_REF_NUMBER                      := pr_requisition_line.SUPPLIER_REF_NUMBER                           ;
3791       r_requisition_line.SECONDARY_UNIT_OF_MEASURE                := pr_requisition_line.SECONDARY_UNIT_OF_MEASURE                     ;
3792       r_requisition_line.SECONDARY_QUANTITY                       := pr_requisition_line.SECONDARY_QUANTITY                            ;
3793       r_requisition_line.PREFERRED_GRADE                          := pr_requisition_line.PREFERRED_GRADE                               ;
3794       r_requisition_line.SECONDARY_QUANTITY_RECEIVED              := pr_requisition_line.SECONDARY_QUANTITY_RECEIVED                   ;
3795       r_requisition_line.SECONDARY_QUANTITY_CANCELLED             := pr_requisition_line.SECONDARY_QUANTITY_CANCELLED                  ;
3796       r_requisition_line.VMI_FLAG                                 := pr_requisition_line.VMI_FLAG                                      ;
3797       r_requisition_line.AUCTION_HEADER_ID                        := pr_requisition_line.AUCTION_HEADER_ID                             ;
3798       r_requisition_line.AUCTION_DISPLAY_NUMBER                   := pr_requisition_line.AUCTION_DISPLAY_NUMBER                        ;
3799       r_requisition_line.AUCTION_LINE_NUMBER                      := pr_requisition_line.AUCTION_LINE_NUMBER                           ;
3800       r_requisition_line.REQS_IN_POOL_FLAG                        := pr_requisition_line.REQS_IN_POOL_FLAG                             ;
3801       r_requisition_line.BID_NUMBER                               := pr_requisition_line.BID_NUMBER                                    ;
3802       r_requisition_line.BID_LINE_NUMBER                          := pr_requisition_line.BID_LINE_NUMBER                               ;
3803       r_requisition_line.NONCAT_TEMPLATE_ID                       := pr_requisition_line.NONCAT_TEMPLATE_ID                            ;
3804       r_requisition_line.SUGGESTED_VENDOR_CONTACT_FAX             := pr_requisition_line.SUGGESTED_VENDOR_CONTACT_FAX                  ;
3805       r_requisition_line.SUGGESTED_VENDOR_CONTACT_EMAIL           := pr_requisition_line.SUGGESTED_VENDOR_CONTACT_EMAIL                ;
3806       r_requisition_line.AMOUNT                                   := pr_requisition_line.AMOUNT                                        ;
3807       r_requisition_line.CURRENCY_AMOUNT                          := pr_requisition_line.CURRENCY_AMOUNT                               ;
3808       r_requisition_line.LABOR_REQ_LINE_ID                        := pr_requisition_line.LABOR_REQ_LINE_ID                             ;
3809       r_requisition_line.JOB_ID                                   := pr_requisition_line.JOB_ID                                        ;
3810       r_requisition_line.JOB_LONG_DESCRIPTION                     := pr_requisition_line.JOB_LONG_DESCRIPTION                          ;
3811       r_requisition_line.CONTRACTOR_STATUS                        := pr_requisition_line.CONTRACTOR_STATUS                             ;
3812       r_requisition_line.CONTACT_INFORMATION                      := pr_requisition_line.CONTACT_INFORMATION                           ;
3813       r_requisition_line.SUGGESTED_SUPPLIER_FLAG                  := pr_requisition_line.SUGGESTED_SUPPLIER_FLAG                       ;
3814       r_requisition_line.CANDIDATE_SCREENING_REQD_FLAG            := pr_requisition_line.CANDIDATE_SCREENING_REQD_FLAG                 ;
3815       r_requisition_line.CANDIDATE_FIRST_NAME                     := pr_requisition_line.CANDIDATE_FIRST_NAME                          ;
3816       r_requisition_line.CANDIDATE_LAST_NAME                      := pr_requisition_line.CANDIDATE_LAST_NAME                           ;
3817       r_requisition_line.ASSIGNMENT_END_DATE                      := pr_requisition_line.ASSIGNMENT_END_DATE                           ;
3818       r_requisition_line.OVERTIME_ALLOWED_FLAG                    := pr_requisition_line.OVERTIME_ALLOWED_FLAG                         ;
3819       r_requisition_line.CONTRACTOR_REQUISITION_FLAG              := pr_requisition_line.CONTRACTOR_REQUISITION_FLAG                   ;
3820       r_requisition_line.DROP_SHIP_FLAG                           := pr_requisition_line.DROP_SHIP_FLAG                                ;
3821       r_requisition_line.ASSIGNMENT_START_DATE                    := pr_requisition_line.ASSIGNMENT_START_DATE                         ;
3822       r_requisition_line.ORDER_TYPE_LOOKUP_CODE                   := pr_requisition_line.ORDER_TYPE_LOOKUP_CODE                        ;
3823       r_requisition_line.PURCHASE_BASIS                           := pr_requisition_line.PURCHASE_BASIS                                ;
3824       r_requisition_line.MATCHING_BASIS                           := pr_requisition_line.MATCHING_BASIS                                ;
3825       r_requisition_line.NEGOTIATED_BY_PREPARER_FLAG              := pr_requisition_line.NEGOTIATED_BY_PREPARER_FLAG                   ;
3826       r_requisition_line.SHIP_METHOD                              := pr_requisition_line.SHIP_METHOD                                   ;
3827       r_requisition_line.ESTIMATED_PICKUP_DATE                    := pr_requisition_line.ESTIMATED_PICKUP_DATE                         ;
3828       r_requisition_line.SUPPLIER_NOTIFIED_FOR_CANCEL             := pr_requisition_line.SUPPLIER_NOTIFIED_FOR_CANCEL                  ;
3829       r_requisition_line.BASE_UNIT_PRICE                          := pr_requisition_line.BASE_UNIT_PRICE                               ;
3830       r_requisition_line.AT_SOURCING_FLAG                         := pr_requisition_line.AT_SOURCING_FLAG                              ;
3831       r_requisition_line.TAX_ATTRIBUTE_UPDATE_CODE                := pr_requisition_line.TAX_ATTRIBUTE_UPDATE_CODE                     ;
3832 
3833     END IF;
3834     If pv_action = JAI_CONSTANTS.inserting then
3835       process_req_line_inserting(r_requisition_line);
3836     elsif pv_action = JAI_CONSTANTS.updating then
3837       process_req_line_updating(r_requisition_line);
3838     end if;
3839     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3840       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3841                      ,module =>G_MODULE_NAME||l_api_name||'.END'
3842                      ,message => G_PKG_NAME||':'||l_api_name||'()+');
3843     END IF;
3844  EXCEPTION
3845    WHEN OTHERS THEN
3846      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3847         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3848      END IF;
3849      app_exception.raise_exception;
3850   end process_po_req_line;
3851 /*
3852   REM +======================================================================+
3853   REM Created By         :  Qiong Liu
3854   REM Creation Date      :  Jun 1, 2012
3855   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
3856   REM SubProgram Name    :  process_req_line_inserting
3857   REM Type               :  Process API
3858   REM Purpose            :  Process Requistion Line's inserting
3859   REM
3860   REM
3861   REM TDD Reference      :
3862   REM
3863   REM Assumptions        :
3864   REM
3865   REM Parameter                IN/OUT         Type           Required     Description and Purpose
3866   REM -----------------------  ------  -------------------    ----------   ------------------------------------
3867   REM pn_requisition_line_id       IN     NUMBER              Y            PO Requisition Line Id.
3868   REM
3869   REM  CALLED BY
3870   REM  process_po_req_line
3871   REM +================================================================================================+
3872 */
3873   procedure  process_req_line_inserting
3874   (
3875      --pn_requisition_line_id NUMBER
3876      pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE
3877   ) IS
3878   v_type_lookup_code      VARCHAR2(25);
3879   v_gl_set_of_bks_id      NUMBER;
3880   v_org_id                NUMBER;
3881   v_vendor_id             NUMBER;
3882   v_seg_id                VARCHAR2(20);
3883   v_line_amount           NUMBER;
3884   v_tax_category_id       NUMBER;
3885   v_tax_amount            NUMBER;
3886   v_exclu_tax_amount      NUMBER;
3887   v_total_amount          NUMBER;
3888 
3889   lv_apps_source_code            po_requisition_headers_all.apps_source_code%type;
3890   v_tax_category_id_holder       JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
3891   v_modified_by_agent_flag       po_requisition_lines_all.modified_by_agent_flag%type;
3892   v_parent_req_line_id           po_requisition_lines_all.parent_req_line_id%type;
3893   lv_unit_meas_lookup            po_line_locations_all.unit_meas_lookup_code%TYPE;
3894   l_func_curr_det                jai_plsql_cache_pkg.func_curr_details;
3895   r_req_line                     PO_REQUISITION_LINES_ALL%ROWTYPE;
3896 
3897  /* CURSOR get_requesition_info IS
3898   SELECT *
3899     FROM PO_REQUISITION_LINES_ALL
3900    WHERE requisition_line_id = pn_requisition_line_id;*/
3901 
3902   CURSOR Fetch_Org_Id_Cur(p_Destination_Organization_Id NUMBER) IS
3903   SELECT NVL(Operating_Unit,0)
3904     FROM   Org_Organization_Definitions
3905    WHERE  Organization_Id = p_Destination_Organization_Id;
3906 
3907   CURSOR org_cur(p_requisition_Header_Id NUMBER) IS
3908   SELECT A.Segment1, A.Type_Lookup_Code,apps_source_code
3909     FROM   Po_Requisition_Headers_All A
3910    WHERE  A.Requisition_Header_Id = p_requisition_Header_Id;
3911 
3912 
3913   l_api_name    CONSTANT VARCHAR2(200) := 'process_inserting';
3914 
3915   BEGIN
3916     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3917       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3918                      ,module =>G_MODULE_NAME||l_api_name||'.BEGIN'
3919                      ,message => G_PKG_NAME||':'||l_api_name||'()+');
3920     END IF;
3921    /*OPEN get_requesition_info;
3922     FETCH get_requesition_info INTO pr_requisition_line;
3923     CLOSE get_requesition_info;
3924 */
3925   v_modified_by_agent_flag := pr_requisition_line.modified_by_agent_flag;
3926   v_parent_req_line_id     := pr_requisition_line.parent_req_line_id;
3927 
3928   OPEN  org_cur(pr_requisition_line.requisition_header_id);
3929   FETCH Org_Cur INTO v_seg_id, v_type_lookup_code,lv_apps_source_code;
3930   CLOSE org_cur;
3931 
3932   OPEN  Fetch_Org_Id_Cur(pr_requisition_line.Destination_Organization_Id);
3933   FETCH Fetch_Org_Id_Cur INTO v_org_id;
3934   CLOSE Fetch_Org_Id_Cur;
3935 
3936   l_func_curr_det       := jai_plsql_cache_pkg.return_sob_curr
3937                             (p_org_id  => pr_requisition_line.Destination_Organization_Id );
3938   v_gl_set_of_bks_id    := l_func_curr_det.ledger_id;
3939   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3940     FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3941                        ,module =>G_MODULE_NAME||l_api_name
3942                        ,message => 'Before insert into JAI_PO_REQ_LINES');
3943   END IF;
3944    INSERT INTO JAI_PO_REQ_LINES (
3945     requisition_line_id, requisition_header_id, tax_modified_flag,
3946     tax_amount, total_amount,SUGGESTED_VENDOR_NAME,SUGGESTED_VENDOR_LOCATION,currency_code,
3947     creation_date, created_by, last_update_date,
3948     last_updated_by, last_update_login
3949   ) VALUES (
3950     pr_requisition_line.requisition_line_id, pr_requisition_line.requisition_header_id,  'N',
3951     NULL, NULL,pr_requisition_line.SUGGESTED_VENDOR_NAME,pr_requisition_line.SUGGESTED_VENDOR_LOCATION,pr_requisition_line.currency_code,
3952     pr_requisition_line.creation_date, pr_requisition_line.created_by, pr_requisition_line.last_update_date,
3953     pr_requisition_line.last_updated_by, pr_requisition_line.last_update_login
3954   );
3955 
3956   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3957     FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3958                      ,module =>G_MODULE_NAME||l_api_name
3959                      ,message => 'After insert into JAI_PO_REQ_LINES');
3960   END IF;
3961 
3962   --Added by Qiong for bug14681309 Begin
3963   po_req_tax_default(pr_requisition_line,v_tax_category_id, v_line_amount);
3964   --Added by Qiong for bug14681309 End
3965 
3966   SELECT SUM(jr.TAX_AMOUNT)
3967   INTO   v_exclu_tax_amount
3968   FROM   JAI_PO_REQ_LINE_TAXES jr,
3969          JAI_CMN_TAXES_ALL     jt
3970   WHERE  jr.Requisition_Header_Id = pr_requisition_line.requisition_header_id
3971   AND    jr.Requisition_Line_Id   = pr_requisition_line.Requisition_Line_Id
3972   AND    jr.tax_id = jt.tax_id
3973   AND    jr.Tax_Type <> jai_constants.tax_type_tds
3974   AND    NVL(jt.INCLUSIVE_TAX_FLAG,'N') <> 'Y';
3975 
3976   SELECT SUM(jr.TAX_AMOUNT)
3977   INTO   v_tax_amount
3978   FROM   JAI_PO_REQ_LINE_TAXES jr
3979   WHERE  jr.Requisition_Header_Id = pr_requisition_line.requisition_header_id
3980   AND    jr.Requisition_Line_Id   = pr_requisition_line.Requisition_Line_Id
3981   AND    jr.Tax_Type <> jai_constants.tax_type_tds ;
3982 
3983 
3984   v_total_amount := v_line_amount + v_exclu_tax_amount;
3985 
3986   UPDATE JAI_PO_REQ_LINES
3987   SET tax_amount = v_tax_amount,
3988     total_amount = v_total_amount,
3989     tax_category_id=v_tax_category_id
3990   WHERE requisition_line_id = pr_requisition_line.Requisition_Line_Id;
3991   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3992       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
3993                      ,module =>G_MODULE_NAME||l_api_name||'.END'
3994                      ,message => G_PKG_NAME||':'||l_api_name||'()+');
3995   END IF;
3996   EXCEPTION
3997     WHEN OTHERS THEN
3998      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3999         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4000      END IF;
4001      app_exception.raise_exception;
4002   END process_req_line_inserting;
4003 /*
4004   REM +======================================================================+
4005   REM Created By         :  Qiong Liu
4006   REM Creation Date      :  Jun 1, 2012
4007   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
4008   REM SubProgram Name    :  process_req_line_updating
4009   REM Type               :  Process API
4010   REM Purpose            :  Process Requistion Line's updating
4011   REM
4012   REM
4013   REM TDD Reference      :
4014   REM
4015   REM Assumptions        :
4016   REM
4017   REM Parameter                IN/OUT         Type           Required     Description and Purpose
4018   REM -----------------------  ------  -------------------    ----------   ------------------------------------
4019   REM pn_requisition_line_id       IN     NUMBER              Y            PO Requisition Line Id.
4020   REM
4021   REM  CALLED BY
4022   REM  process_po_req_line
4023   REM +================================================================================================+
4024 */
4025   procedure  process_req_line_updating
4026   (
4027     -- Pn_requisition_line_id NUMBER
4028     pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE
4029   ) IS
4030   v_dest_org_id              po_requisition_lines_all.Destination_Organization_Id%TYPE;
4031   v_currency                 po_requisition_lines_all.Currency_Code%TYPE;
4032   v_rate_TYPE                po_requisition_lines_all.Rate_TYPE%TYPE;
4033   v_rate_date                po_requisition_lines_all.Rate_Date%TYPE;
4034   v_rate                     po_requisition_lines_all.Rate%TYPE;
4035   v_header_id                po_requisition_lines_all.requisition_header_id%TYPE;
4036   v_line_id                  po_requisition_lines_all.requisition_line_id%TYPE;
4037   v_sugg_vendor_name         po_requisition_lines_all.suggested_vendor_name%TYPE;
4038   v_sugg_vendor_loc          po_requisition_lines_all.suggested_vendor_location%TYPE;
4039   v_inventory_item_id        po_requisition_lines_all.item_id%TYPE;
4040   v_src_org_id               po_requisition_lines_all.Source_Organization_Id%TYPE;
4041   v_uom                      po_requisition_lines_all.Unit_Meas_Lookup_Code%TYPE;
4042   v_quantity                 po_requisition_lines_all.Quantity%TYPE;
4043   v_creation_date            po_requisition_lines_all.Creation_Date%TYPE;
4044   v_created_by               po_requisition_lines_all.Created_By%TYPE;
4045   v_last_update_date         po_requisition_lines_all.Last_Update_Date%TYPE;
4046   v_last_updated_by          po_requisition_lines_all.Last_Updated_By%TYPE;
4047   v_last_update_login        po_requisition_lines_all.Last_Update_Login%TYPE;
4048   v_org_id                   Po_Vendor_Sites_All.org_id%TYPE;
4049   v_operating_id             po_requisition_lines_all.ORG_ID%TYPE;
4050   v_deliver_to_loc_id        po_requisition_lines_all.DELIVER_TO_LOCATION_ID%TYPE;
4051   v_blanket_hdr              po_requisition_lines_all.BLANKET_PO_HEADER_ID%TYPE;
4052   v_blanket_line             po_requisition_lines_all.BLANKET_PO_LINE_NUM%TYPE;
4053   v_unit_price               po_requisition_lines_all.unit_price%TYPE;
4054 
4055 
4056   v_tax_category_id    NUMBER;
4057   v_vendor_id          NUMBER;
4058   v_site_id            NUMBER;
4059   v_hdr_curr           VARCHAR2(15);
4060   v_tax_flag           VARCHAR2(1);
4061   v_seg_id             VARCHAR2(20);
4062   v_uom_code           VARCHAR2(3);
4063   conv_rate            NUMBER;
4064   v_assessable_value   NUMBER;
4065   ln_vat_assess_value  NUMBER;
4066   v_gl_set_of_bks_id   NUMBER;
4067   ln_tax_amount        NUMBER;
4068   lv_apps_source_code  VARCHAR2(20);
4069   v_line_tax_amount    NUMBER;
4070   v_line_amount        NUMBER;
4071   v_total_amount       NUMBER;
4072   v_exclu_tax_amount   NUMBER;
4073 
4074   v_type_lookup_code   Po_Requisition_Headers_All.Type_Lookup_Code % TYPE;
4075   l_func_curr_det      jai_plsql_cache_pkg.func_curr_details;
4076   r_new_req_line       PO_REQUISITION_LINES_ALL%ROWTYPE;
4077   r_old_jai_req_line   JAI_PO_REQ_LINES%ROWTYPE;
4078   r_old_jai_req_tax_line JAI_PO_REQ_LINE_TAXES%ROWTYPE;
4079 
4080 /*  CURSOR get_requesition_info IS
4081   SELECT *
4082     FROM PO_REQUISITION_LINES_ALL
4083    WHERE requisition_line_id = pn_requisition_line_id;
4084 */
4085   CURSOR get_jai_req_info IS
4086   SELECT *
4087   FROM   JAI_PO_REQ_LINES
4088   WHERE  requisition_line_id = pr_requisition_line.requisition_line_id;
4089 
4090   CURSOR get_jai_req_tax_line(p_requisition_Header_Id NUMBER) IS
4091   SELECT *
4092   FROM   JAI_PO_REQ_LINE_TAXES
4093   WHERE  requisition_Header_Id = p_requisition_Header_Id
4094   AND    requisition_line_id = pr_requisition_line.requisition_line_id;--pn_requisition_line_id;
4095 
4096   CURSOR Fetch_Org_Id_Cur IS SELECT NVL(Operating_Unit,0)
4097                   FROM   Org_Organization_Definitions
4098             WHERE  Organization_Id = v_dest_org_id;
4099 
4100   CURSOR bind_cur IS
4101   SELECT Segment1, Type_Lookup_Code, apps_source_code
4102     FROM Po_Requisition_Headers_All
4103    WHERE Requisition_Header_Id = v_header_id;
4104 
4105   CURSOR vend_cur(p_sugg_vendor_name IN VARCHAR2) IS
4106   SELECT vendor_id
4107     FROM po_vendors
4108    WHERE vendor_name = p_sugg_vendor_name;
4109 
4110   CURSOR site_cur(p_sugg_vendor_loc IN VARCHAR2) IS
4111   SELECT Vendor_Site_Id
4112     FROM Po_Vendor_Sites_All A
4113    WHERE A.Vendor_Site_Code = p_sugg_vendor_loc
4114      AND A.Vendor_Id        = v_vendor_id
4115      AND (A.Org_Id    = v_org_id
4116           OR
4117     (A.Org_Id    is NULL AND  v_org_id is NULL));
4118 
4119 
4120   CURSOR Fetch_Hdr_Curr_Cur IS SELECT NVL( Currency_Code, '$' )
4121              FROM   Po_Requisition_Headers_V
4122              WHERE  Requisition_Header_Id = v_header_id;
4123 
4124 
4125 
4126   CURSOR Fetch_Uom_Code_Cur IS SELECT Uom_Code
4127              FROM   Mtl_Units_Of_Measure
4128              WHERE  Unit_Of_Measure = v_uom;
4129 
4130   CURSOR Fetch_Mod_Flag_Cur IS   Select Tax_modified_Flag
4131            From JAI_PO_REQ_LINES
4132            Where Requisition_Line_Id   = v_line_id;
4133 
4134 
4135   l_api_name                    CONSTANT VARCHAR2(200) := 'process_updating';
4136 
4137   BEGIN
4138     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4139       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4140                      ,module =>G_MODULE_NAME||l_api_name||'.BEGIN'
4141                      ,message => G_PKG_NAME||':'||l_api_name||'()+');
4142     END IF;
4143 /*    OPEN get_requesition_info;
4144     FETCH get_requesition_info INTO r_new_req_line;
4145     CLOSE get_requesition_info;*/
4146 
4147     v_dest_org_id             := pr_requisition_line.Destination_Organization_Id;
4148     v_currency                := r_new_req_line.Currency_Code;
4149     v_rate_type               := pr_requisition_line.Rate_Type;
4150     v_rate_date               := pr_requisition_line.Rate_Date;
4151     v_rate                    := pr_requisition_line.Rate;
4152     v_header_id               := pr_requisition_line.requisition_header_id;
4153     v_line_id                 := pr_requisition_line.requisition_line_id;
4154     v_sugg_vendor_name        := pr_requisition_line.suggested_vendor_name;
4155     v_sugg_vendor_loc         := pr_requisition_line.suggested_vendor_location;
4156     v_inventory_item_id       := pr_requisition_line.item_id;
4157     v_src_org_id              := pr_requisition_line.Source_Organization_Id;
4158     v_uom                     := pr_requisition_line.Unit_Meas_Lookup_Code;
4159     v_quantity                := pr_requisition_line.Quantity;
4160     v_line_tax_amount         := NVL( (pr_requisition_line.quantity * pr_requisition_line.unit_price) ,0 );
4161     v_line_amount             := NVL( ( pr_requisition_line.quantity * pr_requisition_line.unit_price) ,0 );
4162     v_creation_date           := pr_requisition_line.Creation_Date;
4163     v_created_by              := pr_requisition_line.Created_By;
4164     v_last_update_date        := pr_requisition_line.Last_Update_Date;
4165     v_last_updated_by         := pr_requisition_line.Last_Updated_By;
4166     v_last_update_login       := pr_requisition_line.Last_Update_Login;
4167     v_org_id                  := 0;
4168     v_operating_id            := pr_requisition_line.ORG_ID;
4169     v_deliver_to_loc_id       := pr_requisition_line.DELIVER_TO_LOCATION_ID;
4170     v_blanket_hdr             := pr_requisition_line.BLANKET_PO_HEADER_ID;
4171     v_blanket_line            := pr_requisition_line.BLANKET_PO_LINE_NUM;
4172     v_unit_price              := pr_requisition_line.unit_price;
4173 
4174 
4175     OPEN get_jai_req_info;
4176     FETCH get_jai_req_info INTO r_old_jai_req_line;
4177     CLOSE get_jai_req_info;
4178 
4179     OPEN get_jai_req_tax_line(pr_requisition_line.requisition_header_id);
4180     FETCH get_jai_req_tax_line INTO r_old_jai_req_tax_line;
4181     CLOSE get_jai_req_tax_line;
4182 
4183     OPEN  bind_cur;
4184     FETCH Bind_cur INTO v_seg_id, v_type_lookup_code , lv_apps_source_code;
4185     CLOSE bind_cur;
4186 
4187     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4188        FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4189                      ,module =>G_MODULE_NAME||l_api_name
4190                      ,message => 'Cancel_flag='||pr_requisition_line.cancel_flag);
4191     END IF;
4192     IF NVL(pr_requisition_line.cancel_flag,'$') = 'Y'  THEN
4193        IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4194          FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4195                      ,module =>G_MODULE_NAME||l_api_name
4196                      ,message => 'Processing cancelling requistion');
4197        END IF;
4198          DELETE from JAI_PO_REQ_LINE_TAXES
4199          WHERE  requisition_line_id = pr_requisition_line.requisition_line_id ;
4200 
4201          DELETE from JAI_PO_REQ_LINES
4202          WHERE  requisition_line_id = pr_requisition_line.requisition_line_id;
4203 
4204          RETURN;
4205 
4206     END IF;
4207 
4208     OPEN  Fetch_Org_Id_Cur;
4209     FETCH Fetch_Org_Id_Cur INTO v_org_id;
4210     CLOSE Fetch_Org_Id_Cur;
4211 
4212     OPEN  Fetch_Mod_Flag_Cur;
4213     FETCH Fetch_Mod_Flag_Cur INTO v_tax_flag;
4214     CLOSE Fetch_Mod_Flag_Cur;
4215 
4216     OPEN  Fetch_Hdr_Curr_Cur;
4217     FETCH Fetch_Hdr_Curr_Cur INTO v_hdr_curr;
4218     CLOSE Fetch_Hdr_Curr_Cur;
4219 
4220     OPEN vend_cur(v_sugg_vendor_name);
4221     FETCH Vend_Cur INTO v_vendor_id;
4222     CLOSE vend_cur;
4223 
4224     OPEN site_cur(v_sugg_vendor_loc);
4225     FETCH Site_Cur INTO v_site_id;
4226     CLOSE site_cur;
4227 
4228 
4229 
4230     l_func_curr_det       := jai_plsql_cache_pkg.return_sob_curr
4231                                (p_org_id  => v_dest_org_id );
4232     v_gl_set_of_bks_id    := l_func_curr_det.ledger_id;
4233 
4234 
4235     OPEN  Fetch_Uom_Code_Cur;
4236     FETCH Fetch_Uom_Code_Cur INTO v_uom_code;
4237     CLOSE Fetch_Uom_Code_Cur;
4238 
4239     v_currency := NVL( v_currency, v_hdr_curr );
4240 
4241     IF NVL(v_currency,'$') = NVL(v_hdr_curr,'$') THEN
4242        conv_rate := 1;
4243     ELSE
4244        IF v_rate_type = 'User' THEN
4245           conv_rate := 1/v_rate;
4246        ELSE
4247           conv_rate := 1/jai_cmn_utils_pkg.currency_conversion( v_gl_set_of_bks_id, v_currency, v_rate_date, v_rate_type, v_rate );
4248        END IF;
4249     END IF;
4250 
4251     v_assessable_value := jai_cmn_setup_pkg.get_po_assessable_value( v_vendor_id, v_site_id,
4252                       v_inventory_item_id, v_uom_code );
4253 
4254 
4255     v_line_amount := v_line_amount * conv_rate ;
4256 
4257     ln_vat_assess_value :=  jai_general_pkg.ja_in_vat_assessable_value
4258                                                   ( p_party_id => v_vendor_id,
4259                                                     p_party_site_id => v_site_id,
4260                                                     p_inventory_item_id => v_inventory_item_id,
4261                                                     p_uom_code => v_uom_code,
4262                                                     p_default_price => 0,
4263                                                     p_ass_value_date => trunc(SYSDATE),
4264                                                     p_party_type => 'V'
4265                                                    ) ;
4266 
4267     IF NVL( v_assessable_value, 0 ) <= 0 THEN
4268          v_assessable_value := v_line_amount;
4269     ELSE
4270          v_assessable_value := v_assessable_value * v_quantity * conv_rate ;
4271     END IF;
4272 
4273     IF ln_vat_assess_value = 0 THEN
4274 
4275       ln_vat_assess_value := v_line_amount;
4276 
4277     ELSE
4278 
4279       ln_vat_assess_value := ln_vat_assess_value * v_quantity * conv_rate ;
4280 
4281     END IF;
4282 
4283 
4284     IF (lv_apps_source_code = 'POR' AND  v_currency is NULL) THEN
4285        v_currency := 'INR';
4286     END IF;
4287 
4288     IF ( (
4289       NVL( r_old_jai_req_line.suggested_vendor_name, 'X' ) <> NVL( pr_requisition_line.suggested_vendor_name, 'X' )
4290       )OR
4291       (
4292       NVL( r_old_jai_req_line.suggested_vendor_location, 'X' ) <> NVL( pr_requisition_line.suggested_vendor_location, 'X' )
4293       )
4294       OR v_tax_flag = 'N'
4295     ) THEN
4296         Delete From JAI_PO_REQ_LINE_TAXES
4297               Where  Requisition_Line_Id = v_line_id;
4298       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4299           FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4300                        ,module =>G_MODULE_NAME||l_api_name
4301                        ,message => 'Before call po_req_tax_default');
4302          FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4303                        ,module =>G_MODULE_NAME||l_api_name
4304                        ,message => 'Updating table JAI_PO_REQ_LINES');
4305        END IF;
4306        --Added by Qiong for bug14681309 Begin
4307        po_req_tax_default(pr_requisition_line,v_tax_category_id, v_line_amount);
4308        --Added by Qiong for bug14681309 End
4309 
4310        UPDATE JAI_PO_REQ_LINES
4311        SET    suggested_vendor_name  = pr_requisition_line.suggested_vendor_name,
4312               suggested_vendor_location   = pr_requisition_line.suggested_vendor_location,
4313               currency_code               = pr_requisition_line.currency_code
4314         WHERE Requisition_Line_Id   =  v_line_id
4315           AND Requisition_Header_Id =  v_header_id;
4316 
4317     ELSIF v_tax_flag = 'Y' Then
4318        v_tax_category_id := r_old_jai_req_line.tax_category_id ;
4319        Update JAI_PO_REQ_LINE_TAXES
4320           Set Tax_Amount = 0
4321         WHERE Requisition_Header_Id = v_header_id
4322           AND Requisition_Line_Id   = v_line_id
4323           AND nvl(Tax_Rate,0) <> 0 and nvl(qty_rate,0) <> 0;
4324        IF ( NVL( r_old_jai_req_line.CURRENCY_CODE, 'INR' ) <> NVL( pr_requisition_line.CURRENCY_CODE,'INR' ) ) THEN
4325            jai_po_tax_pkg.calculate_tax( 'REQUISITION', v_header_id, v_line_id, -999, -999, -999, ' ', v_line_tax_amount, v_assessable_value,
4326                            ln_vat_assess_value, NULL, 1/conv_rate);
4327 
4328         ELSE
4329           jai_po_tax_pkg.calc_tax(p_type             => 'REQUISITION',
4330                   p_header_id        => v_header_id,
4331                   P_line_id          => v_line_id,
4332                   p_line_location_id => NULL,
4333                   p_line_focus_id    => NULL,
4334                   p_line_quantity    => v_quantity,
4335                   p_base_value       => v_line_amount,
4336                   p_line_uom_code    => v_uom_code,
4337                   p_tax_amount       => ln_tax_amount,
4338                   p_assessable_value => v_assessable_value,
4339                   p_vat_assess_value => ln_vat_assess_value,
4340                   p_item_id          => v_inventory_item_id,
4341                   p_conv_rate        => 1/conv_rate,
4342                   p_po_curr          => v_currency,
4343                   p_func_curr        => v_hdr_curr);
4344        END IF;
4345 
4346     END IF;
4347 
4348     SELECT SUM(jr.TAX_AMOUNT)
4349     INTO   v_exclu_tax_amount
4350     FROM   JAI_PO_REQ_LINE_TAXES jr,
4351            JAI_CMN_TAXES_ALL     jt
4352     WHERE  jr.Requisition_Header_Id = pr_requisition_line.requisition_header_id
4353     AND    jr.Requisition_Line_Id   = pr_requisition_line.Requisition_Line_Id
4354     AND    jr.tax_id = jt.tax_id
4355     AND    jr.Tax_Type <> jai_constants.tax_type_tds
4356     AND    NVL(jt.INCLUSIVE_TAX_FLAG,'N') <> 'Y';
4357 
4358     SELECT SUM(jr.TAX_AMOUNT)
4359     INTO   v_line_tax_amount
4360     FROM   JAI_PO_REQ_LINE_TAXES jr
4361     WHERE  jr.Requisition_Header_Id = pr_requisition_line.requisition_header_id
4362     AND    jr.Requisition_Line_Id   = pr_requisition_line.Requisition_Line_Id
4363     AND    jr.Tax_Type <> jai_constants.tax_type_tds ;
4364 
4365     v_total_amount := v_line_amount + v_exclu_tax_amount;
4366 
4367     UPDATE JAI_PO_REQ_LINES
4368     SET tax_amount = v_line_tax_amount,
4369         total_amount = v_total_amount,
4370         tax_category_id=v_tax_category_id,
4371         currency_code = pr_requisition_line.currency_code
4372     WHERE requisition_line_id = pr_requisition_line.Requisition_Line_Id;
4373     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4374       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4375                        ,module =>G_MODULE_NAME||l_api_name||'.END'
4376                        ,message => G_PKG_NAME||':'||l_api_name||'()+');
4377     END IF;
4378  EXCEPTION
4379    WHEN OTHERS THEN
4380 
4381 
4382      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4383         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4384      END IF;
4385      app_exception.raise_exception;
4386 
4387 END process_req_line_updating;
4388 /*
4389   REM +======================================================================+
4390   REM Created By         :  Qiong Liu
4391   REM Creation Date      :  Jun 1, 2012
4392   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
4393   REM SubProgram Name    :  po_req_tax_default
4394   REM Type               :  Process API
4395   REM Purpose            :  Process Tax defaultation for Requistion Line
4396   REM
4397   REM
4398   REM TDD Reference      :
4399   REM
4400   REM Assumptions        :
4401   REM
4402   REM Parameter                IN/OUT         Type           Required     Description and Purpose
4403   REM -----------------------  ------  -------------------    ----------   ------------------------------------
4404   REM pn_requisition_line_id       IN      NUMBER              Y            PO Requisition Line Id.
4405   REM pn_tax_category_id           OUT     NUMBER              Y            Tax category id.
4406   REM pn_line_amount               OUT     NUMBER              Y            Line amount.
4407   REM
4408   REM  CALLED BY
4409   REM  process_req_line_inserting , process_req_line_updating.
4410   REM +================================================================================================+
4411 */
4412  procedure  po_req_tax_default
4413   (
4414      pr_requisition_line    PO_REQUISITION_LINES_ALL%ROWTYPE,
4415      pn_tax_category_id     OUT NOCOPY NUMBER,
4416      pn_line_amount         OUT NOCOPY NUMBER
4417   ) IS
4418 
4419   v_blanket_hdr           NUMBER;
4420   v_gl_set_of_bks_id      NUMBER;
4421   v_org_id                NUMBER;
4422   v_vendor_id             NUMBER;
4423   v_site_id               NUMBER;
4424   v_uom_code              VARCHAR2(3);
4425   v_RATE_TYPE             VARCHAR2(30);
4426   v_hdr_currency          VARCHAR2(15);
4427   v_currency              VARCHAR2(15);
4428   v_po_line_id            NUMBER;
4429   v_line_amount           NUMBER;
4430   v_tax_category_id       NUMBER;
4431   v_line_location_id      NUMBER;
4432   conv_rate               NUMBER;
4433   v_assessable_value      NUMBER;
4434   ln_vat_assess_value     NUMBER;
4435   v_sob_hrou_id           NUMBER;
4436   ln_tax_amount           NUMBER;
4437   v_reqn_ctr              Number :=0;
4438 
4439   v_seg_id                       Po_Requisition_Headers_All.Segment1%TYPE;
4440   v_type_lookup_code             Po_Requisition_Headers_All.Type_Lookup_Code%TYPE;
4441   lv_apps_source_code            po_requisition_headers_all.apps_source_code%type;
4442   v_modified_by_agent_flag       po_requisition_lines_all.modified_by_agent_flag%type;
4443   v_parent_req_line_id           po_requisition_lines_all.parent_req_line_id%type;
4444   lv_unit_meas_lookup            po_line_locations_all.unit_meas_lookup_code%TYPE;
4445   l_func_curr_det                jai_plsql_cache_pkg.func_curr_details;
4446   r_req_line                     PO_REQUISITION_LINES_ALL%ROWTYPE;
4447 
4448  /* CURSOR get_requesition_info IS
4449   SELECT *
4450     FROM PO_REQUISITION_LINES_ALL
4451    WHERE requisition_line_id = pn_requisition_line_id;*/
4452 
4453   CURSOR Fetch_Org_Id_Cur(p_Destination_Organization_Id NUMBER) IS
4454   SELECT NVL(Operating_Unit,0)
4455     FROM   Org_Organization_Definitions
4456    WHERE  Organization_Id = p_Destination_Organization_Id;
4457 
4458   CURSOR org_cur(p_requisition_Header_Id NUMBER) IS
4459   SELECT A.Segment1, A.Type_Lookup_Code,apps_source_code
4460     FROM   Po_Requisition_Headers_All A
4461    WHERE  A.Requisition_Header_Id = p_requisition_Header_Id;
4462 
4463   CURSOR vend_cur(p_sugg_vendor_name IN VARCHAR2) IS
4464   SELECT Vendor_Id
4465     FROM   Po_Vendors
4466    WHERE  Vendor_Name = p_sugg_vendor_name;
4467 
4468   CURSOR site_cur(p_sugg_vendor_loc IN VARCHAR2) IS
4469   SELECT Vendor_Site_Id
4470     FROM   Po_Vendor_Sites_All A
4471    WHERE  A.Vendor_Site_Code = p_sugg_vendor_loc
4472      AND    A.Vendor_Id        = v_vendor_id
4473      AND    (A.Org_Id  = v_org_id
4474                OR
4475       (A.Org_Id  is NULL AND  v_org_id is NULL)) ;
4476 
4477  CURSOR cur_bpa_unit_measure(p_blanket_hdr IN NUMBER, p_blanket_line NUMBER) IS
4478  SELECT unit_meas_lookup_code
4479   FROM   Po_Line_Locations_All
4480   WHERE  Po_Line_Id IN (SELECT Po_Line_Id
4481                            FROM Po_Lines_All
4482                           WHERE Po_Header_Id = p_blanket_hdr
4483                             AND Line_Num     = p_blanket_line);
4484 
4485 
4486 
4487   CURSOR cur_bpa_tax_lines(p_po_line_id IN NUMBER,p_line_location_id IN NUMBER) IS
4488   SELECT a.Po_Line_Id,
4489   a.tax_line_no lno  ,
4490   a.tax_id           ,
4491   a.precedence_1  p_1,
4492   a.precedence_2  p_2,
4493   a.precedence_3  p_3,
4494   a.precedence_4  p_4,
4495   a.precedence_5  p_5,
4496   a.precedence_6  p_6,
4497   a.precedence_7  p_7,
4498   a.precedence_8  p_8,
4499   a.precedence_9  p_9,
4500   a.precedence_10 p_10,
4501   a.currency          ,
4502   a.tax_rate          ,
4503   a.qty_rate          ,
4504   a.uom               ,
4505   a.tax_amount        ,
4506   a.tax_type          ,
4507   a.vendor_id         ,
4508   a.modvat_flag       ,
4509   tax_category_id
4510   FROM JAI_PO_TAXES a
4511   WHERE po_line_id = p_po_line_id
4512   AND nvl(line_location_id,-999) = p_line_location_id
4513   ORDER BY  a.tax_line_no;
4514 
4515   CURSOR Fetch_Hdr_Curr_Cur(p_requisition_header_id NUMBER) IS
4516   SELECT NVL( Currency_Code, '$' )
4517     FROM Po_Requisition_Headers_V
4518    WHERE Requisition_Header_Id = r_req_line.requisition_header_id;
4519 
4520 
4521   CURSOR Fetch_Uom_Code_Cur(cp_unit_of_meas VARCHAR2) IS
4522   SELECT Uom_Code
4523     FROM Mtl_Units_Of_Measure
4524    WHERE Unit_Of_Measure = cp_unit_of_meas;
4525 
4526 
4527   CURSOR c_reqn_line_id(p_reqn_line_id Number) is
4528   SELECT 1
4529     FROM JAI_PO_REQ_LINE_TAXES
4530    WHERE requisition_line_id = p_reqn_line_id;
4531 
4532 
4533 
4534 
4535   cursor c_fetch_sob_from_hrou(cp_org_id in number)
4536   is
4537   select set_of_books_id
4538   from hr_operating_units
4539   Where organization_id = cp_org_id;
4540 
4541 
4542   l_api_name            CONSTANT VARCHAR2(200) := 'po_req_tax_default';
4543 
4544   BEGIN
4545    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4546        FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4547                      ,module =>G_MODULE_NAME||l_api_name||'.BEGIN'
4548                      ,message => G_PKG_NAME||':'||l_api_name||'()+');
4549    END IF;
4550   /* OPEN get_requesition_info;
4551     FETCH get_requesition_info INTO pr_requisition_line;
4552     CLOSE get_requesition_info;*/
4553 
4554   v_modified_by_agent_flag := pr_requisition_line.modified_by_agent_flag;
4555   v_parent_req_line_id     := pr_requisition_line.parent_req_line_id;
4556 
4557   OPEN  org_cur(pr_requisition_line.requisition_header_id);
4558   FETCH Org_Cur INTO v_seg_id, v_type_lookup_code,lv_apps_source_code;
4559   CLOSE org_cur;
4560 
4561   OPEN  Fetch_Org_Id_Cur(pr_requisition_line.Destination_Organization_Id);
4562   FETCH Fetch_Org_Id_Cur INTO v_org_id;
4563   CLOSE Fetch_Org_Id_Cur;
4564 
4565   l_func_curr_det       := jai_plsql_cache_pkg.return_sob_curr
4566                             (p_org_id  => pr_requisition_line.Destination_Organization_Id );
4567   v_gl_set_of_bks_id    := l_func_curr_det.ledger_id;
4568 
4569 
4570   OPEN  Fetch_Hdr_Curr_Cur(pr_requisition_line.requisition_header_id);
4571   FETCH Fetch_Hdr_Curr_Cur INTO v_hdr_currency;
4572   CLOSE Fetch_Hdr_Curr_Cur;
4573 
4574   OPEN  vend_cur(pr_requisition_line.suggested_vendor_name);
4575   FETCH Vend_Cur INTO v_vendor_id;
4576   CLOSE vend_cur;
4577 
4578   OPEN  site_cur(pr_requisition_line.suggested_vendor_location);
4579   FETCH Site_Cur INTO v_site_id;
4580   CLOSE site_cur;
4581 
4582   OPEN Fetch_Uom_Code_Cur(pr_requisition_line.Unit_Meas_Lookup_Code);
4583   FETCH Fetch_Uom_Code_Cur INTO v_uom_code;
4584   CLOSE Fetch_Uom_Code_Cur;
4585 
4586   v_assessable_value := jai_cmn_setup_pkg.get_po_assessable_value( v_vendor_id, v_site_id,
4587                   pr_requisition_line.item_id, v_uom_code );
4588 
4589    v_currency := NVL( pr_requisition_line.Currency_Code, v_hdr_currency );
4590 
4591   open c_fetch_sob_from_hrou(pr_requisition_line.org_id);
4592   Fetch c_fetch_sob_from_hrou into v_sob_hrou_id;
4593   close c_fetch_sob_from_hrou;
4594 
4595  IF NVL(v_currency,'$$') = NVL(v_hdr_currency,'$$') THEN
4596     conv_rate := 1;
4597  ELSE
4598     IF v_rate_type = 'User' THEN
4599        conv_rate := 1/pr_requisition_line.Rate;
4600     ELSE
4601        conv_rate := 1/jai_cmn_utils_pkg.currency_conversion( v_sob_hrou_id, v_currency, pr_requisition_line.rate_date, pr_requisition_line.rate_type, pr_requisition_line.Rate );
4602     END IF;
4603  END IF;
4604 
4605   v_line_amount := NVL( (pr_requisition_line.quantity * pr_requisition_line.unit_price) ,0);
4606   v_line_amount := v_line_amount * conv_rate;
4607   pn_line_amount:= v_line_amount ;
4608 
4609   ln_vat_assess_value :=  jai_general_pkg.ja_in_vat_assessable_value
4610                                                ( p_party_id => v_vendor_id,
4611                                                  p_party_site_id => v_site_id,
4612                                                  p_inventory_item_id => pr_requisition_line.item_id,
4613                                                  p_uom_code => v_uom_code,
4614                                                  p_default_price => 0,
4615                                                  p_ass_value_date => SYSDATE,
4616                                                  p_party_type => 'V'
4617                                               ) ;
4618 
4619   IF NVL( v_assessable_value, 0 ) <= 0 THEN
4620      v_assessable_value := v_line_amount;
4621   ELSE
4622      v_assessable_value := v_assessable_value * pr_requisition_line.quantity * conv_rate;
4623   END IF;
4624 
4625   IF ln_vat_assess_value = 0 THEN
4626      ln_vat_assess_value := v_line_amount;
4627   ELSE
4628      ln_vat_assess_value := ln_vat_assess_value * pr_requisition_line.quantity * conv_rate;
4629   END IF;
4630 
4631   IF (lv_apps_source_code = 'POR' AND  v_currency is NULL) THEN
4632     v_currency := 'INR';
4633    END IF;
4634 
4635   IF  pr_requisition_line.BLANKET_PO_HEADER_ID IS NOT NULL AND pr_requisition_line.BLANKET_PO_LINE_NUM IS NOT NULL THEN
4636 
4637      jai_po_cmn_pkg.locate_source_line( pr_requisition_line.BLANKET_PO_HEADER_ID, pr_requisition_line.BLANKET_PO_LINE_NUM, pr_requisition_line.quantity, v_po_line_id, v_line_location_id );
4638 
4639 
4640      open  c_reqn_line_id(pr_requisition_line.Requisition_Line_Id);
4641      fetch c_reqn_line_id into v_reqn_ctr;
4642      close c_reqn_line_id;
4643 
4644      if nvl(v_reqn_ctr,0) = 0  then
4645 
4646        FOR rec IN  cur_bpa_tax_lines(v_po_line_id, v_line_location_id ) LOOP
4647           v_po_line_id := Rec.Po_Line_Id;
4648           v_tax_category_id := rec.tax_category_id ;
4649 
4650           INSERT INTO JAI_PO_REQ_LINE_TAXES(
4651             requisition_line_id, requisition_header_id, tax_line_no,
4652             precedence_1, precedence_2, precedence_3, precedence_4, precedence_5,
4653             precedence_6, precedence_7, precedence_8, precedence_9, precedence_10,
4654             tax_id, tax_rate, qty_rate, uom, tax_amount, tax_target_amount,
4655             tax_type, modvat_flag, vendor_id, currency,
4656             creation_date, created_by, last_update_date, last_updated_by, last_update_login,
4657             tax_category_id
4658           ) VALUES (
4659             pr_requisition_line.Requisition_Line_Id, pr_requisition_line.requisition_header_id, rec.lno,
4660             rec.p_1, rec.p_2, rec.p_3, rec.p_4, rec.p_5,
4661             rec.p_6, rec.p_7, rec.p_8, rec.p_9, rec.p_10,
4662             rec.tax_id, rec.tax_rate, rec.qty_rate, rec.uom, rec.tax_amount, rec.tax_amount + v_line_amount,
4663             rec.tax_type, rec.modvat_flag, rec.vendor_id, rec.currency,
4664             pr_requisition_line.creation_date, pr_requisition_line.created_by, pr_requisition_line.last_update_date, pr_requisition_line.last_updated_by, pr_requisition_line.last_update_login,
4665             rec.tax_category_id  );
4666 
4667 
4668         END LOOP;
4669       end if;
4670       OPEN cur_bpa_unit_measure(pr_requisition_line.BLANKET_PO_HEADER_ID, pr_requisition_line.BLANKET_PO_LINE_NUM);
4671       FETCH cur_bpa_unit_measure INTO lv_unit_meas_lookup;
4672       CLOSE cur_bpa_unit_measure;
4673 
4674       OPEN Fetch_Uom_Code_Cur(lv_unit_meas_lookup);
4675       FETCH Fetch_Uom_Code_Cur INTO v_uom_code;
4676       CLOSE Fetch_Uom_Code_Cur;
4677 
4678 
4679       jai_po_tax_pkg.calc_tax(p_type  => 'REQUISITION_BLANKET',
4680            p_header_id           => pr_requisition_line.BLANKET_PO_HEADER_ID,
4681            p_requisition_line_id => pr_requisition_line.Requisition_Line_Id ,
4682            P_line_id             => v_po_line_id,
4683            p_line_location_id    => v_line_location_id,
4684            p_line_focus_id       => NULL,
4685            p_line_quantity       => pr_requisition_line.quantity,
4686            p_base_value          => v_line_amount,
4687            p_line_uom_code       => v_uom_code,
4688            p_tax_amount          => ln_tax_amount,
4689            p_assessable_value    => v_assessable_value,
4690            p_vat_assess_value    => ln_vat_assess_value,
4691            p_item_id             => pr_requisition_line.item_id,
4692            p_conv_rate           => 1/conv_rate,
4693            p_po_curr             => v_currency,
4694            p_func_curr           => v_hdr_currency);
4695 
4696   ELSIF pr_requisition_line.BLANKET_PO_HEADER_ID IS NULL AND pr_requisition_line.BLANKET_PO_LINE_NUM IS NULL THEN
4697 
4698      IF v_type_lookup_code = 'PURCHASE' THEN
4699 
4700         jai_cmn_tax_defaultation_pkg.JA_IN_VENDOR_DEFAULT_TAXES(pr_requisition_line.Destination_Organization_Id, v_vendor_id,
4701       v_site_id, pr_requisition_line.item_id, pr_requisition_line.requisition_header_id,
4702       pr_requisition_line.Requisition_Line_Id, v_tax_category_id);
4703 
4704 
4705          jai_cmn_tax_defaultation_pkg.JA_IN_CALC_PREC_TAXES('PO_REQN', v_tax_category_id, pr_requisition_line.requisition_header_id,
4706              pr_requisition_line.Requisition_Line_Id, v_assessable_value, v_line_amount, pr_requisition_line.item_id, pr_requisition_line.quantity ,
4707              v_uom_code, v_vendor_id, NVL( v_currency, v_hdr_currency ), conv_rate,
4708              pr_requisition_line.creation_date, pr_requisition_line.created_by, pr_requisition_line.last_update_date,
4709              pr_requisition_line.last_updated_by, pr_requisition_line.last_update_login,p_vat_assessable_value => ln_vat_assess_value,
4710              p_modified_by_agent_flag => v_modified_by_agent_flag,
4711              p_parent_req_line_id => v_parent_req_line_id );
4712 
4713      ELSIF v_type_lookup_code = 'INTERNAL' THEN
4714 
4715 
4716             jai_cmn_tax_defaultation_pkg.Ja_In_Org_Default_Taxes( pr_requisition_line.Source_Organization_Id, pr_requisition_line.item_id, v_tax_category_id );
4717 
4718          jai_cmn_tax_defaultation_pkg.JA_IN_CALC_PREC_TAXES('PO_REQN', v_tax_category_id, pr_requisition_line.requisition_header_id,
4719              pr_requisition_line.Requisition_Line_Id, v_assessable_value, v_line_amount, pr_requisition_line.item_id, pr_requisition_line.quantity ,
4720              v_uom_code, NULL, NVL( v_currency, v_hdr_currency ), conv_rate,
4721              pr_requisition_line.creation_date, pr_requisition_line.created_by, pr_requisition_line.last_update_date,
4722              pr_requisition_line.last_updated_by, pr_requisition_line.last_update_login, -1*pr_requisition_line.Source_Organization_Id,p_vat_assessable_value => ln_vat_assess_value,
4723              p_modified_by_agent_flag => v_modified_by_agent_flag,
4724              p_parent_req_line_id => v_parent_req_line_id);
4725 
4726      END IF;
4727 
4728 
4729   END IF;
4730   pn_tax_category_id := v_tax_category_id ;
4731   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4732       FND_LOG.STRING(log_level =>G_LEVEL_PROCEDURE
4733                      ,module =>G_MODULE_NAME||l_api_name||'.END'
4734                      ,message => G_PKG_NAME||':'||l_api_name||'()+');
4735   END IF;
4736   EXCEPTION
4737    WHEN OTHERS THEN
4738      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4739         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4740      END IF;
4741   END po_req_tax_default;
4742 
4743 /*
4744   REM +======================================================================+
4745   REM Created By         :  Wenqiong Zhou
4746   REM Creation Date      :  Jun 1, 2012
4747   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
4748   REM SubProgram Name    :  copy_req_to_po
4749   REM Type               :  Process API
4750   REM Purpose            :  Process Tax defaultation when autocreate a po from requisition
4751   REM
4752   REM
4753   REM TDD Reference      :
4754   REM
4755   REM Assumptions        :
4756   REM
4757   REM Parameter                IN/OUT         Type                        Required     Description and Purpose
4758   REM -----------------------  ------  ------------------------------    ----------   ------------------------------------
4759   REM prec_po_location           IN      Po_Line_Locations_All%ROWTYPE      Y            PO Requisition Line Id.
4760   REM
4761   REM  CALLED BY
4762   REM  process_req_line_inserting , process_req_line_updating.
4763   REM +================================================================================================+
4764 */
4765 PROCEDURE copy_req_to_po(prec_po_location IN Po_Line_Locations_All%ROWTYPE) IS
4766 	 v_requisition_line_id   NUMBER;
4767   v_sugg_vendor_name    VARCHAR2(360);
4768   v_dest_org_id               NUMBER;
4769   v_sugg_vendor_location  VARCHAR2(360);
4770   v_item_id       NUMBER;
4771   v_shipment_type     VARCHAR2(30);
4772   v_po_vendor_id      NUMBER;
4773   v_vendor_id     NUMBER;
4774   v_sugg_vendor_id    NUMBER;
4775   v_po_vendor_site_id   NUMBER;
4776   v_line_loc_id     NUMBER;
4777   v_cre_dt        DATE ;
4778   v_cre_by        NUMBER;
4779   v_last_upd_dt     DATE ;
4780   v_last_upd_by     NUMBER;
4781   v_last_upd_login    NUMBER  ;
4782   v_hdr_curr      VARCHAR2(30);
4783   v_uom_code      VARCHAR2(100);
4784   v_price       NUMBER ;
4785   v_qty       NUMBER   ;
4786   v_curr        VARCHAR2(30) ;
4787   v_req_conv_rate     NUMBER  ;
4788   v_req_conv_type     VARCHAR2(30) ;
4789   v_req_conv_date     DATE  ;
4790   v_t_curr        VARCHAR2(30);
4791   v_po_curr       VARCHAR2(30);
4792   v_po_conv_rate      NUMBER;
4793   v_po_conv_type      VARCHAR2(30);
4794   v_po_conv_date      DATE;
4795   v_set_of_book_id    NUMBER;
4796   conv_rate       NUMBER;
4797   v_curr_conv_factor          NUMBER;
4798   DUMMY                       NUMBER;
4799   v_currency_code   GL_SETS_OF_BOOKS.currency_code%TYPE;
4800 
4801   -- For Blanket Release
4802   v_src_ship_id               NUMBER;
4803   v_po_rel_id                 NUMBER;
4804 
4805   -- For Cursor Fetch tax cur
4806   v_po_hdr_id     NUMBER;
4807   v_po_line_id      NUMBER;
4808   v_line_focus_id     NUMBER;
4809   Line_tot        NUMBER;
4810   v_tax_amt       NUMBER;
4811   v_total_amt       NUMBER;
4812   v_tax_line_no     NUMBER;
4813   v_prec1       NUMBER;
4814   v_prec2       NUMBER;
4815   v_prec3         NUMBER;
4816   v_prec4       NUMBER;
4817   v_prec5         NUMBER;
4818 
4819   v_prec6       NUMBER;
4820   v_prec7       NUMBER;
4821   v_prec8         NUMBER;
4822   v_prec9       NUMBER;
4823   v_prec10         NUMBER;
4824 
4825 
4826   v_taxid         NUMBER;
4827   v_tax_rate      NUMBER;
4828   v_qty_rate      NUMBER;
4829   v_uom       VARCHAR2(15);
4830   v_tax_type      VARCHAR2(30);
4831   v_mod_flag      VARCHAR2(1);
4832   v_vendor2_id      NUMBER;
4833   v_mod_cr        NUMBER;
4834   v_vendor1_id      NUMBER;
4835   v_tax_target_amt    NUMBER;
4836   v_tax_amt1      NUMBER;
4837   v_assessable_value    NUMBER;
4838   v_vat_assess_value     NUMBER;
4839   v_loc_count     NUMBER;
4840 
4841   v_tax_category_id     JAI_PO_TAXES.tax_category_id%TYPE;
4842   v_tax_category_id_holder  JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
4843   v_style_id            po_headers_all.style_id%TYPE;
4844 
4845 ------------------------------>
4846 --  Check the vendor btn the vendor present in tax lines and that of suggested vendor in requisition lines
4847 --    If they are same or any one is null then insert po vendor else keep the vendor in tact.
4848 --    Check if the document to be created is a Blanket Release / Standard Purchase Order.
4849 --    Pick up Line Location Details as well.
4850 
4851   CURSOR c_inventory_org_id(p_ship_to_location_id IN NUMBER) IS
4852     SELECT Inventory_Organization_Id
4853     FROM Hr_Locations
4854     WHERE Location_Id = p_ship_to_location_id;
4855 
4856   v_inventory_org_id  HR_LOCATIONS.Inventory_Organization_Id%TYPE;
4857   v_line_loc_cnt NUMBER;
4858   v_ship_to_organization_id NUMBER;
4859   v_ship_to_location_id NUMBER;
4860   v_price_override    PO_LINE_LOCATIONS_ALL.price_override%TYPE;
4861   v_unit_meas_lookup_code   PO_LINE_LOCATIONS_ALL.unit_meas_lookup_code%TYPE;
4862   v_line_uom          PO_LINES_ALL.unit_meas_lookup_code%TYPE;
4863   v_type_lookup_code PO_HEADERS_ALL.type_lookup_code%TYPE;
4864   v_quot_class_code PO_HEADERS_ALL.quotation_class_code%TYPE;
4865 
4866 
4867   CURSOR Fetch_Unit_Measure_Cur IS
4868     SELECT Unit_Meas_Lookup_Code
4869     FROM Po_Lines_All
4870     WHERE Po_Line_Id = v_po_line_id;
4871 
4872   CURSOR Fetch_UomCode_Cur(p_uom IN VARCHAR2) IS
4873     SELECT Uom_Code
4874     FROM Mtl_Units_Of_Measure
4875     WHERE Unit_Of_Measure = p_uom;
4876 
4877   -- Pick up vendor id for the corresponding Po_Header_Id
4878   CURSOR Fetch_Po_Vendor_Id_Cur( hdr_id IN NUMBER ) IS
4879     SELECT Vendor_Id, Vendor_SIte_Id, Currency_Code, Rate_Date, Rate_Type, Rate
4880       , type_lookup_code, quotation_class_code,
4881       style_id
4882     FROM Po_Headers_All
4883     WHERE Po_Header_Id = hdr_id;
4884 
4885 
4886 
4887   CURSOR Fetch_Taxes_Cur( rqlineid IN NUMBER ) IS
4888     SELECT Tax_Line_no,
4889            Precedence_1, Precedence_2, Precedence_3, Precedence_4, Precedence_5,
4890 	   Precedence_6, Precedence_7, Precedence_8, Precedence_9, Precedence_10,
4891       Tax_Id, Currency, Tax_Rate, Qty_Rate, UOM, Tax_Amount, Tax_Type, Modvat_Flag,
4892       Vendor_Id, Tax_Target_Amount,
4893       tax_category_id
4894     FROM JAI_PO_REQ_LINE_TAXES
4895     WHERE requisition_line_id = rqlineid
4896     ORDER BY Tax_Line_No;
4897   rec_tax   Fetch_Taxes_Cur%ROWTYPE;
4898   CURSOR Fetch_Mod_Cr_Cur( taxid IN NUMBER ) IS
4899     SELECT Tax_Type, Mod_Cr_Percentage, Vendor_Id
4900       , adhoc_flag
4901     FROM   JAI_CMN_TAXES_ALL
4902     WHERE  Tax_Id = taxid;
4903 
4904   CURSOR Fetch_Vendor_Id IS
4905     SELECT Vendor_Id
4906     FROM   Po_Vendors
4907     WHERE  Vendor_Name = v_sugg_vendor_name;
4908 
4909   CURSOR Tot_Amt_Cur IS
4910     SELECT SUM( NVL( Tax_Amount, 0 ) )
4911     FROM JAI_PO_TAXES
4912     WHERE line_location_id = v_line_loc_id
4913     AND Tax_Type <> jai_constants.tax_type_tds ; /* 'TDS';*/
4914 
4915 
4916   CURSOR Chk_localization_entry(c_req_line_id NUMBER) IS
4917     SELECT COUNT(REQUISITION_LINE_ID)
4918     FROM JAI_PO_REQ_LINES
4919     WHERE REQUISITION_LINE_ID = c_req_line_id;
4920 
4921   CURSOR tax_override_flag_cur(c_vendor_id NUMBER, c_vendor_site_id NUMBER) IS
4922     SELECT override_flag
4923     FROM JAI_CMN_VENDOR_SITES
4924     WHERE vendor_id = c_vendor_id
4925     AND vendor_site_id = c_vendor_site_id;
4926 
4927   v_override_flag VARCHAR2(1);
4928 
4929   CURSOR c_get_tax_category_id(p_requisition_line_id IN NUMBER) IS
4930     SELECT tax_category_id
4931     FROM JAI_PO_REQ_LINES
4932     WHERE requisition_line_id = p_requisition_line_id;
4933 
4934 
4935 
4936   v_quantity NUMBER;
4937 
4938 
4939   v_tax_amount NUMBER;
4940   v_adhoc_flag CHAR(1);
4941 
4942   v_curr_conv_rate NUMBER;
4943 
4944   v_debug BOOLEAN;
4945   v_utl_file_name VARCHAR2(50);
4946   v_utl_location VARCHAR2(512);
4947   v_myfilehandle UTL_FILE.FILE_TYPE;
4948 
4949 
4950   lv_tax_cnt NUMBER := 0;
4951   lv_tax_from_reqn_flag varchar2(1) := 'N';
4952 
4953   l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
4954   v_requisition_header_id  NUMBER;
4955   v_reqn_tax NUMBER;
4956 
4957     CURSOR Fetch_Focus_Id_Cur_for_req( line_id IN NUMBER , line_loc_id in Number ) IS
4958     SELECT Line_Focus_Id
4959     FROM   JAI_PO_LINE_LOCATIONS
4960     WHERE  Po_Line_Id = line_id
4961     AND Line_Location_Id = line_loc_id;
4962 
4963   CURSOR c_get_line_loc_cnt IS
4964   select count(1)  from JAI_PO_LINE_LOCATIONS
4965   where line_location_id = v_line_loc_id;
4966 
4967      Cursor fetch_Tax_cnt( cp_line_loc_id in number ) is
4968      select count(1)
4969        from JAI_PO_TAXES
4970       where line_location_id = cp_line_loc_id;
4971 
4972    CURSOR Fetch_Hdr_Curr_Cur IS
4973    SELECT NVL( Currency_Code, '$' )
4974      FROM Po_Requisition_Headers_V
4975     WHERE Requisition_Header_Id = v_requisition_header_id;
4976 
4977     Cursor c_get_tax_modified_flag IS
4978     SELECT tax_modified_flag
4979         FROM JAI_PO_LINE_LOCATIONS
4980       WHERE line_location_id = prec_po_location.line_location_id ;
4981   lv_tax_modified_flag VARCHAR2(1) ;
4982 
4983    CURSOR c_get_req_lines IS
4984    SELECT *
4985    FROM PO_REQUISITION_LINES_ALL
4986    WHERE line_location_id = prec_po_location.line_location_id;
4987 
4988 
4989   rec_req_line             PO_REQUISITION_LINES_ALL%ROWTYPE;
4990   tax_cnt   NUMBER;
4991   l_api_name            CONSTANT VARCHAR2(200) := 'copy_req_to_po';
4992   BEGIN
4993 
4994     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4995      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
4996     END IF;
4997 
4998    v_po_hdr_id                := prec_po_location.Po_Header_Id  ;
4999    v_po_line_id               := prec_po_location.Po_Line_Id    ;
5000    Line_Tot                   := prec_po_location.Price_Override * prec_po_location.Quantity;
5001    v_shipment_type            := prec_po_location.Shipment_Type       ;
5002    v_po_rel_id                := prec_po_location.Po_Release_Id       ;
5003    v_src_ship_id              := prec_po_location.Source_Shipment_Id  ;
5004    v_quantity                 := prec_po_location.quantity            ;
5005    v_ship_to_organization_id  := prec_po_location.ship_to_organization_id;
5006    v_ship_to_location_id      := prec_po_location.ship_to_location_id    ;
5007    v_price_override           := prec_po_location.price_override         ;
5008    v_unit_meas_lookup_code    := prec_po_location.Unit_Meas_Lookup_Code  ;
5009    v_line_loc_id              := prec_po_location.LINE_LOCATION_ID  ;
5010 
5011     OPEN  Fetch_Po_Vendor_Id_Cur( v_po_hdr_id );
5012     FETCH Fetch_Po_Vendor_Id_Cur INTO v_po_vendor_id, v_po_vendor_site_id, v_po_curr,
5013       v_po_conv_date, v_po_conv_type, v_po_conv_rate
5014       , v_type_lookup_code, v_quot_class_code,
5015       v_style_id;
5016     CLOSE Fetch_Po_Vendor_Id_Cur;
5017 
5018 
5019    IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
5020     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5021       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'style_id:'||to_char(v_style_id)||'validate_po_type is false,return');
5022       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
5023     END IF;
5024     return;
5025    END IF;
5026 
5027    OPEN Fetch_Hdr_Curr_Cur;
5028     FETCH Fetch_Hdr_Curr_Cur INTO v_hdr_curr;
5029    CLOSE Fetch_Hdr_Curr_Cur;
5030 
5031    v_curr     := NVL( v_curr, v_hdr_curr);
5032    OPEN  Fetch_Unit_Measure_Cur;
5033    FETCH Fetch_Unit_Measure_Cur INTO v_line_uom;
5034    CLOSE Fetch_Unit_Measure_Cur;
5035 
5036    OPEN  Fetch_UomCode_Cur(v_line_uom);
5037    FETCH Fetch_UomCode_Cur INTO v_uom_code;
5038    CLOSE Fetch_UomCode_Cur;
5039 
5040    OPEN  tax_override_flag_cur(v_po_vendor_id, v_po_vendor_site_id);
5041    FETCH tax_override_flag_cur INTO v_override_flag;
5042    CLOSE tax_override_flag_cur;
5043 
5044 
5045     OPEN c_get_req_lines;
5046     LOOP
5047     FETCH c_get_req_lines INTO rec_req_line;
5048     EXIT WHEN c_get_req_lines%NOTFOUND;
5049 
5050 
5051       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5052        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_requisition_line_id:'||to_char(rec_req_line.requisition_line_id));
5053       END IF;
5054 
5055 
5056     v_requisition_line_id           := rec_req_line.Requisition_Line_Id;
5057     v_sugg_vendor_name              := rec_req_line.Suggested_Vendor_Name;
5058     v_dest_org_id                   := rec_req_line.Destination_Organization_Id;
5059     v_sugg_vendor_location          := rec_req_line.Suggested_Vendor_Location;
5060     v_item_id                       := rec_req_line.Item_Id;
5061     v_line_loc_id                   := rec_req_line.Line_Location_Id;
5062     v_cre_dt                        := rec_req_line.Creation_Date;
5063     v_cre_by                        := rec_req_line.Created_By;
5064     v_last_upd_dt                   := rec_req_line.Last_Update_Date ;
5065     v_last_upd_by                   := rec_req_line.Last_Updated_By;
5066     v_last_upd_login                := rec_req_line.Last_Update_Login;
5067     v_price                         := rec_req_line.Unit_Price;
5068     v_qty                           := rec_req_line.Quantity;
5069     v_curr                          := rec_req_line.Currency_Code;
5070     v_req_conv_rate                 := rec_req_line.Rate;
5071     v_req_conv_type                 := rec_req_line.Rate_Type;
5072     v_req_conv_date                 := rec_req_line.Rate_Date;
5073     DUMMY                           := 1;
5074     v_loc_count                     := 0;
5075     v_requisition_header_id         := rec_req_line.requisition_header_id;
5076 
5077     --Modified by Junjian for bug#14729941 on 10-Oct-2012 begin
5078     v_curr_conv_factor  := get_currency_conv_rate (v_inv_org_id => v_dest_org_id,
5079                                                     v_currency   => v_po_curr/*v_curr*/,
5080                                                     v_rate_date  => v_po_conv_date/*v_req_conv_date*/,
5081                                                     v_rate_type  => v_po_conv_type/*v_req_conv_type*/,
5082                                                     v_rate       => v_po_conv_rate/*v_req_conv_rate*/);
5083 	v_price_override := v_price_override * nvl(v_curr_conv_factor,1);
5084     --Modified by Junjian for bug#14729941 on 10-Oct-2012 end
5085    OPEN Chk_localization_entry(v_requisition_line_id);
5086    FETCH Chk_localization_entry INTO v_loc_count;
5087    CLOSE Chk_localization_entry;
5088 
5089    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5090      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'override_flag:'||NVL(v_override_flag,'N')||'v_shipment_type:'||v_shipment_type);
5091    END IF;
5092    IF NVL(v_override_flag,'N') = 'Y' AND v_shipment_type <> 'BLANKET' THEN
5093       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5094        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': override_flag is Y and shipment type <> BLANKET, return');
5095       END IF;
5096      RETURN;
5097    END IF;
5098 
5099     IF v_shipment_type <> 'BLANKET' THEN
5100       IF NVL(v_loc_count,0) = 0 THEN
5101         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5102           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||':shipment type <> BLANKET and no data in JAI req table, return');
5103         END IF;
5104         RETURN;
5105       END IF;
5106     ELSE
5107       RETURN;
5108     END IF;
5109 
5110 
5111    OPEN  Fetch_Vendor_Id;
5112    FETCH Fetch_Vendor_Id INTO v_sugg_vendor_id;
5113    CLOSE Fetch_Vendor_Id;
5114 
5115    v_sugg_vendor_id := nvl(v_sugg_vendor_id,-999);
5116 
5117    OPEN c_get_line_loc_cnt;
5118    FETCH c_get_line_loc_cnt INTO v_line_loc_cnt;
5119    CLOSE c_get_line_loc_cnt;
5120   -- this means multiple requisition lines are merged into a single PO Shipment line
5121   -- so the taxes should get defaulted from SET UP's rather than carrying the reqn taxes to PO Shipment
5122 
5123    IF v_line_loc_cnt > 0 THEN
5124 
5125         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5126           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||':v_line_loc_cnt > 0');
5127         END IF;
5128 
5129 
5130     OPEN c_get_tax_modified_flag ;
5131     FETCH c_get_tax_modified_flag INTO lv_tax_modified_flag ;
5132     CLOSE c_get_tax_modified_flag;
5133 
5134 
5135     IF NVL(lv_tax_modified_flag,'N') = 'N' THEN
5136 
5137         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5138           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||':lv_tax_modified_flag = N');
5139         END IF;
5140 
5141        delete_jai_po_lines(pn_line_loc_id => v_line_loc_id);
5142 
5143 
5144        OPEN  c_inventory_org_id( v_ship_to_location_id );
5145        FETCH c_inventory_org_id INTO v_inventory_org_id;
5146        CLOSE c_inventory_org_id;
5147 
5148        insert_jai_line_locs(
5149                              v_line_loc_id     => v_line_loc_id
5150                             ,v_po_hdr_id       => v_po_hdr_id
5151                             ,v_po_line_id      => v_po_line_id
5152                             ,v_cre_dt          => v_cre_dt
5153                             ,v_cre_by          => v_cre_by
5154                             ,v_last_upd_dt     => v_last_upd_dt
5155                             ,v_last_upd_by     => v_last_upd_by
5156                             ,v_last_upd_login  => v_last_upd_login
5157                             ,flag              => 'I'
5158                             ,v_item_id         => v_item_id
5159                             ,v_vendor_id       => v_po_vendor_id
5160                             ,v_vendor_site_id  => v_po_vendor_site_id
5161                             ,v_qty             => v_quantity
5162                             ,v_price_override  => v_price_override
5163                             ,v_currency        => v_po_curr
5164                             ,v_line_focus_id   => v_line_focus_id
5165                             );
5166 
5167 
5168       /*calculate av and VAT av*/
5169        get_assessable_value(
5170                            pn_vendor_id        =>  v_po_vendor_id
5171                           ,pn_vendor_site_id   =>  v_po_vendor_site_id
5172                           ,pn_item_id          =>  v_item_id
5173                           ,pn_price            =>  v_price_override
5174                           ,pn_qty              =>  v_quantity
5175                           ,pv_uom_code         =>  v_uom_code
5176                           ,pn_po_hdr_id        =>  v_po_hdr_id
5177                           ,pv_currency         =>  v_po_curr
5178                           ,pv_action           =>  JAI_CONSTANTS.inserting
5179                           ,pn_conv_rate        =>  v_curr_conv_factor
5180                           ,pn_assessable_value =>  v_assessable_value
5181                           ,pn_vat_assess_value =>  v_vat_assess_value
5182                           );
5183 
5184        process_po_taxes(
5185                       v_type_lookup_code      =>  v_Type_Lookup_Code
5186                      ,v_quot_class_code       =>  v_Quot_Class_Code
5187                      ,v_vendor_id             =>  v_po_vendor_id
5188                      ,v_vendor_site_id        =>  v_po_vendor_site_id
5189                      ,v_currency              =>  v_po_curr
5190                      ,v_org_id                =>  v_inventory_org_id
5191                      ,v_item_id               =>  v_item_id
5192                      ,v_uom_code              =>  v_uom_code
5193                      ,v_line_loc_id           =>  v_line_loc_id
5194                      ,v_po_hdr_id             =>  v_po_hdr_id
5195                      ,v_po_line_id            =>  v_po_line_id
5196                      ,v_frm_po_line_id        =>   NULL
5197                      ,v_frm_line_loc_id       =>   NULL
5198                      ,v_price                 =>  v_price_override
5199                      ,v_qty                   =>  v_quantity
5200                      ,v_cre_dt                =>  v_cre_dt
5201                      ,v_cre_by                =>  v_cre_by
5202                      ,v_last_upd_dt           =>  v_last_upd_dt
5203                      ,v_last_upd_by           =>  v_last_upd_by
5204                      ,v_last_upd_login        =>  v_last_upd_login
5205                      ,flag                    => 'I'
5206                      ,pn_conv_rate            =>  v_curr_conv_factor
5207                      ,pn_assessable_value     =>  v_assessable_value
5208                      ,pn_vat_assess_value     =>  v_vat_assess_value
5209                 );
5210 
5211       END IF ;
5212         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5213           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||'v_line_loc_cnt >0 and after default for tax_modified_flag = N, and return.');
5214         END IF;
5215 
5216     return;
5217   END IF;
5218 
5219 
5220   /*
5221   ||Po lines does not exists .
5222   ||Insert the line locations from requisition into po using the procedure below
5223   */
5224        insert_jai_line_locs(
5225                              v_line_loc_id     => v_line_loc_id
5226                             ,v_po_hdr_id       => v_po_hdr_id
5227                             ,v_po_line_id      => v_po_line_id
5228                             ,v_cre_dt          => v_cre_dt
5229                             ,v_cre_by          => v_cre_by
5230                             ,v_last_upd_dt     => v_last_upd_dt
5231                             ,v_last_upd_by     => v_last_upd_by
5232                             ,v_last_upd_login  => v_last_upd_login
5233                             ,flag              => 'I'
5234                             ,v_item_id         => v_item_id
5235                             ,v_vendor_id       => v_po_vendor_id
5236                             ,v_vendor_site_id  => v_po_vendor_site_id
5237                             ,v_qty             => v_quantity
5238                             ,v_price_override  => v_price_override
5239                             ,v_currency        => v_po_curr
5240                             ,v_line_focus_id   => v_line_focus_id
5241                             );
5242 
5243 
5244    /*
5245      Fetch the line_focus_id for the current line and current
5246      line location id  */
5247      SELECT COUNT(1) INTO tax_cnt FROM JAI_PO_TAXES WHERE
5248      Po_Line_Id = v_po_line_id
5249        AND Line_Location_Id = v_line_loc_id;
5250     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5251       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'before insert taxes, tax_cnt  is  '||tax_cnt);
5252     END IF;
5253 
5254     v_reqn_tax := 0;
5255     OPEN Fetch_Taxes_Cur( v_requisition_line_id );
5256     LOOP
5257     FETCH Fetch_Taxes_Cur INTO rec_tax;
5258 
5259     EXIT WHEN Fetch_Taxes_Cur%NOTFOUND;
5260 	  v_reqn_tax := v_reqn_tax + 1;
5261     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5262       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'in fetch_tax_cur loop:v_reqn_tax, '||v_reqn_tax);
5263     END IF;
5264 
5265     OPEN Fetch_Mod_Cr_Cur( rec_tax.tax_id );
5266     FETCH Fetch_Mod_Cr_Cur INTO v_tax_type, v_mod_cr, v_vendor1_id
5267       , v_adhoc_flag;
5268     CLOSE Fetch_Mod_Cr_Cur;
5269 
5270     v_currency_code := get_func_currency(v_inventory_org_id);
5271 	  v_t_curr := rec_tax.Currency; --Added by Junjian for bug#14729941 on 10-Oct-2012
5272     v_tax_amt := rec_tax.Tax_Amount;
5273     IF nvl(v_adhoc_flag, 'N') = 'Y' THEN
5274       IF v_t_curr <> v_po_curr THEN
5275 
5276         -- as tax_currency is same as functional currency and v_curr_conv_rate contains conversion from v_po_curr to func_curr
5277         IF v_t_curr = v_currency_code THEN
5278           v_curr_conv_rate := jai_cmn_utils_pkg.currency_conversion( v_set_of_book_id , v_po_curr , v_po_conv_date , v_po_conv_type, v_po_conv_rate );
5279 
5280           v_tax_amount := v_tax_amt / v_curr_conv_rate;
5281 
5282         ELSE  -- now tax_currency is not equal to functional currency, so division is fine
5283           v_curr_conv_rate := jai_cmn_utils_pkg.currency_conversion( v_set_of_book_id , v_t_curr , v_po_conv_date , v_po_conv_type, v_po_conv_rate );
5284           v_tax_amount := v_tax_amt * v_curr_conv_rate;
5285 
5286         END IF;
5287 
5288         v_curr_conv_rate := null;
5289       ELSE
5290         v_tax_amount := v_tax_amt;
5291       END IF;
5292     ELSE
5293       v_tax_amount := 0;
5294     END IF;
5295 
5296 
5297     IF v_mod_cr IS NOT NULL AND v_mod_cr > 0 THEN
5298       v_mod_flag := 'Y';
5299     ELSE
5300       v_mod_flag := 'N';
5301     END IF;
5302 
5303     IF upper(v_tax_type) IN ( 'CUSTOMS', 'CVD',
5304                               jai_constants.tax_type_add_cvd ,
5305                               jai_constants.tax_type_customs_edu_Cess,JAI_CONSTANTS.TAX_TYPE_SH_CUSTOMS_EDU_CESS,
5306                               jai_constants.tax_type_cvd_edu_cess,JAI_CONSTANTS.TAX_TYPE_SH_CVD_EDU_CESS)
5307     THEN
5308       v_vendor_id := NULL;
5309     ELSIF v_tax_type = 'TDS' THEN
5310       v_vendor_id := v_vendor1_id;
5311     ELSE
5312       IF NVL( v_vendor2_id, -999 ) = v_sugg_vendor_id THEN
5313         v_vendor_id := v_po_vendor_id;
5314       ELSE
5315         v_vendor_id := v_vendor2_id;
5316       END IF;
5317     END IF;
5318           insert_po_taxes
5319           ( 'STANDARD', NULL,
5320             v_line_focus_id, v_line_loc_id,
5321             rec_tax.Tax_Line_no, v_po_line_id,  v_po_hdr_id,
5322             rec_tax.precedence_1, rec_tax.precedence_2, rec_tax.precedence_3,
5323             rec_tax.precedence_4, rec_tax.precedence_5,
5324             rec_tax.precedence_6, rec_tax.precedence_7, rec_tax.precedence_8,
5325             rec_tax.precedence_9, rec_tax.precedence_10,
5326             rec_tax.tax_id, NULL, 0, /*rec_tax.currency*/v_po_curr,--Modified by Junjian for bug#14729941 on 10-Oct-2012
5327             rec_tax.tax_rate, rec_tax.qty_rate, rec_tax.uom,
5328             v_tax_amount , rec_tax.tax_type,  rec_tax.Modvat_Flag,
5329             rec_tax.vendor_id, rec_tax.Tax_Target_Amount ,
5330             v_cre_dt,  v_cre_by, v_last_upd_dt,
5331             v_last_upd_by, v_last_upd_login,
5332             rec_tax.tax_category_id
5333            );
5334 
5335 
5336 
5337           v_tax_amt := 0;
5338           v_tax_amount := 0;
5339           v_adhoc_flag := null;
5340 
5341 
5342 
5343     END LOOP;
5344 
5345     CLOSE Fetch_Taxes_Cur;
5346      SELECT COUNT(1) INTO tax_cnt FROM JAI_PO_TAXES WHERE
5347      Po_Line_Id = v_po_line_id
5348        AND Line_Location_Id = v_line_loc_id;
5349     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5350       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after insert taxes, tax_cnt is  '||tax_cnt);
5351     END IF;
5352     if v_reqn_tax > 0 then
5353 
5354       /*calculate av and VAT av*/
5355        get_assessable_value(
5356                            pn_vendor_id        =>  v_po_vendor_id
5357                           ,pn_vendor_site_id   =>  v_po_vendor_site_id
5358                           ,pn_item_id          =>  v_item_id
5359                           ,pn_price            =>  v_price
5360                           ,pn_qty              =>  v_quantity
5361                           ,pv_uom_code         =>  v_uom_code
5362                           ,pn_po_hdr_id        =>  v_po_hdr_id
5363                           ,pv_currency         =>  v_po_curr
5364                           ,pv_action           =>  JAI_CONSTANTS.inserting
5365                           ,pn_conv_rate        =>  v_curr_conv_factor
5366                           ,pn_assessable_value =>  v_assessable_value
5367                           ,pn_vat_assess_value =>  v_vat_assess_value
5368                           );
5369     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5370       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'before calculate_tax ');
5371       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_po_hdr_id:'||v_po_hdr_id||'v_po_line_id:'
5372                                                     ||v_po_line_id||'v_line_loc_id'||v_line_loc_id || 'v_quantity:'||v_quantity||
5373                                                        'line_tot:'||line_tot||'v_uom_code'||v_uom_code||'v_assessable_value:'||v_assessable_value
5374                                                        ||'v_vat_assess_value'||v_vat_assess_value||'v_curr_conv_factor'||v_curr_conv_factor);
5375 
5376     END IF;
5377     v_tax_amt := NULL;
5378 
5379    jai_po_tax_pkg.calculate_tax( 'STANDARDPO',
5380                    v_po_hdr_id ,
5381                    v_po_line_id,
5382                    v_line_loc_id,
5383                    v_quantity,
5384                    line_tot,
5385                    v_uom_code,
5386                    line_tot,
5387                    v_assessable_value,
5388                    v_vat_assess_value,
5389                    v_item_id,
5390                    1/v_curr_conv_factor );
5391 
5392 
5393  /*  jai_po_tax_pkg.calc_tax(
5394         p_type => 'STANDARDPO',
5395         p_header_id => v_po_hdr_id,
5396         P_line_id => v_po_line_id,
5397         p_line_location_id => v_line_loc_id,
5398         p_line_focus_id => v_line_focus_id,
5399         p_line_quantity => v_qty,
5400         p_base_value => line_tot,
5401         p_line_uom_code => v_uom_code,
5402         p_tax_amount => v_tax_amt,
5403         p_assessable_value => v_assessable_value,
5404         p_vat_assess_value => v_vat_assess_value,
5405         p_item_id => v_item_id,
5406         p_conv_rate => 1/v_curr_conv_factor,
5407         p_po_curr => v_po_curr,
5408         p_func_curr => v_currency_code
5409 
5410       );*/
5411     OPEN  Tot_Amt_Cur;
5412     FETCH Tot_Amt_Cur INTO v_tax_amt;
5413     CLOSE Tot_Amt_Cur;
5414 
5415     OPEN  c_get_tax_category_id(rec_req_line.REQUISITION_LINE_ID);
5416     FETCH c_get_tax_category_id INTO v_tax_category_id_holder;
5417     CLOSE c_get_tax_category_id;
5418 
5419 
5420 
5421     UPDATE JaI_Po_Line_Locations
5422        SET Tax_Amount = NVL( v_tax_amt, 0 ),
5423           Total_Amount = NVL( Line_Tot, 0 ) + NVL( v_tax_amt, 0 ),
5424           Last_Updated_By = v_last_upd_by,
5425           Last_Update_Date = v_last_upd_dt,
5426           Last_Update_Login = v_last_upd_login,
5427 	  tax_category_id = v_tax_category_id_holder
5428     WHERE  Po_Line_Id = v_po_line_id
5429       AND Line_Location_Id = v_line_Loc_id;
5430 
5431     end if;
5432  END LOOP;
5433 
5434 exception
5435    WHEN OTHERS THEN
5436 
5437 
5438      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5439         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5440      END IF;
5441      app_exception.raise_exception;
5442 
5443 END copy_req_to_po;
5444 /*
5445   REM +======================================================================+
5446   REM Created By         :  Wenqiong Zhou
5447   REM Creation Date      :  Jun 1, 2012
5448   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
5449   REM SubProgram Name    :  Cancel_po
5450   REM Type               :  Process API
5451   REM Purpose            :  Process PO cancelation.
5452   REM
5453   REM
5454   REM TDD Reference      :
5455   REM
5456   REM Assumptions        :
5457   REM
5458   REM Parameter                IN/OUT         Type                        Required     Description and Purpose
5459   REM -----------------------  ------  ------------------------------    ----------   ------------------------------------
5460   REM prec_po_location           IN      Po_Line_Locations_All%ROWTYPE      Y            PO Requisition Line Id.
5461   REM
5462   REM  CALLED BY
5463   REM  process_req_line_inserting , process_req_line_updating.
5464   REM +================================================================================================+
5465 */
5466 PROCEDURE cancel_po(pn_po_hdr_id IN NUMBER) IS
5467 
5468 rec_line_loc           PO_LINE_LOCATIONS_ALL%ROWTYPE;
5469 
5470 CURSOR cur_line_loc IS
5471 SELECT *
5472 FROM  PO_LINE_LOCATIONS_ALL
5473 WHERE PO_HEADER_ID = pn_po_hdr_id;
5474 
5475 
5476 l_api_name            CONSTANT VARCHAR2(200) := 'cancel_po';
5477 BEGIN
5478 
5479     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5480      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
5481     END IF;
5482 
5483    FOR rec_line_loc  IN cur_line_loc
5484    LOOP
5485       jai_po_proc_pkg.cancel_po_shipment_line(rec_line_loc);
5486    END LOOP;
5487 END cancel_po;
5488 /*
5489   REM +======================================================================+
5490   REM Created By         :  Wenqiong Zhou
5491   REM Creation Date      :  Jun 1, 2012
5492   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
5493   REM SubProgram Name    :  process_release
5494   REM Type               :  Process API
5495   REM Purpose            :  Process PO Release.
5496   REM
5497   REM
5498   REM TDD Reference      :
5499   REM
5500   REM Assumptions        :
5501   REM
5502   REM Parameter                IN/OUT         Type                        Required     Description and Purpose
5503   REM -----------------------  ------  ------------------------------    ----------   ------------------------------------
5504   REM pn_po_release_id           IN           NUMBER                          Y            PO Release Id.
5505   REM pv_action                  IN           VARCHAR2                        Y            To indicate insert/udate.
5506   REM
5507   REM  CALLED BY
5508   REM   JAI_TAX_PROCESSING_PKG.calculate_tax
5509   REM +=====================================================================================================+
5510 */
5511 PROCEDURE process_release(pn_po_release_id IN NUMBER, pv_action IN VARCHAR2) IS
5512 CURSOR c_release_line_locs IS
5513 SELECT *
5514 FROM PO_LINE_LOCATIONS_ALL
5515 WHERE po_release_id = pn_po_release_id;
5516 
5517 CURSOR c_jai_loc_exists(cn_line_id IN NUMBER) IS
5518 SELECT 1
5519  FROM JAI_PO_LINE_LOCATIONS jai
5520  WHERE jai.PO_LINE_ID = cn_line_id
5521  AND   jai.line_location_id IS NULL;
5522 
5523 rec_line_location   PO_LINE_LOCATIONS_ALL%ROWTYPE;
5524 ln_line_id          PO_LINE_LOCATIONS_ALL.PO_LINE_ID%TYPE;
5525 ln_flag             NUMBER;
5526 lv_action           VARCHAR2(20);
5527 l_api_name                    CONSTANT VARCHAR2(30) := 'process_release';
5528 BEGIN
5529   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5530      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
5531      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'pn_po_release_id:'||pn_po_release_id||'pv_action:'||pv_action);
5532   END IF;
5533 
5534   OPEN c_release_line_locs;
5535   LOOP
5536   FETCH c_release_line_locs INTO rec_line_location;
5537   EXIT WHEN c_release_line_locs%NOTFOUND;
5538     process_po_shipment_line(rec_line_location.line_location_id, NULL , NULL ,pv_action);
5539   END LOOP;
5540   CLOSE c_release_line_locs;
5541 
5542   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5543     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
5544   END IF;
5545  EXCEPTION
5546    WHEN OTHERS THEN
5547 
5548 
5549      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5550         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5551      END IF;
5552      app_exception.raise_exception;
5553 END process_release;
5554 /*
5555   REM +======================================================================+
5556   REM Created By         :  Wenqiong Zhou
5557   REM Creation Date      :  Jun 1, 2012
5558   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
5559   REM SubProgram Name    :  copy_agreement_taxes
5560   REM Type               :  Process API
5561   REM Purpose            :  Copy blanket agreement taxes to release.
5562   REM
5563   REM
5564   REM TDD Reference      :
5565   REM
5566   REM Assumptions        :
5567   REM
5568   REM Parameter                IN/OUT         Type         Required     Description and Purpose
5569   REM -----------------------  ------  ------------------ ----------   ------------------------------------
5570   REM p_src_ship_id             IN           NUMBER           Y            PO Release Id.
5571   REM p_qty                     IN           NUMBER           Y            quantity of item.
5572   REM p_po_hdr_id               IN           NUMBER           Y            PO header id
5573   REM p_po_line_id              IN           NUMBER           Y            PO line id
5574   REM p_po_line_loc_id          IN           NUMBER           Y            PO shipment line id
5575   REM p_ship_type               IN           VARCHAR2         Y            PO shipment type
5576   REM p_cre_dt                  IN           DATE             Y            creation date
5577   REM p_cre_by                  IN           NUMBER           Y            created by
5578   REM p_last_upd_dt             IN           DATE             Y            last update date
5579   REM p_last_upd_by             IN           NUMBER           Y            last update by
5580   REM p_last_upd_login          IN           NUMBER           Y            last update login
5581   REM
5582   REM  CALLED BY
5583   REM   JAI_PO_PROC_PKG.process_po_tax_wrapper
5584   REM +=====================================================================================================+
5585 */
5586   PROCEDURE copy_agreement_taxes
5587   (
5588     p_src_ship_id IN NUMBER,
5589     p_qty         IN  NUMBER,
5590     p_hdr_id      IN  NUMBER,
5591     p_line_id     IN  NUMBER,
5592     p_line_loc_id IN  NUMBER,
5593     p_ship_type   IN  VARCHAR2,
5594     p_cre_dt      IN  DATE,
5595     p_cre_by      IN  NUMBER,
5596     p_last_upd_dt IN  DATE,
5597     p_last_upd_by IN  NUMBER,
5598     p_last_upd_login  IN  NUMBER
5599   , pv_retroprice_changed IN VARCHAR2 DEFAULT 'N'
5600   ) IS
5601 
5602     v_qty     NUMBER;
5603     v_old_qty     NUMBER;
5604     v_cum_qty     NUMBER;
5605     v_line_id     NUMBER;
5606     v_tax_amt     NUMBER;
5607     v_tax_amt1    NUMBER;
5608     v_total_amt   NUMBER;
5609     tax_amount    NUMBER;
5610     v_line_loc_id   NUMBER;
5611     i       NUMBER;
5612     j       NUMBER;
5613     k       NUMBER;
5614     v_row     NUMBER;
5615     flag      BOOLEAN;
5616     v_temp_price    NUMBER;
5617     v_temp_qty1   NUMBER;
5618     v_temp_qty2   NUMBER;
5619     v_count     NUMBER;
5620     v_unit_price    NUMBER;
5621     v_uom     VARCHAR2(50);
5622     v_uom_code    VARCHAR2(50);
5623     v_po_hdr_id   NUMBER;
5624     v_po_line_id    NUMBER;
5625     v_vendor_id   NUMBER;
5626     v_vendor_site_id  NUMBER;
5627     v_assessable_value  NUMBER;
5628     ln_vat_assess_value     NUMBER;
5629     ln_gst_assessable_value NUMBER;
5630     v_doc_curr    VARCHAR2(100);
5631     v_item_id     NUMBER;
5632     v_curr_conv_factor    NUMBER;
5633     DUMMY                 NUMBER;
5634     v_tax_count       NUMBER;
5635     vQryOn      VARCHAR2(15);
5636 
5637     TYPE v_Llid_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
5638     Llid_tab v_Llid_tab;
5639 
5640     TYPE v_Qty_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
5641     Qty_tab v_Qty_Tab;
5642 
5643     TYPE v_Price_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
5644     price_tab v_Price_Tab;
5645 
5646     TYPE Uom IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
5647     uom_tab  uom;
5648 
5649     v_tax_category_id_holder JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
5650 
5651 
5652 
5653 
5654     CURSOR Fetch_Taxes_Cur( lineid IN NUMBER, llid IN NUMBER ) IS
5655     SELECT Line_Location_Id, Tax_Line_No, Po_Line_Id, Po_Header_Id,
5656            Precedence_1, Precedence_2, Precedence_3, Precedence_4,Precedence_5,
5657      Precedence_6, Precedence_7, Precedence_8, Precedence_9,Precedence_10,
5658      Tax_Id, Currency, Tax_Rate, Qty_Rate, UOM, Tax_Amount, Tax_Type,
5659            Vendor_Id, Modvat_Flag, Tax_Target_Amount,
5660            tax_category_id
5661       FROM JAI_PO_TAXES
5662       WHERE NVL( Line_Location_Id, -999 ) = llid
5663        AND Po_Line_Id = lineid
5664      ORDER BY Tax_Line_No;
5665 
5666     CURSOR Fetch_Tax_Lines_Cur IS
5667     SELECT line_location_id, tax_line_no, po_line_id, po_header_id,
5668       precedence_1, precedence_2, precedence_3, precedence_4, precedence_5,
5669       precedence_6, precedence_7, precedence_8, precedence_9, precedence_10,
5670       tax_id, currency, tax_rate, qty_rate, uom, tax_amount, tax_type,
5671       vendor_id, modvat_flag, tax_target_amount,
5672       tax_category_id
5673     FROM JAI_PO_TAXES
5674     WHERE line_location_id = p_src_ship_id
5675     AND po_line_id = v_po_line_id;
5676 
5677 
5678     v_junk_uom  MTL_UNITS_OF_MEASURE.unit_of_measure%TYPE;
5679     CURSOR Fetch_Qty_Cur( llid IN NUMBER ) IS
5680     SELECT Quantity, Price_Override, Unit_Meas_Lookup_Code
5681       FROM Po_Line_Locations_All
5682      WHERE Line_Location_Id = llid;
5683 
5684 
5685     CURSOR Fetch_Cum_Qty_Cur(pQryOn IN VARCHAR2, pShipToOrganizationId IN NUMBER, pShipToLocationId IN NUMBER, cp_shipment_type Po_Line_Locations_All.shipment_type%type) IS
5686     SELECT SUM( Quantity )
5687       FROM   Po_Line_Locations_All PLL
5688      WHERE  Po_Line_Id = p_line_id
5689 
5690        AND shipment_type <> cp_shipment_type --'PRICE BREAK'
5691        AND ((pQryOn = 'ALL'  AND PLL.SHIP_TO_ORGANIZATION_ID = pShipToOrganizationId  AND PLL.SHIP_TO_LOCATION_ID = pShipToLocationId )
5692         OR (pQryOn = 'ORG'  AND PLL.SHIP_TO_ORGANIZATION_ID = pShipToOrganizationId  AND PLL.SHIP_TO_LOCATION_ID IS NULL )
5693         OR (pQryOn = 'NULL'  AND PLL.SHIP_TO_ORGANIZATION_ID IS NULL  AND PLL.SHIP_TO_LOCATION_ID IS NULL )
5694       );
5695 
5696 
5697     CURSOR Fetch_Count_Llid_Cur(pQryOn IN VARCHAR2, pShipToOrganizationId IN NUMBER, pShipToLocationId IN NUMBER, cp_shipment_type Po_Line_Locations_All.shipment_type%type) IS
5698     SELECT NVL( COUNT( Line_Location_Id ), 0 )
5699       FROM Po_Line_Locations_All PLL
5700      WHERE Po_Line_Id  = p_line_id
5701        AND Shipment_Type = cp_shipment_type --'PRICE BREAK'
5702        AND ((pQryOn = 'ALL'  AND PLL.SHIP_TO_ORGANIZATION_ID = pShipToOrganizationId  AND PLL.SHIP_TO_LOCATION_ID = pShipToLocationId )
5703         OR (pQryOn = 'ORG'  AND PLL.SHIP_TO_ORGANIZATION_ID = pShipToOrganizationId  AND PLL.SHIP_TO_LOCATION_ID IS NULL )
5704         OR (pQryOn = 'NULL'  AND PLL.SHIP_TO_ORGANIZATION_ID IS NULL  AND PLL.SHIP_TO_LOCATION_ID IS NULL )
5705       )
5706        AND SYSDATE between nvl(start_date, SYSDATE) and nvl(end_date, SYSDATE);
5707 
5708 
5709     CURSOR Fetch_Locid_Cur(pQryOn IN VARCHAR2, pShipToOrganizationId IN NUMBER, pShipToLocationId IN NUMBER, cp_shipment_type Po_Line_Locations_All.shipment_type%type) IS
5710     SELECT Line_Location_Id, Quantity, Price_Override, Unit_Meas_Lookup_Code
5711       FROM   Po_Line_Locations_All PLL
5712      WHERE  Po_Header_Id  = p_hdr_id
5713        AND    Po_Line_Id    = p_line_id
5714        AND    Shipment_Type = cp_shipment_type --'PRICE BREAK'
5715 
5716        AND ((pQryOn = 'ALL'  AND PLL.SHIP_TO_ORGANIZATION_ID = pShipToOrganizationId  AND PLL.SHIP_TO_LOCATION_ID = pShipToLocationId )
5717         OR (pQryOn = 'ORG'  AND PLL.SHIP_TO_ORGANIZATION_ID = pShipToOrganizationId  AND PLL.SHIP_TO_LOCATION_ID IS NULL )
5718         OR (pQryOn = 'NULL'  AND PLL.SHIP_TO_ORGANIZATION_ID IS NULL AND PLL.SHIP_TO_LOCATION_ID IS NULL )
5719       )
5720        AND SYSDATE between nvl(start_date, SYSDATE) and nvl(end_date, SYSDATE)
5721      ORDER BY Quantity;
5722 
5723 
5724     CURSOR cShipmentDetails(pLineLocationId IN NUMBER) IS
5725     SELECT ship_to_organization_id, ship_to_location_id
5726       FROM po_line_locations_all
5727      WHERE line_location_id = pLineLocationId;
5728     vShpDtl cShipmentDetails%ROWTYPE;
5729 
5730 
5731     CURSOR Fetch_Price_cur IS
5732     SELECT Price_Override
5733       FROM Po_Line_Locations_All
5734      WHERE po_header_id = p_hdr_id
5735        AND po_line_id = p_line_id
5736        AND line_location_id=p_line_loc_id;
5737 
5738     CURSOR Fetch_Lineid_Cur IS
5739     SELECT Po_Line_Id, Unit_Price, Unit_Meas_Lookup_Code, Item_Id
5740       FROM   Po_Lines_All
5741      WHERE  Po_Line_Id = p_line_id;
5742 
5743     CURSOR Fetch_UOMCode_Cur( uom IN VARCHAR2 ) IS
5744     SELECT Uom_Code
5745       FROM   Mtl_Units_Of_Measure
5746      WHERE  Unit_Of_Measure = uom;
5747 
5748     CURSOR Fetch_Tot_Sum_Cur( llid IN NUMBER ) IS
5749     SELECT SUM( NVL( Tax_Amount, 0 ) )
5750       FROM   JAI_PO_TAXES
5751      WHERE  Line_Location_Id = llid
5752        AND   Tax_Type <> jai_constants.tax_type_tds; --'TDS';
5753 
5754     CURSOR Get_Assessable_Val_Cur IS
5755     SELECT Vendor_Id, Vendor_Site_Id, Currency_Code
5756       FROM   Po_Headers_All
5757      WHERE  Po_Header_Id = v_po_hdr_id;
5758 
5759     CURSOR Get_Item_Id_Cur IS
5760     SELECT Item_Id
5761       FROM   Po_Lines_All
5762      WHERE  Po_Line_Id = v_po_line_id;
5763 
5764 
5765     CURSOR c_line_tax_category_id_1(p_po_line_id IN NUMBER) IS
5766     SELECT tax_category_id
5767       FROM JAI_PO_LINE_LOCATIONS
5768      WHERE po_line_id = p_po_line_id
5769        AND line_location_id IS NULL;
5770 
5771     CURSOR c_line_tax_category_id_2(p_po_line_id IN NUMBER, p_line_location_id IN NUMBER) IS
5772     SELECT tax_category_id
5773       FROM JAI_PO_LINE_LOCATIONS
5774      WHERE po_line_id = p_po_line_id
5775        AND line_location_id = p_line_location_id;
5776 
5777     lv_override_flag JAI_CMN_VENDOR_SITES.override_flag%type ;
5778     lv_cre_dt    DATE;
5779     lv_cre_by    NUMBER;
5780     lv_last_upd_dt   DATE ;
5781     lv_last_upd_by   NUMBER;
5782     lv_last_upd_login  NUMBER;
5783     lv_price     NUMBER;
5784     lv_org_id            NUMBER ;
5785     lv_curr   PO_HEADERS_ALL.CURRENCY_CODE%TYPE ;
5786     lv_conv_rate number ;
5787     lv_type_lookup_code  VARCHAR2(30);
5788     lv_quot_class_code   VARCHAR2(30);
5789     lv_rate  PO_HEADERS_ALL.RATE%TYPE    ;
5790     lv_ship_to_location_id  PO_HEADERS_ALL.ship_to_location_id%type  ;
5791 
5792     lv_rate_type     PO_HEADERS_ALL.RATE_TYPE%TYPE DEFAULT NULL ;
5793     lv_rate_date     PO_HEADERS_ALL.RATE_DATE%TYPE DEFAULT NULL ;
5794     lv_func_curr         VARCHAR2(15);
5795 
5796     flag1     VARCHAR2(10);
5797     lv_cum_flag    VARCHAR2(20);
5798 
5799     /* Fetch Cumulative pricing flag */
5800     CURSOR Fetch_Cum_Pr_Cur( line_id IN NUMBER) IS
5801     SELECT Price_Break_Lookup_Code
5802      FROM   Po_Lines_All
5803      WHERE  Po_Line_Id = line_id;
5804 
5805     CURSOR tax_override_flag_cur(c_vendor_id NUMBER, c_vendor_site_id NUMBER) IS
5806     SELECT override_flag
5807     FROM JAI_CMN_VENDOR_SITES
5808     WHERE vendor_id = c_vendor_id
5809     AND vendor_site_id = nvl(c_vendor_site_id,0) ;
5810 
5811     cursor fetch_vendor_id_cur(p_po_hdr_id  po_headers_all.po_header_id%type )  IS
5812     select vendor_id,vendor_site_id , currency_code , rate ,RATE_TYPE , RATE_DATE  ,ship_to_location_id
5813     from po_headers_all
5814     where po_header_id=p_po_hdr_id;
5815 
5816     CURSOR Fetch_Dtls1_Cur( lineid IN NUMBER, linelocid IN NUMBER ) IS
5817     SELECT  Price_Override ,Unit_Meas_Lookup_Code
5818     FROM   Po_Line_Locations_All
5819     WHERE  Po_Line_Id = lineid
5820     AND   Line_Location_Id = linelocid;
5821 
5822     CURSOR Fetch_Org_Id_Cur IS
5823     SELECT Inventory_Organization_id
5824     FROM   Hr_Locations
5825     WHERE  Location_Id = lv_ship_to_location_id ;
5826 
5827     v_seq_val            NUMBER;
5828     l_api_name           CONSTANT VARCHAR2(30) := 'copy_agreement_taxes';
5829 
5830   BEGIN
5831   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5832      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
5833   END IF;
5834 
5835     v_qty    := p_qty;
5836     i        := 1;
5837     flag     :=  TRUE;
5838     DUMMY    := 1;
5839 
5840 
5841 
5842    v_vendor_id := null ;
5843    v_vendor_site_id := null;
5844    lv_override_flag := 'N' ;
5845    v_line_loc_id     := p_line_loc_id;
5846    v_po_line_id      := p_line_id;
5847    v_po_hdr_id       := p_hdr_id;
5848 
5849    open fetch_vendor_id_cur(p_hdr_id)  ;
5850    fetch fetch_vendor_id_cur into v_vendor_id , v_vendor_site_id  ,lv_curr   ,lv_rate ,lv_rate_type , lv_rate_date ,lv_ship_to_location_id;
5851    close fetch_vendor_id_cur ;
5852 
5853    open tax_override_flag_cur (v_vendor_id   , v_vendor_site_id  )  ;
5854    fetch tax_override_flag_cur into lv_override_flag ;
5855    close tax_override_flag_cur ;
5856 
5857    open Fetch_Org_Id_Cur ;
5858    fetch Fetch_Org_Id_Cur into lv_org_id;
5859    close Fetch_Org_Id_Cur ;
5860 
5861    OPEN c_line_tax_category_id_2(p_line_id,p_src_ship_id);
5862    FETCH c_line_tax_category_id_2 INTO v_tax_category_id_holder;
5863    CLOSE c_line_tax_category_id_2;
5864 
5865     OPEN  Get_Item_Id_Cur;
5866     FETCH Get_Item_Id_Cur INTO v_item_id;
5867     CLOSE Get_Item_Id_Cur;
5868 
5869     OPEN  Fetch_Qty_Cur( p_line_loc_id );
5870     FETCH Fetch_Qty_Cur INTO v_old_qty, v_temp_price, v_uom;
5871     CLOSE Fetch_Qty_Cur;
5872 
5873     v_curr_conv_factor  := get_currency_conv_rate (v_inv_org_id => lv_org_id,
5874                                                     v_currency   => lv_curr,
5875                                                     v_rate_date  => lv_rate_date,
5876                                                     v_rate_type  => lv_rate_type,
5877                                                     v_rate       => lv_rate);
5878 
5879     insert_jai_line_locs(
5880                              v_line_loc_id     => p_line_loc_id
5881                             ,v_po_hdr_id       => p_hdr_id
5882                             ,v_po_line_id      => p_line_id
5883                             ,v_cre_dt          => p_cre_dt
5884                             ,v_cre_by          => p_cre_by
5885                             ,v_last_upd_dt     => p_last_upd_dt
5886                             ,v_last_upd_by     => p_last_upd_by
5887                             ,v_last_upd_login  => p_last_upd_login
5888                             ,flag              => 'I'
5889                             ,v_item_id         => v_item_id
5890                             ,v_vendor_id       => v_vendor_id
5891                             ,v_vendor_site_id  => v_vendor_site_id
5892                             ,v_qty             => v_old_qty
5893                             ,v_price_override  => v_temp_price
5894                             ,v_tax_modified_flag => 'N'
5895                             ,v_tax_category_id   => v_tax_category_id_holder
5896                             ,v_tax_amount        => 0
5897                             ,v_total_amount      => 0
5898                             ,v_currency          => lv_curr
5899                             ,v_line_focus_id     => v_seq_val
5900                             );
5901 
5902 
5903   IF lv_override_flag ='Y' THEN
5904       --  Override_flag ='Y'
5905       --  Cause Tax defaultation to happen
5906       --  from defaultation hirarchy
5907 
5908       lv_cre_dt          := p_cre_dt       ;
5909       lv_cre_by          := p_cre_by       ;
5910       lv_last_upd_dt     := p_last_upd_dt  ;
5911       lv_last_upd_by     := p_last_upd_by  ;
5912       lv_last_upd_login  := p_last_upd_login   ;
5913 
5914 
5915 
5916       lv_type_lookup_code   := 'RELEASE' ;
5917       lv_quot_class_code    := 'OTHERS';
5918 
5919 
5920 
5921       OPEN  Fetch_Dtls1_Cur( v_po_line_id, v_line_loc_id );
5922       FETCH Fetch_Dtls1_Cur INTO lv_price , v_uom;
5923       CLOSE Fetch_Dtls1_Cur;
5924 
5925       OPEN  Fetch_UomCode_Cur( v_uom );
5926       FETCH Fetch_UomCode_Cur INTO v_uom_code;
5927       CLOSE Fetch_UomCode_Cur;
5928 
5929       OPEN  Fetch_Org_Id_Cur;
5930       FETCH Fetch_Org_Id_Cur INTO lv_org_id;
5931       CLOSE fetch_Org_Id_Cur;
5932 
5933       get_assessable_value(
5934                          pn_vendor_id        =>  v_vendor_id
5935                         ,pn_vendor_site_id   =>  v_vendor_site_id
5936                         ,pn_item_id          =>  v_item_id
5937                         ,pn_price            =>  lv_price
5938                         ,pn_qty              =>  v_qty
5939                         ,pv_uom_code         =>  v_uom_code
5940                         ,pn_po_hdr_id        =>  v_po_hdr_id
5941                         ,pv_currency         =>  lv_curr
5942                         ,pv_action           =>  JAI_CONSTANTS.inserting
5943                         ,pn_conv_rate        =>  v_curr_conv_factor
5944                         ,pn_assessable_value =>  v_assessable_value
5945                         ,pn_vat_assess_value =>  ln_vat_assess_value
5946                         );
5947 
5948       process_po_taxes(
5949                       v_type_lookup_code      =>  lv_type_lookup_code
5950                      ,v_quot_class_code       =>  lv_quot_class_code
5951                      ,v_vendor_id             =>  v_vendor_id
5952                      ,v_vendor_site_id        =>  v_vendor_site_id
5953                      ,v_currency              =>  lv_curr
5954                      ,v_org_id                =>  lv_org_id
5955                      ,v_item_id               =>  v_item_id
5956                      ,v_uom_code              =>  v_uom_code
5957                      ,v_line_loc_id           =>  v_line_loc_id
5958                      ,v_po_hdr_id             =>  v_po_hdr_id
5959                      ,v_po_line_id            =>  v_po_line_id
5960                      ,v_frm_po_line_id        =>   NULL
5961                      ,v_frm_line_loc_id       =>   NULL
5962                      ,v_price                 =>  lv_price
5963                      ,v_qty                   =>  v_qty
5964                      ,v_cre_dt                =>  lv_cre_dt
5965                      ,v_cre_by                =>  lv_cre_by
5966                      ,v_last_upd_dt           =>  lv_last_upd_dt
5967                      ,v_last_upd_by           =>  lv_last_upd_by
5968                      ,v_last_upd_login        =>  lv_last_upd_login
5969                      ,flag                    => 'I'
5970                      ,pn_conv_rate        =>  v_curr_conv_factor
5971                      ,pn_assessable_value     =>  v_assessable_value
5972                      ,pn_vat_assess_value     =>  ln_vat_assess_value
5973                 );
5974 
5975 
5976   ELSE  -- For Override filag = 'N'
5977 
5978   IF p_ship_type = 'SCHEDULED' THEN
5979 
5980     OPEN  Fetch_Qty_Cur( p_line_loc_id );
5981     FETCH Fetch_Qty_Cur INTO v_old_qty, v_temp_price, v_uom;
5982     CLOSE Fetch_Qty_Cur;
5983 
5984     FOR Tax_Rec IN Fetch_Tax_Lines_Cur LOOP
5985 
5986       v_tax_amt := ( NVL( Tax_Rec.Tax_Amount, 0 ) * NVL( v_qty, 0 ) ) / NVL( v_old_qty, 1 );
5987 
5988       BEGIN
5989         SELECT COUNT(1) INTO v_tax_count FROM
5990         JAI_PO_TAXES
5991         WHERE Line_Location_Id = Tax_Rec.Line_Location_Id AND
5992         TAX_ID = Tax_Rec.Tax_id;
5993       END;
5994 
5995       IF v_tax_count =0 THEN
5996 
5997          insert_po_taxes
5998           (lv_type_lookup_code, NULL,
5999             v_seq_val, p_line_Loc_Id,
6000             Tax_Rec.Tax_Line_no, p_Line_Id, p_hdr_id,
6001             Tax_Rec.precedence_1, Tax_Rec.precedence_2, Tax_Rec.precedence_3,
6002             Tax_Rec.precedence_4, Tax_Rec.precedence_5,
6003             Tax_Rec.precedence_6, Tax_Rec.precedence_7, Tax_Rec.precedence_8,
6004             Tax_Rec.precedence_9, Tax_Rec.precedence_10,
6005             Tax_Rec.tax_id, NULL, 0, Tax_Rec.currency,
6006             Tax_Rec.tax_rate, Tax_Rec.qty_rate, Tax_Rec.uom,
6007             Tax_Rec.tax_amount , Tax_Rec.tax_type,  Tax_Rec.modvat_flag,
6008             Tax_Rec.vendor_id, Tax_Rec.tax_target_amount ,
6009             p_cre_dt, p_cre_by, p_last_upd_dt, p_last_upd_by, p_last_upd_login,
6010             Tax_Rec.tax_category_id
6011            );
6012 
6013       END IF;
6014       v_line_loc_id := Tax_Rec.Line_Location_Id;
6015       v_po_hdr_id := Tax_Rec.Po_Header_Id;
6016       v_po_line_id := Tax_Rec.Po_Line_Id;
6017 
6018     END LOOP;
6019 
6020        OPEN  Fetch_Qty_Cur( v_line_loc_id );
6021        FETCH Fetch_Qty_Cur INTO v_qty, v_temp_price
6022         -- Only PLANNED Shipment Type (Source line_location_id) will have UOM and Scheduled type of Shipments will not have value
6023         -- and this is the reason why excise taxes are not getting calculated on assessable value, bcos ass value is based on UOM
6024         -- , v_uom
6025         , v_junk_uom
6026         ;
6027        CLOSE Fetch_Qty_Cur;
6028 
6029        OPEN  Fetch_UomCode_Cur( v_uom );
6030        FETCH Fetch_UomCode_Cur INTO v_uom_code;
6031        CLOSE Fetch_UomCode_Cur;
6032 
6033        OPEN  Get_Assessable_Val_Cur;
6034        FETCH Get_Assessable_Val_Cur INTO v_vendor_id, v_vendor_site_id, v_doc_curr;
6035        CLOSE Get_Assessable_Val_Cur;
6036 
6037        OPEN  Get_Item_Id_Cur;
6038        FETCH Get_Item_Id_Cur INTO v_item_id;
6039        CLOSE Get_Item_Id_Cur;
6040 
6041 
6042        get_assessable_value(
6043                            pn_vendor_id        =>  v_vendor_id
6044                           ,pn_vendor_site_id   =>  v_vendor_site_id
6045                           ,pn_item_id          =>  v_item_id
6046                           ,pn_price            =>  nvl(v_temp_price,v_unit_price)
6047                           ,pn_qty              =>  v_qty
6048                           ,pv_uom_code         =>  v_uom_code
6049                           ,pn_po_hdr_id        =>  v_po_hdr_id
6050                           ,pv_currency         =>  v_doc_curr
6051                           ,pv_action           =>  JAI_CONSTANTS.updating
6052                           ,pn_conv_rate        =>  v_curr_conv_factor
6053                           ,pn_assessable_value =>  v_assessable_value
6054                           ,pn_vat_assess_value =>  ln_vat_assess_value
6055                           );
6056 
6057 
6058 
6059    /*    jai_po_tax_pkg.calculate_tax
6060         ( 'STANDARDPO', v_po_hdr_id , v_po_line_id, v_line_loc_id,
6061           v_qty, v_qty*v_temp_price, v_uom_code,v_tax_amt1,
6062           v_assessable_value, ln_vat_assess_value, NULL, 1/v_curr_conv_factor
6063         ); */
6064 
6065        jai_po_tax_pkg.calc_tax(
6066         p_type => 'STANDARDPO',
6067         p_header_id => v_po_hdr_id,
6068         P_line_id => v_po_line_id,
6069         p_line_location_id => v_line_loc_id,
6070         p_line_focus_id => v_seq_val,
6071         p_line_quantity => v_qty,
6072         p_base_value => v_qty*v_temp_price,
6073         p_line_uom_code => v_uom_code,
6074         p_tax_amount => v_tax_amt1,
6075         p_assessable_value => v_assessable_value,
6076         p_vat_assess_value => ln_vat_assess_value,
6077         p_item_id => v_item_id,
6078         p_conv_rate =>  1/v_curr_conv_factor,
6079         p_po_curr => v_doc_curr
6080 
6081       );
6082        OPEN  Fetch_Tot_Sum_Cur( v_line_loc_id );
6083        FETCH Fetch_Tot_Sum_Cur INTO v_tax_amt1;
6084        CLOSE Fetch_Tot_Sum_Cur;
6085 
6086        UPDATE JAI_PO_LINE_LOCATIONS
6087        SET    Tax_Amount   = v_tax_amt1,
6088             Total_Amount = NVL( v_qty * v_temp_price, 0 ) + v_tax_amt1 ,
6089       Last_Update_Date  = p_last_upd_dt,
6090       Last_Updated_By =   p_last_upd_by,
6091       Last_Update_Login = p_last_upd_login
6092        WHERE  Line_Location_Id =  v_line_loc_id;
6093 
6094     ELSE  -- BLANKET
6095 
6096   --  pShipToOrganizationId IN NUMBER DEFAULT NULL
6097   --  pShipToLocationId IN NUMBER DEFAULT NULL
6098 
6099 
6100     OPEN  cShipmentDetails(p_line_loc_id);
6101     FETCH cShipmentDetails INTO vShpDtl;
6102     CLOSE cShipmentDetails;
6103 
6104     IF vShpDtl.ship_to_organization_id IS NOT NULL AND vShpDtl.ship_to_location_id IS NOT NULL THEN
6105       vQryOn := 'ALL';
6106     ELSIF vShpDtl.ship_to_organization_id IS NOT NULL AND vShpDtl.ship_to_location_id IS NULL THEN
6107       vQryOn := 'ORG';
6108     ELSE
6109       vQryOn := 'NULL';
6110     END IF;
6111 
6112     OPEN Fetch_Cum_Pr_Cur(v_po_line_id);
6113     FETCH Fetch_Cum_Pr_Cur INTO lv_cum_flag;
6114     CLOSE Fetch_Cum_Pr_Cur;
6115 
6116       OPEN  Fetch_Count_Llid_Cur(vQryOn, vShpDtl.ship_to_organization_id, vShpDtl.ship_to_location_id, 'PRICE BREAK'); /* Modified by Ramananda for removal of SQL LITERALs :bug#4428980*/
6117       FETCH Fetch_Count_Llid_Cur INTO v_count;
6118       CLOSE Fetch_Count_Llid_Cur;
6119 
6120       OPEN  Fetch_Lineid_Cur;
6121       FETCH Fetch_Lineid_Cur INTO v_po_line_id, v_unit_price, v_uom, v_item_id;
6122       CLOSE Fetch_Lineid_Cur;
6123       v_qty := p_qty;
6124       IF v_count > 0 THEN
6125 
6126          IF lv_cum_flag = 'CUMULATIVE' THEN
6127 
6128       OPEN  Fetch_Cum_Qty_Cur(vQryOn, vShpDtl.ship_to_organization_id, vShpDtl.ship_to_location_id, 'PRICE BREAK');    /* Modified by Ramananda for removal of SQL LITERALs :bug#4428980*/
6129       FETCH Fetch_Cum_Qty_Cur INTO v_qty;
6130       CLOSE Fetch_Cum_Qty_Cur;
6131          ELSE
6132       v_qty := p_qty;
6133          END IF;
6134          /*
6135              Check out for I line loc. id Qty. If p_qty < then consider the line.
6136        insert all the qty, price into PL/SQL table then do all the checking.
6137          */
6138          FOR Lines_Rec IN Fetch_Locid_Cur(vQryOn, vShpDtl.ship_to_organization_id, vShpDtl.ship_to_location_id, 'PRICE BREAK') LOOP /* Modified by Ramananda for removal of SQL LITERALs :bug#4428980*/
6139              Llid_tab( i ) := Lines_Rec.Line_Location_Id;
6140              Qty_Tab( i )  := Lines_Rec.Quantity;
6141          Price_Tab( i ) := Lines_Rec.Price_Override;
6142          Uom_Tab( i ) := Lines_Rec.Unit_Meas_Lookup_Code;
6143              i := i + 1;
6144          END LOOP;
6145          i := i - 1;
6146          IF ( Qty_Tab( 1 ) > v_qty ) THEN
6147              v_line_loc_id := Llid_tab(1) ;
6148        v_line_id := p_line_id;
6149        v_qty := p_qty;
6150          ELSE
6151           FOR j IN 1 .. i LOOP
6152              v_temp_qty1 := Qty_Tab( j );
6153              IF j < i - 1 THEN
6154           v_temp_qty2 := Qty_Tab( j+1  );
6155              ELSE
6156                 v_temp_qty2 := v_qty + j;
6157              END IF;
6158              IF v_qty >= v_temp_qty1 AND v_qty < v_temp_qty2 THEN
6159                 v_temp_price := Price_Tab( j );
6160         			  v_row := j;
6161              END IF;
6162            END LOOP;
6163     If v_row is not null and v_row > 0 THEN
6164               v_line_loc_id := Llid_Tab( v_row ) ;
6165               v_line_id     := p_line_id;
6166               v_qty := Qty_Tab( v_row );
6167               v_uom := Uom_Tab( v_row );
6168            Else
6169                 v_line_loc_id := -999;
6170                 v_line_id     :=  p_line_id;
6171            End If;
6172              v_qty := p_qty;
6173 
6174 
6175         END IF;
6176 
6177     ELSIF v_count = 0 THEN
6178       v_line_loc_id := -999;
6179       v_line_id := p_line_id;
6180       v_qty := p_qty;
6181     END IF;
6182 
6183 	  OPEN FETCH_PRICE_CUR;
6184  	  FETCH FETCH_PRICE_CUR INTO v_unit_price;
6185  	  CLOSE FETCH_PRICE_CUR;
6186 
6187 
6188     OPEN  Fetch_UomCode_Cur( v_uom );
6189     FETCH Fetch_UomCode_Cur INTO v_uom_code;
6190     CLOSE Fetch_UomCode_Cur;
6191 
6192     FOR Tax_Rec IN Fetch_Taxes_Cur( v_line_id, v_line_loc_id ) LOOP
6193 
6194       BEGIN
6195         SELECT COUNT(1) INTO v_tax_count FROM
6196         JAI_PO_TAXES
6197         WHERE Line_Location_Id = p_line_Loc_Id AND
6198         TAX_ID = Tax_Rec.Tax_id;
6199       END;
6200 
6201 
6202       IF v_tax_count =0 THEN
6203          insert_po_taxes
6204           (lv_type_lookup_code, NULL,
6205             v_seq_val, p_line_Loc_Id,
6206             Tax_Rec.Tax_Line_no, p_Line_Id, p_hdr_id,
6207             Tax_Rec.precedence_1, Tax_Rec.precedence_2, Tax_Rec.precedence_3,
6208             Tax_Rec.precedence_4, Tax_Rec.precedence_5,
6209             Tax_Rec.precedence_6, Tax_Rec.precedence_7, Tax_Rec.precedence_8,
6210             Tax_Rec.precedence_9, Tax_Rec.precedence_10,
6211             Tax_Rec.tax_id, NULL, 0, Tax_Rec.currency,
6212             Tax_Rec.tax_rate, Tax_Rec.qty_rate, Tax_Rec.uom,
6213             0, Tax_Rec.tax_type,  Tax_Rec.modvat_flag,
6214             Tax_Rec.vendor_id, 0 ,
6215             p_cre_dt, p_cre_by, p_last_upd_dt, p_last_upd_by, p_last_upd_login,
6216             Tax_Rec.tax_category_id
6217            );
6218 
6219 
6220       END IF;
6221 
6222       v_tax_category_id_holder := nvl( tax_rec.tax_category_id, v_tax_category_id_holder);
6223 
6224     END LOOP;
6225 
6226 
6227     If v_tax_category_id_holder IS NULL THEN
6228       IF nvl(v_line_loc_id,-999) = -999 THEN
6229         OPEN c_line_tax_category_id_1(v_po_line_id);
6230         FETCH c_line_tax_category_id_1 INTO v_tax_category_id_holder;
6231         CLOSE c_line_tax_category_id_1;
6232       ELSE
6233         OPEN c_line_tax_category_id_2(v_po_line_id, v_line_loc_id);
6234         FETCH c_line_tax_category_id_2 INTO v_tax_category_id_holder;
6235         CLOSE c_line_tax_category_id_2;
6236       END IF;
6237     end if;
6238 
6239     UPDATE JAI_PO_LINE_LOCATIONS
6240     SET tax_category_id = v_tax_category_id_holder
6241     WHERE line_focus_id = v_seq_val;
6242 
6243         v_line_loc_id := p_line_loc_id;
6244         v_po_line_id := p_line_id;
6245         v_po_hdr_id := p_hdr_id;
6246         OPEN  Get_Assessable_Val_Cur;
6247         FETCH Get_Assessable_Val_Cur INTO v_vendor_id, v_vendor_site_id, v_doc_curr;
6248         CLOSE Get_Assessable_Val_Cur;
6249 
6250         OPEN  Get_Item_Id_Cur;
6251         FETCH Get_Item_Id_Cur INTO v_item_id;
6252         CLOSE Get_Item_Id_Cur;
6253 
6254        get_assessable_value(
6255                            pn_vendor_id        =>  v_vendor_id
6256                           ,pn_vendor_site_id   =>  v_vendor_site_id
6257                           ,pn_item_id          =>  v_item_id
6258                           ,pn_price            =>  v_temp_price
6259                           ,pn_qty              =>  v_qty
6260                           ,pv_uom_code         =>  v_uom_code
6261                           ,pn_po_hdr_id        =>  v_po_hdr_id
6262                           ,pv_currency         =>  v_doc_curr
6263                           ,pv_action           =>  JAI_CONSTANTS.updating
6264                           ,pn_conv_rate        =>  v_curr_conv_factor
6265                           ,pn_assessable_value =>  v_assessable_value
6266                           ,pn_vat_assess_value =>  ln_vat_assess_value
6267                           );
6268 
6269         Tax_Amount := v_unit_price * p_qty;
6270 
6271       -- Pass Line_Location_Id in place of Header_Id in procedure Cal_Tax.
6272        /* jai_po_tax_pkg.calculate_tax( 'RELEASE', p_line_loc_id, p_line_id, v_line_loc_id,
6273               p_qty, v_unit_price * p_qty, v_uom_code,
6274               Tax_Amount, v_assessable_value,ln_vat_assess_value, NULL, 1/v_curr_conv_factor
6275               , pv_retroprice_changed
6276               ); */
6277 
6278        jai_po_tax_pkg.calc_tax(
6279         p_type => 'RELEASE',
6280         p_header_id => p_line_loc_id,
6281         P_line_id => p_line_id,
6282         p_line_location_id => v_line_loc_id,
6283         p_line_focus_id => v_seq_val,
6284         p_line_quantity => p_qty,
6285         p_base_value => v_unit_price * p_qty,
6286         p_line_uom_code => v_uom_code,
6287         p_tax_amount => Tax_Amount,
6288         p_assessable_value => v_assessable_value,
6289         p_vat_assess_value => ln_vat_assess_value,
6290         p_item_id => v_item_id,
6291         p_conv_rate =>  1/v_curr_conv_factor,
6292         p_po_curr => v_doc_curr
6293 
6294       );
6295       END IF;
6296 
6297 
6298  END IF ;
6299     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6300     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
6301   END IF;
6302  EXCEPTION
6303    WHEN OTHERS THEN
6304 
6305 
6306      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6307         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6308      END IF;
6309      app_exception.raise_exception;
6310 
6311   END copy_agreement_taxes;
6312 
6313 /*
6314   REM +======================================================================+
6315   REM Created By         :  Wenqiong Zhou
6316   REM Creation Date      :  Jun 1, 2012
6317   REM Bug Number/ER Name :  14040855/JAI Triggers Elimination
6318   REM SubProgram Name    :  insert_po_taxes
6319   REM Type               :  Table Handler API
6320   REM Purpose            :  Insert data into JAI_PO_TAXES.
6321   REM
6322   REM
6323   REM TDD Reference      :
6324   REM
6325   REM Assumptions        :
6326   REM
6327   REM Parameter                IN/OUT         Type         Required     Description and Purpose
6328   REM -----------------------  ------  ------------------ ----------   ------------------------------------
6329   REM
6330   REM
6331   REM  CALLED BY
6332   REM    JAI_PO_PROC_PKG.process_po_taxes copy_agreement_taxes, copy_req_to_po
6333   REM +=====================================================================================================+
6334 */
6335 PROCEDURE insert_po_taxes
6336 (
6337     v_type_lookup_code IN VARCHAR2,
6338     v_quot_class_code IN VARCHAR2,
6339     v_seq_val IN NUMBER,
6340     v_line_loc_id IN NUMBER,
6341     v_tax_line_no IN NUMBER,
6342     v_po_line_id IN NUMBER,
6343     v_po_hdr_id IN NUMBER,
6344     v_prec1 IN NUMBER,
6345     v_prec2 IN NUMBER,
6346     v_prec3 IN NUMBER,
6347     v_prec4 IN NUMBER,
6348     v_prec5 IN NUMBER,
6349     v_prec6 IN NUMBER,
6350     v_prec7 IN NUMBER,
6351     v_prec8 IN NUMBER,
6352     v_prec9 IN NUMBER,
6353     v_prec10 IN NUMBER,
6354     v_taxid IN NUMBER,
6355     v_price IN NUMBER,
6356     v_qty IN NUMBER,
6357     v_curr IN VARCHAR2,
6358     v_tax_rate IN NUMBER,
6359     v_qty_rate IN NUMBER,
6360     v_uom IN VARCHAR2,
6361     v_tax_amt IN NUMBER ,
6362     v_tax_type VARCHAR2,
6363     v_mod_flag IN VARCHAR2,
6364     v_vendor_id IN NUMBER,
6365     v_tax_target_amt IN NUMBER,
6366     v_cre_dt IN DATE,
6367     v_cre_by IN NUMBER,
6368     v_last_upd_dt IN DATE,
6369     v_last_upd_by  IN NUMBER,
6370     v_last_upd_login IN NUMBER,
6371     v_tax_category_id IN NUMBER
6372   ) IS
6373 
6374     v_tax_amt1    NUMBER;
6375     v_tax     NUMBER;
6376     v_tax_target  NUMBER;
6377 
6378 CURSOR cur_taxes_adhoc(cp_tax_id number) IS
6379   SELECT adhoc_flag
6380     FROM JAI_CMN_TAXES_ALL
6381    WHERE tax_id = cp_tax_id;
6382 
6383    lv_adhoc_flag varchar2(1);
6384 
6385 
6386     l_api_name                    CONSTANT VARCHAR2(30) := 'insert_po_taxes';
6387   BEGIN
6388 
6389  OPEN cur_taxes_adhoc(v_taxid);
6390  FETCH cur_taxes_adhoc INTO lv_adhoc_flag;
6391  CLOSE cur_taxes_adhoc;
6392 
6393     v_tax_amt1    := 0;
6394 
6395     IF v_type_lookup_code = 'BLANKET' OR v_quot_class_code = 'CATALOG' THEN
6396       v_tax := NULL;
6397       v_tax_target := NULL;
6398     ELSE
6399       v_tax := v_tax_amt;
6400       v_tax_target := v_tax_target_amt;
6401     END IF;
6402 
6403 
6404 
6405     INSERT INTO JAI_PO_TAXES(
6406       Line_Focus_Id, Line_Location_Id, Tax_Line_No,
6407       Po_Line_Id, Po_Header_Id,
6408       Precedence_1, Precedence_2, Precedence_3, Precedence_4, Precedence_5,
6409       Precedence_6, Precedence_7, Precedence_8, Precedence_9, Precedence_10,
6410       Tax_Id, Currency, Tax_Rate, Qty_Rate, UOM,
6411       Tax_Amount, Tax_Type, Modvat_Flag,
6412       Vendor_Id, Tax_Target_Amount,
6413       Creation_Date, Created_By, Last_Update_Date,
6414       Last_Updated_By, Last_Update_Login,
6415       tax_category_id
6416     ) VALUES  (
6417       v_seq_val, v_line_loc_id, v_tax_line_no,
6418       v_po_line_id, v_po_hdr_id,
6419       v_prec1, v_prec2, v_prec3, v_prec4, v_prec5,
6420       v_prec6, v_prec7, v_prec8, v_prec9, v_prec10,
6421       v_taxid, v_curr, v_tax_rate, v_qty_rate,
6422       v_uom, v_tax, v_tax_type, v_mod_flag,
6423       v_vendor_id, v_tax_target,
6424       v_cre_dt, v_cre_by, v_last_upd_dt,
6425       v_last_upd_by, v_last_upd_login,
6426       v_tax_category_id
6427     );
6428 
6429   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6430     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
6431   END IF;
6432  EXCEPTION
6433    WHEN OTHERS THEN
6434 
6435 
6436      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6437         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6438      END IF;
6439      app_exception.raise_exception;
6440 
6441 END insert_po_taxes;
6442 FUNCTION get_currency_conv_rate (v_inv_org_id IN number,v_currency IN VARCHAR2, v_rate_date IN DATE, v_rate_type IN VARCHAR2, v_rate IN NUMBER) RETURN NUMBER IS
6443 v_conv_rate      NUMBER;
6444 v_bookid         NUMBER;
6445 l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
6446 l_api_name            CONSTANT VARCHAR2(200) := 'get_currency_conv_rate';
6447 BEGIN
6448 
6449     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6450      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
6451     END IF;
6452     l_func_curr_det := jai_plsql_cache_pkg.return_sob_curr(p_org_id  => v_inv_org_id );
6453 
6454     IF l_func_curr_det.currency_code <> v_currency OR v_currency IS NOT NULL THEN
6455 
6456        IF v_rate_type = 'User' THEN
6457           v_conv_rate := 1/v_rate;
6458        ELSE
6459           v_bookid := l_func_curr_det.ledger_id;
6460           v_conv_rate := jai_cmn_utils_pkg.currency_conversion
6461                         ( v_bookid, v_currency, v_rate_date, v_rate_type, 1 );
6462           v_conv_rate := 1/v_conv_rate;
6463        END IF;
6464     ELSE
6465        v_conv_rate := 1;
6466     END IF;
6467 
6468    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6469      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': v_conv_rate is '||v_conv_rate);
6470     END IF;
6471 
6472    RETURN  v_conv_rate;
6473  EXCEPTION
6474    WHEN OTHERS THEN
6475 
6476 
6477      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6478         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6479      END IF;
6480      app_exception.raise_exception;
6481 
6482 END get_currency_conv_rate;
6483 FUNCTION get_func_currency(v_inv_org_id IN NUMBER)RETURN VARCHAR2 IS
6484 l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
6485 BEGIN
6486     l_func_curr_det := jai_plsql_cache_pkg.return_sob_curr(p_org_id  => v_inv_org_id );
6487     RETURN l_func_curr_det.currency_code;
6488 END get_func_currency;
6489 
6490 FUNCTION rfq_quotation_related
6491 (
6492     pr_po_header   po_headers_all%ROWTYPE DEFAULT NULL
6493    ,pr_po_line     po_lines_all%ROWTYPE DEFAULT NULL
6494    ,pr_po_line_loc po_line_locations_all%ROWTYPE DEFAULT NULL
6495 ) RETURN BOOLEAN IS
6496  lv_type_lookup_code       po_headers_all.type_lookup_code%TYPE;
6497  lv_from_type_lookup_code  po_headers_all.from_type_lookup_code%TYPE;
6498  ln_from_line_id           po_lines_all.from_line_id%TYPE;
6499  lb_related                BOOLEAN := FALSE;
6500  CURSOR c_po_hdr(c_po_hdr_id NUMBER) IS
6501  SELECT * FROM
6502  PO_HEADERS_ALL
6503  WHERE po_header_id = c_po_hdr_id;
6504 
6505  CURSOR c_po_line(c_po_line_id NUMBER) IS
6506  SELECT * FROM
6507  PO_LINES_ALL
6508  WHERE po_line_id = c_po_line_id;
6509 
6510  r_po_hdr       po_headers_all%ROWTYPE;
6511  r_po_line      po_lines_all%ROWTYPE;
6512   l_api_name CONSTANT VARCHAR2(30) := 'ref_quotation_related';
6513 BEGIN
6514 
6515   IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
6516     fnd_log.STRING(g_level_procedure,g_module_name || l_api_name || '.BEGIN',g_pkg_name || ': ' || l_api_name || '()+');
6517   END IF;
6518  IF pr_po_header.po_header_id IS NOT NULL THEN
6519    r_po_hdr   := pr_po_header;
6520    IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
6521      fnd_log.STRING(g_level_procedure,g_module_name || l_api_name,g_pkg_name || ': ' || l_api_name || 'its called from header trigger.');
6522    END IF;
6523 
6524  ELSIF pr_po_line.po_line_id IS NOT NULL THEN
6525    OPEN c_po_hdr(pr_po_line.po_header_id);
6526    FETCH c_po_hdr INTO r_po_hdr;
6527    CLOSE c_po_hdr;
6528    r_po_line  := pr_po_line;
6529    IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
6530      fnd_log.STRING(g_level_procedure,g_module_name || l_api_name,g_pkg_name || ': ' || l_api_name || 'its called from line trigger.');
6531    END IF;
6532 
6533  ELSIF pr_po_line_loc.line_location_id IS NOT NULL THEN
6534    OPEN c_po_hdr(pr_po_line_loc.po_header_id);
6535    FETCH c_po_hdr INTO r_po_hdr;
6536    CLOSE c_po_hdr;
6537 
6538    OPEN c_po_line(pr_po_line_loc.po_line_id);
6539    FETCH c_po_line INTO r_po_line;
6540    CLOSE c_po_line;
6541    IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
6542      fnd_log.STRING(g_level_procedure,g_module_name || l_api_name,g_pkg_name || ': ' || l_api_name || 'its called from LLA trigger.');
6543    END IF;
6544 
6545  END IF;
6546   lv_type_lookup_code      :=r_po_hdr.type_lookup_code;
6547   lv_from_type_lookup_code :=r_po_hdr.from_type_lookup_code;
6548 
6549   ln_from_line_id          := r_po_line.from_line_id;
6550 
6551   IF lv_type_lookup_code IN ( 'RFQ', 'QUOTATION' , 'BLANKET') OR (lv_from_type_lookup_code IN ('QUOTATION')/* AND lv_type_lookup_code NOT IN ( 'STANDARD')*/) --Added 'BLANKET' by Wenqiong for bug14748379 2012/10/15
6552   OR (lv_type_lookup_code  IN ( 'STANDARD', 'PLANNED') AND ln_from_line_id IS NOT NULL ) THEN
6553      lb_related := TRUE;
6554   END IF;
6555 --  RETURN TRUE;
6556   IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
6557     IF lb_related THEN
6558       fnd_log.STRING(g_level_procedure,g_module_name || l_api_name ||'.END',g_pkg_name || ',lb_related:true '||'type:'||lv_type_lookup_code||'lv_from_type_lookup_code:'||lv_from_type_lookup_code);
6559     ELSE
6560       fnd_log.STRING(g_level_procedure,g_module_name || l_api_name ||'.END',g_pkg_name || ',lb_related:false '||'type:'||lv_type_lookup_code||'lv_from_type_lookup_code:'||lv_from_type_lookup_code);
6561     END IF;
6562   END IF;
6563 
6564   RETURN lb_related;
6565 END rfq_quotation_related;
6566 PROCEDURE process_quotation_line(r_old_po_line     po_lines_all%ROWTYPE DEFAULT NULL ,r_po_line PO_LINES_ALL%ROWTYPE , pv_action varchar2 , pv_return_code out nocopy varchar2 , pv_return_message out nocopy varchar2 ) IS
6567 v_po_line_id            NUMBER;
6568 v_po_hdr_id             NUMBER;
6569 v_frm_hdr_id            NUMBER;
6570 v_frm_po_line_id        NUMBER;
6571 v_currency              po_headers_all.Currency_Code%TYPE;
6572 v_type_lookup_code      po_headers_all.type_lookup_code%TYPE;
6573 v_from_type_lookup_code po_headers_all.from_type_lookup_code%TYPE;
6574 v_quot_class_code       po_headers_all.from_type_lookup_code%TYPE;
6575 v_qty                   NUMBER;
6576 v_price                 NUMBER;
6577 v_uom_code              VARCHAR2(30);
6578 v_line_uom              VARCHAR2(30);
6579 v_vendor_id             NUMBER;
6580 v_vendor_site_id        NUMBER;
6581 v_line_loc_id           NUMBER;
6582 v_line_loc_exists       NUMBER;
6583 v_hook_value            VARCHAR2(10);
6584 v_style_id              NUMBER;
6585 v_Cre_Dt                Date;
6586 v_Cre_By                Number;
6587 v_Last_Upd_Dt           Date;
6588 v_Last_Upd_By           Number;
6589 v_Last_Upd_Login        Number;
6590 r_po_header            PO_HEADERS_ALL%ROWTYPE;
6591 
6592 CURSOR c_po_hdr(cn_po_hdr_id NUMBER) IS
6593 SELECT *
6594 FROM PO_HEADERS_ALL
6595 WHERE po_header_id = cn_po_hdr_id;
6596 
6597 CURSOR Fetch_UOMCode_Cur( v_uom IN VARCHAR2 ) IS
6598 SELECT Uom_Code
6599 FROM   Mtl_Units_Of_Measure
6600 WHERE  Unit_Of_Measure = v_uom;
6601 
6602 CURSOR Fetch_Lines_Cur IS
6603 SELECT Line_location_id, Price_Override, Quantity
6604 FROM   Po_Line_Locations_All
6605 WHERE  Po_Line_Id = v_po_line_id;
6606 
6607 CURSOR c_get_po_line_loc_details IS
6608 SELECT DISTINCT item_id
6609 FROM JAI_PO_LINE_LOCATIONS
6610 WHERE po_line_id = v_po_line_id;
6611 
6612 CURSOR po_line_loc_cur IS
6613 SELECT * FROM PO_LINE_LOCATIONS_ALL
6614 WHERE po_line_id = v_po_line_id
6615 AND   shipment_type NOT IN ( 'SCHEDULED', 'BLANKET' );
6616 
6617 r_jai_po_line_loc             c_get_po_line_loc_details%ROWTYPE;
6618 v_src_loc_id                  NUMBER;
6619 v_src_line_id                 NUMBER;
6620 l_api_name                    CONSTANT VARCHAR2(30) := 'process_quotation_line';
6621 BEGIN
6622 
6623    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6624      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
6625      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'pv_action:'||pv_action);
6626    END IF;
6627    pv_return_code := jai_constants.successful ;
6628 
6629   v_po_line_id            := r_po_line.Po_Line_Id ;
6630   v_po_hdr_id             := r_po_line.Po_Header_Id;
6631   v_frm_hdr_id            := r_po_line.From_HEADER_Id;
6632   v_frm_po_line_id        := r_po_line.From_Line_Id;
6633   v_qty                   := r_po_line.QUANTITY;
6634   v_line_uom              := r_po_line.Unit_Meas_Lookup_Code;
6635   v_hook_value            := 'TRUE';
6636 
6637   v_hook_value := jai_cmn_hook_pkg.Ja_In_po_lines_all(
6638         r_po_line.PO_LINE_ID                          ,
6639         r_po_line.PO_HEADER_ID                       ,
6640         r_po_line.LINE_TYPE_ID                       ,
6641         r_po_line.LINE_NUM                            ,
6642         r_po_line.ITEM_ID                                  ,
6643         r_po_line.ITEM_REVISION                            ,
6644         r_po_line.CATEGORY_ID                              ,
6645         r_po_line.ITEM_DESCRIPTION                         ,
6646         r_po_line.UNIT_MEAS_LOOKUP_CODE                    ,
6647         r_po_line.QUANTITY_COMMITTED                       ,
6648         r_po_line.COMMITTED_AMOUNT                         ,
6649         r_po_line.ALLOW_PRICE_OVERRIDE_FLAG                ,
6650         r_po_line.NOT_TO_EXCEED_PRICE                      ,
6651         r_po_line.LIST_PRICE_PER_UNIT                      ,
6652         r_po_line.UNIT_PRICE                               ,
6653         r_po_line.QUANTITY                                 ,
6654         r_po_line.UN_NUMBER_ID                             ,
6655         r_po_line.HAZARD_CLASS_ID                          ,
6656         r_po_line.NOTE_TO_VENDOR                           ,
6657         r_po_line.FROM_HEADER_ID                           ,
6658         r_po_line.FROM_LINE_ID                             ,
6659         r_po_line.MIN_ORDER_QUANTITY                       ,
6660         r_po_line.MAX_ORDER_QUANTITY                       ,
6661         r_po_line.QTY_RCV_TOLERANCE                        ,
6662         r_po_line.OVER_TOLERANCE_ERROR_FLAG                ,
6663         r_po_line.MARKET_PRICE                             ,
6664         r_po_line.UNORDERED_FLAG                           ,
6665         r_po_line.CLOSED_FLAG                   ,
6666         r_po_line.USER_HOLD_FLAG                           ,
6667         r_po_line.CANCEL_FLAG                              ,
6668         r_po_line.CANCELLED_BY                             ,
6669         r_po_line.CANCEL_DATE                              ,
6670         r_po_line.CANCEL_REASON                            ,
6671         r_po_line.FIRM_STATUS_LOOKUP_CODE                  ,
6672         r_po_line.FIRM_DATE                                ,
6673         r_po_line.VENDOR_PRODUCT_NUM                       ,
6674         r_po_line.CONTRACT_NUM                             ,
6675         r_po_line.TAXABLE_FLAG                             ,
6676         r_po_line.TAX_NAME                                 ,
6677         r_po_line.TYPE_1099                                ,
6678         r_po_line.CAPITAL_EXPENSE_FLAG                     ,
6679         r_po_line.NEGOTIATED_BY_PREPARER_FLAG              ,
6680         r_po_line.ATTRIBUTE_CATEGORY                       ,
6681         r_po_line.ATTRIBUTE1                               ,
6682         r_po_line.ATTRIBUTE2                               ,
6683         r_po_line.ATTRIBUTE3                               ,
6684         r_po_line.ATTRIBUTE4                               ,
6685         r_po_line.ATTRIBUTE5                               ,
6686         r_po_line.ATTRIBUTE6                               ,
6687         r_po_line.ATTRIBUTE7                               ,
6688         r_po_line.ATTRIBUTE8                               ,
6689         r_po_line.ATTRIBUTE9                               ,
6690         r_po_line.ATTRIBUTE10                              ,
6691         r_po_line.REFERENCE_NUM                            ,
6692         r_po_line.ATTRIBUTE11                              ,
6693         r_po_line.ATTRIBUTE12                              ,
6694         r_po_line.ATTRIBUTE13                              ,
6695         r_po_line.ATTRIBUTE14                              ,
6696         r_po_line.ATTRIBUTE15                              ,
6697         r_po_line.MIN_RELEASE_AMOUNT                       ,
6698         r_po_line.PRICE_TYPE_LOOKUP_CODE                   ,
6699         r_po_line.CLOSED_CODE                              ,
6700         r_po_line.PRICE_BREAK_LOOKUP_CODE                  ,
6701         r_po_line.USSGL_TRANSACTION_CODE                   ,
6702         r_po_line.GOVERNMENT_CONTEXT                       ,
6703         r_po_line.REQUEST_ID                               ,
6704         r_po_line.PROGRAM_APPLICATION_ID                   ,
6705         r_po_line.PROGRAM_ID                               ,
6706         r_po_line.PROGRAM_UPDATE_DATE                      ,
6707         r_po_line.CLOSED_DATE                              ,
6708         r_po_line.CLOSED_REASON                            ,
6709         r_po_line.CLOSED_BY                                ,
6710         r_po_line.TRANSACTION_REASON_CODE                  ,
6711         r_po_line.ORG_ID                                   ,
6712         r_po_line.QC_GRADE                                 ,
6713         r_po_line.BASE_UOM                                 ,
6714         r_po_line.BASE_QTY                                 ,
6715         r_po_line.SECONDARY_UOM                            ,
6716         r_po_line.SECONDARY_QTY                            ,
6717         r_po_line.LINE_REFERENCE_NUM                       ,
6718         r_po_line.PROJECT_ID                               ,
6719         r_po_line.TASK_ID                                  ,
6720         r_po_line.EXPIRATION_DATE                          ,
6721         r_po_line.TAX_CODE_ID
6722 );
6723 
6724   IF v_hook_value = 'FALSE' THEN
6725       RETURN;
6726   END IF;
6727 
6728   OPEN c_po_hdr(v_po_hdr_id);
6729   FETCH c_po_hdr INTO r_po_header;
6730   CLOSE c_po_hdr;
6731 
6732   v_type_lookup_code         := r_po_header.type_lookup_code;
6733   v_from_type_lookup_code    := r_po_header.from_type_lookup_code;
6734   v_quot_class_code          := r_po_header.Quotation_Class_Code;
6735   v_Vendor_id                := r_po_header.vendor_id;
6736   v_Vendor_Site_Id           := r_po_header.vendor_site_id;
6737   v_currency                 := r_po_header.currency_code;
6738   v_style_id                 := r_po_header.style_id;
6739 
6740   OPEN Fetch_UOMCode_Cur(v_line_uom);
6741   FETCH Fetch_UOMCode_Cur INTO v_uom_code;
6742   CLOSE Fetch_UOMCode_Cur;
6743 
6744   IF pv_action = JAI_CONSTANTS.inserting THEN
6745     IF v_type_lookup_code = 'BLANKET' OR v_quot_class_code = 'CATALOG' THEN
6746       IF v_type_lookup_code = 'BLANKET' AND v_frm_hdr_id IS NOT NULL THEN
6747         v_src_loc_id := get_line_loc_id(v_frm_hdr_id ,r_po_line.line_num ,r_po_line.item_id , NULL);
6748         v_src_line_id := get_line_id(v_frm_hdr_id ,r_po_line.line_num );
6749         jai_po_proc_pkg.copy_source_taxes(
6750                          p_type                    => 'L'
6751                         ,p_po_hdr_id               => r_po_line.po_header_id
6752                         ,p_po_line_id              => r_po_line.PO_LINE_ID
6753                         ,p_po_line_loc_id          => NULL
6754                         ,p_line_num                => r_po_line.line_num
6755                         ,p_ship_num                => NULL
6756                         ,p_item_id                 => r_po_line.item_id
6757                         ,p_from_hdr_id             => v_frm_hdr_id
6758                         ,p_from_type_lookup_code   => v_from_type_lookup_code
6759                         ,p_source_line_id          => v_src_line_id
6760                         ,p_source_loc_id           => v_src_loc_id
6761                         ,p_cre_dt                  => r_po_line.Creation_Date
6762                         ,p_cre_by                  => r_po_line.Created_By
6763                         ,p_last_upd_dt             => r_po_line.Last_Update_Date
6764                         ,p_last_upd_by             => r_po_line.Last_Updated_By
6765                         ,p_last_upd_login          => r_po_line.Last_Update_Login
6766                        );
6767       END IF;
6768       jai_po_proc_pkg.process_po_tax_wrapper(prec_po_line => r_po_line);
6769     END IF;
6770  /*     --Added by Wenqiong for bug14748379 begin
6771       ELSIF v_type_lookup_code = 'BLANKET' AND v_frm_hdr_id IS NULL THEN
6772         jai_po_proc_pkg.process_po_tax_wrapper(prec_po_line => r_po_line);
6773       --Added by Wenqiong for bug14748379 end
6774       END IF;*/
6775   ELSE-- pv_action = JAI_CONSTANTS.updating
6776 
6777     IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
6778       return;
6779     END IF;
6780 
6781     IF v_type_lookup_code IN ('STANDARD', 'PLANNED')
6782      AND (nvl(v_frm_hdr_id,0) <> nvl(r_old_po_line.from_header_id,0)
6783          and nvl(v_frm_po_line_id,0) <> nvl(r_old_po_line.from_line_id,0)) THEN
6784         Open Fetch_Lines_Cur;
6785         Fetch Fetch_Lines_Cur INTO v_line_loc_id, v_price, v_qty;
6786         Close Fetch_Lines_Cur;
6787         --Added by Wenqiong for trigger replacement begin.
6788         /*jai_po_proc_pkg.delete_jai_po_lines(pn_line_id=>v_po_line_id);
6789         jai_po_proc_pkg.delete_po_taxes(pn_po_line_id=>v_po_line_id);*/
6790         --Added by Wenqiong for trigger replacement end.
6791          jai_po_proc_pkg.copy_quot_taxes(
6792                        p_line_loc_id        =>   v_line_loc_id
6793                       ,p_po_hdr_id          =>   v_po_hdr_id
6794                       ,p_po_line_id         =>   v_po_line_id
6795                       ,p_item_id            =>   r_po_line.item_id --Added on 15-Jan-2013
6796                       ,p_qty                =>   v_qty
6797                       ,p_frm_hdr_id         =>   v_frm_hdr_id
6798                       ,p_frm_line_id        =>   v_frm_po_line_id
6799                       ,p_price              =>   v_price
6800                       ,p_unit_code          =>   v_uom_code
6801                       ,p_cre_dt             =>   v_cre_dt
6802                       ,p_cre_by             =>   v_cre_by
6803                       ,p_last_upd_dt        =>   v_last_upd_dt
6804                       ,p_last_upd_by        =>   v_last_upd_by
6805                       ,p_last_upd_login     =>   v_last_upd_login
6806                       ,p_call_from          =>   'TRIGGER'
6807                       );
6808     END IF;
6809 /*Get old item id from JAI table*/
6810     OPEN c_get_po_line_loc_details;
6811     FETCH c_get_po_line_loc_details INTO r_jai_po_line_loc;
6812     CLOSE c_get_po_line_loc_details;
6813     IF r_jai_po_line_loc.item_id <> r_po_line.item_id THEN
6814       FOR r_po_line_loc IN po_line_loc_cur
6815       LOOP
6816        jai_po_proc_pkg.process_po_tax_wrapper (prec_po_location =>r_po_line_loc);
6817       END LOOP;
6818     END IF;
6819   END IF;
6820  EXCEPTION
6821    WHEN OTHERS THEN
6822 
6823 
6824      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6825         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6826      END IF;
6827      app_exception.raise_exception;
6828 
6829 END process_quotation_line;
6830 
6831 PROCEDURE process_quotation_line_loc(po_line_loc_rec PO_LINE_LOCATIONS_ALL%ROWTYPE , pv_action varchar2 , pv_return_code out nocopy varchar2 , pv_return_message out nocopy varchar2 ) IS
6832 
6833 v_po_hdr_id                NUMBER;
6834 v_po_line_id               NUMBER;
6835 v_orig_ship_id             NUMBER;
6836 v_shipment_type            VARCHAR2(25);
6837 v_uom_measure              VARCHAR2(30);
6838 v_uom_code                 VARCHAR2(30);
6839 v_shipment_num             NUMBER;
6840 v_src_ship_id              NUMBER;
6841 v_from_line_loc_id         NUMBER;
6842 v_from_line_id             NUMBER;
6843 v_from_hdr_id              NUMBER;
6844 v_line_loc_id              NUMBER;
6845 v_price                    NUMBER;
6846 v_qty                      NUMBER;
6847 v_cre_dt                   DATE  ;
6848 v_cre_by                   NUMBER ;
6849 v_last_upd_dt              DATE  ;
6850 v_last_upd_by              NUMBER ;
6851 v_last_upd_login           NUMBER ;
6852 
6853 v_ship_to_org_id           NUMBER;
6854 v_from_type_lookup_code    VARCHAR2(25);
6855 v_type_lookup_code         VARCHAR2(25);
6856 v_vendor_id                NUMBER;
6857 v_vendor_site_id           NUMBER;
6858 v_currency                 VARCHAR2(3);
6859 v_ship_loc_id              NUMBER;
6860 v_quot_from_hdr_id         NUMBER;
6861 v_service_type_code        VARCHAR2(30);
6862 v_count                    NUMBER;
6863 
6864 v_item_id                  NUMBER;
6865 v_line_num                 PO_LINES_ALL.line_num%TYPE;
6866 v_style_id                 NUMBER;
6867 v_hook_value               VARCHAR2(10);
6868 v_src_loc_id               NUMBER;
6869 v_src_line_id              NUMBER;
6870 CURSOR c_po_hdr(cn_po_hdr_id NUMBER) IS
6871 SELECT *
6872 FROM PO_HEADERS_ALL
6873 WHERE po_header_id = cn_po_hdr_id;
6874 
6875 CURSOR fetch_uomcode_cur IS
6876 SELECT uom_code
6877 FROM   mtl_units_of_measure
6878 WHERE unit_of_measure = v_uom_measure;
6879 
6880 CURSOR c_po_line(cn_po_line_id NUMBER) IS
6881 SELECT *
6882 FROM PO_LINES_ALL
6883 WHERE po_line_id = cn_po_line_id;
6884 
6885 CURSOR Fetch_Count_Cur (cn_po_hdr_id NUMBER)IS
6886   SELECT COUNT(Line_Location_Id)
6887   FROM   JAI_PO_LINE_LOCATIONS
6888   WHERE  Po_Header_Id = cn_po_hdr_id ;
6889 
6890 r_po_header            PO_HEADERS_ALL%ROWTYPE;
6891 r_po_line              PO_LINES_ALL%ROWTYPE;
6892 
6893 l_api_name                    CONSTANT VARCHAR2(30) := 'process_quotation_line_loc';
6894 BEGIN
6895   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6896      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
6897      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'pv_action:'||pv_action);
6898   END IF;
6899 
6900    v_hook_value := jai_cmn_hook_pkg.Ja_In_po_line_locations_all(
6901     po_line_loc_rec.LINE_LOCATION_ID                  ,
6902     po_line_loc_rec.PO_HEADER_ID                      ,
6903     po_line_loc_rec.PO_LINE_ID                        ,
6904     po_line_loc_rec.QUANTITY                                 ,
6905     po_line_loc_rec.QUANTITY_RECEIVED                        ,
6906     po_line_loc_rec.QUANTITY_ACCEPTED                        ,
6907     po_line_loc_rec.QUANTITY_REJECTED                        ,
6908     po_line_loc_rec.QUANTITY_BILLED                          ,
6909     po_line_loc_rec.QUANTITY_CANCELLED                       ,
6910     po_line_loc_rec.UNIT_MEAS_LOOKUP_CODE                    ,
6911     po_line_loc_rec.PO_RELEASE_ID                            ,
6912     po_line_loc_rec.SHIP_TO_LOCATION_ID                      ,
6913     po_line_loc_rec.SHIP_VIA_LOOKUP_CODE                     ,
6914     po_line_loc_rec.NEED_BY_DATE                             ,
6915     po_line_loc_rec.PROMISED_DATE                            ,
6916     po_line_loc_rec.LAST_ACCEPT_DATE                         ,
6917     po_line_loc_rec.PRICE_OVERRIDE                           ,
6918     po_line_loc_rec.ENCUMBERED_FLAG                          ,
6919     po_line_loc_rec.ENCUMBERED_DATE                          ,
6920     po_line_loc_rec.UNENCUMBERED_QUANTITY                    ,
6921     po_line_loc_rec.FOB_LOOKUP_CODE                          ,
6922     po_line_loc_rec.FREIGHT_TERMS_LOOKUP_CODE                ,
6923     po_line_loc_rec.TAXABLE_FLAG                             ,
6924     po_line_loc_rec.TAX_NAME                                 ,
6925     po_line_loc_rec.ESTIMATED_TAX_AMOUNT                     ,
6926     po_line_loc_rec.FROM_HEADER_ID                           ,
6927     po_line_loc_rec.FROM_LINE_ID                             ,
6928     po_line_loc_rec.FROM_LINE_LOCATION_ID                    ,
6929     po_line_loc_rec.START_DATE                               ,
6930     po_line_loc_rec.END_DATE                                 ,
6931     po_line_loc_rec.LEAD_TIME                                ,
6932     po_line_loc_rec.LEAD_TIME_UNIT                           ,
6933     po_line_loc_rec.PRICE_DISCOUNT                           ,
6934     po_line_loc_rec.TERMS_ID                                 ,
6935     po_line_loc_rec.APPROVED_FLAG                            ,
6936     po_line_loc_rec.APPROVED_DATE                            ,
6937     po_line_loc_rec.CLOSED_FLAG                              ,
6938     po_line_loc_rec.CANCEL_FLAG                              ,
6939     po_line_loc_rec.CANCELLED_BY                             ,
6940     po_line_loc_rec.CANCEL_DATE                              ,
6941     po_line_loc_rec.CANCEL_REASON                            ,
6942     po_line_loc_rec.FIRM_STATUS_LOOKUP_CODE                  ,
6943     po_line_loc_rec.FIRM_DATE                                ,
6944     po_line_loc_rec.ATTRIBUTE_CATEGORY                       ,
6945     po_line_loc_rec.ATTRIBUTE1                               ,
6946     po_line_loc_rec.ATTRIBUTE2                               ,
6947     po_line_loc_rec.ATTRIBUTE3                               ,
6948     po_line_loc_rec.ATTRIBUTE4                               ,
6949     po_line_loc_rec.ATTRIBUTE5                               ,
6950     po_line_loc_rec.ATTRIBUTE6                               ,
6951     po_line_loc_rec.ATTRIBUTE7                               ,
6952     po_line_loc_rec.ATTRIBUTE8                               ,
6953     po_line_loc_rec.ATTRIBUTE9                               ,
6954     po_line_loc_rec.ATTRIBUTE10                              ,
6955     po_line_loc_rec.UNIT_OF_MEASURE_CLASS                    ,
6956     po_line_loc_rec.ENCUMBER_NOW                             ,
6957     po_line_loc_rec.ATTRIBUTE11                              ,
6958     po_line_loc_rec.ATTRIBUTE12                              ,
6959     po_line_loc_rec.ATTRIBUTE13                              ,
6960     po_line_loc_rec.ATTRIBUTE14                              ,
6961     po_line_loc_rec.ATTRIBUTE15                              ,
6962     po_line_loc_rec.INSPECTION_REQUIRED_FLAG                 ,
6963     po_line_loc_rec.RECEIPT_REQUIRED_FLAG                    ,
6964     po_line_loc_rec.QTY_RCV_TOLERANCE                        ,
6965     po_line_loc_rec.QTY_RCV_EXCEPTION_CODE                   ,
6966     po_line_loc_rec.ENFORCE_SHIP_TO_LOCATION_CODE            ,
6967     po_line_loc_rec.ALLOW_SUBSTITUTE_RECEIPTS_FLAG           ,
6968     po_line_loc_rec.DAYS_EARLY_RECEIPT_ALLOWED               ,
6969     po_line_loc_rec.DAYS_LATE_RECEIPT_ALLOWED                ,
6970     po_line_loc_rec.RECEIPT_DAYS_EXCEPTION_CODE              ,
6971     po_line_loc_rec.INVOICE_CLOSE_TOLERANCE                  ,
6972     po_line_loc_rec.RECEIVE_CLOSE_TOLERANCE                  ,
6973     po_line_loc_rec.SHIP_TO_ORGANIZATION_ID                  ,
6974     po_line_loc_rec.SHIPMENT_NUM                             ,
6975     po_line_loc_rec.SOURCE_SHIPMENT_ID                       ,
6976     po_line_loc_rec.SHIPMENT_TYPE                      ,
6977     po_line_loc_rec.CLOSED_CODE                              ,
6978     po_line_loc_rec.REQUEST_ID                               ,
6979     po_line_loc_rec.PROGRAM_APPLICATION_ID                   ,
6980     po_line_loc_rec.PROGRAM_ID                               ,
6981     po_line_loc_rec.PROGRAM_UPDATE_DATE                      ,
6982     po_line_loc_rec.USSGL_TRANSACTION_CODE                   ,
6983     po_line_loc_rec.GOVERNMENT_CONTEXT                       ,
6984     po_line_loc_rec.RECEIVING_ROUTING_ID                     ,
6985     po_line_loc_rec.ACCRUE_ON_RECEIPT_FLAG                   ,
6986     po_line_loc_rec.CLOSED_REASON                            ,
6987     po_line_loc_rec.CLOSED_DATE                              ,
6988     po_line_loc_rec.CLOSED_BY                                ,
6989     po_line_loc_rec.ORG_ID                                   ,
6990     po_line_loc_rec.QUANTITY_SHIPPED                         ,
6991     po_line_loc_rec.COUNTRY_OF_ORIGIN_CODE                   ,
6992     po_line_loc_rec.TAX_USER_OVERRIDE_FLAG                   ,
6993     po_line_loc_rec.MATCH_OPTION                             ,
6994     po_line_loc_rec.TAX_CODE_ID                              ,
6995     po_line_loc_rec.CALCULATE_TAX_FLAG                       ,
6996     po_line_loc_rec.CHANGE_PROMISED_DATE_REASON
6997   );
6998 
6999   IF v_hook_value = 'FALSE' THEN
7000     RETURN;
7001   END IF;
7002   v_po_hdr_id           := po_line_loc_rec.PO_HEADER_ID;
7003   v_po_line_id          := po_line_loc_rec.PO_LINE_ID;
7004   v_orig_ship_id        := po_line_loc_rec.original_shipment_id;
7005   v_shipment_type       := po_line_loc_rec.SHIPMENT_TYPE;
7006   v_shipment_num        := po_line_loc_rec.Shipment_Num;
7007   v_src_ship_id         := po_line_loc_rec.Source_Shipment_Id;
7008   v_from_line_loc_id    := po_line_loc_rec.From_Line_Location_Id;
7009   v_from_line_id        := po_line_loc_rec.From_Line_Id;
7010   v_from_hdr_id         := po_line_loc_rec.From_Header_Id;
7011   v_line_loc_id         := po_line_loc_rec.Line_Location_Id;
7012   v_price               := po_line_loc_rec.Price_Override;
7013   v_qty                 := po_line_loc_rec.Quantity;
7014   v_cre_dt              := po_line_loc_rec.Creation_Date;
7015   v_cre_by              := po_line_loc_rec.Created_By;
7016   v_last_upd_dt         := po_line_loc_rec.Last_Update_Date ;
7017   v_last_upd_by         := po_line_loc_rec.Last_Updated_By;
7018   v_last_upd_login      := po_line_loc_rec.Last_Update_Login;
7019   v_uom_measure         := po_line_loc_rec.Unit_Meas_Lookup_Code;
7020   v_orig_ship_id        := po_line_loc_rec.original_shipment_id;
7021   v_ship_to_org_id      := po_line_loc_rec.SHIP_TO_ORGANIZATION_ID;
7022 
7023   OPEN c_po_hdr(v_po_hdr_id);
7024   FETCH c_po_hdr INTO r_po_header;
7025   CLOSE c_po_hdr;
7026 
7027   OPEN c_po_line(v_po_line_id);
7028   FETCH c_po_line INTO r_po_line;
7029   CLOSE c_po_line;
7030 
7031   v_from_type_lookup_code  := r_po_header.from_type_lookup_code;
7032   v_quot_from_hdr_id       := r_po_header.from_header_id;
7033   v_type_lookup_code       := r_po_header.type_lookup_code;
7034   v_Vendor_id              := r_po_header.vendor_id;
7035   v_Vendor_site_id         := r_po_header.vendor_site_id;
7036   v_currency               := r_po_header.currency_code;
7037   v_style_id               := r_po_header.style_id;
7038 
7039   v_item_id                := r_po_line.item_id;
7040   v_line_num               := r_po_line.line_num;
7041 
7042   IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
7043      return;
7044   END IF;
7045 
7046   OPEN fetch_uomcode_cur;
7047   FETCH fetch_uomcode_cur INTO v_uom_code;
7048   CLOSE fetch_uomcode_cur;
7049 
7050   IF pv_action = JAI_CONSTANTS.inserting THEN
7051 
7052     IF is_split_line(v_orig_ship_id, v_po_hdr_id, v_po_line_id) = TRUE THEN
7053         -- process for split line;
7054         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7055            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_orig_ship_id:'||v_orig_ship_id||'its split line.');
7056         END IF;
7057 
7058        jai_po_proc_pkg.process_split_line(v_orig_ship_id ,v_line_loc_id,v_qty,v_price,v_type_lookup_code);
7059 
7060     ELSE--It's not split line
7061       IF v_shipment_type NOT IN ( 'SCHEDULED' , 'BLANKET' ) THEN
7062         IF  (v_from_type_lookup_code IN ('QUOTATION') AND v_quot_from_hdr_id IS NOT NULL) THEN
7063         --Process for copy documents, from quotation to po
7064            OPEN Fetch_Count_Cur(v_quot_from_hdr_id);
7065            FETCH Fetch_Count_Cur INTO v_count;
7066            CLOSE Fetch_Count_Cur;
7067 
7068            IF v_count > 0 THEN
7069               IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7070                  FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Process for copy documents,copy_source_taxes');
7071               END IF;
7072                v_src_loc_id := get_line_loc_id(v_quot_from_hdr_id ,v_line_num ,v_item_id , v_shipment_num);
7073                v_src_line_id := get_line_id(v_quot_from_hdr_id ,v_line_num );
7074               jai_po_proc_pkg.copy_source_taxes(
7075                                                  p_type                    => 'S'
7076                                                 ,p_po_hdr_id               => v_po_hdr_id
7077                                                 ,p_po_line_id              => v_po_line_id
7078                                                 ,p_po_line_loc_id          => v_line_loc_id
7079                                                 ,p_line_num                => v_line_num
7080                                                 ,p_ship_num                => v_shipment_num
7081                                                 ,p_item_id                 => v_item_id
7082                                                 ,p_from_hdr_id             => v_quot_from_hdr_id
7083                                                 ,p_from_type_lookup_code   => v_from_type_lookup_code
7084                                                 ,p_source_line_id          => v_src_line_id
7085                                                 ,p_source_loc_id           => v_src_loc_id
7086                                                 ,p_cre_dt                  => v_cre_dt
7087                                                 ,p_cre_by                  => v_cre_by
7088                                                 ,p_last_upd_dt             => v_last_upd_dt
7089                                                 ,p_last_upd_by             => v_last_upd_by
7090                                                 ,p_last_upd_login          => v_last_upd_login
7091                                                        );
7092               RETURN;
7093            END IF;
7094         END IF;
7095 
7096         --If the following if is satisfied, it implies that PO has been linked by a quotation.
7097         IF v_type_lookup_code IN ( 'STANDARD', 'PLANNED') AND v_from_line_id IS NOT NULL THEN
7098             OPEN fetch_uomcode_cur;
7099             FETCH fetch_uomcode_cur INTO v_uom_code;
7100             CLOSE fetch_uomcode_cur;
7101             IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7102                FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Process for copy documents from quotation,copy_quot_taxes');
7103             END IF;
7104             jai_po_proc_pkg.copy_quot_taxes(
7105                                            p_line_loc_id        =>   v_line_loc_id
7106                                           ,p_po_hdr_id          =>   v_po_hdr_id
7107                                           ,p_po_line_id         =>   v_po_line_id
7108                                           ,p_item_id            =>   v_item_id--Added on 15-Jan-2013
7109                                           ,p_qty                =>   v_qty
7110                                           ,p_frm_hdr_id         =>   v_from_hdr_id
7111                                           ,p_frm_line_id        =>   v_from_line_id
7112                                           ,p_price              =>   v_price
7113                                           ,p_unit_code          =>   v_uom_code
7114                                           ,p_cre_dt             =>   v_cre_dt
7115                                           ,p_cre_by             =>   v_cre_by
7116                                           ,p_last_upd_dt        =>   v_last_upd_dt
7117                                           ,p_last_upd_by        =>   v_last_upd_by
7118                                           ,p_last_upd_login     =>   v_last_upd_login
7119                                           ,p_call_from          =>   'TRIGGER'
7120                                            );
7121             RETURN;
7122         END IF;
7123 
7124         IF v_type_lookup_code = 'QUOTATION' THEN
7125           JAI_AVLIST_VALIDATE_PKG.Check_AvList_Validation( pn_party_id          => v_vendor_id
7126                                                          , pn_party_site_id     => v_vendor_site_id
7127                                                          , pn_inventory_item_id => v_item_id
7128                                                          , pd_ordered_date      => trunc(sysdate)
7129                                                          , pv_party_type        => 'V'
7130                                                          , pn_pricing_list_id   => null
7131                                                          );
7132           jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec);
7133           RETURN;
7134         END IF;
7135         --Added by Wenqiong for bug14748379 , move the below logic from process_po_shipment_line begin
7136         IF v_type_lookup_code = 'BLANKET' THEN
7137           jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec);
7138           jai_po_proc_pkg.process_dist(prec_po_location=>po_line_loc_rec);
7139           jai_po_proc_pkg.copy_req_to_po(prec_po_location => po_line_loc_rec);
7140           RETURN;
7141         END IF;
7142         --Added by Wenqiong for bug14748379 end
7143         jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec);
7144       END IF;
7145      END IF;
7146 
7147   ELSE
7148   jai_po_proc_pkg.process_po_shipment_line(po_line_loc_rec.LINE_LOCATION_ID,
7149                                                  pr_po_header=> r_po_header,
7150                                                  pr_po_line  => r_po_line,
7151                                                  pv_action   => JAI_CONSTANTS.updating);
7152   END IF;
7153  EXCEPTION
7154    WHEN OTHERS THEN
7155 
7156 
7157      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7158         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7159      END IF;
7160      app_exception.raise_exception;
7161 
7162 END process_quotation_line_loc;
7163 PROCEDURE process_vendor_change(prec_po_header IN PO_HEADERS_ALL%ROWTYPE,pn_old_vendor_id IN NUMBER)
7164 IS
7165 CURSOR Lines_Cur IS
7166 SELECT DISTINCT Po_Line_Id
7167 FROM   JAI_PO_LINE_LOCATIONS
7168 WHERE  Po_Header_Id = prec_po_header.po_header_id;
7169 
7170 CURSOR Line_Loc_Cur( lineid IN NUMBER ) IS
7171 SELECT Line_Location_Id
7172 FROM   JAI_PO_LINE_LOCATIONS
7173 WHERE  Po_Line_Id = lineid;
7174 
7175 CURSOR PO_Line_loc_cur(cn_line_loc_id NUMBER) IS
7176 SELECT * FROM
7177 PO_LINE_LOCATIONS_ALL
7178 WHERE Line_Location_Id = cn_line_loc_id;
7179 
7180 CURSOR c_po_line_dtl(cn_po_line_id NUMBER) IS
7181 SELECT * FROM PO_LINES_ALL
7182 WHERE PO_LINE_ID = cn_po_line_id;
7183 
7184 CURSOR Fetch_UOMCode_Cur( c_uom IN VARCHAR2 ) IS
7185 SELECT Uom_Code
7186 FROM   Mtl_Units_Of_Measure
7187 WHERE  Unit_Of_Measure = c_uom;
7188 
7189 CURSOR tax_override_flag_cur(c_supplier_id number, c_supp_site_id number) IS
7190 SELECT  override_flag
7191 FROM    JAI_CMN_VENDOR_SITES
7192 WHERE   vendor_id = c_supplier_id
7193 AND     vendor_site_id = c_supp_site_id;
7194 
7195 
7196 r_po_line               PO_LINES_ALL%ROWTYPE;
7197 r_po_line_loc           PO_LINE_LOCATIONS_ALL%ROWTYPE;
7198 ln_po_header_id         PO_HEADERS_ALL.PO_HEADER_ID%TYPE  := prec_po_header.po_header_id;
7199 v_po_line_id            PO_LINE_LOCATIONS_ALL.PO_LINE_ID%TYPE;
7200 v_line_loc_id           PO_LINE_LOCATIONS_ALL.LINE_LOCATION_ID%TYPE;
7201 
7202 
7203 v_override_flag         VARCHAR2(1);
7204 v_line_exists_flag      NUMBER;
7205 v_item_id               NUMBER;
7206 v_uom_code              VARCHAR2(25);
7207 
7208 ln_vendor_id            prec_po_header.vendor_id%TYPE := prec_po_header.vendor_id;
7209 v_Vendor_Site_Id        prec_po_header.vendor_site_id%TYPE:= prec_po_header.vendor_site_id;
7210 v_Type_Lookup_Code      prec_po_header.Type_Lookup_Code%TYPE:= prec_po_header.Type_Lookup_Code;
7211 v_Quot_Class_Code       prec_po_header.Quotation_Class_Code%TYPE:= prec_po_header.Quotation_Class_Code;
7212 v_Org_Id                prec_po_header.Org_Id%TYPE:= prec_po_header.Org_Id;
7213 v_rate                  prec_po_header.Rate%TYPE:= prec_po_header.Rate;
7214 v_rate_type             prec_po_header.Rate_Type%TYPE:= prec_po_header.Rate_Type;
7215 v_rate_date             prec_po_header.Rate_Date%TYPE     := prec_po_header.Rate_Date;
7216 v_ship_to_loc_id        prec_po_header.Ship_To_Location_Id%TYPE  := prec_po_header.Ship_To_Location_Id;
7217 v_curr                  prec_po_header.Currency_Code%TYPE:= prec_po_header.Currency_Code;
7218 v_cre_dt                prec_po_header.Creation_Date%TYPE:= prec_po_header.Creation_Date;
7219 v_cre_by                prec_po_header.Created_By%TYPE:= prec_po_header.Created_By;
7220 v_last_upd_dt           prec_po_header.Last_Update_Date%TYPE:= prec_po_header.Last_Update_Date ;
7221 v_last_upd_by           prec_po_header.Last_Updated_By%TYPE:= prec_po_header.Last_Updated_By;
7222 v_last_upd_login        prec_po_header.Last_Update_Login%TYPE:= prec_po_header.Last_Update_Login;
7223 l_api_name            CONSTANT VARCHAR2(200) := 'process_vendor_change';
7224 BEGIN
7225      IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7226          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'begin');
7227      END IF;
7228 
7229     IF jai_cmn_utils_pkg.validate_po_type(p_style_id => prec_po_header.style_id) = FALSE THEN
7230       return;
7231     END IF;
7232 
7233 
7234      /*For vendor merge case, need update vendor in receipts,
7235        todo, seemed to be removed since vendor merge case will not fire through ZX.
7236      */
7237      IF ln_vendor_id <> nvl(pn_old_vendor_id,-999) then
7238         for c_receipt_rec in
7239         (
7240         select  distinct shipment_header_id, shipment_line_id
7241         from    rcv_transactions
7242         where   po_header_id = ln_po_header_id
7243         )
7244        loop
7245           update JAI_RCV_LINE_TAXES
7246           set    vendor_id = ln_vendor_id
7247           where  shipment_header_id =  c_receipt_rec.shipment_header_id
7248           and    shipment_line_id =  c_receipt_rec.shipment_line_id
7249           and    vendor_id  = pn_old_vendor_id;
7250        end loop;
7251      END IF;
7252 
7253     FOR Rec IN Lines_Cur  LOOP
7254         FOR Rec1 IN Line_Loc_Cur( Rec.Po_Line_Id )  LOOP
7255           v_po_line_id  := Rec.po_line_id;
7256           v_line_loc_id := Rec1.Line_Location_Id;
7257 
7258           OPEN c_po_line_dtl(Rec.Po_Line_Id);
7259           FETCH c_po_line_dtl INTO r_po_line;
7260           CLOSE c_po_line_dtl;
7261 
7262           v_item_id := r_po_line.item_id;
7263 
7264           OPEN Fetch_UOMCode_Cur(r_po_line.Unit_Meas_Lookup_Code);
7265           FETCH Fetch_UOMCode_Cur INTO v_uom_code;
7266           CLOSE Fetch_UOMCode_Cur;
7267 
7268           OPEN tax_override_flag_cur(ln_vendor_id,v_Vendor_Site_Id);
7269           FETCH tax_override_flag_cur INTO v_override_flag;
7270           CLOSE tax_override_flag_cur;
7271           /*Only for PO Type Blank and Quotation, line_location_id is null*/
7272           IF NVL( v_line_loc_id, -999 ) = -999  THEN
7273 
7274             IF nvl(v_override_flag,'N') = 'Y' THEN
7275                 delete_po_taxes(pn_po_hdr_id => ln_po_header_id);
7276 
7277                 jai_po_tax_pkg.copy_reqn_taxes
7278                 (
7279                 ln_vendor_id ,
7280                 v_Vendor_Site_Id,
7281                 ln_po_header_id ,
7282                 v_po_line_id,
7283                 Rec1.Line_Location_Id,
7284                 v_Type_Lookup_Code ,
7285                 v_Quot_Class_Code ,
7286                 v_Ship_To_Loc_Id ,
7287                 v_Org_Id ,
7288                 v_Cre_Dt ,
7289                 v_Cre_By ,
7290                 v_Last_Upd_Dt ,
7291                 v_Last_Upd_By ,
7292                 v_Last_Upd_Login
7293                 ,v_rate
7294                 ,v_rate_type
7295                 ,v_rate_date
7296                 ,v_curr
7297                 );
7298                 RETURN;
7299             END IF;
7300 
7301             jai_po_proc_pkg.process_po_tax_wrapper (prec_po_header=> prec_po_header,
7302                                                     prec_po_line => r_po_line);
7303           ELSE
7304             OPEN PO_Line_loc_cur(v_line_loc_id);
7305             FETCH PO_Line_loc_cur INTO r_po_line_loc;
7306             CLOSE PO_Line_loc_cur;
7307 
7308             jai_po_proc_pkg.process_po_tax_wrapper (prec_po_header=> prec_po_header,
7309                                                     prec_po_location => r_po_line_loc);
7310           END IF;
7311         END LOOP;
7312     END LOOP;
7313     jai_po_proc_pkg.update_vendor(
7314                   pn_po_header_id        => ln_po_header_id
7315                  ,pn_old_vendor_id       => pn_old_vendor_id
7316                  ,pn_vendor_id           => ln_vendor_id
7317                  ,pn_vendor_site_id      => v_vendor_site_id
7318                  ,pd_last_upd_dt         => v_last_upd_dt
7319                  ,pn_last_upd_by         => v_last_upd_by
7320                  ,pn_last_upd_login      => v_last_upd_login
7321                  );
7322 
7323 
7324 
7325 END process_vendor_change;
7326 FUNCTION get_line_loc_id
7327 (
7328   p_from_hdr_id NUMBER
7329  ,p_line_num    NUMBER
7330  ,p_item_id     NUMBER
7331  ,p_ship_num    NUMBER
7332 ) RETURN NUMBER IS
7333   PRAGMA AUTONOMOUS_TRANSACTION;
7334   --  Cursor definition for picking line_location_id from po_line_locations_all
7335   CURSOR fetch_line_loc_id_cur IS
7336     SELECT jpll.line_location_id
7337     FROM po_line_locations_all plla, jai_po_line_locations jpll,
7338          po_lines_all pla, po_headers_all pha
7339     WHERE pha.po_header_id = pla.po_header_id AND
7340           jpll.line_location_id = plla.line_location_id AND
7341           pha.po_header_id = plla.po_header_id AND
7342           pla.po_line_id = plla.po_line_id AND pha.po_header_id = p_from_hdr_id AND
7343           pla.line_num = p_line_num AND pla.item_id = p_item_id AND
7344           plla.shipment_num = p_ship_num;
7345   ln_line_loc_id NUMBER;
7346 l_api_name                    CONSTANT VARCHAR2(30) := 'get_line_loc_id';
7347 BEGIN
7348   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7349      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name);
7350      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||'p_from_hdr_id'||p_from_hdr_id);
7351      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||'p_line_num'||p_line_num);
7352      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||'p_item_id'||p_item_id);
7353      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||'p_ship_num'||p_ship_num);
7354 
7355   END IF;
7356   OPEN fetch_line_loc_id_cur;
7357   FETCH fetch_line_loc_id_cur
7358     INTO ln_line_loc_id;
7359   CLOSE fetch_line_loc_id_cur;
7360   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7361      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||', the returned ln_line_loc_id:'||ln_line_loc_id);
7362      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
7363   END IF;
7364   RETURN ln_line_loc_id;
7365 END get_line_loc_id;
7366 
7367   FUNCTION get_line_id
7368   (
7369     p_from_hdr_id NUMBER
7370    ,p_line_num    NUMBER
7371   ) RETURN NUMBER IS
7372   PRAGMA AUTONOMOUS_TRANSACTION;
7373   CURSOR fetch_line_id_cur IS
7374       SELECT pla.Po_Line_Id
7375       FROM po_lines_all pla, po_headers_all pha
7376       WHERE pha.Po_Header_Id = p_from_hdr_id
7377       AND pla.line_num = p_line_num
7378       AND pha.po_header_id =pla.po_header_id;
7379  l_api_name                    CONSTANT VARCHAR2(30) := 'get_line_id';
7380  ln_line_id                    NUMBER;
7381   BEGIN
7382   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7383      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name);
7384   END IF;
7385 
7386   OPEN  fetch_line_id_cur;
7387   FETCH fetch_line_id_cur INTO ln_line_id;
7388   CLOSE fetch_line_id_cur;
7389 
7390   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7391      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||', the returned ln_line_id:'||ln_line_id);
7392      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
7393   END IF;
7394 
7395   RETURN ln_line_id;
7396   END get_line_id;
7397  PROCEDURE delete_po_req_line_taxes
7398   (
7399    pn_requisition_line_id IN NUMBER
7400   ) IS
7401   BEGIN
7402     DELETE from JAI_PO_REQ_LINE_TAXES --ja_in_reqn_tax_lines
7403 		 WHERE  requisition_line_id = pn_requisition_line_id ;
7404 
7405 		 DELETE from JAI_PO_REQ_LINES --ja_in_reqn_lines
7406 		 WHERE  requisition_line_id = pn_requisition_line_id;
7407 
7408   END delete_po_req_line_taxes;
7409 
7410  PROCEDURE locate_source_line
7411   (
7412     p_header_id IN NUMBER,
7413     p_line_num  IN NUMBER,
7414     p_line_quantity IN NUMBER,
7415     p_po_line_id       OUT NOCOPY NUMBER,
7416     p_line_location_id OUT NOCOPY NUMBER,
7417     p_line_id NUMBER DEFAULT NULL
7418   ) IS
7419   PRAGMA AUTONOMOUS_TRANSACTION;
7420   -- This procedure is used to find out the line_location_id from which the taxes should be defaulted in case
7421   -- there are multiple price break lines for the specified p_line_id or p_line_num of p_header_id
7422 
7423     i                 NUMBER  :=  1;
7424     v_po_line_id      NUMBER;
7425     v_cum_flag        Po_Lines_All.Price_Break_Lookup_Code % TYPE;
7426     v_quantity        NUMBER; --  :=  p_line_quantity; --Ramananda for File.Sql.35
7427     v_qty             NUMBER;
7428     v_count           NUMBER;
7429 
7430     TYPE v_Llid_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7431     TYPE v_Qty_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7432 
7433     Llid_tab  v_Llid_tab;
7434     Qty_tab v_Qty_Tab;
7435 
7436     CURSOR Fetch_Qty_Cur IS
7437       SELECT Quantity, Line_Location_Id
7438       FROM   Po_Line_Locations_All
7439       WHERE  Po_Header_Id = p_header_id
7440         AND  Po_Line_Id = v_po_line_id
7441         and SYSDATE between nvl(start_date, SYSDATE) and nvl(end_date, SYSDATE) -- cbabu for Bug# 2740918
7442     ORDER BY Quantity;
7443 
7444     CURSOR Fetch_Line_Id_Cur IS
7445       SELECT Po_Line_Id, NVL( Price_Break_Lookup_Code, 'NC' ) Price_Break_Lookup_Code
7446       FROM   Po_Lines_All
7447       WHERE  Po_Header_Id = p_header_id
7448         AND  Line_Num = p_line_num;
7449 
7450     CURSOR Fetch_Line1_Id_Cur IS
7451       SELECT NVL( Price_Break_Lookup_Code, 'NC' ) Price_Break_Lookup_Code
7452       FROM   Po_Lines_All
7453       WHERE  Po_Line_Id = p_line_id;
7454 
7455     CURSOR Fetch_Cum_Qty_Cur IS
7456       SELECT SUM( Quantity )
7457       FROM   Po_Line_Locations_All
7458       WHERE  Po_Line_Id = v_po_line_id;
7459 
7460     CURSOR Chk_Line_Loc_Cur IS
7461       SELECT COUNT( * )
7462       FROM   Po_Line_Locations_All
7463       WHERE  Po_Line_Id = v_po_line_id;
7464 
7465     lv_object_name CONSTANT VARCHAR2 (61) := 'jai_po_proc_pkg.locate_source_line';
7466 
7467   BEGIN
7468 
7469   /*----------------------------------------------------------------------------------------------------------
7470   CHANGE HISTORY for locate_source_line
7471   S.No  DD/MM/YYYY  Author and Details
7472   ------------------------------------------------------------------------------------------------------------
7473   1     15/01/2013  Wenqiong for bug16101649, to avoid trigger mutating, copy this procedure from jai_po_cmn_pkg.locate_source_line
7474                      Just PRAGMA AUTONOMOUS_TRANSACTION.
7475   ----------------------------------------------------------------------------------------------------------*/
7476     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7477      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_object_name,G_PKG_NAME||': '||lv_object_name||'Begin');
7478     END IF;
7479     v_quantity        :=  p_line_quantity; --Ramananda for File.Sql.35
7480 
7481     IF NVL( p_line_id, -999 ) = -999 THEN
7482        OPEN  Fetch_Line_Id_Cur;
7483        FETCH Fetch_Line_Id_Cur INTO v_po_line_id, v_cum_flag;
7484        CLOSE Fetch_Line_Id_Cur;
7485     ELSE
7486        OPEN  Fetch_Line1_Id_Cur;
7487        FETCH Fetch_Line1_Id_Cur INTO v_cum_flag;
7488        CLOSE Fetch_Line1_Id_Cur;
7489 
7490        v_po_line_id := p_line_id;
7491     END IF;
7492 
7493     p_po_line_id := v_po_line_id;
7494 
7495     OPEN  Fetch_Cum_Qty_Cur;
7496     FETCH Fetch_Cum_Qty_Cur INTO v_qty;
7497     CLOSE Fetch_Cum_Qty_Cur;
7498 
7499     IF v_cum_flag = 'CUMULATIVE' THEN
7500        v_quantity := v_qty;
7501     ELSE
7502        v_quantity := p_line_quantity;
7503     END IF;
7504 
7505     OPEN  Chk_Line_Loc_Cur;
7506     FETCH Chk_Line_Loc_Cur INTO v_count;
7507     CLOSE Chk_Line_Loc_Cur;
7508 
7509     IF v_count = 0 THEN
7510        p_line_location_id := -999;
7511     ELSE
7512       FOR rec IN Fetch_Qty_Cur LOOP
7513           Llid_tab( i ) := NVL( rec.Line_Location_Id, -99 );
7514           Qty_Tab( i ) := rec.quantity;
7515           i := i + 1;
7516       END LOOP;
7517       i := i - 1;
7518 
7519       IF Qty_tab( 1 ) > v_quantity THEN
7520          p_line_location_id := -999;
7521       ELSE
7522          FOR j IN 1 .. i-1 LOOP
7523            IF v_quantity >= Qty_tab( j ) AND v_quantity < Qty_tab( j + 1 ) THEN
7524               p_line_location_id := Llid_tab( j );
7525            END IF;
7526          END LOOP;
7527          IF v_quantity >= Qty_tab( i ) THEN
7528             p_line_location_id := Llid_tab( i );
7529          END IF;
7530       END IF;
7531     END IF;
7532    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7533      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_object_name,G_PKG_NAME||': '||lv_object_name||'end');
7534     END IF;
7535   EXCEPTION
7536     WHEN OTHERS THEN
7537     p_po_line_id      := null;
7538     p_line_location_id:= null;
7539     FND_MESSAGE.SET_NAME ('JA','JAI_EXCEPTION_OCCURED');
7540     FND_MESSAGE.SET_TOKEN ('JAI_PROCESS_MSG',lv_object_name ||'.Err:'||sqlerrm);
7541     app_exception.raise_exception;
7542   END locate_source_line;
7543 
7544 PROCEDURE cancel_po_shipment_line(pr_po_line_loc po_line_locations_all%ROWTYPE) IS
7545 
7546 v_quantity_cancelled    po_line_locations_all.QUANTITY_CANCELLED%TYPE;
7547 v_qty                   po_line_locations_all.QUANTITY%TYPE;
7548 v_quantity_received     po_line_locations_all.QUANTITY_RECEIVED%TYPE;
7549 v_po_line_id            po_line_locations_all.PO_LINE_ID%TYPE;
7550 v_line_loc_id           po_line_locations_all.LINE_LOCATION_ID%TYPE;
7551 v_price                 po_line_locations_all.price_override%TYPE;
7552 v_po_hdr_id             po_line_locations_all.po_header_id%TYPE;
7553 l_total_tax_amount      JAI_PO_LINE_LOCATIONS.TAX_AMOUNT%TYPE;
7554 CURSOR rec_get_tax_amount
7555 IS
7556 SELECT
7557       nvl(a.tax_amount,0) tax_amount,
7558       nvl(b.adhoc_flag, 'N') adhoc_flag
7559 FROM
7560       JAI_PO_TAXES a ,
7561       JAI_CMN_TAXES_ALL b
7562 WHERE
7563       a.tax_id                = b.tax_id          AND
7564       a.po_line_id              = v_po_line_id      AND
7565       a.po_header_id            = v_po_hdr_id       AND
7566       a.line_location_id        = v_line_loc_id FOR UPDATE OF a.tax_amount;
7567 
7568 CURSOR rec_calc_total_tax
7569 IS
7570 SELECT sum(tax_amount )
7571 FROM JAI_PO_TAXES
7572 WHERE
7573        po_line_id             = v_po_line_id      AND
7574        po_header_id           = v_po_hdr_id       AND
7575        line_location_id       = v_line_loc_id     AND
7576        tax_type               <> jai_constants.tax_type_tds ;
7577 
7578 l_api_name            CONSTANT VARCHAR2(200) := 'cancel_po_shipment_line';
7579 
7580   BEGIN
7581       v_quantity_cancelled  :=  pr_po_line_loc.QUANTITY_CANCELLED;
7582       v_qty                 :=  pr_po_line_loc.QUANTITY;
7583       v_quantity_received   :=  pr_po_line_loc.QUANTITY_RECEIVED;
7584       v_po_line_id          :=  pr_po_line_loc.PO_LINE_ID;
7585       v_line_loc_id         :=  pr_po_line_loc.LINE_LOCATION_ID;
7586       v_price               :=  pr_po_line_loc.price_override;
7587       v_po_hdr_id           :=  pr_po_line_loc.po_header_id;
7588 
7589     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7590      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': v_quantity_cancelled,'||v_quantity_cancelled||'v_line_loc_id:'||v_line_loc_id);
7591     END IF;
7592      IF nvl(v_quantity_cancelled,-9999) = nvl(v_qty,0) THEN
7593           /*
7594              Indicating that the entire line has been cancelled and no receipt has been made for ths line,
7595              then delete the line and associated taxes from JAI_PO_LINE_LOCATIONS
7596              and JAI_PO_TAXES and return .
7597           */
7598           IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7599            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': entire line been cancelled.');
7600           END IF;
7601           delete_po_taxes(pn_po_line_id=>v_po_line_id,pn_line_loc_id => v_line_loc_id);
7602 
7603           delete_jai_po_lines(pn_line_loc_id => v_line_loc_id);
7604      ELSIF  nvl(v_quantity_cancelled,-9999) < nvl(v_qty,0) THEN
7605           /*
7606             Indicating that a partial receipt has been made for the line and then the line has been cancelled.
7607             In such a case the cancelled quantity would be lesser than the quantity in table po_line_locations_all.
7608             Now in this scenario update the line and the associated apportioned taxes in the table JAI_PO_LINE_LOCATIONS
7609             and JAI_PO_TAXES
7610           */
7611 
7612           /*
7613              Update the JAI_PO_TAXES with the apportioned tax_amount
7614              The tax amounts are apportioned in a ratio of the (quantity_received\quantity)
7615              Only the taxes which have a adhoc flag set to 'N' can be apportioned.
7616              Taxes which have adhoc flag set to 'Y' would remain unaffected .
7617 
7618           */
7619           FOR cur_rec_get_tax_amount  IN rec_get_tax_amount
7620           LOOP
7621 
7622                UPDATE
7623                        JAI_PO_TAXES
7624                SET
7625                       tax_amount = (nvl(v_quantity_received,0) / nvl(v_qty,1)) * nvl(cur_rec_get_tax_amount.tax_amount,0)
7626                WHERE
7627                       CURRENT OF rec_get_tax_amount;
7628 
7629             -- END IF;
7630           END LOOP;
7631 
7632           /*
7633               The record in ja_in_po_line_location has to be updated with the total of all taxes from JAI_PO_TAXES
7634               excluding the TDS type of taxes. The total_amount should be calculated as (quantity_received * price_override) + total of tax amount
7635           */
7636 
7637           OPEN  rec_calc_total_tax ;
7638           FETCH rec_calc_total_tax INTO l_total_tax_amount;
7639           CLOSE rec_calc_total_tax;
7640 
7641           UPDATE
7642                  JAI_PO_LINE_LOCATIONS
7643           SET
7644                  tax_amount   =  l_total_tax_amount ,
7645                  total_amount =  nvl(v_quantity_received * v_price, 0) + nvl(l_total_tax_amount,0)
7646           WHERE
7647                  po_line_id         = v_po_line_id      AND
7648                  po_header_id       = v_po_hdr_id       AND
7649                  line_location_id   = v_line_loc_id     ;
7650 
7651 
7652        END IF;
7653   END cancel_po_shipment_line;
7654 
7655 /*--Added below procedures/functions for bug16288154  start*/
7656 --Move the logic from process_dist to below for trigger use only
7657  PROCEDURE process_distribution_line(
7658     pr_dist  PO_DISTRIBUTIONS_ALL%ROWTYPE
7659    ,pv_return_code    OUT NOCOPY VARCHAR2
7660    ,pv_return_message OUT NOCOPY VARCHAR2
7661  )IS
7662 CURSOR get_po_hdr(c_po_header_id number) IS
7663  SELECT type_lookup_code,Quotation_Class_Code,Ship_To_Location_Id,
7664         rate, rate_type, rate_date,currency_code,
7665         nvl(Vendor_id,0), nvl(vendor_Site_Id,0),style_id
7666    FROM po_headers_all
7667   WHERE po_header_id = c_po_header_id;
7668 
7669 CURSOR tax_override_flag_cur(c_supplier_id number, c_supp_site_id number) IS
7670 SELECT override_flag
7671 FROM   JAI_CMN_VENDOR_SITES
7672 WHERE  vendor_id = c_supplier_id
7673 AND    vendor_site_id = c_supp_site_id;
7674 
7675 Cursor c_get_tax_modified_flag(c_line_location_id NUMBER) IS
7676 SELECT tax_modified_flag
7677     FROM JAI_PO_LINE_LOCATIONS
7678   WHERE line_location_id = c_line_location_id;
7679 
7680 CURSOR c_loc_line_cnt(c_line_location_id NUMBER) IS
7681 SELECT count(line_location_id)
7682 FROM   JAI_PO_LINE_LOCATIONS
7683 WHERE  line_location_id=c_line_location_id;
7684 
7685 v_po_line_id                  PO_DISTRIBUTIONS_ALL.Po_Line_Id%TYPE ;
7686 v_po_hdr_id                   PO_DISTRIBUTIONS_ALL.Po_Header_Id%TYPE;
7687 v_cre_dt                      PO_DISTRIBUTIONS_ALL.Creation_Date%TYPE;
7688 v_cre_by                      PO_DISTRIBUTIONS_ALL.Created_By%TYPE;
7689 v_last_upd_dt                 PO_DISTRIBUTIONS_ALL.Last_Update_Date%TYPE ;
7690 v_last_upd_by                 PO_DISTRIBUTIONS_ALL.Last_Updated_By%TYPE;
7691 v_last_upd_login              PO_DISTRIBUTIONS_ALL.Last_Update_Login%TYPE;
7692 
7693 v_line_location_id            PO_DISTRIBUTIONS_ALL.line_location_id%TYPE;
7694 
7695 v_type_lookup_code            po_headers_all.type_lookup_code%TYPE;
7696 v_Quot_Class_Code             po_headers_all.Quotation_Class_Code%TYPE;
7697 v_Ship_Loc_Id                 po_headers_all.Ship_To_Location_Id%TYPE;
7698 v_vendor_id                   po_headers_all.Vendor_id%TYPE;
7699 v_vendor_site_id              po_headers_all.vendor_Site_Id%TYPE;
7700 v_curr                        po_headers_all.currency_code%TYPE;
7701 v_rate                        po_headers_all.rate%TYPE;
7702 v_rate_type                   po_headers_all.rate_type%TYPE;
7703 v_rate_date                   po_headers_all.rate_date%TYPE;
7704 
7705 v_style_id                    po_headers_all.style_id%TYPE;
7706 v_override_flag               JAI_CMN_VENDOR_SITES.override_flag%TYPE;
7707 v_tax_modified_flag           JAI_PO_LINE_LOCATIONS.tax_modified_flag%TYPE;
7708 v_count                       NUMBER;
7709 l_api_name        CONSTANT VARCHAR2(200) := 'process_distribution_line';
7710 BEGIN
7711 
7712     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7713       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
7714     END IF;
7715     pv_return_code := jai_constants.successful ;
7716      IF nvl(pr_dist.req_distribution_id,0) <> 0 THEN
7717       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7718        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Its copied from requisition by autocreate.');
7719       END IF;
7720 
7721 
7722       v_po_line_id                  := pr_dist.Po_Line_Id ;
7723       v_po_hdr_id                   := pr_dist.Po_Header_Id;
7724       v_cre_dt                      := pr_dist.Creation_Date;
7725       v_cre_by                      := pr_dist.Created_By;
7726       v_last_upd_dt                 := pr_dist.Last_Update_Date ;
7727       v_last_upd_by                 := pr_dist.Last_Updated_By;
7728       v_last_upd_login              := pr_dist.Last_Update_Login;
7729       v_rate                        := pr_dist.rate;
7730       v_line_location_id            := pr_dist.line_location_id;
7731       OPEN get_po_hdr(v_po_hdr_id);
7732       FETCH get_po_hdr into v_type_lookup_code,v_Quot_Class_Code,v_Ship_Loc_Id,
7733            v_rate, v_rate_type, v_rate_date,v_curr,v_vendor_id, v_vendor_site_id,
7734            v_style_id;
7735       CLOSE get_po_hdr;
7736 
7737       IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
7738           IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7739            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'style_id:'||to_char(v_style_id)||'validate_po_type is false,return');
7740            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
7741          END IF;
7742 
7743         return;
7744       END IF;
7745 
7746       OPEN  tax_override_flag_cur(v_vendor_id, v_vendor_site_id);
7747       FETCH tax_override_flag_cur into v_override_flag;
7748       CLOSE tax_override_flag_cur;
7749 
7750       OPEN c_get_tax_modified_flag(v_line_location_id) ;
7751       FETCH c_get_tax_modified_flag INTO v_tax_modified_flag ;
7752       CLOSE c_get_tax_modified_flag;
7753 
7754       IF nvl(pr_dist.po_release_id,0) = 0 THEN
7755         IF nvl(v_override_flag,'N') = 'N' and NVL(v_tax_modified_flag, 'N') = 'N' THEN
7756            delete_po_taxes(pn_po_line_id =>v_po_line_id, pn_line_loc_id => v_line_location_id);
7757            delete_jai_po_lines(pn_line_loc_id =>v_line_location_id);
7758          END IF ;
7759          IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7760            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'po_release_id is null, delete jai data before return.');
7761            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
7762          END IF;
7763          return;
7764       ELSE
7765          OPEN c_loc_line_cnt(v_line_location_id);
7766          FETCH c_loc_line_cnt INTO v_count;
7767          CLOSE c_loc_line_cnt;
7768          IF v_count > 0 THEN
7769            IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7770              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'po_release_id is not null and jai data exists, just return.');
7771              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
7772            END IF;
7773            RETURN;
7774          END IF;
7775       END IF;
7776       IF nvl(v_override_flag,'N') = 'Y' THEN
7777            jai_po_tax_pkg.copy_reqn_taxes(v_vendor_id     ,
7778                                       v_vendor_Site_Id    ,
7779                                       v_Po_Hdr_Id         ,
7780                                       v_Po_Line_Id        ,
7781                                       v_Line_Location_id  ,
7782                                       v_Type_Lookup_Code  ,
7783                                       v_Quot_Class_Code   ,
7784                                       v_Ship_Loc_Id       ,
7785                                       NULL,--v_Org_Id            ,
7786                                       v_Cre_Dt            ,
7787                                       v_Cre_By            ,
7788                                       v_Last_Upd_Dt       ,
7789                                       v_Last_Upd_By       ,
7790                                       v_Last_Upd_Login
7791                                        , v_rate
7792                                        , v_rate_type
7793                                        , v_rate_date
7794                                        , v_curr
7795              );
7796 
7797       END IF;
7798 
7799     END IF;
7800      IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7801      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name||'()-');
7802 
7803     END IF;
7804   EXCEPTION
7805    WHEN OTHERS THEN
7806 
7807      pv_return_code := 'Failure' ;
7808      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7809         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7810      END IF;
7811      app_exception.raise_exception;
7812 
7813 
7814  END process_distribution_line;
7815 
7816 /*Only used for trigger replacement and copy from process_po_shipment_line and remove the calls to process_dist and copy_req_to_po*/
7817 PROCEDURE process_po_line_loc(po_line_loc_rec PO_LINE_LOCATIONS_ALL%ROWTYPE
7818                              ,old_line_loc_rec PO_LINE_LOCATIONS_ALL%ROWTYPE
7819                             , pv_action varchar2
7820                             , pv_return_code out nocopy varchar2
7821                             , pv_return_message out nocopy varchar2 ) IS
7822 
7823 v_po_hdr_id                NUMBER;
7824 v_po_line_id               NUMBER;
7825 v_orig_ship_id             NUMBER;
7826 v_shipment_type            VARCHAR2(25);
7827 v_uom_measure              VARCHAR2(30);
7828 v_uom_code                 VARCHAR2(30);
7829 v_shipment_num             NUMBER;
7830 v_src_ship_id              NUMBER;
7831 v_from_line_loc_id         NUMBER;
7832 v_from_line_id             NUMBER;
7833 v_from_hdr_id              NUMBER;
7834 v_line_loc_id              NUMBER;
7835 v_price                    NUMBER;
7836 v_qty                      NUMBER;
7837 v_cre_dt                   DATE  ;
7838 v_cre_by                   NUMBER ;
7839 v_last_upd_dt              DATE  ;
7840 v_last_upd_by              NUMBER ;
7841 v_last_upd_login           NUMBER ;
7842 
7843 v_ship_to_org_id           NUMBER;
7844 v_from_type_lookup_code    VARCHAR2(25);
7845 v_type_lookup_code         VARCHAR2(25);
7846 v_vendor_id                NUMBER;
7847 v_vendor_site_id           NUMBER;
7848 v_currency                 VARCHAR2(3);
7849 v_ship_loc_id              NUMBER;
7850 v_quot_from_hdr_id         NUMBER;
7851 v_service_type_code        VARCHAR2(30);
7852 v_count                    NUMBER;
7853 
7854 v_item_id                  NUMBER;
7855 v_line_num                 PO_LINES_ALL.line_num%TYPE;
7856 v_style_id                 NUMBER;
7857 v_hook_value               VARCHAR2(10);
7858 v_src_loc_id               NUMBER;
7859 v_src_line_id              NUMBER;
7860 lv_retro_price_flag        VARCHAR2(1) := 'N';
7861 lv_process_flag            VARCHAR2(10);
7862 lv_process_message         VARCHAR2(2000);
7863 CURSOR c_po_hdr(cn_po_hdr_id NUMBER) IS
7864 SELECT *
7865 FROM PO_HEADERS_ALL
7866 WHERE po_header_id = cn_po_hdr_id;
7867 
7868 CURSOR fetch_uomcode_cur IS
7869 SELECT uom_code
7870 FROM   mtl_units_of_measure
7871 WHERE unit_of_measure = v_uom_measure;
7872 
7873 CURSOR c_po_line(cn_po_line_id NUMBER) IS
7874 SELECT *
7875 FROM PO_LINES_ALL
7876 WHERE po_line_id = cn_po_line_id;
7877 
7878 CURSOR Fetch_Count_Cur (cn_po_hdr_id NUMBER)IS
7879   SELECT COUNT(Line_Location_Id)
7880   FROM   JAI_PO_LINE_LOCATIONS
7881   WHERE  Po_Header_Id = cn_po_hdr_id ;
7882 
7883 CURSOR c_get_po_line_loc_details (p_line_location_id IN NUMBER) IS
7884 SELECT *
7885 FROM JAI_PO_LINE_LOCATIONS
7886 WHERE line_location_id = p_line_location_id;
7887 
7888 
7889 r_po_header                  PO_HEADERS_ALL%ROWTYPE;
7890 r_po_line                    PO_LINES_ALL%ROWTYPE;
7891 r_get_po_line_loc_details    JAI_PO_LINE_LOCATIONS%ROWTYPE;
7892 l_api_name                    CONSTANT VARCHAR2(30) := 'process_quotation_line_loc';
7893 BEGIN
7894   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7895      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
7896      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'pv_action:'||pv_action);
7897   END IF;
7898 
7899    v_hook_value := jai_cmn_hook_pkg.Ja_In_po_line_locations_all(
7900     po_line_loc_rec.LINE_LOCATION_ID                  ,
7901     po_line_loc_rec.PO_HEADER_ID                      ,
7902     po_line_loc_rec.PO_LINE_ID                        ,
7903     po_line_loc_rec.QUANTITY                                 ,
7904     po_line_loc_rec.QUANTITY_RECEIVED                        ,
7905     po_line_loc_rec.QUANTITY_ACCEPTED                        ,
7906     po_line_loc_rec.QUANTITY_REJECTED                        ,
7907     po_line_loc_rec.QUANTITY_BILLED                          ,
7908     po_line_loc_rec.QUANTITY_CANCELLED                       ,
7909     po_line_loc_rec.UNIT_MEAS_LOOKUP_CODE                    ,
7910     po_line_loc_rec.PO_RELEASE_ID                            ,
7911     po_line_loc_rec.SHIP_TO_LOCATION_ID                      ,
7912     po_line_loc_rec.SHIP_VIA_LOOKUP_CODE                     ,
7913     po_line_loc_rec.NEED_BY_DATE                             ,
7914     po_line_loc_rec.PROMISED_DATE                            ,
7915     po_line_loc_rec.LAST_ACCEPT_DATE                         ,
7916     po_line_loc_rec.PRICE_OVERRIDE                           ,
7917     po_line_loc_rec.ENCUMBERED_FLAG                          ,
7918     po_line_loc_rec.ENCUMBERED_DATE                          ,
7919     po_line_loc_rec.UNENCUMBERED_QUANTITY                    ,
7920     po_line_loc_rec.FOB_LOOKUP_CODE                          ,
7921     po_line_loc_rec.FREIGHT_TERMS_LOOKUP_CODE                ,
7922     po_line_loc_rec.TAXABLE_FLAG                             ,
7923     po_line_loc_rec.TAX_NAME                                 ,
7924     po_line_loc_rec.ESTIMATED_TAX_AMOUNT                     ,
7925     po_line_loc_rec.FROM_HEADER_ID                           ,
7926     po_line_loc_rec.FROM_LINE_ID                             ,
7927     po_line_loc_rec.FROM_LINE_LOCATION_ID                    ,
7928     po_line_loc_rec.START_DATE                               ,
7929     po_line_loc_rec.END_DATE                                 ,
7930     po_line_loc_rec.LEAD_TIME                                ,
7931     po_line_loc_rec.LEAD_TIME_UNIT                           ,
7932     po_line_loc_rec.PRICE_DISCOUNT                           ,
7933     po_line_loc_rec.TERMS_ID                                 ,
7934     po_line_loc_rec.APPROVED_FLAG                            ,
7935     po_line_loc_rec.APPROVED_DATE                            ,
7936     po_line_loc_rec.CLOSED_FLAG                              ,
7937     po_line_loc_rec.CANCEL_FLAG                              ,
7938     po_line_loc_rec.CANCELLED_BY                             ,
7939     po_line_loc_rec.CANCEL_DATE                              ,
7940     po_line_loc_rec.CANCEL_REASON                            ,
7941     po_line_loc_rec.FIRM_STATUS_LOOKUP_CODE                  ,
7942     po_line_loc_rec.FIRM_DATE                                ,
7943     po_line_loc_rec.ATTRIBUTE_CATEGORY                       ,
7944     po_line_loc_rec.ATTRIBUTE1                               ,
7945     po_line_loc_rec.ATTRIBUTE2                               ,
7946     po_line_loc_rec.ATTRIBUTE3                               ,
7947     po_line_loc_rec.ATTRIBUTE4                               ,
7948     po_line_loc_rec.ATTRIBUTE5                               ,
7949     po_line_loc_rec.ATTRIBUTE6                               ,
7950     po_line_loc_rec.ATTRIBUTE7                               ,
7951     po_line_loc_rec.ATTRIBUTE8                               ,
7952     po_line_loc_rec.ATTRIBUTE9                               ,
7953     po_line_loc_rec.ATTRIBUTE10                              ,
7954     po_line_loc_rec.UNIT_OF_MEASURE_CLASS                    ,
7955     po_line_loc_rec.ENCUMBER_NOW                             ,
7956     po_line_loc_rec.ATTRIBUTE11                              ,
7957     po_line_loc_rec.ATTRIBUTE12                              ,
7958     po_line_loc_rec.ATTRIBUTE13                              ,
7959     po_line_loc_rec.ATTRIBUTE14                              ,
7960     po_line_loc_rec.ATTRIBUTE15                              ,
7961     po_line_loc_rec.INSPECTION_REQUIRED_FLAG                 ,
7962     po_line_loc_rec.RECEIPT_REQUIRED_FLAG                    ,
7963     po_line_loc_rec.QTY_RCV_TOLERANCE                        ,
7964     po_line_loc_rec.QTY_RCV_EXCEPTION_CODE                   ,
7965     po_line_loc_rec.ENFORCE_SHIP_TO_LOCATION_CODE            ,
7966     po_line_loc_rec.ALLOW_SUBSTITUTE_RECEIPTS_FLAG           ,
7967     po_line_loc_rec.DAYS_EARLY_RECEIPT_ALLOWED               ,
7968     po_line_loc_rec.DAYS_LATE_RECEIPT_ALLOWED                ,
7969     po_line_loc_rec.RECEIPT_DAYS_EXCEPTION_CODE              ,
7970     po_line_loc_rec.INVOICE_CLOSE_TOLERANCE                  ,
7971     po_line_loc_rec.RECEIVE_CLOSE_TOLERANCE                  ,
7972     po_line_loc_rec.SHIP_TO_ORGANIZATION_ID                  ,
7973     po_line_loc_rec.SHIPMENT_NUM                             ,
7974     po_line_loc_rec.SOURCE_SHIPMENT_ID                       ,
7975     po_line_loc_rec.SHIPMENT_TYPE                      ,
7976     po_line_loc_rec.CLOSED_CODE                              ,
7977     po_line_loc_rec.REQUEST_ID                               ,
7978     po_line_loc_rec.PROGRAM_APPLICATION_ID                   ,
7979     po_line_loc_rec.PROGRAM_ID                               ,
7980     po_line_loc_rec.PROGRAM_UPDATE_DATE                      ,
7981     po_line_loc_rec.USSGL_TRANSACTION_CODE                   ,
7982     po_line_loc_rec.GOVERNMENT_CONTEXT                       ,
7983     po_line_loc_rec.RECEIVING_ROUTING_ID                     ,
7984     po_line_loc_rec.ACCRUE_ON_RECEIPT_FLAG                   ,
7985     po_line_loc_rec.CLOSED_REASON                            ,
7986     po_line_loc_rec.CLOSED_DATE                              ,
7987     po_line_loc_rec.CLOSED_BY                                ,
7988     po_line_loc_rec.ORG_ID                                   ,
7989     po_line_loc_rec.QUANTITY_SHIPPED                         ,
7990     po_line_loc_rec.COUNTRY_OF_ORIGIN_CODE                   ,
7991     po_line_loc_rec.TAX_USER_OVERRIDE_FLAG                   ,
7992     po_line_loc_rec.MATCH_OPTION                             ,
7993     po_line_loc_rec.TAX_CODE_ID                              ,
7994     po_line_loc_rec.CALCULATE_TAX_FLAG                       ,
7995     po_line_loc_rec.CHANGE_PROMISED_DATE_REASON
7996   );
7997 
7998   IF v_hook_value = 'FALSE' THEN
7999     RETURN;
8000   END IF;
8001   v_po_hdr_id           := po_line_loc_rec.PO_HEADER_ID;
8002   v_po_line_id          := po_line_loc_rec.PO_LINE_ID;
8003   v_orig_ship_id        := po_line_loc_rec.original_shipment_id;
8004   v_shipment_type       := po_line_loc_rec.SHIPMENT_TYPE;
8005   v_shipment_num        := po_line_loc_rec.Shipment_Num;
8006   v_src_ship_id         := po_line_loc_rec.Source_Shipment_Id;
8007   v_from_line_loc_id    := po_line_loc_rec.From_Line_Location_Id;
8008   v_from_line_id        := po_line_loc_rec.From_Line_Id;
8009   v_from_hdr_id         := po_line_loc_rec.From_Header_Id;
8010   v_line_loc_id         := po_line_loc_rec.Line_Location_Id;
8011   v_price               := po_line_loc_rec.Price_Override;
8012   v_qty                 := po_line_loc_rec.Quantity;
8013   v_cre_dt              := po_line_loc_rec.Creation_Date;
8014   v_cre_by              := po_line_loc_rec.Created_By;
8015   v_last_upd_dt         := po_line_loc_rec.Last_Update_Date ;
8016   v_last_upd_by         := po_line_loc_rec.Last_Updated_By;
8017   v_last_upd_login      := po_line_loc_rec.Last_Update_Login;
8018   v_uom_measure         := po_line_loc_rec.Unit_Meas_Lookup_Code;
8019   v_orig_ship_id        := po_line_loc_rec.original_shipment_id;
8020   v_ship_to_org_id      := po_line_loc_rec.SHIP_TO_ORGANIZATION_ID;
8021 
8022   OPEN c_po_hdr(v_po_hdr_id);
8023   FETCH c_po_hdr INTO r_po_header;
8024   CLOSE c_po_hdr;
8025 
8026   OPEN c_po_line(v_po_line_id);
8027   FETCH c_po_line INTO r_po_line;
8028   CLOSE c_po_line;
8029 
8030   v_from_type_lookup_code  := r_po_header.from_type_lookup_code;
8031   v_quot_from_hdr_id       := r_po_header.from_header_id;
8032   v_type_lookup_code       := r_po_header.type_lookup_code;
8033   v_Vendor_id              := r_po_header.vendor_id;
8034   v_Vendor_site_id         := r_po_header.vendor_site_id;
8035   v_currency               := r_po_header.currency_code;
8036   v_style_id               := r_po_header.style_id;
8037 
8038   v_item_id                := r_po_line.item_id;
8039   v_line_num               := r_po_line.line_num;
8040 
8041   IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
8042      return;
8043   END IF;
8044 
8045   OPEN fetch_uomcode_cur;
8046   FETCH fetch_uomcode_cur INTO v_uom_code;
8047   CLOSE fetch_uomcode_cur;
8048 
8049   IF pv_action = JAI_CONSTANTS.inserting THEN
8050 
8051     IF is_split_line(v_orig_ship_id, v_po_hdr_id, v_po_line_id) = TRUE THEN
8052         -- process for split line;
8053         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8054            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_orig_ship_id:'||v_orig_ship_id||'its split line.');
8055         END IF;
8056 
8057        jai_po_proc_pkg.process_split_line(v_orig_ship_id ,v_line_loc_id,v_qty,v_price,v_type_lookup_code);
8058 
8059     ELSE--It's not split line
8060       IF v_shipment_type NOT IN ( 'SCHEDULED' , 'BLANKET' ) THEN
8061         IF  (v_from_type_lookup_code IN ('QUOTATION','PLANNED','BLANKET','STANDARD') AND v_quot_from_hdr_id IS NOT NULL) THEN
8062         --Process for copy documents, from quotation to po
8063            OPEN Fetch_Count_Cur(v_quot_from_hdr_id);
8064            FETCH Fetch_Count_Cur INTO v_count;
8065            CLOSE Fetch_Count_Cur;
8066 
8067            IF v_count > 0 THEN
8068               IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8069                  FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Process for copy documents,copy_source_taxes');
8070               END IF;
8071                v_src_loc_id := get_line_loc_id(v_quot_from_hdr_id ,v_line_num ,v_item_id , v_shipment_num);
8072                v_src_line_id := get_line_id(v_quot_from_hdr_id ,v_line_num );
8073               jai_po_proc_pkg.copy_source_taxes(
8074                                                  p_type                    => 'S'
8075                                                 ,p_po_hdr_id               => v_po_hdr_id
8076                                                 ,p_po_line_id              => v_po_line_id
8077                                                 ,p_po_line_loc_id          => v_line_loc_id
8078                                                 ,p_line_num                => v_line_num
8079                                                 ,p_ship_num                => v_shipment_num
8080                                                 ,p_item_id                 => v_item_id
8081                                                 ,p_from_hdr_id             => v_quot_from_hdr_id
8082                                                 ,p_from_type_lookup_code   => v_from_type_lookup_code
8083                                                 ,p_source_line_id          => v_src_line_id
8084                                                 ,p_source_loc_id           => v_src_loc_id
8085                                                 ,p_cre_dt                  => v_cre_dt
8086                                                 ,p_cre_by                  => v_cre_by
8087                                                 ,p_last_upd_dt             => v_last_upd_dt
8088                                                 ,p_last_upd_by             => v_last_upd_by
8089                                                 ,p_last_upd_login          => v_last_upd_login
8090                                                        );
8091               RETURN;
8092            END IF;
8093         END IF;
8094 
8095         --If the following if is satisfied, it implies that PO has been linked by a quotation.
8096         IF v_type_lookup_code IN ( 'STANDARD', 'PLANNED') AND v_from_line_id IS NOT NULL THEN
8097             OPEN fetch_uomcode_cur;
8098             FETCH fetch_uomcode_cur INTO v_uom_code;
8099             CLOSE fetch_uomcode_cur;
8100             IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8101                FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Process for copy documents from quotation,copy_quot_taxes');
8102             END IF;
8103             jai_po_proc_pkg.copy_quot_taxes(
8104                                            p_line_loc_id        =>   v_line_loc_id
8105                                           ,p_po_hdr_id          =>   v_po_hdr_id
8106                                           ,p_po_line_id         =>   v_po_line_id
8107                                           ,p_item_id            =>   v_item_id--Added on 15-Jan-2013
8108                                           ,p_qty                =>   v_qty
8109                                           ,p_frm_hdr_id         =>   v_from_hdr_id
8110                                           ,p_frm_line_id        =>   v_from_line_id
8111                                           ,p_price              =>   v_price
8112                                           ,p_unit_code          =>   v_uom_code
8113                                           ,p_cre_dt             =>   v_cre_dt
8114                                           ,p_cre_by             =>   v_cre_by
8115                                           ,p_last_upd_dt        =>   v_last_upd_dt
8116                                           ,p_last_upd_by        =>   v_last_upd_by
8117                                           ,p_last_upd_login     =>   v_last_upd_login
8118                                           ,p_call_from          =>   'TRIGGER'
8119                                            );
8120             RETURN;
8121         END IF;
8122 
8123         IF v_type_lookup_code = 'QUOTATION'OR v_shipment_type IN ( 'SCHEDULED' , 'BLANKET' ) THEN
8124           JAI_AVLIST_VALIDATE_PKG.Check_AvList_Validation( pn_party_id          => v_vendor_id
8125                                                          , pn_party_site_id     => v_vendor_site_id
8126                                                          , pn_inventory_item_id => v_item_id
8127                                                          , pd_ordered_date      => trunc(sysdate)
8128                                                          , pv_party_type        => 'V'
8129                                                          , pn_pricing_list_id   => null
8130                                                          );
8131           jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec);
8132           RETURN;
8133         END IF;
8134 
8135         jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec);
8136       END IF;
8137      END IF;
8138 
8139   ELSE
8140     open c_get_po_line_loc_details(v_line_loc_id);
8141     fetch c_get_po_line_loc_details into r_get_po_line_loc_details;
8142     close c_get_po_line_loc_details;
8143 
8144 
8145     IF po_line_loc_rec.RETROACTIVE_DATE IS NOT NULL
8146      AND (r_get_po_line_loc_details.PRICE_OVERRIDE <> v_price)
8147     THEN
8148       lv_retro_price_flag := 'Y';
8149     END IF;
8150 
8151     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8152        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'old_price:'||r_get_po_line_loc_details.PRICE_OVERRIDE||'new_price:'||v_price||'lv_retro_price_flag is'||lv_retro_price_flag);
8153     END IF;
8154  --   IF (r_get_po_line_loc_details.quantity <> v_qty OR lv_retro_price_flag = 'Y') THEN
8155 
8156     IF lv_retro_price_flag = 'Y' THEN
8157 
8158         JAI_RETRO_PRC_PKG.Insert_Price_Changes( pr_old             => old_line_loc_rec
8159                                               , pr_new             => po_line_loc_rec
8160                                               , pv_process_flag    => lv_process_flag
8161                                               , pv_process_message => lv_process_message
8162                                               );
8163 
8164         IF lv_process_flag IN ('EE', 'UE')
8165         THEN
8166           FND_MESSAGE.SET_NAME ('JA','JAI_EXCEPTION_OCCURED');
8167           FND_MESSAGE.SET_TOKEN('JAI_PROCESS_MSG','JAI_PO_PROC_PKG.JAI_PO_SHIPMENT_LINE.Err:'||lv_process_message);
8168           app_exception.raise_exception;
8169         END IF;
8170       END IF;
8171 
8172       jai_po_proc_pkg.process_po_tax_wrapper(prec_po_location=>po_line_loc_rec,pv_retro_price_flag => lv_retro_price_flag);
8173    -- END IF;
8174 
8175 
8176   END IF;
8177  EXCEPTION
8178    WHEN OTHERS THEN
8179 
8180 
8181      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8182         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8183      END IF;
8184      app_exception.raise_exception;
8185 
8186 END process_po_line_loc;
8187 /*This procedure is only used for requisition line trigger, mainly copy from the logic
8188 in curor c_get_req_lines of copy_req_to_po
8189 --Added by Wenqiong on Feb 16 2013 Begin*/
8190 PROCEDURE copy_req_tax_to_po(prec_po_req_line IN PO_REQUISITION_LINES_ALL%ROWTYPE
8191                          ,pv_return_code    OUT NOCOPY VARCHAR2
8192                          ,pv_return_message OUT NOCOPY VARCHAR2
8193 ) IS
8194 	 v_requisition_line_id   NUMBER;
8195   v_sugg_vendor_name    VARCHAR2(360);
8196   v_dest_org_id               NUMBER;
8197   v_sugg_vendor_location  VARCHAR2(360);
8198   v_item_id       NUMBER;
8199   v_shipment_type     VARCHAR2(30);
8200   v_po_vendor_id      NUMBER;
8201   v_vendor_id     NUMBER;
8202   v_sugg_vendor_id    NUMBER;
8203   v_po_vendor_site_id   NUMBER;
8204   v_line_loc_id     NUMBER;
8205   v_cre_dt        DATE ;
8206   v_cre_by        NUMBER;
8207   v_last_upd_dt     DATE ;
8208   v_last_upd_by     NUMBER;
8209   v_last_upd_login    NUMBER  ;
8210   v_hdr_curr      VARCHAR2(30);
8211   v_uom_code      VARCHAR2(100);
8212   v_price       NUMBER ;
8213   v_qty       NUMBER   ;
8214   v_curr        VARCHAR2(30) ;
8215   v_req_conv_rate     NUMBER  ;
8216   v_req_conv_type     VARCHAR2(30) ;
8217   v_req_conv_date     DATE  ;
8218   v_t_curr        VARCHAR2(30);
8219   v_po_curr       VARCHAR2(30);
8220   v_po_conv_rate      NUMBER;
8221   v_po_conv_type      VARCHAR2(30);
8222   v_po_conv_date      DATE;
8223   v_set_of_book_id    NUMBER;
8224   conv_rate       NUMBER;
8225   v_curr_conv_factor          NUMBER;
8226   DUMMY                       NUMBER;
8227   v_currency_code   GL_SETS_OF_BOOKS.currency_code%TYPE;
8228 
8229   -- For Blanket Release
8230   v_src_ship_id               NUMBER;
8231   v_po_rel_id                 NUMBER;
8232 
8233   -- For Cursor Fetch tax cur
8234   v_po_hdr_id     NUMBER;
8235   v_po_line_id      NUMBER;
8236   v_line_focus_id     NUMBER;
8237   Line_tot        NUMBER;
8238   v_tax_amt       NUMBER;
8239   v_total_amt       NUMBER;
8240   v_tax_line_no     NUMBER;
8241   v_prec1       NUMBER;
8242   v_prec2       NUMBER;
8243   v_prec3         NUMBER;
8244   v_prec4       NUMBER;
8245   v_prec5         NUMBER;
8246 
8247   v_prec6       NUMBER;
8248   v_prec7       NUMBER;
8249   v_prec8         NUMBER;
8250   v_prec9       NUMBER;
8251   v_prec10         NUMBER;
8252 
8253 
8254   v_taxid         NUMBER;
8255   v_tax_rate      NUMBER;
8256   v_qty_rate      NUMBER;
8257   v_uom       VARCHAR2(15);
8258   v_tax_type      VARCHAR2(30);
8259   v_mod_flag      VARCHAR2(1);
8260   v_vendor2_id      NUMBER;
8261   v_mod_cr        NUMBER;
8262   v_vendor1_id      NUMBER;
8263   v_tax_target_amt    NUMBER;
8264   v_tax_amt1      NUMBER;
8265   v_assessable_value    NUMBER;
8266   v_vat_assess_value     NUMBER;
8267   v_loc_count     NUMBER;
8268 
8269   v_tax_category_id     JAI_PO_TAXES.tax_category_id%TYPE;
8270   v_tax_category_id_holder  JAI_PO_LINE_LOCATIONS.tax_category_id%TYPE;
8271   v_style_id            po_headers_all.style_id%TYPE;
8272 
8273 ------------------------------>
8274 --  Check the vendor btn the vendor present in tax lines and that of suggested vendor in requisition lines
8275 --    If they are same or any one is null then insert po vendor else keep the vendor in tact.
8276 --    Check if the document to be created is a Blanket Release / Standard Purchase Order.
8277 --    Pick up Line Location Details as well.
8278 
8279   CURSOR c_inventory_org_id(p_ship_to_location_id IN NUMBER) IS
8280     SELECT Inventory_Organization_Id
8281     FROM Hr_Locations
8282     WHERE Location_Id = p_ship_to_location_id;
8283 
8284   v_inventory_org_id  HR_LOCATIONS.Inventory_Organization_Id%TYPE;
8285   v_line_loc_cnt NUMBER;
8286   v_ship_to_organization_id NUMBER;
8287   v_ship_to_location_id NUMBER;
8288   v_price_override    PO_LINE_LOCATIONS_ALL.price_override%TYPE;
8289   v_unit_meas_lookup_code   PO_LINE_LOCATIONS_ALL.unit_meas_lookup_code%TYPE;
8290   v_line_uom          PO_LINES_ALL.unit_meas_lookup_code%TYPE;
8291   v_type_lookup_code PO_HEADERS_ALL.type_lookup_code%TYPE;
8292   v_quot_class_code PO_HEADERS_ALL.quotation_class_code%TYPE;
8293 
8294 
8295   CURSOR Fetch_Unit_Measure_Cur IS
8296     SELECT Unit_Meas_Lookup_Code
8297     FROM Po_Lines_All
8298     WHERE Po_Line_Id = v_po_line_id;
8299 
8300   CURSOR Fetch_UomCode_Cur(p_uom IN VARCHAR2) IS
8301     SELECT Uom_Code
8302     FROM Mtl_Units_Of_Measure
8303     WHERE Unit_Of_Measure = p_uom;
8304 
8305   -- Pick up vendor id for the corresponding Po_Header_Id
8306   CURSOR Fetch_Po_Vendor_Id_Cur( hdr_id IN NUMBER ) IS
8307     SELECT Vendor_Id, Vendor_SIte_Id, Currency_Code, Rate_Date, Rate_Type, Rate
8308       , type_lookup_code, quotation_class_code,
8309       style_id
8310     FROM Po_Headers_All
8311     WHERE Po_Header_Id = hdr_id;
8312 
8313 
8314 
8315   CURSOR Fetch_Taxes_Cur( rqlineid IN NUMBER ) IS
8316     SELECT Tax_Line_no,
8317            Precedence_1, Precedence_2, Precedence_3, Precedence_4, Precedence_5,
8318 	   Precedence_6, Precedence_7, Precedence_8, Precedence_9, Precedence_10,
8319       Tax_Id, Currency, Tax_Rate, Qty_Rate, UOM, Tax_Amount, Tax_Type, Modvat_Flag,
8320       Vendor_Id, Tax_Target_Amount,
8321       tax_category_id
8322     FROM JAI_PO_REQ_LINE_TAXES
8323     WHERE requisition_line_id = rqlineid
8324     ORDER BY Tax_Line_No;
8325   rec_tax   Fetch_Taxes_Cur%ROWTYPE;
8326   CURSOR Fetch_Mod_Cr_Cur( taxid IN NUMBER ) IS
8327     SELECT Tax_Type, Mod_Cr_Percentage, Vendor_Id
8328       , adhoc_flag
8329     FROM   JAI_CMN_TAXES_ALL
8330     WHERE  Tax_Id = taxid;
8331 
8332   CURSOR Fetch_Vendor_Id IS
8333     SELECT Vendor_Id
8334     FROM   Po_Vendors
8335     WHERE  Vendor_Name = v_sugg_vendor_name;
8336 
8337   CURSOR Tot_Amt_Cur IS
8338     SELECT SUM( NVL( Tax_Amount, 0 ) )
8339     FROM JAI_PO_TAXES
8340     WHERE line_location_id = v_line_loc_id
8341     AND Tax_Type <> jai_constants.tax_type_tds ; /* 'TDS';*/
8342 
8343 
8344   CURSOR Chk_localization_entry(c_req_line_id NUMBER) IS
8345     SELECT COUNT(REQUISITION_LINE_ID)
8346     FROM JAI_PO_REQ_LINES
8347     WHERE REQUISITION_LINE_ID = c_req_line_id;
8348 
8349   CURSOR tax_override_flag_cur(c_vendor_id NUMBER, c_vendor_site_id NUMBER) IS
8350     SELECT override_flag
8351     FROM JAI_CMN_VENDOR_SITES
8352     WHERE vendor_id = c_vendor_id
8353     AND vendor_site_id = c_vendor_site_id;
8354 
8355   v_override_flag VARCHAR2(1);
8356 
8357   CURSOR c_get_tax_category_id(p_requisition_line_id IN NUMBER) IS
8358     SELECT tax_category_id
8359     FROM JAI_PO_REQ_LINES
8360     WHERE requisition_line_id = p_requisition_line_id;
8361 
8362 
8363 
8364   v_quantity NUMBER;
8365 
8366 
8367   v_tax_amount NUMBER;
8368   v_adhoc_flag CHAR(1);
8369 
8370   v_curr_conv_rate NUMBER;
8371 
8372   v_debug BOOLEAN;
8373   v_utl_file_name VARCHAR2(50);
8374   v_utl_location VARCHAR2(512);
8375   v_myfilehandle UTL_FILE.FILE_TYPE;
8376 
8377 
8378   lv_tax_cnt NUMBER := 0;
8379   lv_tax_from_reqn_flag varchar2(1) := 'N';
8380 
8381   l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
8382   v_requisition_header_id  NUMBER;
8383   v_reqn_tax NUMBER;
8384 
8385     CURSOR Fetch_Focus_Id_Cur_for_req( line_id IN NUMBER , line_loc_id in Number ) IS
8386     SELECT Line_Focus_Id
8387     FROM   JAI_PO_LINE_LOCATIONS
8388     WHERE  Po_Line_Id = line_id
8389     AND Line_Location_Id = line_loc_id;
8390 
8391   CURSOR c_get_line_loc_cnt IS
8392   select count(1)  from JAI_PO_LINE_LOCATIONS
8393   where line_location_id = v_line_loc_id;
8394 
8395      Cursor fetch_Tax_cnt( cp_line_loc_id in number ) is
8396      select count(1)
8397        from JAI_PO_TAXES
8398       where line_location_id = cp_line_loc_id;
8399 
8400    CURSOR Fetch_Hdr_Curr_Cur IS
8401    SELECT NVL( Currency_Code, '$' )
8402      FROM Po_Requisition_Headers_V
8403     WHERE Requisition_Header_Id = prec_po_req_line.REQUISITION_HEADER_ID;
8404 
8405     Cursor c_get_tax_modified_flag IS
8406     SELECT tax_modified_flag
8407         FROM JAI_PO_LINE_LOCATIONS
8408       WHERE line_location_id = prec_po_req_line.line_location_id ;
8409   lv_tax_modified_flag VARCHAR2(1) ;
8410 
8411   CURSOR c_get_po_line_loc IS
8412   SELECT * FROM
8413   Po_Line_Locations_All
8414   WHERE LINE_LOCATION_ID = prec_po_req_line.Line_Location_Id;
8415 
8416   prec_po_location       Po_Line_Locations_All%ROWTYPE;
8417   tax_cnt   NUMBER;
8418   l_api_name            CONSTANT VARCHAR2(200) := 'copy_req_tax_to_po';
8419   BEGIN
8420 
8421     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8422      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'()+');
8423     END IF;
8424    pv_return_code := jai_constants.successful ;
8425    OPEN c_get_po_line_loc;
8426    FETCH c_get_po_line_loc INTO prec_po_location;
8427    CLOSE c_get_po_line_loc;
8428    v_po_hdr_id                := prec_po_location.Po_Header_Id  ;
8429    v_po_line_id               := prec_po_location.Po_Line_Id    ;
8430    Line_Tot                   := prec_po_location.Price_Override * prec_po_location.Quantity;
8431    v_shipment_type            := prec_po_location.Shipment_Type       ;
8432    v_po_rel_id                := prec_po_location.Po_Release_Id       ;
8433    v_src_ship_id              := prec_po_location.Source_Shipment_Id  ;
8434    v_quantity                 := prec_po_location.quantity            ;
8435    v_ship_to_organization_id  := prec_po_location.ship_to_organization_id;
8436    v_ship_to_location_id      := prec_po_location.ship_to_location_id    ;
8437    v_price_override           := prec_po_location.price_override         ;
8438    v_unit_meas_lookup_code    := prec_po_location.Unit_Meas_Lookup_Code  ;
8439    v_line_loc_id              := prec_po_location.LINE_LOCATION_ID  ;
8440 
8441     OPEN  Fetch_Po_Vendor_Id_Cur( v_po_hdr_id );
8442     FETCH Fetch_Po_Vendor_Id_Cur INTO v_po_vendor_id, v_po_vendor_site_id, v_po_curr,
8443       v_po_conv_date, v_po_conv_type, v_po_conv_rate
8444       , v_type_lookup_code, v_quot_class_code,
8445       v_style_id;
8446     CLOSE Fetch_Po_Vendor_Id_Cur;
8447 
8448 
8449    IF jai_cmn_utils_pkg.validate_po_type(p_style_id => v_style_id) = FALSE THEN
8450     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8451       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'style_id:'||to_char(v_style_id)||'validate_po_type is false,return');
8452       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME||': '||l_api_name);
8453     END IF;
8454     return;
8455    END IF;
8456 
8457    OPEN Fetch_Hdr_Curr_Cur;
8458     FETCH Fetch_Hdr_Curr_Cur INTO v_hdr_curr;
8459    CLOSE Fetch_Hdr_Curr_Cur;
8460 
8461    v_curr     := NVL( v_curr, v_hdr_curr);
8462    OPEN  Fetch_Unit_Measure_Cur;
8463    FETCH Fetch_Unit_Measure_Cur INTO v_line_uom;
8464    CLOSE Fetch_Unit_Measure_Cur;
8465 
8466    OPEN  Fetch_UomCode_Cur(v_line_uom);
8467    FETCH Fetch_UomCode_Cur INTO v_uom_code;
8468    CLOSE Fetch_UomCode_Cur;
8469 
8470    OPEN  tax_override_flag_cur(v_po_vendor_id, v_po_vendor_site_id);
8471    FETCH tax_override_flag_cur INTO v_override_flag;
8472    CLOSE tax_override_flag_cur;
8473 
8474 
8475 
8476   IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8477    FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'prec_po_location.line_location_id:'||to_char(prec_po_location.line_location_id));
8478    FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'requisition_line_id:'||to_char(prec_po_req_line.requisition_line_id));
8479   END IF;
8480 
8481 
8482     v_requisition_line_id           := prec_po_req_line.Requisition_Line_Id;
8483     v_sugg_vendor_name              := prec_po_req_line.Suggested_Vendor_Name;
8484     v_dest_org_id                   := prec_po_req_line.Destination_Organization_Id;
8485     v_sugg_vendor_location          := prec_po_req_line.Suggested_Vendor_Location;
8486     v_item_id                       := prec_po_req_line.Item_Id;
8487     v_line_loc_id                   := prec_po_req_line.Line_Location_Id;
8488     v_cre_dt                        := prec_po_req_line.Creation_Date;
8489     v_cre_by                        := prec_po_req_line.Created_By;
8490     v_last_upd_dt                   := prec_po_req_line.Last_Update_Date ;
8491     v_last_upd_by                   := prec_po_req_line.Last_Updated_By;
8492     v_last_upd_login                := prec_po_req_line.Last_Update_Login;
8493     v_price                         := prec_po_req_line.Unit_Price;
8494     v_qty                           := prec_po_req_line.Quantity;
8495     v_curr                          := prec_po_req_line.Currency_Code;
8496     v_req_conv_rate                 := prec_po_req_line.Rate;
8497     v_req_conv_type                 := prec_po_req_line.Rate_Type;
8498     v_req_conv_date                 := prec_po_req_line.Rate_Date;
8499     DUMMY                           := 1;
8500     v_loc_count                     := 0;
8501     v_requisition_header_id         := prec_po_req_line.requisition_header_id;
8502 
8503     --Modified by Junjian for bug#14729941 on 10-Oct-2012 begin
8504     v_curr_conv_factor  := get_currency_conv_rate (v_inv_org_id => v_dest_org_id,
8505                                                     v_currency   => v_po_curr/*v_curr*/,
8506                                                     v_rate_date  => v_po_conv_date/*v_req_conv_date*/,
8507                                                     v_rate_type  => v_po_conv_type/*v_req_conv_type*/,
8508                                                     v_rate       => v_po_conv_rate/*v_req_conv_rate*/);
8509 	v_price_override := v_price_override * nvl(v_curr_conv_factor,1);
8510     --Modified by Junjian for bug#14729941 on 10-Oct-2012 end
8511    OPEN Chk_localization_entry(v_requisition_line_id);
8512    FETCH Chk_localization_entry INTO v_loc_count;
8513    CLOSE Chk_localization_entry;
8514 
8515    IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8516      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'override_flag:'||NVL(v_override_flag,'N')||'v_shipment_type:'||v_shipment_type);
8517    END IF;
8518 
8519    IF NVL(v_override_flag,'N') = 'Y' AND v_shipment_type <> 'BLANKET' THEN
8520       IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8521        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||': override_flag is Y and shipment type <> BLANKET, return');
8522       END IF;
8523      RETURN;
8524    END IF;
8525 
8526     IF v_shipment_type <> 'BLANKET' THEN
8527       IF NVL(v_loc_count,0) = 0 THEN
8528         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8529           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||':shipment type <> BLANKET and no data in JAI req table, return');
8530         END IF;
8531         RETURN;
8532       END IF;
8533     ELSE
8534       RETURN;
8535     END IF;
8536 
8537 
8538    OPEN  Fetch_Vendor_Id;
8539    FETCH Fetch_Vendor_Id INTO v_sugg_vendor_id;
8540    CLOSE Fetch_Vendor_Id;
8541 
8542    v_sugg_vendor_id := nvl(v_sugg_vendor_id,-999);
8543 
8544    OPEN c_get_line_loc_cnt;
8545    FETCH c_get_line_loc_cnt INTO v_line_loc_cnt;
8546    CLOSE c_get_line_loc_cnt;
8547   -- this means multiple requisition lines are merged into a single PO Shipment line
8548   -- so the taxes should get defaulted from SET UP's rather than carrying the reqn taxes to PO Shipment
8549 
8550    IF v_line_loc_cnt > 0 THEN
8551 
8552         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8553           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||':v_line_loc_cnt > 0');
8554         END IF;
8555 
8556 
8557     OPEN c_get_tax_modified_flag ;
8558     FETCH c_get_tax_modified_flag INTO lv_tax_modified_flag ;
8559     CLOSE c_get_tax_modified_flag;
8560 
8561 
8562     IF NVL(lv_tax_modified_flag,'N') = 'N' THEN
8563 
8564         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8565           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||':lv_tax_modified_flag = N');
8566         END IF;
8567 
8568        delete_jai_po_lines(pn_line_loc_id => v_line_loc_id);
8569 
8570 
8571        OPEN  c_inventory_org_id( v_ship_to_location_id );
8572        FETCH c_inventory_org_id INTO v_inventory_org_id;
8573        CLOSE c_inventory_org_id;
8574 
8575        insert_jai_line_locs(
8576                              v_line_loc_id     => v_line_loc_id
8577                             ,v_po_hdr_id       => v_po_hdr_id
8578                             ,v_po_line_id      => v_po_line_id
8579                             ,v_cre_dt          => v_cre_dt
8580                             ,v_cre_by          => v_cre_by
8581                             ,v_last_upd_dt     => v_last_upd_dt
8582                             ,v_last_upd_by     => v_last_upd_by
8583                             ,v_last_upd_login  => v_last_upd_login
8584                             ,flag              => 'I'
8585                             ,v_item_id         => v_item_id
8586                             ,v_vendor_id       => v_po_vendor_id
8587                             ,v_vendor_site_id  => v_po_vendor_site_id
8588                             ,v_qty             => v_quantity
8589                             ,v_price_override  => v_price_override
8590                             ,v_currency        => v_po_curr
8591                             ,v_line_focus_id   => v_line_focus_id
8592                             );
8593 
8594 
8595       /*calculate av and VAT av*/
8596        get_assessable_value(
8597                            pn_vendor_id        =>  v_po_vendor_id
8598                           ,pn_vendor_site_id   =>  v_po_vendor_site_id
8599                           ,pn_item_id          =>  v_item_id
8600                           ,pn_price            =>  v_price_override
8601                           ,pn_qty              =>  v_quantity
8602                           ,pv_uom_code         =>  v_uom_code
8603                           ,pn_po_hdr_id        =>  v_po_hdr_id
8604                           ,pv_currency         =>  v_po_curr
8605                           ,pv_action           =>  JAI_CONSTANTS.inserting
8606                           ,pn_conv_rate        =>  v_curr_conv_factor
8607                           ,pn_assessable_value =>  v_assessable_value
8608                           ,pn_vat_assess_value =>  v_vat_assess_value
8609                           );
8610 
8611        process_po_taxes(
8612                       v_type_lookup_code      =>  v_Type_Lookup_Code
8613                      ,v_quot_class_code       =>  v_Quot_Class_Code
8614                      ,v_vendor_id             =>  v_po_vendor_id
8615                      ,v_vendor_site_id        =>  v_po_vendor_site_id
8616                      ,v_currency              =>  v_po_curr
8617                      ,v_org_id                =>  v_inventory_org_id
8618                      ,v_item_id               =>  v_item_id
8619                      ,v_uom_code              =>  v_uom_code
8620                      ,v_line_loc_id           =>  v_line_loc_id
8621                      ,v_po_hdr_id             =>  v_po_hdr_id
8622                      ,v_po_line_id            =>  v_po_line_id
8623                      ,v_frm_po_line_id        =>   NULL
8624                      ,v_frm_line_loc_id       =>   NULL
8625                      ,v_price                 =>  v_price_override
8626                      ,v_qty                   =>  v_quantity
8627                      ,v_cre_dt                =>  v_cre_dt
8628                      ,v_cre_by                =>  v_cre_by
8629                      ,v_last_upd_dt           =>  v_last_upd_dt
8630                      ,v_last_upd_by           =>  v_last_upd_by
8631                      ,v_last_upd_login        =>  v_last_upd_login
8632                      ,flag                    => 'I'
8633                      ,pn_conv_rate            =>  v_curr_conv_factor
8634                      ,pn_assessable_value     =>  v_assessable_value
8635                      ,pn_vat_assess_value     =>  v_vat_assess_value
8636                 );
8637 
8638       END IF ;
8639         IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8640           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,G_PKG_NAME||'v_line_loc_cnt >0 and after default for tax_modified_flag = N, and return.');
8641         END IF;
8642 
8643     return;
8644   END IF;
8645 
8646 
8647   /*
8648   ||Po lines does not exists .
8649   ||Insert the line locations from requisition into po using the procedure below
8650   */
8651 
8652 
8653        insert_jai_line_locs(
8654                              v_line_loc_id     => v_line_loc_id
8655                             ,v_po_hdr_id       => v_po_hdr_id
8656                             ,v_po_line_id      => v_po_line_id
8657                             ,v_cre_dt          => v_cre_dt
8658                             ,v_cre_by          => v_cre_by
8659                             ,v_last_upd_dt     => v_last_upd_dt
8660                             ,v_last_upd_by     => v_last_upd_by
8661                             ,v_last_upd_login  => v_last_upd_login
8662                             ,flag              => 'I'
8663                             ,v_item_id         => v_item_id
8664                             ,v_vendor_id       => v_po_vendor_id
8665                             ,v_vendor_site_id  => v_po_vendor_site_id
8666                             ,v_qty             => v_quantity
8667                             ,v_price_override  => v_price_override
8668                             ,v_currency        => v_po_curr
8669                             ,v_line_focus_id   => v_line_focus_id
8670                             );
8671 
8672 
8673    /*
8674      Fetch the line_focus_id for the current line and current
8675      line location id  */
8676      SELECT COUNT(1) INTO tax_cnt FROM JAI_PO_TAXES WHERE
8677      Po_Line_Id = v_po_line_id
8678        AND Line_Location_Id = v_line_loc_id;
8679     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8680       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'before insert taxes, tax_cnt  is  '||tax_cnt);
8681     END IF;
8682 
8683     v_reqn_tax := 0;
8684     OPEN Fetch_Taxes_Cur( v_requisition_line_id );
8685     LOOP
8686     FETCH Fetch_Taxes_Cur INTO rec_tax;
8687 
8688     EXIT WHEN Fetch_Taxes_Cur%NOTFOUND;
8689 	  v_reqn_tax := v_reqn_tax + 1;
8690     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8691       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'in fetch_tax_cur loop:v_reqn_tax, '||v_reqn_tax);
8692     END IF;
8693 
8694     OPEN Fetch_Mod_Cr_Cur( rec_tax.tax_id );
8695     FETCH Fetch_Mod_Cr_Cur INTO v_tax_type, v_mod_cr, v_vendor1_id
8696       , v_adhoc_flag;
8697     CLOSE Fetch_Mod_Cr_Cur;
8698 
8699     v_currency_code := get_func_currency(v_inventory_org_id);
8700 	  v_t_curr := rec_tax.Currency; --Added by Junjian for bug#14729941 on 10-Oct-2012
8701     v_tax_amt := rec_tax.Tax_Amount;
8702      IF nvl(v_adhoc_flag, 'N') = 'Y' THEN
8703       IF v_t_curr <> v_po_curr THEN
8704 
8705         -- as tax_currency is same as functional currency and v_curr_conv_rate contains conversion from v_po_curr to func_curr
8706         IF v_t_curr = v_currency_code THEN
8707           v_curr_conv_rate := jai_cmn_utils_pkg.currency_conversion( v_set_of_book_id , v_po_curr , v_po_conv_date , v_po_conv_type, v_po_conv_rate );
8708 
8709           v_tax_amount := v_tax_amt / v_curr_conv_rate;
8710 
8711         ELSE  -- now tax_currency is not equal to functional currency, so division is fine
8712           v_curr_conv_rate := jai_cmn_utils_pkg.currency_conversion( v_set_of_book_id , v_t_curr , v_po_conv_date , v_po_conv_type, v_po_conv_rate );
8713           v_tax_amount := v_tax_amt * v_curr_conv_rate;
8714 
8715         END IF;
8716 
8717         v_curr_conv_rate := null;
8718       ELSE
8719         v_tax_amount := v_tax_amt;
8720       END IF;
8721     ELSE
8722       v_tax_amount := 0;
8723     END IF;
8724 
8725 
8726       IF v_mod_cr IS NOT NULL AND v_mod_cr > 0 THEN
8727         v_mod_flag := 'Y';
8728       ELSE
8729         v_mod_flag := 'N';
8730       END IF;
8731 
8732       IF upper(v_tax_type) IN ( 'CUSTOMS', 'CVD',
8733                               jai_constants.tax_type_add_cvd ,
8734                               jai_constants.tax_type_customs_edu_Cess,JAI_CONSTANTS.TAX_TYPE_SH_CUSTOMS_EDU_CESS,
8735                               jai_constants.tax_type_cvd_edu_cess,JAI_CONSTANTS.TAX_TYPE_SH_CVD_EDU_CESS)
8736     THEN
8737       v_vendor_id := NULL;
8738     ELSIF v_tax_type = 'TDS' THEN
8739       v_vendor_id := v_vendor1_id;
8740     ELSE
8741       IF NVL( v_vendor2_id, -999 ) = v_sugg_vendor_id THEN
8742         v_vendor_id := v_po_vendor_id;
8743       ELSE
8744         v_vendor_id := v_vendor2_id;
8745       END IF;
8746     END IF;
8747 
8748       insert_po_taxes
8749       ( 'STANDARD', NULL,
8750         v_line_focus_id, v_line_loc_id,
8751         rec_tax.Tax_Line_no, v_po_line_id,  v_po_hdr_id,
8752         rec_tax.precedence_1, rec_tax.precedence_2, rec_tax.precedence_3,
8753         rec_tax.precedence_4, rec_tax.precedence_5,
8754         rec_tax.precedence_6, rec_tax.precedence_7, rec_tax.precedence_8,
8755         rec_tax.precedence_9, rec_tax.precedence_10,
8756         rec_tax.tax_id, NULL, 0, /*rec_tax.currency*/v_po_curr,--Modified by Junjian for bug#14729941 on 10-Oct-2012
8757         rec_tax.tax_rate, rec_tax.qty_rate, rec_tax.uom,
8758         v_tax_amount , rec_tax.tax_type,  rec_tax.Modvat_Flag,
8759         rec_tax.vendor_id, rec_tax.Tax_Target_Amount ,
8760         v_cre_dt,  v_cre_by, v_last_upd_dt,
8761         v_last_upd_by, v_last_upd_login,
8762         rec_tax.tax_category_id
8763        );
8764 
8765 
8766 
8767       v_tax_amt := 0;
8768       v_tax_amount := 0;
8769       v_adhoc_flag := null;
8770 
8771 
8772 
8773     END LOOP;
8774     CLOSE Fetch_Taxes_Cur;
8775 
8776 
8777      SELECT COUNT(1) INTO tax_cnt FROM JAI_PO_TAXES WHERE
8778      Po_Line_Id = v_po_line_id
8779        AND Line_Location_Id = v_line_loc_id;
8780     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8781       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'after insert taxes, tax_cnt is  '||tax_cnt);
8782     END IF;
8783     if v_reqn_tax > 0 then
8784 
8785       /*calculate av and VAT av*/
8786        get_assessable_value(
8787                            pn_vendor_id        =>  v_po_vendor_id
8788                           ,pn_vendor_site_id   =>  v_po_vendor_site_id
8789                           ,pn_item_id          =>  v_item_id
8790                           ,pn_price            =>  v_price
8791                           ,pn_qty              =>  v_quantity
8792                           ,pv_uom_code         =>  v_uom_code
8793                           ,pn_po_hdr_id        =>  v_po_hdr_id
8794                           ,pv_currency         =>  v_po_curr
8795                           ,pv_action           =>  JAI_CONSTANTS.inserting
8796                           ,pn_conv_rate        =>  v_curr_conv_factor
8797                           ,pn_assessable_value =>  v_assessable_value
8798                           ,pn_vat_assess_value =>  v_vat_assess_value
8799                           );
8800     IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8801       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'before calculate_tax ');
8802       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'v_po_hdr_id:'||v_po_hdr_id||'v_po_line_id:'
8803                                                     ||v_po_line_id||'v_line_loc_id'||v_line_loc_id || 'v_quantity:'||v_quantity||
8804                                                        'line_tot:'||line_tot||'v_uom_code'||v_uom_code||'v_assessable_value:'||v_assessable_value
8805                                                        ||'v_vat_assess_value'||v_vat_assess_value||'v_curr_conv_factor'||v_curr_conv_factor);
8806 
8807     END IF;
8808     v_tax_amt := NULL;
8809 
8810     jai_cmn_utils_pkg.write_fnd_log_msg('B13440775','14.  jai_po_tax_pkg.calculate_tax. ' );
8811 
8812    jai_po_tax_pkg.calculate_tax( 'STANDARDPO',
8813                    v_po_hdr_id ,
8814                    v_po_line_id,
8815                    v_line_loc_id,
8816                    v_quantity,
8817                    line_tot,
8818                    v_uom_code,
8819                    line_tot,
8820                    v_assessable_value,
8821                    v_vat_assess_value,
8822                    v_item_id,
8823                    1/v_curr_conv_factor );
8824 
8825    OPEN  Tot_Amt_Cur;
8826     FETCH Tot_Amt_Cur INTO v_tax_amt;
8827     CLOSE Tot_Amt_Cur;
8828 
8829     OPEN  c_get_tax_category_id(prec_po_req_line.REQUISITION_LINE_ID);
8830     FETCH c_get_tax_category_id INTO v_tax_category_id_holder;
8831     CLOSE c_get_tax_category_id;
8832 
8833 
8834 
8835     UPDATE JaI_Po_Line_Locations
8836        SET Tax_Amount = NVL( v_tax_amt, 0 ),
8837           Total_Amount = NVL( Line_Tot, 0 ) + NVL( v_tax_amt, 0 ),
8838           Last_Updated_By = v_last_upd_by,
8839           Last_Update_Date = v_last_upd_dt,
8840           Last_Update_Login = v_last_upd_login,
8841 	  tax_category_id = v_tax_category_id_holder
8842     WHERE  Po_Line_Id = v_po_line_id
8843       AND Line_Location_Id = v_line_Loc_id;
8844 
8845     end if;
8846 
8847 
8848 
8849 exception
8850    WHEN OTHERS THEN
8851 
8852      pv_return_code := 'Failure' ;
8853      IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8854         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8855      END IF;
8856      app_exception.raise_exception;
8857 
8858 END copy_req_tax_to_po;
8859 --Added by Wenqiong on Feb 16 2013 End
8860 END jai_po_proc_pkg;