DBA Data[Home] [Help]

PACKAGE BODY: APPS.JAI_OPEN_API_PKG

Source


1 PACKAGE BODY JAI_OPEN_API_PKG AS
2 /* $Header: jai_open_api.plb 120.26 2011/11/28 10:50:33 erma ship $ */
3 
4 --|+======================================================================+
5 --| Copyright (c) 2007 Oracle Corporation Redwood Shores, California, USA |
6 --|                       All rights reserved.                            |
7 --+=======================================================================+
8 --| FILENAME                                                              |
9 --|      jai_open_api.plb                                                 |
10 --|                                                                       |
11 --| DESCRIPTION                                                           |
12 --|    This package offer funcitons to populate taxes taxes from legacy   |
13 --| system to OFI.                                                        |
14 --|                                                                       |
15 --|                                                                       |
16 --|                                                                       |
17 --| PROCEDURE LIST                                                        |
18 --|                                                                       |
19 --|                                                                       |
20 --|                                                                       |
21 --| HISTORY                                                               |
22 --|     01-Mar-2011    Xiao Lv/Zhiwei Hou Created                         |
23 --|                                                                       |
24 --|     24-Mar-2011    Xiao for bug#11903425                              |
25 --|                       Enhance feature of tax category preview in      |
26 --|                       Interface tax lines UI.                         |
27 --|                                                                       |
28 --|     31-Mar-2011    Xiao for bug#11936390                              |
29 --|                       Code Change for some solution change, for detail|
30 --|                       need to refer to bug update.                    |
31 --|                                                                       |
32 --|     15-May-2011    Zhihwei Hou for bug#12537533                       |
33 --|                       Code Change for Code comments                   |
34 --|                                                                       |
35 --|     29-Sep-2011    Zhiwei Hou for Bug#13023443                        |
36 --|                       Code change for POT                             |
37 --|                    For External and Service Tax,                      |
38 --|                      if GL Date < POT Date                            |
39 --|                          accounting should be derived from Regime     |
40 --|                      else                                             |
41 --|                          accounting be derived from Jai Open API      |
42 --+======================================================================*/
43  /*
44   || Mark the request to the scope lines.
45   */
46   PROCEDURE mark_request_id(
47             pv_type                  IN VARCHAR2
48           , pn_org_id                IN NUMBER
49           , pn_organization_id       IN NUMBER
50           , pn_location_id           IN NUMBER
51           , pn_party_id              IN NUMBER
52           , pn_party_site_id         IN NUMBER
53           , pv_transaction_num_from  IN VARCHAR2
54           , pv_transaction_num_to    IN VARCHAR2
55   )
56   IS
57   BEGIN
58      --At beginning, mark the reqest id to the free lines.
59      IF(NVL(pv_type,'')='ON')THEN
60 
61         UPDATE jai_interface_lines_all
62            SET request_id = GN_REQUEST_ID
63          WHERE (request_id IS NULL OR request_id = '')
64            AND import_module = GV_IMPORT_MODULE
65            AND nvl(import_status, GV_IMPORT_FAILURE) = GV_IMPORT_FAILURE
66            AND org_id          = nvl(pn_org_id, org_id)
67            AND organization_id = nvl(pn_organization_id, organization_id)
68            AND location_id     = nvl(pn_location_id, location_id)
69            AND party_id        = nvl(pn_party_id, party_id)
70            AND party_site_id   = nvl(pn_party_site_id, party_site_id)
71            AND transaction_num >= nvl(pv_transaction_num_from, transaction_num)
72            AND transaction_num <= nvl(pv_transaction_num_to, transaction_num);
73 
74      END IF;--ON
75 
76      --At ending, wipe off the request id for all lines which marked the request id.
77      IF(NVL(pv_type,'')='OFF')THEN
78 
79         update jai_interface_lines_all
80         set    request_id = ''
81         where  request_id = GN_REQUEST_ID;
82 
83      END IF;--OFF
84 
85   END mark_request_id;
86 
87 /*
88   || After process, generate output report for importing records.
89   */
90   PROCEDURE generate_output_report( pv_import_module         VARCHAR2
91                                   , pn_org_id                NUMBER
92                                   , pn_organization_id       NUMBER
93                                   , pn_location_id           NUMBER
94                                   , pn_party_id              NUMBER
95                                   , pn_party_site_id         NUMBER
96                                   , pv_transaction_num_from  VARCHAR2
97                                   , pv_transaction_num_to    VARCHAR2)
98   IS
99     CURSOR get_import_trans_cur IS
100     SELECT transaction_num
101          , transaction_line_num
102          , import_status
103          , interface_line_id
104          , transaction_id
105       FROM jai_interface_lines_all
106      WHERE import_module   = pv_import_module
107        AND org_id          = nvl(pn_org_id, org_id)
108        AND organization_id = nvl(pn_organization_id, organization_id)
109        AND location_id     = nvl(pn_location_id, location_id)
110        AND party_id        = nvl(pn_party_id, party_id)
111        AND party_site_id   = nvl(pn_party_site_id, party_site_id)
112        AND transaction_num >= nvl(pv_transaction_num_from, transaction_num)
113        AND transaction_num <= nvl(pv_transaction_num_to, transaction_num)
114        AND REQUEST_ID      = GN_REQUEST_ID
115      ORDER BY import_status;
116 
117      CURSOR get_error_cur(pn_interface_line_id IN NUMBER) IS
118      SELECT error_message
119        FROM jai_interface_err_lines
120       WHERE interface_line_id = pn_interface_line_id;
121 
122     lv_err_name       varchar2(1000);
123     lv_err_message    VARCHAR2(1000);
124 
125   BEGIN
126     FOR rec_import_trans IN get_import_trans_cur
127     LOOP
128 
129       IF rec_import_trans.import_status = GV_IMPORT_SUCCESS THEN
130         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rec_import_trans.transaction_num || ' + '
131                                      || rec_import_trans.transaction_line_num|| ' Import Success.');
132       ELSE
133         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rec_import_trans.transaction_num || ' + '
134                                      || rec_import_trans.transaction_line_num|| ' Import with Error.');
135 
136         FOR rec_error IN get_error_cur(rec_import_trans.interface_line_id)
137         LOOP
138           lv_err_name := upper(rec_error.error_message);
139           FND_MESSAGE.SET_NAME('JA', lv_err_name);
140 
141           IF lv_err_name = 'JAI_TRANS_ID_ERR' THEN
142             FND_MESSAGE.SET_TOKEN('JAI_SOURCE_TRXN_ID', to_char(rec_import_trans.transaction_id));
143           ELSIF lv_err_name IN ('JAI_MULTIPLE_TRANS', 'JAI_TRANS_LINES_ERR') THEN
144             FND_MESSAGE.SET_TOKEN('JAI_SOURCE_TRXN_NUM', rec_import_trans.transaction_num);
145             FND_MESSAGE.SET_TOKEN('JAI_SOURCE_TRXN_LINE_NUM', to_char(rec_import_trans.transaction_line_num));
146           ELSIF lv_err_name IN ('JAI_AP_STATUE_ERR', 'JAI_AR_APPLIED') THEN
147             FND_MESSAGE.SET_TOKEN('JAI_SOURCE_TRXN_NUM', rec_import_trans.transaction_num);
148           END IF;
149 
150           lv_err_message := FND_MESSAGE.GET;
151           IF lv_err_message IS NULL THEN
152              lv_err_message := rec_error.error_message;
153           END IF;
154           FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '    '||lv_err_message);
155         END LOOP;
156       END IF;
157     END LOOP;
158   END generate_output_report;
159 
160 
161   /*
162   || After process,clear the success lines.
163   */
164   PROCEDURE del_success_lines
165   IS
166   BEGIN
167        --Delete tax lines firstly
168        delete from jai_interface_tax_lines_all
169        where  interface_line_id in
170               (
171                   select interface_line_id
172                   from   jai_interface_lines_all
173                   where  import_status = GV_IMPORT_SUCCESS
174                   and    import_process= GV_PROCESS_ACCOUNTING
175               );
176 
177        --Delete error lines thirdly
178        delete from jai_interface_err_lines
179        where  interface_line_id in
180               (
181                   select interface_line_id
182                   from   jai_interface_lines_all
183                   where  import_status = GV_IMPORT_SUCCESS
184                   and    import_process= GV_PROCESS_ACCOUNTING
185               );
186 
187        --Delete interface lines finally
188        delete from jai_interface_lines_all
189        where  import_status  = GV_IMPORT_SUCCESS
190        and    import_process = GV_PROCESS_ACCOUNTING;
191 
192 
193   END del_success_lines;
194 
195   /*
196   || After process,clear the success lines.
197   */
198   PROCEDURE del_line_reference(pn_interface_line_id IN JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE)
199   IS
200   BEGIN
201 
202        delete from jai_interface_err_lines
203        where  interface_line_id  = pn_interface_line_id;
204 
205   END del_line_reference;
206 
207 
208 
209   /*
210   || Update line status
211   */
212   PROCEDURE update_line_status(
213         pn_interface_line_id IN NUMBER
214       , pv_import_status     IN VARCHAR2
215       , pv_import_process    IN VARCHAR2
216   )
217   IS
218   BEGIN
219 
220     UPDATE jai_interface_lines_all
221        SET import_status = pv_import_status
222          , import_process = pv_import_process
223      WHERE interface_line_id = pn_interface_line_id;
224 
225   END update_line_status;
226 
227 
228   /*
229   || Update trx lines status
230   */
231   PROCEDURE update_trx_lines_status(
232         pn_trx_id IN NUMBER
233       , pv_import_status     IN VARCHAR2
234       , pv_import_process    IN VARCHAR2
235   )
236   IS
237   --PRAGMA AUTONOMOUS_TRANSACTION;
238   BEGIN
239 
240     UPDATE jai_interface_lines_all
241        SET import_status = pv_import_status
242          , import_process = pv_import_process
243      WHERE internal_trx_id = pn_trx_id;
244     --COMMIT;
245 
246   END update_trx_lines_status;
247 
248 /*
249   || validate org_id,organization_id,location_id is suitable
250   */
251   PROCEDURE validate_org_loc_suitable(
252          pv_chk_type               IN VARCHAR2,
253          pn_chk_org_id             IN JAI_INTERFACE_LINES_ALL.ORG_ID%TYPE,
254          pn_chk_organization_id    IN JAI_INTERFACE_LINES_ALL.ORGANIZATION_ID%TYPE,
255          pn_chk_location_id        IN JAI_INTERFACE_LINES_ALL.LOCATION_ID%TYPE,
256          xv_return_code            IN OUT NOCOPY VARCHAR2,
257          xv_return_message         IN OUT NOCOPY VARCHAR2)
258   IS
259   --Cursor define here
260   CURSOR chk_org_cur IS
261   SELECT COUNT(organization_id)
262     FROM org_organization_definitions
263    WHERE operating_unit = pn_chk_org_id;
264 
265   CURSOR chk_organization_cur IS
266   SELECT COUNT(organization_id)
267     FROM org_organization_definitions
268    WHERE operating_unit = pn_chk_org_id
269      AND organization_id = pn_chk_organization_id;
270 
271   CURSOR chk_loc_cur IS
272   SELECT COUNT(location_id)
273     FROM jai_cmn_inventory_orgs
274    WHERE organization_id = pn_chk_organization_id
275      AND location_id = pn_chk_location_id;
276 
277   CURSOR chk_combination_cur IS
278   SELECT COUNT(b.organization_id)
279     FROM jai_cmn_inventory_orgs a
280        , org_organization_definitions b
281    WHERE b.operating_unit = pn_chk_org_id
282      AND a.organization_id = pn_chk_organization_id
283      AND a.location_id = pn_chk_location_id
284      AND a.organization_id = b.organization_id;
285 
286   --Variable define here
287   ln_count  NUMBER := 0;
288 
289   BEGIN
290      xv_return_code:= 'S';
291 
292      IF(pv_chk_type = GV_ORG)THEN
293         OPEN chk_org_cur;
294         FETCH chk_org_cur INTO ln_count;
295         CLOSE chk_org_cur;
296         IF(ln_count is null or ln_count = 0)THEN
297           xv_return_code := 'EE';
298           xv_return_message := 'VALIDATION in validate_org_loc_suitable :' || pv_chk_type || ' '|| pn_chk_org_id || ' is not available ';
299         END IF;
300      END IF;
301 
302      IF(pv_chk_type = GV_ORGANIZATION)THEN
303         OPEN chk_organization_cur;
304         FETCH chk_organization_cur INTO ln_count;
305         CLOSE chk_organization_cur;
306 
307         IF(ln_count is null or ln_count = 0)THEN
308           xv_return_code := 'EE';
309           xv_return_message := 'VALIDATION in validate_org_loc_suitable :' || pv_chk_type || ' '|| pn_chk_organization_id || ' is not available ';
310         END IF;
311      END IF;
312 
313      IF(pv_chk_type = GV_LOCATION)THEN
314         OPEN chk_loc_cur;
315         FETCH chk_loc_cur INTO ln_count;
316         CLOSE chk_loc_cur;
317 
318         IF(ln_count IS NULL OR ln_count = 0 OR nvl(pn_chk_location_id, 0) = 0)THEN
319           xv_return_code := 'EE';
320           xv_return_message := 'VALIDATION in validate_org_loc_suitable :' || pv_chk_type || ' '|| pn_chk_location_id || ' is not available ';
321         END IF;
322      END IF;
323 
324      IF(pv_chk_type = GV_COMBINATION )THEN
325         OPEN chk_combination_cur;
326         FETCH chk_combination_cur INTO ln_count;
327         CLOSE chk_combination_cur;
328 
329         IF(ln_count is null or ln_count = 0)THEN
330            xv_return_code := 'EE';
331            xv_return_message := 'VALIDATION in validate_org_loc_suitable :' || pv_chk_type || ' '|| pn_chk_org_id|| '+' ||pn_chk_organization_id ||'+' ||pn_chk_location_id || ' is not available ';
332         END IF;
333      END IF;
334 
335      EXCEPTION
336         WHEN OTHERS THEN
337            xv_return_code := 'UE';
338            xv_return_message := 'VALIDATION Exception with SQLERR : '|| SUBSTR(SQLERRM,1,230) ||' in validate_org_loc_suitable ';
339 
340   END validate_org_loc_suitable;
341 
342   /*
343   ||After validation, if errors exist, change error_flag to Y.
344   */
345   PROCEDURE update_error_flag(
346         pn_interface_line_id  IN JAI_INTERFACE_LINES_ALL.interface_line_id%TYPE,
347         pv_err_exist          IN JAI_INTERFACE_LINES_ALL.ERROR_FLAG%TYPE
348   )IS
349 
350   BEGIN
351 
352      UPDATE JAI_INTERFACE_LINES_ALL
353      SET    ERROR_FLAG = pv_err_exist
354      WHERE  INTERFACE_LINE_ID = pn_interface_line_id;
355 
356   END update_error_flag;
357 
358   /*
359   ||After validation, if errors exist, change error_flag to Y.
360   */
361   PROCEDURE update_trx_error_flag(
362         pn_internal_trx_id    IN JAI_INTERFACE_LINES_ALL.interface_line_id%TYPE,
363         pv_err_exist          IN JAI_INTERFACE_LINES_ALL.ERROR_FLAG%TYPE
364   )IS
365 
366   BEGIN
367 
368      UPDATE JAI_INTERFACE_LINES_ALL
369      SET    ERROR_FLAG = pv_err_exist
370      WHERE  INTERNAL_TRX_ID = pn_internal_trx_id;
371 
372   END update_trx_error_flag;
373 
374 
375 
376   PROCEDURE record_fnd_log(
377             pv_fnd_log  IN JAI_INTERFACE_ERR_LINES.ERROR_MESSAGE%TYPE
378   )
379   IS
380   BEGIN
381 
382        fnd_file.put_line(FND_FILE.LOG,pv_fnd_log);
383 
384   END record_fnd_log;
385 
386 
387   /*
388   ||When occurred error, populate table jai_interface_err_lines and fnd log error info ,
389   */
390   PROCEDURE log_error(
391                 pv_err_level                IN JAI_INTERFACE_ERR_LINES.ERROR_TYPE%TYPE, --'LINE' or 'TAX'
392                 pn_line_id                  IN JAI_INTERFACE_ERR_LINES.INTERFACE_ERROR_ID%TYPE,
393                 pn_source_line_id           IN JAI_INTERFACE_ERR_LINES.INTERFACE_SOURCE_LINE_ID%TYPE,
394                 pv_err_mess                 IN JAI_INTERFACE_ERR_LINES.ERROR_MESSAGE%TYPE,
395                 pv_invalid_value            IN JAI_INTERFACE_ERR_LINES.INVALID_VALUE%TYPE
396   )
397   IS
398     ln_user_id                      JAI_RGM_REFS_ALL.CREATED_BY%TYPE                  ;
399     ln_login_id                     JAI_RGM_REFS_ALL.LAST_UPDATE_LOGIN%TYPE           ;
400   BEGIN
401 
402     ln_user_id         := fnd_global.user_id         ;
403     ln_login_id        := fnd_global.login_id        ;
404 
405      INSERT INTO JAI_INTERFACE_ERR_LINES
406      (
407             INTERFACE_ERROR_ID,
408             ERROR_TYPE,
409             INTERFACE_LINE_ID,
410             INTERFACE_SOURCE_LINE_ID,
411             ERROR_MESSAGE,
412             INVALID_VALUE,
413             REQUEST_ID
414             --Added by zhiwei for bug#12425101 begin
415             -----------------------------------------
416             ,created_by                                  ,
417             creation_date                               ,
418             last_updated_by                             ,
419             last_update_date                            ,
420             last_update_login
421             -----------------------------------------
422             --Added by zhiwei for bug#12425101 end
423      )
424      VALUES
425      (
426             JAI_INTERFACE_ERR_LINES_S.nextval,
427             pv_err_level,
428             pn_line_id,
429             pn_source_line_id,
430             pv_err_mess,
431             pv_invalid_value,
432             GN_REQUEST_ID
433             --Added by zhiwei for bug#12425101 begin
434             -----------------------------------------
435             ,ln_user_id                                 ,
436             sysdate                                    ,
437             ln_user_id                                 ,
438             sysdate                                    ,
439             ln_login_id
440             -----------------------------------------
441             --Added by zhiwei for bug#12425101 end
442      );
443 
444 
445   END log_error;
446 
447 
448   FUNCTION get_trx_number(cn_interface_line_id in number)RETURN VARCHAR2
449   IS
450 
451      lv_transaction_num VARCHAR2(30);
452   begin
453        select transaction_num INTO  lv_transaction_num
454        from jai_interface_lines_all
455        where interface_line_id = cn_interface_line_id;
456 
457      RETURN   lv_transaction_num;
458 
459   END get_trx_number;
460 
461 
462   /*
463   || Validate CODE_COMBINATION_ID is suitable to EBS System
464   */
465   PROCEDURE validate_ccid_id_suitable(
466             pn_interface_line_id   IN  JAI_INTERFACE_TAX_LINES_ALL.INTERFACE_LINE_ID%TYPE,
467             pn_tax_line_id         IN  JAI_INTERFACE_TAX_LINES_ALL.INTERFACE_TAX_LINE_ID%TYPE,
468             pn_code_combination_id IN  JAI_INTERFACE_TAX_LINES_ALL.CODE_COMBINATION_ID%TYPE,
469             xn_err_flag            IN OUT NOCOPY NUMBER
470   )
471   IS
472   --Cursor define here
473   CURSOR get_chart_id_cur(cn_set_books_id IN gl_sets_of_books.SET_OF_BOOKS_ID%TYPE)
474   IS
475   SELECT CHART_OF_ACCOUNTS_ID
476   FROM   gl_sets_of_books
477   WHERE  SET_OF_BOOKS_ID = cn_set_books_id
478   AND    CURRENCY_CODE   = JAI_CONSTANTS.func_curr;
479 
480   --Added by zhiwei for bug#12560646 on 20110523 begin
481   --------------------------------------------------------------------
482   CURSOR chk_ccid_cur
483   IS
484   SELECT
485        'Y'
486   FROM DUAL
487   WHERE EXISTS
488   (
489         SELECT '1'
490         FROM GL_CODE_COMBINATIONS_V
491         WHERE CODE_COMBINATION_ID = pn_code_combination_id
492         AND ENABLED_FLAG = 'Y'
493         AND (START_DATE_ACTIVE <= trunc(sysdate) OR  START_DATE_ACTIVE IS NULL)
494         AND (END_DATE_ACTIVE >= trunc(sysdate) OR END_DATE_ACTIVE is null)
495   );
496 
497   lv_flag varchar2(5);
498   ---------------------------------------------------------------------------
499   --Added by zhiwei for bug#12560646 on 20110523 end
500 
501   --Variable define here
502   lb_valid  BOOLEAN;
503   lv_sob_id NUMBER;
504   ln_chart_accounts_id  NUMBER;
505   lv_return_mess         VARCHAR2(1000);
506   lv_error_mess          VARCHAR2(1000);
507 
508   --Main block
509   BEGIN
510 
511             lv_sob_id := fnd_profile.VALUE('GL_SET_OF_BKS_ID');
512 
513             OPEN get_chart_id_cur(lv_sob_id);
514             FETCH get_chart_id_cur INTO ln_chart_accounts_id;
515             CLOSE get_chart_id_cur;
516 
517             lb_valid := FND_FLEX_KEYVAL.validate_ccid(
518                                   appl_short_name  =>  'SQLGL',
519                                   key_flex_code    =>  'GL#',
520                                   structure_number =>  ln_chart_accounts_id,
521                                   combination_id   =>  pn_code_combination_id,
522                                   displayable      =>  'ALL',
523                                   data_set         =>  NULL,
524                                   vrule            =>  NULL,
525                                   --security =>  'IGNORE',
526                                   get_columns      =>  NULL,
527                                   resp_appl_id     =>  NULL,
528                                   resp_id          =>  NULL,
529                                   user_id          => NULL);
530             IF(lb_valid)THEN
531                null;
532             ELSE
533               xn_err_flag := 1;
534               lv_return_mess := 'VALIDATION in validate_ccid_id_suitable : ccid of distribution should be available With interface_tax_line_id:'||pn_tax_line_id;
535               lv_error_mess  := 'JAI_ACCOUNT_INVALID';--'Invalid Accounting segment';
536               log_error(
537                      pv_err_level              => GV_ERROR_TYPE_TAX,
538                      pn_line_id                => pn_interface_line_id,
539                      pn_source_line_id         => pn_tax_line_id,
540                      pv_err_mess               => lv_error_mess,
541                      pv_invalid_value          => pn_code_combination_id
542               );
543               record_fnd_log(
544                  pv_fnd_log   => lv_return_mess
545               );
546             END IF;
547 
548             --Added by zhiwei for bug#12560646 begin
549             ----------------------------------------------------------------
550             open chk_ccid_cur;
551             fetch chk_ccid_cur into lv_flag;
552             close chk_ccid_cur;
553 
554             IF(NVL(lv_flag,'N') = 'N')THEN
555                xn_err_flag := 1;
556                lv_return_mess := 'VALIDATION in validate_ccid_id_suitable : ccid of distribution should be available With interface_tax_line_id:'||pn_tax_line_id;
557                lv_error_mess  := 'JAI_ACCOUNT_INVALID';--'Invalid Accounting segment';
558                log_error(
559                      pv_err_level              => GV_ERROR_TYPE_TAX,
560                      pn_line_id                => pn_interface_line_id,
561                      pn_source_line_id         => pn_tax_line_id,
562                      pv_err_mess               => lv_error_mess,
563                      pv_invalid_value          => pn_code_combination_id
564                );
565                record_fnd_log(
566                  pv_fnd_log   => lv_return_mess
567                );
568             END IF;
569             ----------------------------------------------------------------
570             --Added by zhiwei for bug#12560646 end
571 
572 
573 
574   EXCEPTION
575      WHEN OTHERS THEN
576           xn_err_flag := 1;
577           lv_return_mess := 'VALIDATION Exception with SQLERR:'|| SUBSTR(SQLERRM,1,230) || ' in validate_ccid_id_suitable with interface_tax_line_id:'||pn_tax_line_id;
578           lv_error_mess  := 'JAI_ACCOUNT_INVALID';--'Invalid Accounting segment';
579 
580           log_error(
581                      pv_err_level              => GV_ERROR_TYPE_TAX,
582                      pn_line_id                => pn_interface_line_id,
583                      pn_source_line_id         => pn_tax_line_id,
584                      pv_err_mess               => lv_error_mess,
585                      pv_invalid_value          => pn_code_combination_id
586           );
587           record_fnd_log(
588                  pv_fnd_log   => lv_return_mess
589           );
590 
591   END validate_ccid_id_suitable;
592 
593 
594   /*
595   || Check the operating_unit,organization_id,location_id
596   */
597   PROCEDURE validate_ou_io_loc(
598                 pr_interface_lines     IN     JAI_INTERFACE_LINES_ALL%ROWTYPE,
599                 xn_err_flag            IN OUT NOCOPY NUMBER
600   )IS
601   --Variable define here
602   lv_return_code          VARCHAR2(10);
603   lv_return_mess          varchar2(1000);
604   lv_error_mess           VARCHAR2(1000);
605 
606   --Main block
607   BEGIN
608 
609      validate_org_loc_suitable(
610          pv_chk_type           => GV_ORG,
611          pn_chk_org_id         => pr_interface_lines.org_id,
612          pn_chk_organization_id=> pr_interface_lines.ORGANIZATION_ID,
613          pn_chk_location_id    => pr_interface_lines.location_id,
614          xv_return_code        => lv_return_code,
615          xv_return_message     => lv_return_mess);
616 
617      IF(lv_return_code <> 'S')THEN
618         xn_err_flag := 1;
619         lv_return_mess := lv_return_mess || ' with interface_line_id:'||pr_interface_lines.interface_line_id;
620         lv_error_mess  := 'JAI_OU_IL_COMBINATION_ERR';--'Invalid Operation Unit/ Inventory Organization/ Location combination';
621 
622         log_error(
623                  pv_err_level              => GV_ERROR_TYPE_LINE,
624                  pn_line_id                => pr_interface_lines.interface_line_id,
625                  pn_source_line_id         => pr_interface_lines.interface_line_id,
626                  pv_err_mess               => lv_error_mess,
627                  pv_invalid_value          => pr_interface_lines.org_id
628         );
629         record_fnd_log(
630              pv_fnd_log   => lv_return_mess
631         );
632      END IF;
633 
634      --Check organization_id
635      validate_org_loc_suitable(
636          pv_chk_type           => GV_ORGANIZATION,
637          pn_chk_org_id         => pr_interface_lines.org_id,
638          pn_chk_organization_id=> pr_interface_lines.ORGANIZATION_ID,
639          pn_chk_location_id    => pr_interface_lines.location_id,
640          xv_return_code        => lv_return_code,
641          xv_return_message     => lv_return_mess);
642      IF(lv_return_code <> 'S')THEN
643         xn_err_flag := 1;
644         lv_return_mess := lv_return_mess || ' with interface_line_id:'||pr_interface_lines.interface_line_id;
645         lv_error_mess  := 'JAI_OU_IL_COMBINATION_ERR';--'Invalid Operation Unit/ Inventory Organization/ Location combination';
646         record_fnd_log(
647              pv_fnd_log   => lv_return_mess
648         );
649         log_error(
650                  pv_err_level              => GV_ERROR_TYPE_LINE,
651                  pn_line_id                => pr_interface_lines.interface_line_id,
652                  pn_source_line_id         => pr_interface_lines.interface_line_id,
653                  pv_err_mess               => lv_error_mess,
654                  pv_invalid_value          => pr_interface_lines.organization_id
655         );
656 
657      END IF;
658      --Check location_id
659 
660      validate_org_loc_suitable(
661          pv_chk_type           => GV_LOCATION,
662          pn_chk_org_id         => pr_interface_lines.org_id,
663          pn_chk_organization_id=> pr_interface_lines.ORGANIZATION_ID,
664          pn_chk_location_id    => pr_interface_lines.location_id,
665          xv_return_code        => lv_return_code,
666          xv_return_message     => lv_return_mess);
667      IF(lv_return_code <> 'S')THEN
668         xn_err_flag := 1;
669         lv_return_mess := lv_return_mess || ' with interface_line_id:'||pr_interface_lines.interface_line_id;
670         lv_error_mess := 'JAI_OU_IL_COMBINATION_ERR';--'Invalid Operation Unit/ Inventory Organization/ Location combination';
671         record_fnd_log(
672              pv_fnd_log   => lv_return_mess
673         );
674         log_error(
675                  pv_err_level              => GV_ERROR_TYPE_LINE,
676                  pn_line_id                => pr_interface_lines.interface_line_id,
677                  pn_source_line_id         => pr_interface_lines.interface_line_id,
678                  pv_err_mess               => lv_error_mess,
679                  pv_invalid_value          => pr_interface_lines.location_id
680         );
681 
682      END IF;
683      --Check org_id + organization_id + location_id combination
684      validate_org_loc_suitable(
685              pv_chk_type           => GV_COMBINATION,
686              pn_chk_org_id         => pr_interface_lines.org_id,
687              pn_chk_organization_id=> pr_interface_lines.organization_id,
688              pn_chk_location_id    => pr_interface_lines.location_id,
689              xv_return_code        => lv_return_code,
690              xv_return_message     => lv_return_mess
691      );
692      IF(lv_return_code <> 'S')THEN
693         xn_err_flag := 1;
694         lv_return_mess := lv_return_mess || ' with interface_line_id:'||pr_interface_lines.interface_line_id;
695         --'Invalid Operation Unit/ Inventory Organization/ Location combination';
696         lv_error_mess := 'JAI_OU_IL_COMBINATION_ERR';
697         record_fnd_log(
698              pv_fnd_log   => lv_return_mess
699         );
700         log_error(
701                  pv_err_level              => GV_ERROR_TYPE_LINE,
702                  pn_line_id                => pr_interface_lines.interface_line_id,
703                  pn_source_line_id         => pr_interface_lines.interface_line_id,
704                  pv_err_mess               => lv_error_mess,
705                  pv_invalid_value          => pr_interface_lines.org_id ||'+'|| pr_interface_lines.organization_id ||'+'||pr_interface_lines.location_id
706         );
707 
708      END IF;
709      EXCEPTION
710          WHEN OTHERS THEN
711             xn_err_flag := 1;
712             lv_return_mess := 'VALIDATION Exception with SQLERR' || SUBSTR(SQLERRM,1,230);
713             lv_return_mess := lv_return_mess ||' in validate_ou_io_loc with interface_line_id:'||pr_interface_lines.interface_line_id;
714             lv_error_mess := 'JAI_OU_IL_COMBINATION_ERR';--'Invalid Operation Unit/ Inventory Organization/ Location combination';
715             record_fnd_log(
716                   pv_fnd_log   => lv_return_mess
717             );
718             log_error(
719                  pv_err_level              => GV_ERROR_TYPE_LINE,
720                  pn_line_id                => pr_interface_lines.interface_line_id,
721                  pn_source_line_id         => pr_interface_lines.interface_line_id,
722                  pv_err_mess               => lv_error_mess,
723                  pv_invalid_value          => pr_interface_lines.org_id ||'+'|| pr_interface_lines.organization_id ||'+'||pr_interface_lines.location_id
724              );
725 
726   END validate_ou_io_loc;
727 
728   /*
729   || Check the taxable event
730   */
731   PROCEDURE validate_taxable_event(
732                 pr_interface_lines     IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
733                 xn_err_flag            IN OUT NOCOPY NUMBER
734   )IS
735 
736   --Cursor define here
737   CURSOR get_sum_in_tax_amount_cur
738   IS
739   SELECT SUM(TAX_AMOUNT)
740   FROM JAI_INTERFACE_TAX_LINES_ALL
741   WHERE INTERFACE_LINE_ID = pr_interface_lines.INTERFACE_LINE_ID
742   AND NVL(INCLUSIVE_TAX_FLAG,'N') = 'Y';
743 
744   CURSOR get_sum_ex_tax_amount_cur
745   IS
746   SELECT SUM(TAX_AMOUNT)
747   FROM JAI_INTERFACE_TAX_LINES_ALL
748   WHERE INTERFACE_LINE_ID = pr_interface_lines.INTERFACE_LINE_ID
749   AND NVL(INCLUSIVE_TAX_FLAG,'N') = 'N';
750 
751   --Variable define here
752   ln_in_tax_sum_amount  JAI_INTERFACE_TAX_LINES_ALL.TAX_AMOUNT%TYPE;
753   ln_ex_tax_sum_amount  JAI_INTERFACE_TAX_LINES_ALL.TAX_AMOUNT%TYPE;
754   --ln_dist_sum_amount    JAI_INTERFACE_TAX_LINES_ALL.TAX_AMOUNT%TYPE;
755 
756   lv_return_mess        VARCHAR2(1000);
757   lv_error_mess         VARCHAR2(1000);
758   --Main block
759   BEGIN
760 
761      IF( pr_interface_lines.taxable_event IN( GV_TAXABLE_EVENT_EXTERNAL,GV_TAXABLE_EVENT_STANDALONE))THEN
762 
763 
764 
765             --If taxable event is external then determine exclusive tax amount of lines equals sum amount of distribution lines
766             IF(pr_interface_lines.taxable_event = GV_TAXABLE_EVENT_EXTERNAL)THEN
767 
768                 --Check the inclusive tax amount of line should equals the sum inclusive tax amount of tax line
769                 OPEN get_sum_in_tax_amount_cur;
770                 FETCH get_sum_in_tax_amount_cur INTO ln_in_tax_sum_amount;
771                 CLOSE get_sum_in_tax_amount_cur;
772 
773                 IF(NVL(ln_in_tax_sum_amount,0) <> NVL(pr_interface_lines.inclusive_tax_amount,0))THEN
774                      xn_err_flag := 1;
775                      lv_return_mess := 'VALIDATION in validate_taxable_event :inclusive tax amount should equals sum inclusive tax amount of tax lines';
776                      lv_return_mess := lv_return_mess||' with interface_line_id:'||pr_interface_lines.interface_line_id;
777                      --'Incorrect inclusive amount in interface tax detail UI, summarized all inclusive tax code amount <> Total inclusive amount';
778                      lv_error_mess  := 'JAI_INCLUSIVE_AMOUNT_ERR';
779                      log_error(
780                              pv_err_level              => GV_ERROR_TYPE_LINE,
781                              pn_line_id                => pr_interface_lines.interface_line_id,
782                              pn_source_line_id         => pr_interface_lines.interface_line_id,
783                              pv_err_mess               => lv_error_mess,
784                              pv_invalid_value          => pr_interface_lines.INCLUSIVE_TAX_AMOUNT
785                      );
786                      record_fnd_log(
787                              pv_fnd_log   => lv_return_mess
788                      );
789                 END IF;
790 
791                 --Check the exclusive tax amount of line should equals the sum exclusive tax amount of tax line
792                 OPEN get_sum_ex_tax_amount_cur;
793                 FETCH get_sum_ex_tax_amount_cur INTO ln_ex_tax_sum_amount;
794                 CLOSE get_sum_ex_tax_amount_cur;
795 
796                 IF(NVL(ln_ex_tax_sum_amount,0) <> NVL(pr_interface_lines.exclusive_tax_amount,0))THEN
797 
798                      xn_err_flag := 1;
799                      lv_return_mess :='VALIDATION in validate_taxable_event :exclusive tax amount should equals sum exclusive tax amount of tax lines With interface_line_id:'||pr_interface_lines.interface_line_id;
800                      lv_error_mess  := 'JAI_EXCLUSIVE_AMOUNT_ERR';--'Incorrect exclusive amount in interface tax detail UI, summarized all exclusive tax code amount <> Total exclusive amount';
801 
802                      log_error(
803                              pv_err_level              => GV_ERROR_TYPE_LINE,
804                              pn_line_id                => pr_interface_lines.interface_line_id,
805                              pn_source_line_id         => pr_interface_lines.interface_line_id,
806                              pv_err_mess               => lv_error_mess,
807                              pv_invalid_value          => pr_interface_lines.EXCLUSIVE_TAX_AMOUNT
808                          );
809                      record_fnd_log(
810                              pv_fnd_log   => lv_return_mess
811                      );
812                 END IF;
813 
814             END IF;--EXTERNAL
815 
816      ELSE
817          xn_err_flag := 1;
818          lv_return_mess := 'VALIDATION in validate_taxable_event : taxable event should in '||GV_TAXABLE_EVENT_EXTERNAL||' or '|| GV_TAXABLE_EVENT_STANDALONE;
819          lv_return_mess := lv_return_mess||' with interface_line_id:'||pr_interface_lines.interface_line_id;
820          lv_error_mess  := 'JAI_TAXABLE_EVENT_ERR';--'Taxable event value is invalid';
821 
822          log_error(
823                  pv_err_level              => GV_ERROR_TYPE_LINE,
824                  pn_line_id                => pr_interface_lines.interface_line_id,
825                  pn_source_line_id         => pr_interface_lines.interface_line_id,
826                  pv_err_mess               => lv_error_mess,
827                  pv_invalid_value          => pr_interface_lines.taxable_event
828          );
829          record_fnd_log(
830                  pv_fnd_log   => lv_return_mess
831          );
832      END IF;
833      EXCEPTION
834          WHEN OTHERS THEN
835               xn_err_flag := 1;
836               lv_return_mess := 'VALIDATION Exception with SQLERR: '|| SUBSTR(SQLERRM,1,230);
837               lv_return_mess := lv_return_mess || ' in validate_taxable_event With interface_line_id:'||pr_interface_lines.interface_line_id;
838               lv_error_mess  := 'JAI_TAXABLE_EVENT_ERR';--'Taxable event value is invalid';
839 
840               log_error(
841                  pv_err_level              => GV_ERROR_TYPE_LINE,
842                  pn_line_id                => pr_interface_lines.interface_line_id,
843                  pn_source_line_id         => pr_interface_lines.interface_line_id,
844                  pv_err_mess               => lv_error_mess,
845                  pv_invalid_value          => pr_interface_lines.taxable_event
846               );
847               record_fnd_log(
848                  pv_fnd_log   => lv_return_mess
849               );
850   END validate_taxable_event;
851 
852   /*
853   ||Check the taxable basis should in 'LINE_AMOUNT' OR 'ASSESSABLE_VALUE'
854   ||This validation is only for 'Standard' event.
855   */
856   PROCEDURE validate_taxable_basis(
857                 pr_interface_lines     IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
858                 xn_err_flag            IN OUT NOCOPY NUMBER
859   )IS
860 
861   --Variable define here
862   lv_return_mess         VARCHAR2(1000);
863   lv_error_mess          VARCHAR2(1000);
864   --Main block
865   BEGIN
866 
867     IF(GV_IMPORT_MODULE = JAI_CONSTANTS.SOURCE_AR)THEN --Added by zhiwei for bug#12585126 on 20110523
868     IF (NVL(pr_interface_lines.taxable_event,'#') =  GV_TAXABLE_EVENT_STANDALONE )THEN
869        IF( NVL(pr_interface_lines.taxable_basis,'#') NOT IN ( GV_TAXABLE_BASIS_LINEAMT , GV_TAXABLE_BASIS_AV)) THEN
870 
871            xn_err_flag := 1;
872            lv_return_mess := 'VALIDATION in validate_taxable_basis : taxable basis should in '|| GV_TAXABLE_BASIS_LINEAMT||' or '|| GV_TAXABLE_BASIS_AV;
873            lv_return_mess := lv_return_mess || ' With interface_line_id:'||pr_interface_lines.interface_line_id;
874            lv_error_mess  := 'JAI_TAXABLE_BASIS_ERR';--'Taxable basis value is invalid';
875            log_error(
876                    pv_err_level              => GV_ERROR_TYPE_LINE,
877                    pn_line_id                => pr_interface_lines.interface_line_id,
878                    pn_source_line_id         => pr_interface_lines.interface_line_id,
879                    pv_err_mess               => lv_error_mess,
880                    pv_invalid_value          => pr_interface_lines.taxable_basis
881            );
882            record_fnd_log(
883               pv_fnd_log   => lv_return_mess
884            );
885        END IF;
886     END IF;
887     END IF;--AR --Added by zhiwei for bug#12585126 on 20110523
888      EXCEPTION
889          WHEN OTHERS THEN
890                 xn_err_flag := 1;
891                 lv_return_mess := 'VALIDATION Exception with SQLERR:'|| SUBSTR(SQLERRM,1,230);
892                 lv_return_mess := lv_return_mess || ' in  validate_taxable_basis with interface_line_id:'||pr_interface_lines.interface_line_id;
893                 lv_error_mess  := 'JAI_TAXABLE_BASIS_ERR';--'Taxable basis value is invalid';
894 
895                 log_error(
896                      pv_err_level              => GV_ERROR_TYPE_LINE,
897                      pn_line_id                => pr_interface_lines.interface_line_id,
898                      pn_source_line_id         => pr_interface_lines.interface_line_id,
899                      pv_err_mess               => lv_error_mess,
900                      pv_invalid_value          => pr_interface_lines.taxable_basis
901                 );
902                 record_fnd_log(
903                    pv_fnd_log   => lv_return_mess
904                 );
905   END validate_taxable_basis;
906 
907 
908   /*
909   ||Check the tax line is exist
910   */
911   PROCEDURE validate_tax_line_exist(
912                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
913                 xn_err_flag            IN OUT NOCOPY NUMBER
914   )IS
915 
916   --Cursor define here
917   CURSOR get_tax_line_count_cur
918   IS
919   SELECT
920          COUNT(INTERFACE_TAX_LINE_ID)
921   FROM   JAI_INTERFACE_TAX_LINES_ALL
922   WHERE  INTERFACE_LINE_ID = pn_interface_line_id;
923   --AND    TAX_AMOUNT  is not null ;
924 
925   --Variable define here
926   ln_tax_count   NUMBER;
927   lv_return_mess         VARCHAR2(1000);
928   lv_error_mess          VARCHAR2(1000);
929 
930   --Main block
931   BEGIN
932 
933      OPEN get_tax_line_count_cur;
934      FETCH get_tax_line_count_cur INTO ln_tax_count;
935      CLOSE get_tax_line_count_cur;
936 
937      IF(NVL(ln_tax_count,-1) <= 0 )THEN
938         xn_err_flag := 1;
939         lv_return_mess := 'VALIDATION in validate_tax_line_exist : tax lines should exist With interface_line_id:'||pn_interface_line_id;
940         lv_error_mess  := 'JAI_TAX_MISSING';--'There is not tax detail data in interface when taxable event is External. Nothing is imported.';
941         log_error(
942                  pv_err_level              => GV_ERROR_TYPE_LINE,
943                  pn_line_id                => pn_interface_line_id,
944                  pn_source_line_id         => pn_interface_line_id,
945                  pv_err_mess               => lv_error_mess,
946                  pv_invalid_value          => pn_interface_line_id
947         );
948         record_fnd_log(
949                    pv_fnd_log   => lv_return_mess
950         );
951      END IF;
952      EXCEPTION
953          WHEN OTHERS THEN
954               xn_err_flag := 1;
955               lv_return_mess := 'VALIDATION Exception with SQLERR:' || SUBSTR(SQLERRM,1,230) || ' in validate_tax_line_exist With interface_line_id:'||pn_interface_line_id;
956               lv_error_mess  := 'JAI_TAX_MISSING';--'There is not tax detail data in interface when taxable event is External. Nothing is imported.';
957               log_error(
958                  pv_err_level              => GV_ERROR_TYPE_LINE,
959                  pn_line_id                => pn_interface_line_id,
960                  pn_source_line_id         => pn_interface_line_id,
961                  pv_err_mess               => lv_error_mess,
962                  pv_invalid_value          => pn_interface_line_id
963               );
964               record_fnd_log(
965                          pv_fnd_log   => lv_return_mess
966               );
967   END validate_tax_line_exist;
968 
969 
970 
971 
972   /*
973   ||Check the tax line should not exist in transaction tax table
974   */
975   PROCEDURE validate_trx_tax_line_exist(
976                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
977                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE,
978                 pn_trx_line_id         IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_LINE_ID%TYPE,
979                 xn_err_flag            IN OUT NOCOPY NUMBER
980   )IS
981 
982   --Cursor define here
983   CURSOR get_tax_ar_count_cur
984   IS
985   SELECT
986          COUNT(CUSTOMER_TRX_LINE_ID)
987   FROM   JAI_AR_TRX_TAX_LINES
988   WHERE  LINK_TO_CUST_TRX_LINE_ID --= pn_trx_line_id;--Commented by zhiwei for bug#12560873
989   --Added by zhiwei for bug#12560873 begin
990   ----------------------------------------
991          IN  (
992              SELECT customer_trx_line_id
993              FROM   ra_customer_trx_lines_all
994              WHERE  customer_trx_id = pn_trx_id
995          );
996   ----------------------------------------
997   --Added by zhiwei for bug#12560873 end
998 
999 
1000   CURSOR get_tax_ap_count_cur
1001   IS
1002   SELECT
1003          COUNT(SOURCE_DOC_LINE_ID)
1004   FROM   JAI_CMN_DOCUMENT_TAXES
1005   WHERE  SOURCE_DOC_ID            = pn_trx_id;
1006   --AND    SOURCE_DOC_LINE_ID       = pn_trx_line_id;--Commented by zhiwei for bug#12560873
1007 
1008   --Variable define here
1009   lv_return_mess         VARCHAR2(1000);
1010   lv_error_mess          VARCHAR2(1000);
1011 
1012   ln_tax_count   NUMBER;
1013 
1014   --Main block
1015   BEGIN
1016      --For AR
1017      IF(GV_IMPORT_MODULE = JAI_CONSTANTS.SOURCE_AR)THEN
1018          OPEN get_tax_ar_count_cur;
1019          FETCH get_tax_ar_count_cur INTO ln_tax_count;
1020          CLOSE get_tax_ar_count_cur;
1021 
1022          IF(NVL(ln_tax_count,-1) > 0 )THEN
1023             xn_err_flag := 1;
1024             lv_return_mess := 'VALIDATION in validate_trx_tax_line_exist : tax lines should not exist in AR transaction With interface_line_id:'||pn_interface_line_id;
1025             lv_error_mess  := 'JAI_EXISTED_TAX';--'Tax is already generated for parent line. Cannot import new tax for this transaction again.';
1026             log_error(
1027                      pv_err_level              => GV_ERROR_TYPE_LINE,
1028                      pn_line_id                => pn_interface_line_id,
1029                      pn_source_line_id         => pn_interface_line_id,
1030                      pv_err_mess               => lv_error_mess,
1031                      pv_invalid_value          => GV_IMPORT_MODULE || ' ' ||pn_trx_line_id
1032             );
1033             record_fnd_log(
1034                   pv_fnd_log   => lv_return_mess
1035             );
1036          END IF;
1037 
1038      END IF;--AR
1039 
1040      --For AP
1041      IF(GV_IMPORT_MODULE = JAI_CONSTANTS.SOURCE_AP)THEN
1042 
1043          OPEN get_tax_ap_count_cur;
1044          FETCH get_tax_ap_count_cur INTO ln_tax_count;
1045          CLOSE get_tax_ap_count_cur;
1046 
1047          IF(NVL(ln_tax_count,-1) > 0 )THEN
1048             xn_err_flag := 1;
1049             lv_return_mess := 'VALIDATION in validate_trx_tax_line_exist : tax lines should not exist in AP transaction With interface_line_id:'||pn_interface_line_id;
1050             lv_error_mess  := 'JAI_EXISTED_TAX';--'Tax is already generated for parent line. Cannot import new tax for this transaction again.';
1051             log_error(
1052                      pv_err_level              => GV_ERROR_TYPE_LINE,
1053                      pn_line_id                => pn_interface_line_id,
1054                      pn_source_line_id         => pn_interface_line_id,
1055                      pv_err_mess               => lv_error_mess,
1056                      pv_invalid_value          => GV_IMPORT_MODULE || ' ' ||pn_trx_line_id
1057             );
1058             record_fnd_log(
1059                   pv_fnd_log   => lv_return_mess
1060             );
1061 
1062          END IF;
1063 
1064      END IF;--AP
1065 
1066      EXCEPTION
1067          WHEN OTHERS THEN
1068               xn_err_flag := 1;
1069               lv_return_mess := 'VALIDATION Exception with SQLERR:' || SUBSTR(SQLERRM,1,230) || ' in validate_trx_tax_line_exist With interface_line_id:'||pn_interface_line_id;
1070               lv_error_mess  := 'JAI_EXISTED_TAX';--'Tax is already generated for parent line. Cannot import new tax for this transaction again.';
1071 
1072               log_error(
1073                  pv_err_level              => GV_ERROR_TYPE_LINE,
1074                  pn_line_id                => pn_interface_line_id,
1075                  pn_source_line_id         => pn_interface_line_id,
1076                  pv_err_mess               => lv_error_mess,
1077                  pv_invalid_value          => pn_interface_line_id
1078               );
1079               record_fnd_log(
1080                  pv_fnd_log   => lv_return_mess
1081               );
1082   END validate_trx_tax_line_exist;
1083 
1084   --Added by zhiwei for Bug#12639945 on 20110624 begin
1085   -------------------------------------------------------------------------------------
1086 
1087   PROCEDURE validate_trx_accted(
1088                     pn_interface_line_id  IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
1089                     pv_import_module      IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
1090                     pn_trx_id             IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
1091                     pn_trx_line_id        IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
1092                     xn_err_flag           IN  OUT NOCOPY NUMBER
1093   )
1094   IS
1095 
1096   CURSOR chk_ar_accted
1097   IS
1098   SELECT
1099           COUNT(1)
1100   FROM    ra_cust_trx_line_gl_dist_all
1101   WHERE   CUSTOMER_TRX_ID      = pn_trx_id
1102   AND     CUSTOMER_TRX_LINE_ID = pn_trx_line_id
1103   AND     ACCOUNT_CLASS        = 'REV'
1104   AND     POSTING_CONTROL_ID   > 0
1105   ;
1106 
1107   CURSOR chk_ap_accted
1108   IS
1109   SELECT
1110          COUNT(1)
1111   FROM   ap_invoice_distributions_all
1112   WHERE  INVOICE_ID           = pn_trx_id
1113   AND    INVOICE_LINE_NUMBER  = pn_trx_line_id
1114   AND    distribution_line_number = 1
1115   AND    NVL(POSTED_FLAG,'N') = 'Y'
1116   ;
1117 
1118   ln_ap_accted number;
1119   ln_ar_accted number;
1120   lv_return_mess         VARCHAR2(1000);
1121   lv_error_mess          VARCHAR2(1000);
1122 
1123   BEGIN
1124 
1125 
1126      IF pv_import_module =  JAI_CONSTANTS.SOURCE_AP THEN
1127           OPEN chk_ap_accted;
1128           FETCH chk_ap_accted INTO ln_ap_accted;
1129           CLOSE chk_ap_accted;
1130 
1131           IF nvl(ln_ap_accted,0) >0 THEN
1132               xn_err_flag := 1;
1133               lv_return_mess := 'VALIDATION in validate_trx_accted : AP invoice has accounted With interface_line_id:'||pn_interface_line_id;
1134               lv_error_mess  := 'JAI_LINE_ACCTED';
1135               log_error(
1136                      pv_err_level              => GV_ERROR_TYPE_LINE,
1137                      pn_line_id                => pn_interface_line_id,
1138                      pn_source_line_id         => pn_interface_line_id,
1139                      pv_err_mess               => lv_error_mess,
1140                      pv_invalid_value          => pn_trx_id
1141               );
1142               record_fnd_log(
1143                      pv_fnd_log   => lv_return_mess
1144               );
1145           END IF;
1146      END IF;
1147      IF pv_import_module =  JAI_CONSTANTS.SOURCE_AR THEN
1148           OPEN chk_ar_accted;
1149           FETCH chk_ar_accted INTO ln_ar_accted;
1150           CLOSE chk_ar_accted;
1151 
1152           IF nvl(ln_ar_accted,0) >0 THEN
1153               xn_err_flag := 1;
1154               lv_return_mess := 'VALIDATION in validate_trx_accted : AR transaction has accounted With interface_line_id:'||pn_interface_line_id;
1155               lv_error_mess  := 'JAI_LINE_ACCTED';
1156               log_error(
1157                      pv_err_level              => GV_ERROR_TYPE_LINE,
1158                      pn_line_id                => pn_interface_line_id,
1159                      pn_source_line_id         => pn_interface_line_id,
1160                      pv_err_mess               => lv_error_mess,
1161                      pv_invalid_value          => pn_trx_id
1162               );
1163               record_fnd_log(
1164                      pv_fnd_log   => lv_return_mess
1165               );
1166           END IF;
1167      END IF;
1168      EXCEPTION
1169          WHEN OTHERS THEN
1170               xn_err_flag := 1;
1171               lv_return_mess := 'VALIDATION EXCEPTION WITH SQLERR:'|| SUBSTR(SQLERRM,1,230) || 'IN validate_trx_accted With interface_line_id:'||pn_interface_line_id;
1172               lv_error_mess  := 'JAI_LINE_ACCTED';
1173               log_error(
1174                            pv_err_level              => GV_ERROR_TYPE_LINE,
1175                            pn_line_id                => pn_interface_line_id,
1176                            pn_source_line_id         => pn_interface_line_id,
1177                            pv_err_mess               => lv_error_mess,
1178                            pv_invalid_value          => pn_trx_id
1179               );
1180               record_fnd_log(
1181                    pv_fnd_log   => lv_return_mess
1182               );
1183   END validate_trx_accted;
1184   -------------------------------------------------------------------------------------
1185   --Added by zhiwei for Bug#12639945 on 20110624 end
1186 
1187 
1188 
1189 
1190 
1191   /*
1192   ||Check transaction status,
1193   ||AP:
1194   ||AR:completed.
1195   */
1196   PROCEDURE validate_trx_status(
1197                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
1198                 pv_import_module       IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
1199                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
1200                 pn_org_id              IN  JAI_INTERFACE_LINES_ALL.ORG_ID%TYPE,
1201                 pv_trx_number          IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE,
1202                 xn_err_flag            IN OUT NOCOPY NUMBER
1203   )IS
1204 
1205   --Cursor define here
1206   CURSOR get_ar_status_cur
1207   IS
1208   SELECT
1209          COMPLETE_FLAG
1210   FROM   RA_CUSTOMER_TRX_ALL
1211   WHERE  CUSTOMER_TRX_ID = pn_trx_id;
1212 
1213   CURSOR get_ap_info_cur
1214   IS
1215   SELECT invoice_amount,
1216          payment_status_flag,
1217          invoice_type_lookup_code
1218   FROM   AP_INVOICES_ALL
1219   WHERE  INVOICE_ID = pn_trx_id;
1220 
1221   CURSOR chk_ar_apply
1222   IS
1223   SELECT
1224          SUM(amount_applied)
1225   FROM   Ar_Payment_Schedules_All
1226   WHERE  org_id          =  pn_org_id
1227   AND    customer_trx_id =  pn_trx_id;
1228 
1229   --Added by zhiwei for Bug#Bug#12639971 on 20110617 begin
1230   -------------------------------------------------------------
1231   CURSOR chk_payment_for_ap
1232   IS
1233   select sum(amount)
1234   from   AP_checks_all
1235   where  check_id
1236   in(
1237          SELECT
1238                AIP.CHECK_ID
1239           FROM ap_invoices_all ai, ap_invoice_payments_all aip
1240          WHERE ai.invoice_id = aip.invoice_id
1241            AND AI.INVOICE_ID = pn_trx_id
1242   );
1243 
1244   ln_payment_sum  number;
1245   -------------------------------------------------------------
1246   --Added by zhiwei for Bug#Bug#12639971 on 20110617 end
1247 
1248 
1249 
1250   --Variable define here
1251   rec_ap_info            get_ap_info_cur%ROWTYPE;
1252   lv_ar_status           VARCHAR2(30);
1253   lv_ap_status           VARCHAR2(30);
1254   ln_exist_flag          NUMBER;
1255   lv_return_mess         VARCHAR2(1000);
1256   lv_error_mess          VARCHAR2(1000);
1257   lv_transaction_num     JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE;
1258   ln_apply_amount        NUMBER;
1259 
1260   --Main block
1261   BEGIN
1262      lv_transaction_num := get_trx_number(pn_interface_line_id);
1263      --For AR
1264      --NEED ADD THE STATUS CHECK FOR APPLIED OR PARTIALLY APPLIED .
1265      IF( pv_import_module = JAI_CONSTANTS.SOURCE_AR)THEN
1266          OPEN get_ar_status_cur;
1267          FETCH get_ar_status_cur INTO lv_ar_status;
1268          CLOSE get_ar_status_cur;
1269 
1270 
1271          IF(NVL(lv_ar_status,'#') <> 'Y')THEN
1272             xn_err_flag := 1;
1273             lv_return_mess := 'VALIDATION in validate_trx_status : AR Transaction status should be completed With interface_line_id:'||pn_interface_line_id;
1274             lv_error_mess  := 'JAI_AR_INCOMPLETE';--'Tax cannot be inserted, AR transaction is incomplete.';
1275             log_error(
1276                  pv_err_level              => GV_ERROR_TYPE_LINE,
1277                  pn_line_id                => pn_interface_line_id,
1278                  pn_source_line_id         => pn_interface_line_id,
1279                  pv_err_mess               => lv_error_mess,
1280                  pv_invalid_value          => pn_trx_id
1281             );
1282             record_fnd_log(
1283                   pv_fnd_log   => lv_return_mess
1284             );
1285          END IF;  --AR
1286 
1287          OPEN chk_ar_apply;
1288          FETCH chk_ar_apply INTO ln_apply_amount;
1289          CLOSE chk_ar_apply;
1290 
1291          IF(NVL(ln_apply_amount,-1) > 0)THEN
1292             xn_err_flag := 1;
1293             lv_return_mess := 'VALIDATION in validate_trx_status : AR Transaction should not be applied With interface_line_id:'||pn_interface_line_id;
1294             lv_error_mess  := 'JAI_AR_APPLIED';--'AR transaction have been applied, cannot inset tax to '||pv_trx_number;
1295             log_error(
1296                  pv_err_level              => GV_ERROR_TYPE_LINE,
1297                  pn_line_id                => pn_interface_line_id,
1298                  pn_source_line_id         => pn_interface_line_id,
1299                  pv_err_mess               => lv_error_mess,
1300                  pv_invalid_value          => pn_trx_id
1301             );
1302             record_fnd_log(
1303                   pv_fnd_log   => lv_return_mess
1304             );
1305          END IF;
1306 
1307      ELSE
1308          --For AP
1309          IF ( pv_import_module = JAI_CONSTANTS.SOURCE_AP) THEN
1310               ln_exist_flag := 0;
1311               FOR rec_ap_info IN get_ap_info_cur
1312               LOOP
1313                  --ln_exist_flag := 1;--Commented by zhiwei for Bug#12639971 on 20110615
1314                  lv_ap_status := ap_invoices_utility_pkg.get_approval_status
1315                                                                         (pn_trx_id,
1316                                                                          rec_ap_info.invoice_amount,
1317                                                                          rec_ap_info.payment_status_flag,
1318                                                                          rec_ap_info.invoice_type_lookup_code);
1319 
1320                   IF(lv_ap_status NOT IN (GV_VALIDATED,GV_UNPAID_PREPAYMENT))THEN
1321                      ln_exist_flag := 1;--Added by zhiwei for Bug#12639971 on 20110615
1322                      xn_err_flag := 1;
1323                      lv_return_mess := 'VALIDATION in validate_trx_status : AP status should in ';
1324                      lv_return_mess := lv_return_mess ||GV_VALIDATED||' or '|| GV_NEED_RE_VALIDATION || ' or '|| GV_NEVER_VALIDATED ||' or '|| GV_UNVALIDATED_PREPAYMENT ||' or '|| GV_UNPAID_PREPAYMENT;
1325                      lv_return_mess := lv_return_mess ||' With interface_line_id:'||pn_interface_line_id;
1326                      --lv_error_mess  := 'JAI_AP_STATUE_ERR';--'AP invoice status is not in '|| GV_VALIDATED || ',' || GV_UNPAID_PREPAYMENT ||' cannot inset tax to '|| lv_transaction_num ;
1327                      lv_error_mess  := 'JAI_AP_STATUS_ERR';--Added by zhiwei for Bug#12584487
1328                      log_error(
1329                              pv_err_level              => GV_ERROR_TYPE_LINE,
1330                              pn_line_id                => pn_interface_line_id,
1331                              pn_source_line_id         => pn_interface_line_id,
1332                              pv_err_mess               => lv_error_mess,
1333                              pv_invalid_value          => pn_trx_id
1334                      );
1335                      record_fnd_log(
1336                           pv_fnd_log   => lv_return_mess
1337                      );
1338                   END IF;
1339 
1340                   --Added by zhiwei for Bug#Bug#12639971 on 20110617 begin
1341                   -------------------------------------------------------------
1342                   Open chk_payment_for_ap;
1343                   fetch chk_payment_for_ap into ln_payment_sum;
1344                   close chk_payment_for_ap;
1345 
1346                   IF(NVL(ln_payment_sum,0) > 0)THEN
1347                      ln_exist_flag := 1;--Added by zhiwei for Bug#12639971 on 20110615
1348                      xn_err_flag := 1;
1349                      lv_return_mess := 'VALIDATION in validate_trx_status : AP status should in ';
1350                      lv_return_mess := lv_return_mess ||GV_VALIDATED||' or '|| GV_NEED_RE_VALIDATION || ' or '|| GV_NEVER_VALIDATED ||' or '|| GV_UNVALIDATED_PREPAYMENT ||' or '|| GV_UNPAID_PREPAYMENT;
1351                      lv_return_mess := lv_return_mess ||' With interface_line_id:'||pn_interface_line_id;
1352                      --lv_error_mess  := 'JAI_AP_STATUE_ERR';--'AP invoice status is not in '|| GV_VALIDATED || ',' || GV_UNPAID_PREPAYMENT ||' cannot inset tax to '|| lv_transaction_num ;
1353                      lv_error_mess  := 'JAI_AP_STATUS_ERR';--Added by zhiwei for Bug#12584487
1354                      log_error(
1355                              pv_err_level              => GV_ERROR_TYPE_LINE,
1356                              pn_line_id                => pn_interface_line_id,
1357                              pn_source_line_id         => pn_interface_line_id,
1358                              pv_err_mess               => lv_error_mess,
1359                              pv_invalid_value          => pn_trx_id
1360                      );
1361                      record_fnd_log(
1362                           pv_fnd_log   => lv_return_mess
1363                      );
1364                   END IF;
1365                   -------------------------------------------------------------
1366                   --Added by zhiwei for Bug#Bug#12639971 on 20110617 end
1367 
1368 
1369               END LOOP;
1370 
1371               /*IF(ln_exist_flag = 1)THEN--Commented by zhiwei for Bug#Bug#12639971 on 20110617 begin
1372                  xn_err_flag := 1;
1373                  lv_return_mess := 'VALIDATION in validate_trx_status : AP Transaction can not get AP info With interface_line_id:'||pn_interface_line_id;
1374                  --lv_error_mess  := 'JAI_AP_STATUE_ERR';--'AP invoice status is not in '|| GV_VALIDATED || ',' || GV_UNPAID_PREPAYMENT ||' cannot inset tax to '|| lv_transaction_num ;
1375                  lv_error_mess  := 'JAI_AP_STATUS_ERR';--Added by zhiwei for Bug#12584487
1376                  log_error(
1377                       pv_err_level              => GV_ERROR_TYPE_LINE,
1378                       pn_line_id                => pn_interface_line_id,
1379                       pn_source_line_id         => pn_interface_line_id,
1380                       pv_err_mess               => lv_error_mess,
1381                       pv_invalid_value          => null
1382                  );
1383                  record_fnd_log(
1384                       pv_fnd_log   => lv_return_mess
1385                  );
1386 
1387               END IF; */  --Commented by zhiwei for Bug#Bug#12639971 on 20110617 end
1388 
1389          END IF;--AP
1390      END IF;
1391      EXCEPTION
1392          WHEN OTHERS THEN
1393               xn_err_flag := 1;
1394               lv_return_mess := 'VALIDATION EXCEPTION WITH SQLERR:'|| SUBSTR(SQLERRM,1,230) || 'IN VALIDATE_TRX_STATUS With interface_line_id:'||pn_interface_line_id;
1395               --lv_error_mess  := 'JAI_AP_STATUE_ERR';--'AP invoice status is not in '|| GV_VALIDATED || ',' || GV_UNPAID_PREPAYMENT ||' cannot inset tax to '|| lv_transaction_num ;
1396               lv_error_mess  := 'JAI_AP_STATUS_ERR';--Added by zhiwei for Bug#12584487
1397               log_error(
1398                            pv_err_level              => GV_ERROR_TYPE_LINE,
1399                            pn_line_id                => pn_interface_line_id,
1400                            pn_source_line_id         => pn_interface_line_id,
1401                            pv_err_mess               => lv_error_mess,
1402                            pv_invalid_value          => pn_interface_line_id
1403               );
1404               record_fnd_log(
1405                    pv_fnd_log   => lv_return_mess
1406               );
1407 
1408   END validate_trx_status;
1409 
1410 
1411 
1412   /*
1413   ||Check transaction status,
1414   ||AP:
1415   ||AR:completed.
1416   */
1417   PROCEDURE validate_trx_period(
1418                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
1419                 pv_import_module       IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
1420                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
1421                 xn_err_flag            IN OUT NOCOPY NUMBER
1422   )IS
1423 
1424   CURSOR get_ar_info_cur
1425   IS
1426   SELECT
1427          trx.set_of_books_id  ,
1428          dis.gl_date
1429   FROM   RA_CUSTOMER_TRX_ALL          trx,
1430          RA_CUST_TRX_LINE_GL_DIST_ALL dis
1431   WHERE  trx.customer_trx_id = dis.customer_trx_id
1432   AND    trx.CUSTOMER_TRX_ID = pn_trx_id
1433   AND    dis.ACCOUNT_CLASS = 'REC'
1434   AND    dis.LATEST_REC_FLAG = 'Y';
1435 
1436   CURSOR chk_period_cur(
1437                     cn_application_id  IN NUMBER,
1438                     cd_gl_date         IN AP_INVOICES_ALL.GL_DATE%TYPE,
1439                     cn_book_id         IN AP_INVOICES_ALL.SET_OF_BOOKS_ID%TYPE
1440   )
1441   IS
1442   SELECT
1443          CLOSING_STATUS
1444   FROM   GL_PERIOD_STATUSES
1445   WHERE  APPLICATION_ID = cn_application_id
1446   AND    cd_gl_date BETWEEN START_DATE AND END_DATE
1447   AND    SET_OF_BOOKS_ID = cn_book_id;
1448 
1449   CURSOR get_ap_info_cur
1450   IS
1451   SELECT
1452          set_of_books_id  ,
1453          gl_date
1454   FROM   AP_INVOICES_ALL
1455   WHERE  INVOICE_ID = pn_trx_id;
1456 
1457   --Variable define here
1458   lv_return_mess         VARCHAR2(1000);
1459   lv_error_mess          VARCHAR2(1000);
1460   rec_get_info           get_ar_info_cur%ROWTYPE;
1461   rec_ap_info            get_ap_info_cur%ROWTYPE;
1462   lv_period_status       VARCHAR2(10);
1463   ln_exist_flag          NUMBER;
1464 
1465   --Main block
1466   BEGIN
1467 
1468      --For AR
1469      IF( pv_import_module = JAI_CONSTANTS.SOURCE_AR)THEN
1470 
1471          OPEN get_ar_info_cur;
1472          FETCH get_ar_info_cur INTO rec_get_info;
1473          CLOSE get_ar_info_cur;
1474 
1475          IF(NVL(rec_get_info.set_of_books_id,-1) = -1)THEN
1476             xn_err_flag := 1;
1477             lv_return_mess := 'VALIDATION in validate_trx_period : AR Transaction book id should not be null With interface_line_id:'||pn_interface_line_id;
1478             lv_error_mess := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1479             log_error(
1480                  pv_err_level              => GV_ERROR_TYPE_LINE,
1481                  pn_line_id                => pn_interface_line_id,
1482                  pn_source_line_id         => pn_interface_line_id,
1483                  pv_err_mess               => lv_error_mess,
1484                  pv_invalid_value          => pn_trx_id
1485             );
1486             record_fnd_log(
1487                  pv_fnd_log   => lv_return_mess
1488             );
1489 
1490          END IF;
1491 
1492          IF(rec_get_info.gl_date is null)THEN
1493             xn_err_flag := 1;
1494             lv_return_mess := 'VALIDATION in validate_trx_period : AR Transaction GL date should not be null With interface_line_id:'||pn_interface_line_id;
1495             lv_error_mess := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1496 
1497             log_error(
1498                  pv_err_level              => GV_ERROR_TYPE_LINE,
1499                  pn_line_id                => pn_interface_line_id,
1500                  pn_source_line_id         => pn_interface_line_id,
1501                  pv_err_mess               => lv_error_mess,
1502                  pv_invalid_value          => pn_trx_id
1503             );
1504             record_fnd_log(
1505                  pv_fnd_log   => lv_return_mess
1506             );
1507 
1508          END IF;
1509 
1510          OPEN chk_period_cur(
1511               cn_application_id  => GN_AR_APPLICATION_ID,
1512               cd_gl_date         => rec_get_info.gl_date,
1513               cn_book_id         => rec_get_info.set_of_books_id
1514          );
1515          FETCH chk_period_cur INTO lv_period_status;
1516          CLOSE chk_period_cur;
1517 
1518          --Check the AR module period
1519          IF(NVL(lv_period_status,'#') NOT IN (GV_PERIOD_CLOSE_STATUS, GV_PERIOD_FUTURE_STATUS))THEN
1520             xn_err_flag := 1;
1521             lv_return_mess := 'VALIDATION in validate_trx_period : AR Transaction period should be opened With interface_line_id:'||pn_interface_line_id;
1522             lv_error_mess := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1523 
1524             log_error(
1525                  pv_err_level              => GV_ERROR_TYPE_LINE,
1526                  pn_line_id                => pn_interface_line_id,
1527                  pn_source_line_id         => pn_interface_line_id,
1528                  pv_err_mess               => lv_error_mess,
1529                  pv_invalid_value          => pn_trx_id
1530              );
1531             record_fnd_log(
1532                  pv_fnd_log   => lv_return_mess
1533             );
1534 
1535          END IF;
1536 
1537      ELSE
1538          --For AP
1539          IF ( pv_import_module = JAI_CONSTANTS.SOURCE_AP) THEN
1540 
1541                OPEN get_ap_info_cur;
1542                FETCH get_ap_info_cur INTO rec_get_info;
1543                CLOSE get_ap_info_cur;
1544 
1545                IF(NVL(rec_get_info.set_of_books_id,-1) = -1)THEN
1546                   xn_err_flag := 1;
1547                   lv_return_mess := 'VALIDATION in validate_trx_period : AP Transaction book id should not be null With interface_line_id:'||pn_interface_line_id;
1548                   lv_error_mess  := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1549 
1550                   log_error(
1551                        pv_err_level              => GV_ERROR_TYPE_LINE,
1552                        pn_line_id                => pn_interface_line_id,
1553                        pn_source_line_id         => pn_interface_line_id,
1554                        pv_err_mess               => lv_error_mess,
1555                        pv_invalid_value          => pn_trx_id
1556                   );
1557                   record_fnd_log(
1558                        pv_fnd_log   => lv_return_mess
1559                   );
1560                END IF;
1561 
1562                IF(rec_get_info.gl_date is null)THEN
1563                   xn_err_flag := 1;
1564                   lv_return_mess := 'VALIDATION in validate_trx_period : AP Transaction GL date should not be null With interface_line_id:'||pn_interface_line_id;
1565                   lv_error_mess  := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1566 
1567                   log_error(
1568                        pv_err_level              => GV_ERROR_TYPE_LINE,
1569                        pn_line_id                => pn_interface_line_id,
1570                        pn_source_line_id         => pn_interface_line_id,
1571                        pv_err_mess               => lv_error_mess,
1572                        pv_invalid_value          => pn_trx_id
1573                   );
1574                   record_fnd_log(
1575                        pv_fnd_log   => lv_return_mess
1576                   );
1577 
1578                END IF;
1579 
1580                OPEN chk_period_cur(
1581                     cn_application_id  => GN_AP_APPLICATION_ID,
1582                     cd_gl_date         => rec_get_info.gl_date,
1583                     cn_book_id         => rec_get_info.set_of_books_id
1584                );
1585                FETCH chk_period_cur INTO lv_period_status;
1586                CLOSE chk_period_cur;
1587 
1588                --Check the AP module period
1589                IF(NVL(lv_period_status,'#') NOT IN (GV_PERIOD_CLOSE_STATUS, GV_PERIOD_FUTURE_STATUS))THEN
1590                   xn_err_flag := 1;
1591                   lv_return_mess := 'VALIDATION in validate_trx_period : AP Transaction period should be opened With interface_line_id:'||pn_interface_line_id;
1592                   lv_error_mess  := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1593 
1594                   log_error(
1595                        pv_err_level              => GV_ERROR_TYPE_LINE,
1596                        pn_line_id                => pn_interface_line_id,
1597                        pn_source_line_id         => pn_interface_line_id,
1598                        pv_err_mess               => lv_error_mess,
1599                        pv_invalid_value          => pn_trx_id
1600                   );
1601                   record_fnd_log(
1602                        pv_fnd_log   => lv_return_mess
1603                   );
1604                END IF;
1605 
1606          END IF; --AP
1607      END IF;
1608 
1609      --Check the GL period
1610      IF(rec_get_info.gl_date IS NOT NULL and rec_get_info.set_of_books_id IS NOT NULL)THEN
1611 
1612          OPEN chk_period_cur(
1613               cn_application_id  => GN_GL_APPLICATION_ID,
1614               cd_gl_date         => rec_get_info.gl_date,
1615               cn_book_id         => rec_get_info.set_of_books_id
1616          );
1617          FETCH chk_period_cur INTO lv_period_status;
1618          CLOSE chk_period_cur;
1619 
1620          IF(NVL(lv_period_status,'#') NOT IN (GV_PERIOD_CLOSE_STATUS, GV_PERIOD_FUTURE_STATUS))THEN
1621              xn_err_flag := 1;
1622              lv_return_mess := 'VALIDATION in validate_trx_period : The period of GL according to The transaction of '|| pv_import_module ||' should be opened With interface_line_id:'||pn_interface_line_id;
1623              lv_error_mess  := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1624              log_error(
1625                      pv_err_level              => GV_ERROR_TYPE_LINE,
1626                      pn_line_id                => pn_interface_line_id,
1627                      pn_source_line_id         => pn_interface_line_id,
1628                      pv_err_mess               => lv_error_mess,
1629                      pv_invalid_value          => pn_trx_id
1630              );
1631              record_fnd_log(
1632                   pv_fnd_log   => lv_return_mess
1633              );
1634 
1635          END IF;
1636 
1637      END IF;
1638 
1639      EXCEPTION
1640          WHEN OTHERS THEN
1641               xn_err_flag := 1;
1642               lv_return_mess := 'VALIDATION Exception with SQLERR: '|| SUBSTR(SQLERRM,1,230) || ' IN validate_trx_period With interface_line_id:'||pn_interface_line_id;
1643               lv_error_mess  := 'JAI_PERIOD';--'No open period found with date entered for the transaction.';
1644 
1645               log_error(
1646                            pv_err_level              => GV_ERROR_TYPE_LINE,
1647                            pn_line_id                => pn_interface_line_id,
1648                            pn_source_line_id         => pn_interface_line_id,
1649                            pv_err_mess               => lv_error_mess,
1650                            pv_invalid_value          => pn_interface_line_id
1651               );
1652               record_fnd_log(
1653                    pv_fnd_log   => lv_return_mess
1654               );
1655 
1656   END validate_trx_period;
1657 
1658   /*
1659   ||Check the tax line no is not null in tax lines
1660   */
1661   PROCEDURE validate_tax_line_no(
1662                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
1663                 pn_tax_line_id         IN  JAI_INTERFACE_TAX_LINES_ALL.INTERFACE_TAX_LINE_ID%TYPE,
1664                 pn_tax_line_no         IN  JAI_INTERFACE_TAX_LINES_ALL.TAX_LINE_NO%TYPE,
1665                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
1666                 xn_err_flag            IN OUT NOCOPY NUMBER
1667   )
1668   IS
1669   --Variable define here
1670   lv_return_mess         VARCHAR2(1000);
1671   lv_error_mess          VARCHAR2(1000);
1672   --Main block
1673   BEGIN
1674 
1675      IF(NVL(pn_tax_line_no,-1) <= 0)THEN
1676         xn_err_flag := 1;
1677         lv_return_mess := 'VALIDATION in validate_tax_line_no : tax line no should not be null With interface_tax_line_id:'||pn_tax_line_id;
1678         lv_error_mess  := 'JAI_TAX_INACTIVE';--'Invalid tax line no';
1679         log_error(
1680                  pv_err_level              => GV_ERROR_TYPE_TAX,
1681                  pn_line_id                => pn_interface_line_id,
1682                  pn_source_line_id         => pn_tax_line_id,
1683                  pv_err_mess               => lv_error_mess,
1684                  pv_invalid_value          => pn_tax_line_id
1685         );
1686         record_fnd_log(
1687                    pv_fnd_log   => lv_return_mess
1688         );
1689      END IF;
1690      EXCEPTION
1691          WHEN OTHERS THEN
1692              xn_err_flag := 1;
1693              lv_return_mess := 'VALIDATION Exception with SQLERR: '|| SUBSTR(SQLERRM,1,230) || ' in validate_tax_line_no With interface_tax_line_id:'||pn_tax_line_id;
1694              lv_error_mess  := 'JAI_TAX_INACTIVE';--'Invalid tax line no';
1695 
1696              log_error(
1697                  pv_err_level              => GV_ERROR_TYPE_TAX,
1698                  pn_line_id                => pn_interface_line_id,
1699                  pn_source_line_id         => pn_tax_line_id,
1700                  pv_err_mess               => lv_error_mess,
1701                  pv_invalid_value          => pn_tax_line_id
1702              );
1703              record_fnd_log(
1704                        pv_fnd_log   => lv_return_mess
1705              );
1706   END validate_tax_line_no;
1707 
1708   /*
1709    * Check the external tax code
1710    * 1. should find mapping relationship in mapping table
1711    * 2. inclusive flag of tax should be same as the ebs system
1712    * 3. tax should in available term ,startdate and enddate
1713    */
1714   PROCEDURE validate_tax_code(
1715                 pr_interface_lines     IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
1716                 pr_tax_lines           IN  JAI_INTERFACE_TAX_LINES_ALL%ROWTYPE,
1717                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
1718                 xn_err_flag            IN  OUT NOCOPY NUMBER,
1719                 xn_tax_id              OUT NOCOPY NUMBER
1720   )
1721   IS
1722   --Cursor define here
1723   CURSOR get_tax_id_from_mapping_cur(
1724             cn_org_id            IN JAI_INTERFACE_LINES_ALL.ORG_ID%TYPE,
1725             cv_external_tax_code IN JAI_INTERFACE_TAX_LINES_ALL.EXTERNAL_TAX_CODE%TYPE,
1726             cv_taxable_event     IN JAI_INTERFACE_LINES_ALL.TAXABLE_EVENT%TYPE
1727   )IS
1728   SELECT TAX_ID
1729   FROM   JAI_IM_TAX_MAPPING
1730   WHERE  ORG_ID            = cn_org_id
1731   AND    EXTERNAL_TAX_CODE = cv_external_tax_code
1732   AND    TAXABLE_EVENT     = cv_taxable_event;
1733 
1734   CURSOR  get_tax_inclu_flag_cur(cn_tax_id IN NUMBER) IS
1735   SELECT inclusive_tax_flag
1736        , start_date
1737        , end_date
1738   FROM   JAI_CMN_TAXES_ALL
1739   WHERE  TAX_ID = cn_tax_id
1740   AND    ORG_ID = pr_interface_lines.ORG_ID;
1741 
1742   CURSOR get_use_flag IS
1743   SELECT distinct(use_ebs_tax)
1744   FROM   JAI_IM_TAX_MAPPING
1745   WHERE  org_id = pr_interface_lines.ORG_ID
1746   AND    taxable_event = pr_interface_lines.taxable_event;
1747 
1748   CURSOR get_tax_id_rec(
1749          cn_tax_id IN JAI_CMN_TAXES_ALL.TAX_NAME%TYPE) IS
1750   SELECT tax_id, tax_name
1751   FROM   JAI_CMN_TAXES_ALL
1752   WHERE  tax_id = cn_tax_id;
1753 
1754   --Variable define here
1755   rec_tax_id            get_tax_id_from_mapping_cur%ROWTYPE;
1756   ln_tax_id             NUMBER;
1757   lv_tax_name           JAI_CMN_TAXES_ALL.tax_name%TYPE;
1758   rec_tax_detail        get_tax_inclu_flag_cur%ROWTYPE;
1759 
1760   ln_cmn_inclusive_flag JAI_CMN_TAXES_ALL.INCLUSIVE_TAX_FLAG%TYPE;
1761   ld_start_date         JAI_CMN_TAXES_ALL.START_DATE%TYPE;
1762   ld_end_date           JAI_CMN_TAXES_ALL.END_DATE%TYPE;
1763 
1764   lv_return_mess         VARCHAR2(1000);
1765   lv_error_mess          VARCHAR2(1000);
1766 
1767   ln_exist_flag          NUMBER;
1768 
1769   rec_ebs_tax_id         get_tax_id_rec%ROWTYPE;
1770   lv_use_flag            VARCHAR2(1);
1771   ln_count               NUMBER := 0;
1772   --Main block
1773   BEGIN
1774 
1775      ln_exist_flag := 0;
1776 
1777      OPEN get_use_flag;
1778      FETCH get_use_flag INTO lv_use_flag;
1779      CLOSE get_use_flag;
1780      --If there is not mapping relationship in mapping table
1781      IF(NVL(lv_use_flag,'#') = '#')THEN
1782 
1783          xn_err_flag := 1;
1784          lv_return_mess := 'VALIDATION in validate_tax_code : No mapping setup for '|| pr_interface_lines.taxable_event ||' with this OU :'|| pr_interface_lines.ORG_ID  ||' With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1785          /*
1786          lv_error_mess  := 'This Tax code has not been mapped';
1787          log_error(
1788                  pv_err_level              => GV_ERROR_TYPE_TAX,
1789                  pn_line_id                => pr_interface_lines.interface_line_id,
1790                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1791                  pv_err_mess               => lv_error_mess,
1792                  pv_invalid_value          => pr_tax_lines.external_tax_code
1793          );*/
1794          record_fnd_log(
1795                  pv_fnd_log   => lv_return_mess
1796          );
1797      ELSE
1798          IF(NVL(lv_use_flag,'#') = 'Y')THEN
1799              --Use EBS tax name
1800              FOR rec_ebs_tax_id IN get_tax_id_rec(
1801                  --modified by Xiao for bug#11903425
1802                  pr_tax_lines.tax_id)
1803              LOOP
1804                  ln_exist_flag := 1;
1805                  ln_tax_id := rec_ebs_tax_id.tax_id;
1806                  lv_tax_name := rec_ebs_tax_id.tax_name;
1807              END LOOP;
1808          ELSE
1809 
1810              /* When user does not use ebs tax, if default tax category is proveded, external tax code
1811               * may leave null.
1812               * So validation on tax mapping for external tax code is only for the same that is not null.
1813               * For now, there is no above case. So commented out.
1814               */
1815              --Added IF condition by Xiao for bug#11903425
1816              --IF pr_tax_lines.external_tax_code IS NOT NULL THEN
1817                --Use mapping relatioinship which is set in mapping table
1818                FOR rec_tax_id IN get_tax_id_from_mapping_cur(
1819                    pr_interface_lines.org_id,
1820                    pr_tax_lines.external_tax_code,
1821                    pr_interface_lines.taxable_event)
1822                LOOP
1823                    ln_exist_flag := 1;
1824                    ln_tax_id := rec_tax_id.tax_id;
1825                    ln_count := ln_count +1;
1826                END LOOP;
1827              /*ELSE --This case will happen when do not use ebs tax code, by taxes are inserted
1828                   --by default tax category. external tax code will leave NULL, need to validate.
1829                FOR rec_tax_id IN get_tax_id_rec(pr_tax_lines.tax_id)
1830                LOOP
1831                    ln_exist_flag := 1;
1832                    ln_tax_id := rec_tax_id.tax_id;
1833                    lv_tax_name := rec_ebs_tax_id.tax_name;
1834                    ln_count := ln_count +1;
1835                END LOOP;
1836              END IF;*/
1837          END IF;
1838      END IF;
1839 
1840      --EXIT WHEN get_tax_id_from_mapping_cur%NOTFOUND;
1841      --CHECK THE EXTERNAL TAX CODE SHOULD FIND MAPPING RELATIONSHIP
1842      IF( ln_exist_flag = 0 )THEN
1843            xn_err_flag := 1;
1844            lv_return_mess := 'VALIDATION in validate_tax_code : external tax code can not found Mapping tax With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1845            lv_error_mess  := 'JAI_TAX_UNMAPPED';--'This Tax code has not been mapped.'
1846            log_error(
1847                    pv_err_level              => GV_ERROR_TYPE_TAX,
1848                    pn_line_id                => pr_interface_lines.interface_line_id,
1849                    pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1850                    pv_err_mess               => lv_error_mess,
1851                    pv_invalid_value          => nvl(pr_tax_lines.external_tax_code, lv_tax_name)
1852            );
1853            record_fnd_log(
1854                    pv_fnd_log   => lv_return_mess
1855            );
1856 
1857      ELSE
1858          IF ln_count > 1 THEN
1859             xn_err_flag := 1;
1860             lv_return_mess := 'VALIDATION in validate_tax_code : Imported Tax Code is not unique for one Operating Unit and Taxable Event combination With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1861             lv_error_mess  := 'JAI_TAX_MULTIPLE_MAPPED';--'Imported Tax Code should unique for one Operating Unit with Taxable Event combination value.'
1862             log_error(
1863                      pv_err_level              => GV_ERROR_TYPE_TAX,
1864                      pn_line_id                => pr_interface_lines.interface_line_id,
1865                      pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1866                      pv_err_mess               => lv_error_mess,
1867                      pv_invalid_value          => nvl(pr_tax_lines.external_tax_code, lv_tax_name)
1868             );
1869             record_fnd_log(
1870                      pv_fnd_log   => lv_return_mess
1871             );
1872          END IF;
1873 
1874          ln_exist_flag := 0;
1875 
1876          FOR rec_tax_detail IN get_tax_inclu_flag_cur(ln_tax_id)
1877          LOOP
1878              ln_exist_flag := 1;
1879              ln_cmn_inclusive_flag := rec_tax_detail.INCLUSIVE_TAX_FLAG;
1880              ld_start_date         := rec_tax_detail.START_DATE;
1881              ld_end_date           := rec_tax_detail.END_DATE;
1882 
1883              --Comment out by Xiao for bug#11903425, do not need to check the of consistence of inclusive tax flag
1884              --Check the inclusive flag
1885              /*IF(NVL(ln_cmn_inclusive_flag,'N') <> NVL(pr_tax_lines.inclusive_tax_flag,'N'))THEN
1886                 xn_err_flag := 1;
1887                 lv_return_mess := 'VALIDATION in validate_tax_code : The inclusive flag of external tax code is not same as the tax setup With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1888                 lv_error_mess  := 'JAI_INCLUSIVE_FLAG_INVALID';--'Inclusive flag is not as same as tax setup of EBS';
1889                 log_error(
1890                          pv_err_level              => GV_ERROR_TYPE_TAX,
1891                          pn_line_id                => pr_interface_lines.interface_line_id,
1892                          pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1893                          pv_err_mess               => lv_error_mess,
1894                          pv_invalid_value          => pr_tax_lines.external_tax_code
1895                 );
1896                 record_fnd_log(
1897                          pv_fnd_log   => lv_return_mess
1898                 );
1899              END IF;*/
1900 
1901              --Check the tax in the range of startdate
1902              IF(ld_start_date IS NOT NULL)THEN
1903                  IF(SYSDATE < ld_start_date)THEN
1904                      xn_err_flag := 1;
1905                      lv_return_mess := 'VALIDATION in validate_tax_code : Tax is out of range of startdate With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1906                      lv_error_mess  := 'JAI_TAX_INACTIVE';--'Inactive Tax code.'
1907                      log_error(
1908                          pv_err_level              => GV_ERROR_TYPE_TAX,
1909                          pn_line_id                => pr_interface_lines.interface_line_id,
1910                          pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1911                          pv_err_mess               => lv_error_mess,
1912                          pv_invalid_value          => nvl(pr_tax_lines.external_tax_code, lv_tax_name)
1913                      );
1914                      record_fnd_log(
1915                              pv_fnd_log   => lv_return_mess
1916                      );
1917                  END IF;
1918 
1919              END IF;
1920              --Check the tax in the range of enddate
1921              IF(ld_end_date IS NOT NULL)THEN
1922                  IF(SYSDATE > ld_end_date)THEN
1923                      xn_err_flag := 1;
1924                      lv_return_mess := 'VALIDATION in validate_tax_code : Tax is out of range of enddate With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1925                      lv_error_mess  := 'JAI_TAX_INACTIVE';--'Inactive Tax code.'
1926 
1927                      log_error(
1928                          pv_err_level              => GV_ERROR_TYPE_TAX,
1929                          pn_line_id                => pr_interface_lines.interface_line_id,
1930                          pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1931                          pv_err_mess               => lv_error_mess,
1932                          pv_invalid_value          => nvl(pr_tax_lines.external_tax_code, lv_tax_name)
1933                      );
1934                      record_fnd_log(
1935                              pv_fnd_log   => lv_return_mess
1936                      );
1937                  END IF;
1938 
1939              END IF;
1940              xn_tax_id := ln_tax_id; --output the tax id
1941 
1942          END LOOP;
1943 
1944          IF( ln_exist_flag = 0)THEN
1945              xn_err_flag := 1;
1946              lv_return_mess := 'VALIDATION in validate_tax_code : Tax can not be found from Tax Definition With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1947              lv_error_mess  := 'JAI_TAX_UNMAPPED';--'This Tax code has not been mapped';
1948 
1949              log_error(
1950                      pv_err_level              => GV_ERROR_TYPE_TAX,
1951                      pn_line_id                => pr_interface_lines.interface_line_id,
1952                      pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1953                      pv_err_mess               => lv_error_mess,
1954                      pv_invalid_value          => nvl(pr_tax_lines.external_tax_code, lv_tax_name)
1955              );
1956              record_fnd_log(
1957                      pv_fnd_log   => lv_return_mess
1958              );
1959          END IF;
1960 
1961      END IF;--Find Mapping tax id
1962      EXCEPTION
1963         WHEN OTHERS THEN
1964            xn_err_flag := 1;
1965            lv_return_mess := 'VALIDATION Exception with SQLERR: '|| SUBSTR(SQLERRM,1,230) || ' in validate_tax_code With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
1966            lv_error_mess  := 'JAI_TAX_UNMAPPED';--'This Tax code has not been mapped';
1967 
1968            log_error(
1969                  pv_err_level              => GV_ERROR_TYPE_TAX,
1970                  pn_line_id                => pr_interface_lines.interface_line_id,
1971                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
1972                  pv_err_mess               => lv_error_mess,
1973                  pv_invalid_value          => nvl(pr_tax_lines.external_tax_code, lv_tax_name)
1974            );
1975            record_fnd_log(
1976                  pv_fnd_log   => lv_return_mess
1977            );
1978   END validate_tax_code;
1979 
1980 
1981   /*
1982   ||Check the ccid of distribution line is available
1983   */
1984   PROCEDURE validate_dist_info(
1985                 pr_interface_lines IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
1986                 pr_tax_lines       IN  JAI_INTERFACE_TAX_LINES_ALL%ROWTYPE,
1987                 xn_err_flag        IN OUT NOCOPY NUMBER
1988   ) IS
1989 
1990   lv_return_mess         VARCHAR2(1000);
1991   lv_error_mess          VARCHAR2(1000);
1992 
1993   lv_return_code         VARCHAR2(10);
1994   ln_exist_flag          NUMBER;
1995 
1996   BEGIN
1997 
1998      IF (pr_interface_lines.taxable_event = GV_TAXABLE_EVENT_EXTERNAL) THEN
1999         IF(nvl(pr_tax_lines.code_combination_id,-1) = -1)THEN
2000                xn_err_flag := 1;
2001                lv_return_mess := 'VALIDATION in validate_dist_line : Distribution info should not be null With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2002                lv_error_mess  := 'JAI_ACCOUNT_MISSING';--'Please provide accounting for External event.';
2003                log_error(
2004                      pv_err_level              => GV_ERROR_TYPE_TAX,
2005                      pn_line_id                => pr_interface_lines.interface_line_id,
2006                      pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2007                      pv_err_mess               => lv_error_mess,
2008                      pv_invalid_value          => pr_tax_lines.interface_tax_line_id
2009                );
2010                record_fnd_log(
2011                      pv_fnd_log   => lv_return_mess
2012                );
2013         ELSE
2014                --Check the ccid is available.
2015                validate_ccid_id_suitable(
2016                      pn_interface_line_id   =>  pr_interface_lines.interface_line_id,
2017                      pn_tax_line_id         =>  pr_tax_lines.INTERFACE_TAX_LINE_ID,
2018                      pn_code_combination_id =>  pr_tax_lines.CODE_COMBINATION_ID,
2019                      xn_err_flag            =>  xn_err_flag
2020                );
2021         END IF;
2022 
2023         IF(nvl(pr_tax_lines.tax_amount,-1) = -1)THEN
2024             --For external , if tax amount is null , just warning , proceed .
2025             --xn_err_flag := 1; --Commented by bug#12589785
2026             --Added by zhiwei for bug#12589785 begin
2027             -----------------------------------------------------------
2028             update jai_interface_tax_lines_all
2029             set    tax_amount = 0
2030             where  interface_tax_line_id = pr_tax_lines.interface_tax_line_id
2031             and    interface_line_id     = pr_interface_lines.interface_line_id
2032             and    nvl(tax_amount,-1) = -1;
2033             -----------------------------------------------------------
2034             --Added by zhiwei for bug#12589785 end
2035 
2036             lv_return_mess := 'VALIDATION in validate_dist_info : tax amount should not be null With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2037             lv_error_mess  := 'JAI_TAX_AMOUNT_MISSING';--'Tax line amount is Null, please correct it.';
2038             log_error(
2039                   pv_err_level              => GV_ERROR_TYPE_TAX,
2040                   pn_line_id                => pr_interface_lines.interface_line_id,
2041                   pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2042                   pv_err_mess               => lv_error_mess,
2043                   pv_invalid_value          => pr_tax_lines.tax_amount
2044             );
2045             record_fnd_log(
2046                   pv_fnd_log   => lv_return_mess
2047             );
2048         END IF;
2049      END IF;
2050      EXCEPTION
2051          WHEN OTHERS THEN
2052              xn_err_flag := 1;
2053              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_dist_info With interface_tax_line_id:'||pr_tax_lines.INTERFACE_TAX_LINE_ID;
2054              lv_error_mess  := 'JAI_ACCOUNT_MISSING';--'Please provide accounting for External event.';
2055              log_error(
2056                      pv_err_level              => GV_ERROR_TYPE_TAX,
2057                      pn_line_id                => pr_interface_lines.interface_line_id,
2058                      pn_source_line_id         => pr_tax_lines.INTERFACE_TAX_LINE_ID,
2059                      pv_err_mess               => lv_error_mess,
2060                      pv_invalid_value          => pr_tax_lines.CODE_COMBINATION_ID
2061               );
2062               record_fnd_log(
2063                      pv_fnd_log   => lv_return_mess
2064               );
2065   END validate_dist_info;
2066 
2067   /*
2068    * Check the tax regime should in constains
2069    * AP NOT IN
2070    *       ('TDS', 'EXCISE', 'EXCISE_EDUCATION_CESS', 'EXCISE_SH_EDU_CESS',
2071    *       'ADDL. EXCISE', 'ADDITIONAL_CVD', 'CUSTOMS_EDUCATION_CESS',
2072    *       'CUSTOMS_SH_EDU_CESS', 'CVD', 'CVD_EDUCATION_CESS',
2073    *       'CVD_SH_EDU_CESS', 'CUSTOMS', 'OCTRAI', 'INSURANCE',
2074    *       'TURNOVER TAX','OTHER EXCISE','VAT', 'VAT_REVERSAL')
2075    * AP NOT IN
2076    *       Tax types under CUSTOMS Regime
2077    * AR NOT IN
2078    *       Tax types under CUSTOMS Regime
2079    */
2080   PROCEDURE validate_tax_constrain(
2081                 pr_interface_lines     IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
2082                 pr_tax_lines           IN  JAI_INTERFACE_TAX_LINES_ALL%ROWTYPE,
2083                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
2084                 xn_err_flag            IN OUT NOCOPY NUMBER,
2085                 pn_tax_id              IN NUMBER
2086   )
2087   IS
2088   --Cursor define here
2089   CURSOR chk_ap_tax_type_cur
2090   IS
2091   SELECT
2092          COUNT(TAX_ID)
2093     from JAI_CMN_TAXES_ALL
2094    WHERE org_id = pr_interface_lines.ORG_ID
2095    --Commented by zhiwei for Bug#12561573 begin
2096    ----------------------------------------------------
2097      --and (end_date >= trunc(sysdate) or end_date is null)
2098      --and start_date <= trunc(sysdate)
2099    ----------------------------------------------------
2100    --Commented by zhiwei for Bug#12561573 end
2101      and tax_id = pn_tax_id
2102      and ( upper(tax_type) IN
2103          ('TDS', 'EXCISE', 'EXCISE_EDUCATION_CESS', 'EXCISE_SH_EDU_CESS',
2104           'VALUE ADDED TAX',--Added by zhiwei
2105           'ADDL. EXCISE', 'OCTRAI', --'INSURANCE',--Commented by zhiwei for Bug#12584781 at 20110607
2106           'TURNOVER TAX','OTHER EXCISE','VAT', 'VAT_REVERSAL')
2107          OR upper(tax_type) IN
2108                (SELECT jrr.attribute_code
2109                   FROM jai_rgm_registrations jrr
2110                  WHERE jrr.registration_type = jai_constants.regn_type_tax_types
2111                    AND jrr.regime_id IN
2112                              (SELECT jrd.regime_id
2113                                 FROM jai_rgm_definitions jrd
2114                                WHERE jrd.regime_code = jai_constants.customs_regime)));
2115 
2116   CURSOR chk_ar_tax_type_cur
2117   IS
2118   SELECT
2119          COUNT(TAX_ID)
2120     from JAI_CMN_TAXES_ALL
2121    WHERE org_id = pr_interface_lines.ORG_ID
2122      --Commented by zhiwei for Bug#12561573 begin
2123      ---------------------------------------------------------------
2124      --and (end_date >= trunc(sysdate) or end_date is null)
2125      --and start_date <= trunc(sysdate)
2126      ---------------------------------------------------------------
2127      --Commented by zhiwei for Bug#12561573 end
2128      and tax_id = pn_tax_id
2129      AND
2130      (--Added by zhiwei for Bug#12561573
2131       upper(tax_type) IN
2132                (SELECT jrr.attribute_code
2133                   FROM jai_rgm_registrations jrr
2134                  WHERE jrr.registration_type = jai_constants.regn_type_tax_types
2135                    AND jrr.regime_id IN
2136                              (SELECT jrd.regime_id
2137                                 FROM jai_rgm_definitions jrd
2138                                WHERE jrd.regime_code = jai_constants.customs_regime))
2139      --Added by zhiwei for Bug#12561573 begin
2140      -------------------------------------------------
2141      or
2142      upper(tax_type) in
2143      (
2144         'CUSTOMS','CUSTOMS_EDUCATION_CESS','CVD', 'CVD_EDUCATION_CESS', 'ADDITIONAL_CVD',
2145         'CVD_SH_EDU_CESS','CUSTOMS_SH_EDU_CESS','SURCHARGE_DUTY',
2146         'ANY_OTHER_CUSTOMS_TAX_TYPE1','ANY_OTHER_CUSTOMS_TAX_TYPE2','ANY_OTHER_CUSTOMS_TAX_TYPE3',
2147         'ANY_OTHER_CUSTOMS_TAX_TYPE4','ANY_OTHER_CUSTOMS_TAX_TYPE5','ADDTIONAL_CUSTOMS'
2148      ))
2149      -------------------------------------------------
2150      --Added by zhiwei for Bug#12561573 end
2151      ;
2152 
2153 
2154   --Variable define here
2155   ln_count               NUMBER;
2156   lv_return_mess         VARCHAR2(1000);
2157   lv_error_mess          VARCHAR2(1000);
2158 
2159 
2160   BEGIN
2161 
2162      IF(pr_interface_lines.import_module = JAI_CONSTANTS.SOURCE_AP)THEN
2163 
2164         OPEN chk_ap_tax_type_cur;
2165         FETCH chk_ap_tax_type_cur INTO ln_count;
2166         CLOSE chk_ap_tax_type_cur;
2167 
2168         IF(NVL(ln_count,0) > 0)THEN
2169            xn_err_flag := 1;
2170            lv_return_mess := 'VALIDATION in validate_tax_constrain : Tax is out of constains With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2171            lv_error_mess  := 'JAI_AP_TAX_TYPE';--'Tax type is not supported to import in AP module.';
2172            log_error(
2173                  pv_err_level              => GV_ERROR_TYPE_TAX,
2174                  pn_line_id                => pr_interface_lines.interface_line_id,
2175                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2176                  pv_err_mess               => lv_error_mess,
2177                  pv_invalid_value          => pr_tax_lines.external_tax_code
2178            );
2179            record_fnd_log(
2180                  pv_fnd_log   => lv_return_mess
2181            );
2182         END IF;
2183      ELSIF (pr_interface_lines.import_module = JAI_CONSTANTS.SOURCE_AR) THEN
2184 
2185         OPEN chk_ar_tax_type_cur;
2186         FETCH chk_ar_tax_type_cur INTO ln_count;
2187         CLOSE chk_ar_tax_type_cur;
2188 
2189         IF(NVL(ln_count,0) > 0)THEN
2190            xn_err_flag := 1;
2191            lv_return_mess := 'VALIDATION in validate_tax_constrain : Tax is out of constains With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2192            lv_error_mess  := 'JAI_AR_TAX_TYPE';--'Tax type is not supported to import in AR module.';
2193            log_error(
2194                  pv_err_level              => GV_ERROR_TYPE_TAX,
2195                  pn_line_id                => pr_interface_lines.interface_line_id,
2196                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2197                  pv_err_mess               => lv_error_mess,
2198                  pv_invalid_value          => pr_tax_lines.external_tax_code
2199            );
2200            record_fnd_log(
2201                  pv_fnd_log   => lv_return_mess
2202            );
2203         END IF;
2204      END IF;
2205 
2206 
2207      EXCEPTION
2208          WHEN OTHERS THEN
2209              xn_err_flag := 1;
2210              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_tax_constrain With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2211              --lv_error_mess  := 'JAI_AP_TAX_TYPE';--'Tax type is not supported to import in AP module .';
2212 
2213              log_error(
2214                  pv_err_level              => GV_ERROR_TYPE_TAX,
2215                  pn_line_id                => pr_interface_lines.interface_line_id,
2216                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2217                  pv_err_mess               => lv_error_mess,
2218                  pv_invalid_value          => pr_tax_lines.external_tax_code
2219              );
2220              record_fnd_log(
2221                  pv_fnd_log   => lv_return_mess
2222              );
2223   END validate_tax_constrain;
2224 
2225   /*
2226   ||--Check the tax line procedence is correct
2227   ||
2228   */
2229   PROCEDURE validate_tax_precedence(
2230                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
2231                 pr_tax_lines           IN  JAI_INTERFACE_TAX_LINES_ALL%ROWTYPE,
2232                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
2233                 xn_err_flag            IN OUT NOCOPY NUMBER
2234   )
2235   IS
2236 
2237   --Cursor define here
2238   CURSOR get_line_count_cur
2239   IS
2240   SELECT COUNT(tax_id)
2241   FROM   JAI_INTERFACE_TAX_LINES_ALL
2242   WHERE  INTERFACE_LINE_ID = pn_interface_line_id
2243   ;
2244 
2245   --Variable define here
2246   ln_line_count          NUMBER;
2247   lv_return_mess         VARCHAR2(1000);
2248   lv_error_mess          VARCHAR2(1000);
2249 
2250 
2251   --Main block
2252   BEGIN
2253 
2254      --Added by zhiwei for bug#12580191 begin
2255      --------------------------------------------------------------------
2256      if( NVL(pr_tax_lines.precedence_1,0) < 0
2257          OR NVL(pr_tax_lines.precedence_2,0) < 0
2258          OR NVL(pr_tax_lines.precedence_3,0) < 0
2259          OR NVL(pr_tax_lines.precedence_4,0) < 0
2260          OR NVL(pr_tax_lines.precedence_5,0) < 0
2261          OR NVL(pr_tax_lines.precedence_6,0) < 0
2262          OR NVL(pr_tax_lines.precedence_7,0) < 0
2263          OR NVL(pr_tax_lines.precedence_8,0) < 0
2264          OR NVL(pr_tax_lines.precedence_9,0) < 0
2265          OR NVL(pr_tax_lines.precedence_10,0) < 0
2266      )then
2267          xn_err_flag := 1;
2268          lv_return_mess := 'VALIDATION in validate_tax_precedence : Tax precedence should not be negative With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2269          lv_error_mess  := 'JAI_LAR_PREC_CNT_NEG';
2270          log_error(
2271                 pv_err_level              => GV_ERROR_TYPE_TAX,
2272                 pn_line_id                => pn_interface_line_id,
2273                 pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2274                 pv_err_mess               => lv_error_mess,
2275                 pv_invalid_value          => pr_tax_lines.external_tax_code
2276          );
2277          record_fnd_log(
2278              pv_fnd_log   => lv_return_mess
2279          );
2280 
2281      end if;
2282      --------------------------------------------------------------------
2283      --Added by zhiwei for bug#12580191 end
2284 
2285 
2286      OPEN get_line_count_cur;
2287      FETCH get_line_count_cur INTO ln_line_count;
2288      CLOSE get_line_count_cur;
2289 
2290      IF( NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_1,0)
2291        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_2,0)
2292        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_3,0)
2293        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_4,0)
2294        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_5,0)
2295        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_6,0)
2296        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_7,0)
2297        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_8,0)
2298        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_9,0)
2299        OR NVL(ln_line_count,0) < NVL(pr_tax_lines.precedence_10,0)
2300        )THEN
2301           xn_err_flag := 1;
2302           lv_return_mess := 'VALIDATION in validate_tax_precedence : Tax precedence is larger than tax line count With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2303           lv_error_mess  := 'JAI_PRECEDENCE_INVALID';--'Invalid tax precedence for Standard event';
2304           log_error(
2305                  pv_err_level              => GV_ERROR_TYPE_TAX,
2306                  pn_line_id                => pn_interface_line_id,
2307                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2308                  pv_err_mess               => lv_error_mess,
2309                  pv_invalid_value          => pr_tax_lines.external_tax_code
2310           );
2311           record_fnd_log(
2312               pv_fnd_log   => lv_return_mess
2313           );
2314      END IF;--Precedence should not larger than count of tax lines
2315 
2316      IF(
2317            NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_2,-22)
2318         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_3,-22)
2319         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_4,-22)
2320         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_5,-22)
2321         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_6,-22)
2322         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_7,-22)
2323         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_8,-22)
2324         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_9,-22)
2325         OR NVL(pr_tax_lines.precedence_1,-11) = NVL(pr_tax_lines.precedence_10,-22)
2326         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_3,-33)
2327         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_4,-33)
2328         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_5,-33)
2329         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_6,-33)
2330         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_7,-33)
2331         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_8,-33)
2332         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_9,-33)
2333         OR NVL(pr_tax_lines.precedence_2,-22) = NVL(pr_tax_lines.precedence_10,-33)
2334         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_4,-44)
2335         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_5,-44)
2336         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_6,-44)
2337         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_7,-44)
2338         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_8,-44)
2339         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_9,-44)
2340         OR NVL(pr_tax_lines.precedence_3,-33) = NVL(pr_tax_lines.precedence_10,-44)
2341         OR NVL(pr_tax_lines.precedence_4,-44) = NVL(pr_tax_lines.precedence_5,-55)
2342         OR NVL(pr_tax_lines.precedence_4,-44) = NVL(pr_tax_lines.precedence_6,-55)
2343         OR NVL(pr_tax_lines.precedence_4,-44) = NVL(pr_tax_lines.precedence_7,-55)
2344         OR NVL(pr_tax_lines.precedence_4,-44) = NVL(pr_tax_lines.precedence_8,-55)
2345         OR NVL(pr_tax_lines.precedence_4,-44) = NVL(pr_tax_lines.precedence_9,-55)
2346         OR NVL(pr_tax_lines.precedence_4,-44) = NVL(pr_tax_lines.precedence_10,-55)
2347         OR NVL(pr_tax_lines.precedence_5,-55) = NVL(pr_tax_lines.precedence_6,-66)
2348         OR NVL(pr_tax_lines.precedence_5,-55) = NVL(pr_tax_lines.precedence_7,-66)
2349         OR NVL(pr_tax_lines.precedence_5,-55) = NVL(pr_tax_lines.precedence_8,-66)
2350         OR NVL(pr_tax_lines.precedence_5,-55) = NVL(pr_tax_lines.precedence_9,-66)
2351         OR NVL(pr_tax_lines.precedence_5,-55) = NVL(pr_tax_lines.precedence_10,-66)
2352         OR NVL(pr_tax_lines.precedence_6,-66) = NVL(pr_tax_lines.precedence_7,-77)
2353         OR NVL(pr_tax_lines.precedence_6,-66) = NVL(pr_tax_lines.precedence_8,-77)
2354         OR NVL(pr_tax_lines.precedence_6,-66) = NVL(pr_tax_lines.precedence_9,-77)
2355         OR NVL(pr_tax_lines.precedence_6,-66) = NVL(pr_tax_lines.precedence_10,-77)
2356         OR NVL(pr_tax_lines.precedence_7,-77) = NVL(pr_tax_lines.precedence_8,-88)
2357         OR NVL(pr_tax_lines.precedence_7,-77) = NVL(pr_tax_lines.precedence_9,-88)
2358         OR NVL(pr_tax_lines.precedence_7,-77) = NVL(pr_tax_lines.precedence_10,-88)
2359         OR NVL(pr_tax_lines.precedence_8,-88) = NVL(pr_tax_lines.precedence_9,-99)
2360         OR NVL(pr_tax_lines.precedence_8,-88) = NVL(pr_tax_lines.precedence_10,-99)
2361         OR NVL(pr_tax_lines.precedence_9,-99) = NVL(pr_tax_lines.precedence_10,-11)
2362      )THEN
2363         xn_err_flag := 1;
2364         lv_return_mess :=  'VALIDATION in validate_tax_precedence : Tax precedence can not have the same point at one tax line With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2365         --lv_error_mess  := 'JAI_PRECEDENCE_INVALID';
2366         lv_error_mess  := 'JAI_TAX_PRCD_NOT_EQUAL';--Added by zhiwei for bug#12580191
2367         log_error(
2368                  pv_err_level              => GV_ERROR_TYPE_TAX,
2369                  pn_line_id                => pn_interface_line_id,
2370                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2371                  pv_err_mess               => lv_error_mess,
2372                  pv_invalid_value          => pr_tax_lines.external_tax_code
2373         );
2374         record_fnd_log(
2375             pv_fnd_log   => lv_return_mess
2376         );
2377      END IF;--Precedence should not have duplicate point in one tax line
2378 
2379      IF( NVL(pr_tax_lines.precedence_1,-1) = pr_tax_lines.tax_line_no
2380       OR NVL(pr_tax_lines.precedence_2,-1) = pr_tax_lines.tax_line_no
2381       OR NVL(pr_tax_lines.precedence_3,-1) = pr_tax_lines.tax_line_no
2382       OR NVL(pr_tax_lines.precedence_4,-1) = pr_tax_lines.tax_line_no
2383       OR NVL(pr_tax_lines.precedence_5,-1) = pr_tax_lines.tax_line_no
2384       OR NVL(pr_tax_lines.precedence_6,-1) = pr_tax_lines.tax_line_no
2385       OR NVL(pr_tax_lines.precedence_7,-1) = pr_tax_lines.tax_line_no
2386       OR NVL(pr_tax_lines.precedence_8,-1) = pr_tax_lines.tax_line_no
2387       OR NVL(pr_tax_lines.precedence_9,-1) = pr_tax_lines.tax_line_no
2388       OR NVL(pr_tax_lines.precedence_10,-1) = pr_tax_lines.tax_line_no
2389      )THEN
2390         xn_err_flag := 1;
2391         lv_return_mess :=  'VALIDATION in validate_tax_precedence : Tax precedence can not depends on itself With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2392         --lv_error_mess  := 'JAI_PRECEDENCE_INVALID';
2393         lv_error_mess  := 'JAI_TAX_PRCD_NOT_DEP_SELF';--Added by zhiwei for bug#12580191
2394         log_error(
2395                  pv_err_level              => GV_ERROR_TYPE_TAX,
2396                  pn_line_id                => pn_interface_line_id,
2397                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2398                  pv_err_mess               => lv_error_mess,
2399                  pv_invalid_value          => pr_tax_lines.external_tax_code
2400         );
2401         record_fnd_log(
2402             pv_fnd_log   => lv_return_mess
2403         );
2404      END IF;--Precedence 1..10 can not equqals tax line no
2405      EXCEPTION
2406          WHEN OTHERS THEN
2407              xn_err_flag := 1;
2408              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_tax_precedence With interface_tax_line_id:'||pr_tax_lines.interface_tax_line_id;
2409              lv_error_mess  := 'JAI_PRECEDENCE_INVALID';
2410 
2411              log_error(
2412                  pv_err_level              => GV_ERROR_TYPE_TAX,
2413                  pn_line_id                => pn_interface_line_id,
2414                  pn_source_line_id         => pr_tax_lines.interface_tax_line_id,
2415                  pv_err_mess               => lv_error_mess,
2416                  pv_invalid_value          => pr_tax_lines.external_tax_code
2417              );
2418              record_fnd_log(
2419                  pv_fnd_log   => lv_return_mess
2420              );
2421   END validate_tax_precedence;
2422 
2423 
2424 
2425 --Added by zhiwei for Bug#12604133 on 20110623 begin
2426 ---------------------------------------------------------
2427   /*
2428   ||--Check qty rate
2429   ||
2430   */
2431   PROCEDURE validate_qty_rate(
2432                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
2433                 pn_tax_line_id         IN  JAI_INTERFACE_TAX_LINES_ALL.interface_tax_line_id%TYPE,
2434                 pn_tax_id              IN  JAI_INTERFACE_TAX_LINES_ALL.tax_ID%TYPE,
2435                 xn_err_flag            IN OUT NOCOPY NUMBER
2436   )
2437   IS
2438 
2439   --Cursor define here
2440   CURSOR get_tax_cur
2441   IS
2442   SELECT qty_rate,tax_amount
2443   FROM   JAI_INTERFACE_TAX_LINES_ALL
2444   WHERE  INTERFACE_tax_LINE_ID = pn_tax_line_id
2445   ;
2446   CURSOR chk_qty_rate_cur
2447   IS
2448   SELECT
2449         COUNT(1)
2450   FROM JAI_CMN_TAXES_ALL
2451   WHERE TAX_ID = pn_tax_id
2452   AND  ADHOC_FLAG = 'Y'
2453   AND  VAT_FLAG = 'Q';
2454 
2455   --Variable define here
2456 
2457   ln_qty_rate            number;
2458   ln_tax_amt             number;
2459   ln_line_count          NUMBER;
2460   lv_return_mess         VARCHAR2(1000);
2461   lv_error_mess          VARCHAR2(1000);
2462 
2463 
2464   --Main block
2465   BEGIN
2466 
2467      OPEN chk_qty_rate_cur;
2468      FETCH chk_qty_rate_cur INTO ln_line_count;
2469      CLOSE chk_qty_rate_cur;
2470 
2471      IF NVL(ln_line_count,0) > 0 THEN
2472 
2473         OPEN  get_tax_cur;
2474         FETCH get_tax_cur INTO ln_qty_rate,ln_tax_amt;
2475         CLOSE get_tax_cur;
2476 
2477         IF NVL(ln_qty_rate,0) <> 0 and NVL(ln_tax_amt,0) <> 0 THEN
2478             --xn_err_flag := 1;
2479             lv_return_mess := 'VALIDATION in validate_qty_rate : Tax amount entered is ignored and determined based on Qty/Rate entered With interface_tax_line_id:'||pn_tax_line_id;
2480             lv_error_mess  := 'JAI_CALC_AMOUNT';
2481             log_error(
2482                  pv_err_level              => GV_ERROR_TYPE_TAX,
2483                  pn_line_id                => pn_interface_line_id,
2484                  pn_source_line_id         => pn_tax_line_id,
2485                  pv_err_mess               => lv_error_mess,
2486                  pv_invalid_value          => ln_qty_rate
2487             );
2488             record_fnd_log(
2489                  pv_fnd_log   => lv_return_mess
2490             );
2491         END IF;
2492 
2493      END IF;
2494 
2495      EXCEPTION
2496          WHEN OTHERS THEN
2497              xn_err_flag := 1;
2498              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_qty_rate With interface_tax_line_id:'||pn_tax_line_id;
2499              lv_error_mess  := 'JAI_CALC_AMOUNT';
2500 
2501              log_error(
2502                  pv_err_level              => GV_ERROR_TYPE_TAX,
2503                  pn_line_id                => pn_interface_line_id,
2504                  pn_source_line_id         => pn_tax_line_id,
2505                  pv_err_mess               => lv_return_mess,
2506                  pv_invalid_value          => ln_qty_rate
2507              );
2508              record_fnd_log(
2509                  pv_fnd_log   => lv_return_mess
2510              );
2511   END validate_qty_rate;
2512 ---------------------------------------------------------
2513 --Added by zhiwei for Bug#12604133 on 20110623 end
2514 
2515 
2516 
2517   /*
2518   || Check duplicate lines.
2519   */
2520   PROCEDURE validate_duplicate_lines
2521   IS
2522   --Cursor define here
2523   CURSOR get_duplicate_info_cur
2524   IS
2525   SELECT import_module,internal_trx_id,internal_trx_line_id,COUNT(*)
2526   FROM   JAI_INTERFACE_LINES_ALL
2527   WHERE  request_id = GN_REQUEST_ID
2528   AND    IMPORT_STATUS = GV_IMPORT_SUCCESS
2529   AND    IMPORT_PROCESS = GV_PROCESS_VALIDATION
2530   group by import_module,internal_trx_id,internal_trx_line_id
2531   having count(*) > 1
2532   order by import_module,internal_trx_id,internal_trx_line_id
2533   ;
2534 
2535   CURSOR get_dupl_lines_cur(
2536          cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE,
2537          cn_trx_line_id IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_LINE_ID%TYPE
2538   )
2539   IS
2540   SELECT INTERFACE_LINE_ID,
2541          transaction_num,
2542          transaction_line_num
2543   FROM   JAI_INTERFACE_LINES_ALL
2544   WHERE  INTERNAL_TRX_ID      = cn_trx_id
2545   AND    INTERNAL_TRX_LINE_ID = cn_trx_line_id
2546   ORDER  BY 1;
2547 
2548   --Variable define here
2549   rec_duplicate_info    get_duplicate_info_cur%ROWTYPE;
2550   rec_interface_line_id get_dupl_lines_cur%ROWTYPE;
2551   lv_return_mess        VARCHAR2(1000);
2552   lv_error_mess         VARCHAR2(1000);
2553   lv_return_code        VARCHAR2(20);
2554 
2555   --Main block
2556   BEGIN
2557 
2558      FOR rec_duplicate_info IN get_duplicate_info_cur
2559      LOOP
2560              --Get the duplicate lines, update status and fnd log.
2561              FOR rec_interface_line_id IN get_dupl_lines_cur(
2562                  rec_duplicate_info.INTERNAL_TRX_ID,
2563                  rec_duplicate_info.INTERNAL_TRX_LINE_ID
2564              )
2565              LOOP
2566                  lv_return_mess := 'VALIDATION in validate_duplicate_lines : Internal trx id and internal trx line id can not duplicate With interface_line_id:'||rec_interface_line_id.interface_line_id;
2567                  lv_error_mess  := 'JAI_MULTIPLE_TRANS';--'Get multiple records for this Source Trans Num '||rec_interface_line_id.transaction_num||' with Source Line Num '|| rec_interface_line_id.transaction_line_num;
2568                  log_error(
2569                      pv_err_level              => GV_ERROR_TYPE_LINE,
2570                      pn_line_id                => rec_interface_line_id.interface_line_id,
2571                      pn_source_line_id         => rec_interface_line_id.interface_line_id,
2572                      pv_err_mess               => lv_error_mess,
2573                      pv_invalid_value          => rec_interface_line_id.transaction_num || ' and ' || rec_interface_line_id.transaction_line_num
2574                  );
2575                  record_fnd_log(
2576                      pv_fnd_log   => lv_return_mess
2577                  );
2578                  update_line_status(
2579                      pn_interface_line_id => rec_interface_line_id.interface_line_id,
2580                      pv_import_status     => GV_IMPORT_FAILURE,
2581                      pv_import_process    => GV_PROCESS_VALIDATION
2582                  );
2583 
2584                  update_error_flag(
2585                      pn_interface_line_id => rec_interface_line_id.interface_line_id,
2586                      pv_err_exist         => 'Y'
2587                  );
2588 
2589                  fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'DUPLICATE VALIDATION COMPLETED WITH ERROR.');
2590 
2591              END LOOP;
2592      END LOOP;
2593 
2594      EXCEPTION
2595          WHEN OTHERS THEN
2596              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) ||' in validate_duplicate_lines With interface_line_id:'||rec_interface_line_id.interface_line_id;
2597              lv_error_mess  := 'JAI_MULTIPLE_TRANS';--'Get multiple records for this Source Trans Num '||rec_interface_line_id.transaction_num||' with Source Line Num '|| rec_interface_line_id.transaction_line_num;
2598                  log_error(
2599                      pv_err_level              => GV_ERROR_TYPE_LINE,
2600                      pn_line_id                => rec_interface_line_id.interface_line_id,
2601                      pn_source_line_id         => rec_interface_line_id.interface_line_id,
2602                      pv_err_mess               => lv_error_mess,
2603                      pv_invalid_value          => rec_interface_line_id.transaction_num || ' and ' || rec_interface_line_id.transaction_line_num
2604                  );
2605                  record_fnd_log(
2606                      pv_fnd_log   => lv_return_mess
2607                  );
2608                  update_line_status(
2609                      pn_interface_line_id => rec_interface_line_id.interface_line_id,
2610                      pv_import_status     => GV_IMPORT_FAILURE,
2611                      pv_import_process    => GV_PROCESS_VALIDATION
2612                  );
2613 
2614                  update_error_flag(
2615                      pn_interface_line_id => rec_interface_line_id.interface_line_id,
2616                      pv_err_exist         => 'Y'
2617                  );
2618 
2619   END validate_duplicate_lines;
2620 
2621 
2622   /*
2623   || Check transaction integrated
2624   */
2625   PROCEDURE validate_integrate_trx
2626   IS
2627   --Cursor define here
2628   CURSOR get_trx_line_count_cur IS
2629   SELECT import_module    import_module,
2630          internal_trx_id  trx_id,
2631          COUNT(*)         line_count
2632   FROM   JAI_INTERFACE_LINES_ALL
2633   WHERE  request_id = GN_REQUEST_ID
2634   AND    IMPORT_STATUS = GV_IMPORT_SUCCESS
2635   AND    IMPORT_PROCESS = GV_PROCESS_VALIDATION
2636   group by import_module,internal_trx_id
2637   order by import_module,internal_trx_id;
2638 
2639   --Get AR transaction lines count
2640   CURSOR get_ar_lines_count_cur(
2641          cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE) IS
2642   SELECT COUNT(CUSTOMER_TRX_LINE_ID)
2643   FROM   RA_CUSTOMER_TRX_LINES_ALL
2644   WHERE  CUSTOMER_TRX_ID      = cn_trx_id;
2645 
2646   --Get AP transaction lines count
2647   CURSOR get_ap_lines_count_cur(
2648          cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE) IS
2649   SELECT COUNT(line_number)
2650   FROM   AP_INVOICE_LINES
2651   WHERE  INVOICE_ID      = cn_trx_id;
2652 
2653   --Get error lines
2654   CURSOR get_err_lines_cur(
2655          cn_import_module  IN JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
2656          cn_trx_id         IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE
2657   )
2658   IS
2659   SELECT interface_line_id,error_flag
2660   FROM   JAI_INTERFACE_LINES_ALL
2661   WHERE  IMPORT_MODULE    = cn_import_module
2662   and    INTERNAL_TRX_ID  = cn_trx_id
2663   ORDER BY 1;
2664 
2665   CURSOR chk_taxable_event(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2666   IS
2667   SELECT COUNT(DISTINCT TAXABLE_EVENT)
2668   FROM   JAI_INTERFACE_LINES_ALL
2669   WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2670 
2671   CURSOR get_taxable_event(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2672   IS
2673   SELECT DISTINCT TAXABLE_EVENT
2674   FROM   JAI_INTERFACE_LINES_ALL
2675   WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2676 
2677   CURSOR chk_vat_inv_no(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2678   IS
2679   SELECT
2680          COUNT(DISTINCT VAT_INVOICE_NO)    vat_no_count
2681   FROM   JAI_INTERFACE_LINES_ALL
2682   WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2683   --AND    VAT_INVOICE_NO IS NOT NULL;
2684 
2685   CURSOR chk_exc_inv_no(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2686   IS
2687   SELECT
2688          COUNT(DISTINCT EXCISE_INVOICE_NO) exc_no_count
2689   FROM   JAI_INTERFACE_LINES_ALL
2690   WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2691   --AND    EXCISE_INVOICE_NO IS NOT NULL;
2692 
2693   CURSOR get_vat_no_cur(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2694   IS
2695   SELECT DISTINCT vat_invoice_no
2696   FROM   JAI_INTERFACE_LINES_ALL
2697   WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2698 
2699   CURSOR get_excise_no_cur(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2700   IS
2701   SELECT DISTINCT excise_invoice_no
2702   FROM   JAI_INTERFACE_LINES_ALL
2703   WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2704 
2705   CURSOR get_vat_tax_exists_cur(cn_trx_id IN NUMBER) IS
2706     SELECT 'Y'
2707       FROM dual
2708      WHERE EXISTS (SELECT 1
2709                      FROM jai_cmn_taxes_all           jcta,
2710                           jai_interface_tax_lines_all jitla,
2711                           jai_interface_lines_all     jila
2712                     WHERE jitla.tax_id = jcta.tax_id
2713                       AND jila.interface_line_id = jitla.interface_line_id
2714                       AND jila.internal_trx_id = cn_trx_id
2715                       AND upper(jcta.tax_type) IN
2716                          (SELECT jrr.attribute_code
2717                             FROM jai_rgm_registrations jrr
2718                            WHERE jrr.registration_type = jai_constants.regn_type_tax_types
2719                              AND jrr.regime_id = (SELECT jrd.regime_id
2720                                                     FROM jai_rgm_definitions jrd
2721                                                    WHERE jrd.regime_code = jai_constants.vat_regime)));
2722 
2723     CURSOR get_excise_tax_exists_cur(cn_trx_id IN NUMBER) IS
2724     SELECT 'Y'
2725       FROM dual
2726      WHERE EXISTS (SELECT 1
2727                      FROM jai_cmn_taxes_all           jcta,
2728                           jai_interface_tax_lines_all jitla,
2729                           jai_interface_lines_all     jila
2730                     WHERE jitla.tax_id = jcta.tax_id
2731                       AND jila.interface_line_id = jitla.interface_line_id
2732                       AND jila.internal_trx_id = cn_trx_id
2733                       AND upper(jcta.tax_type) IN ('EXCISE', 'EXCISE_EDUCATION_CESS', 'EXCISE_SH_EDU_CESS'));
2734 
2735   CURSOR get_lines_count(
2736                       cv_import_module IN JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
2737                       cn_trx_id        IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE
2738   )
2739   IS
2740   SELECT COUNT(1)
2741   FROM   JAI_INTERFACE_LINES_ALL
2742   WHERE  internal_trx_id = cn_trx_id
2743   AND    import_module   = cv_import_module
2744   AND    request_id = GN_REQUEST_ID;
2745 
2746   --Added by zhiwei for Bug#12630077 on 20110608 begin
2747   -----------------------------------------------------------------------------------------------
2748   CURSOR get_four_comb_for_parent(
2749                       cv_import_module IN JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
2750                       cn_trx_id        IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE
2751   )
2752   IS
2753   SELECT distinct
2754            party_id,
2755            party_site_id,
2756            import_module,
2757            transaction_num
2758   FROM   JAI_INTERFACE_LINES_ALL
2759   WHERE  internal_trx_id = cn_trx_id
2760   AND    import_module   = cv_import_module
2761   AND    request_id = GN_REQUEST_ID;
2762 
2763   ln_lines_count_parent  number;
2764   lv_import_module       jai_interface_lines_all.import_module%type;
2765   ln_party_id            jai_interface_lines_all.party_id%type;
2766   ln_party_site_id       jai_interface_lines_all.party_site_id%type;
2767   lv_transaction_num     jai_interface_lines_all.transaction_num%type;
2768 
2769   CURSOR get_parent_lines_count(
2770                       cv_import_module   IN JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
2771                       cn_party_id        IN JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
2772                       cn_party_site_id   IN JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE,
2773                       cv_transaction_num IN JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE
2774   )
2775   IS
2776   SELECT COUNT(1)
2777   FROM   JAI_INTERFACE_LINES_ALL
2778   WHERE  transaction_num = cv_transaction_num
2779   AND    import_module   = cv_import_module
2780   AND    party_id        = cn_party_id
2781   AND    party_site_id   = cn_party_site_id
2782   AND    request_id = GN_REQUEST_ID;
2783   -----------------------------------------------------------------------------------------------
2784   --Added by zhiwei for Bug#12630077 on 20110608 end
2785 
2786   --Variable define here
2787   ln_line_count         NUMBER;
2788   rec_trx_line_count    get_trx_line_count_cur%ROWTYPE;
2789   rec_interface_line_id get_err_lines_cur%ROWTYPE;
2790   lv_return_mess        VARCHAR2(1000);
2791   lv_error_mess         VARCHAR2(1000);
2792   lv_return_code        VARCHAR2(20);
2793   ln_event_type         NUMBER;
2794   lv_taxable_event      JAI_INTERFACE_LINES_ALL.TAXABLE_EVENT%TYPE;
2795   ln_vat_no_count       NUMBER;
2796   ln_excise_no_count    NUMBER;
2797   ln_diff_tax           NUMBER;
2798   lv_error_tax_inv      VARCHAR2(20);
2799   lv_vat_no             JAI_INTERFACE_LINES_ALL.VAT_INVOICE_NO%TYPE;
2800   lv_excise_no          JAI_INTERFACE_LINES_ALL.EXCISE_INVOICE_NO%TYPE;
2801   ln_error_flag         NUMBER;
2802   lv_error_type         VARCHAR2(20);
2803   ln_regime_id          JAI_RGM_DEFINITIONS.REGIME_ID%TYPE;
2804   lv_regime_code        JAI_RGM_DEFINITIONS.REGIME_CODE%TYPE;
2805   ln_vat_exist          NUMBER;
2806   ln_excise_exist       NUMBER;
2807   ln_complete_count     NUMBER;--20110111
2808   lv_determine_flag     VARCHAR2(20);--20110111
2809 
2810   lv_vat_tax_exist      VARCHAR2(1);
2811   lv_excise_tax_exist   VARCHAR2(1);
2812   --Main block
2813 
2814   /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 Begin*/
2815    CURSOR chk_st_inv_no(cn_trx_id      IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
2816 	  IS
2817 	  SELECT
2818 	         COUNT(DISTINCT st_inv_number)    st_inv_count
2819 	  FROM   JAI_INTERFACE_LINES_ALL
2820 	  WHERE  INTERNAL_TRX_ID =  cn_trx_id;
2821 
2822 	  CURSOR get_service_tax_exists_cur(cn_trx_id IN NUMBER) IS
2823 	    SELECT 'Y'
2824 	      FROM dual
2825 	     WHERE EXISTS (SELECT 1
2826 	                     FROM jai_cmn_taxes_all           jcta,
2827 	                          jai_interface_tax_lines_all jitla,
2828 	                          jai_interface_lines_all     jila
2829 	                    WHERE jitla.tax_id = jcta.tax_id
2830 	                      AND jila.interface_line_id = jitla.interface_line_id
2831 	                      AND jila.internal_trx_id = cn_trx_id
2832 	                      AND upper(jcta.tax_type) IN
2833 	                         (SELECT upper(jrr.attribute_code)
2834 	                            FROM jai_rgm_registrations jrr
2835 	                           WHERE jrr.registration_type = jai_constants.regn_type_tax_types
2836 	                             AND jrr.regime_id = (SELECT jrd.regime_id
2837 	                                                    FROM jai_rgm_definitions jrd
2838 	                                                   WHERE jrd.regime_code = jai_constants.service_regime)));
2839 	ln_st_num_count       NUMBER;
2840 	lv_service_tax_exist  VARCHAR2(1);
2841 /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 End*/
2842   BEGIN
2843 
2844      FOR rec_trx_line_count IN get_trx_line_count_cur
2845      LOOP
2846              --In one Transaction , the Taxable Event should be same as each other.
2847              OPEN chk_taxable_event(rec_trx_line_count.trx_id);
2848              FETCH chk_taxable_event INTO ln_event_type;
2849              CLOSE chk_taxable_event;
2850 
2851              IF(NVL(ln_event_type,-1) > 1)THEN
2852 
2853                      FOR rec_interface_line_id IN get_err_lines_cur(
2854                          rec_trx_line_count.import_module,
2855                          rec_trx_line_count.trx_id
2856                      )
2857                      LOOP
2858                          lv_return_mess := 'VALIDATION in validate_integrate_trx : The taxable event should be same as each other in one Transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
2859                          lv_error_mess  := 'JAI_MUTIPLE_TAXABLE_EVENT';--'The taxable event should be same as each other in one Transaction';
2860                          log_error(
2861                              pv_err_level              => GV_ERROR_TYPE_LINE,
2862                              pn_line_id                => rec_interface_line_id.interface_line_id,
2863                              pn_source_line_id         => rec_interface_line_id.interface_line_id,
2864                              pv_err_mess               => lv_error_mess,
2865                              pv_invalid_value          => rec_trx_line_count.TRX_ID
2866                          );
2867                          record_fnd_log(
2868                              pv_fnd_log   => lv_return_mess
2869                          );
2870 
2871                          update_line_status(
2872                              pn_interface_line_id => rec_interface_line_id.interface_line_id,
2873                              pv_import_status     => GV_IMPORT_FAILURE,
2874                              pv_import_process    => GV_PROCESS_VALIDATION
2875                          );
2876 
2877                          update_error_flag(
2878                              pn_interface_line_id => rec_interface_line_id.interface_line_id,
2879                              pv_err_exist         => 'Y'
2880                          );
2881 
2882                          fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'INTEGRATE VALIDATION COMPLETED WITH ERROR.');
2883 
2884                      END LOOP;
2885 
2886              ELSIF (NVL(ln_event_type,-1) = 1) THEN
2887                  --In one Transaction , if taxable event is external , the invoice no should be same as each other.
2888                  OPEN get_taxable_event(rec_trx_line_count.trx_id);
2889                  FETCH get_taxable_event INTO lv_taxable_event;
2890                  CLOSE get_taxable_event;
2891 
2892 
2893                  IF(NVL(lv_taxable_event,'#') = GV_TAXABLE_EVENT_EXTERNAL)THEN
2894                       ln_vat_exist   := 0;
2895                       ln_excise_exist := 0;
2896 
2897                       OPEN chk_vat_inv_no(rec_trx_line_count.trx_id);
2898                       FETCH chk_vat_inv_no INTO ln_vat_no_count;
2899                       CLOSE chk_vat_inv_no;
2900 
2901                       OPEN chk_exc_inv_no(rec_trx_line_count.trx_id);
2902                       FETCH chk_exc_inv_no INTO ln_excise_no_count;
2903                       CLOSE chk_exc_inv_no;
2904 
2905 
2906                       OPEN get_vat_tax_exists_cur(rec_trx_line_count.trx_id);
2907                       FETCH get_vat_tax_exists_cur INTO lv_vat_tax_exist;
2908                       CLOSE get_vat_tax_exists_cur;
2909 
2910                       OPEN get_excise_tax_exists_cur(rec_trx_line_count.trx_id);
2911                       FETCH get_excise_tax_exists_cur INTO lv_excise_tax_exist;
2912                       CLOSE get_excise_tax_exists_cur;
2913 
2914 
2915 
2916                       ln_diff_tax := 0;
2917                       --Vat tax exist , but vat no is null
2918                       IF(nvl(lv_vat_tax_exist, 'N') = 'Y' and NVL(ln_vat_no_count,-1) <= 0)THEN
2919                           ln_diff_tax := 1;
2920                           lv_error_tax_inv := 'VAT';
2921                       END IF;
2922                       --Vat tax exist ,but vat no is multiple
2923                       IF(nvl(lv_vat_tax_exist, 'N') = 'Y' and NVL(ln_vat_no_count,-1) > 1)THEN
2924                           ln_diff_tax := 2;
2925                           lv_error_tax_inv := 'VAT';
2926                       END IF;
2927                       --Vat tax does not exist, but vatno exist.
2928                       --For this case, vat_no will be ignored.
2929                       /*IF(nvl(lv_vat_tax_exist, 'N') = 'N' and NVL(ln_vat_no_count,-1) > 0 )THEN
2930                           ln_diff_tax := 3;
2931                           lv_error_tax_inv := 'VAT';
2932                       END IF;*/
2933 
2934                       --The situation of tax exist but invoiceno is null
2935 
2936                       IF(ln_diff_tax = 1 OR ln_diff_tax = 4)THEN
2937                           lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv ||'  should not be null in the transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
2938                           lv_error_mess  := 'JAI_INVOICE_NUM_MISSING';--'The invoice num of VAT/Excise  should not be null in the transaction';
2939 
2940                       END IF;
2941                       --The situation of mutiple invoice no or null.
2942                       IF(ln_diff_tax = 2 OR ln_diff_tax = 5)THEN
2943                           lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv ||'  should be same as each other in a transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
2944                           lv_error_mess  := 'JAI_MUTIPLE_INVOICE_NUM';--'Invoice Num should be same as each other in one transaction';
2945 
2946                       END IF;
2947                       --The situation of invoice no should be null.
2948                       /*IF(ln_diff_tax = 3 OR ln_diff_tax = 6)THEN
2949                           lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv;
2950                           lv_return_mess := lv_return_mess ||'  should according to the existence of '|| lv_error_tax_inv ||' tax  With interface_line_id:'||rec_interface_line_id.interface_line_id;
2951                           lv_error_mess  := 'The invoice num of should according to the existence of tax';
2952                       END IF ;*/
2953 
2954                      /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 Begin*/
2955                       OPEN chk_st_inv_no(rec_trx_line_count.trx_id);
2956                       FETCH chk_st_inv_no INTO ln_st_num_count;
2957                       CLOSE chk_st_inv_no;
2958 
2959                       OPEN get_service_tax_exists_cur(rec_trx_line_count.trx_id);
2960                       FETCH get_service_tax_exists_cur INTO lv_service_tax_exist;
2961                       CLOSE get_service_tax_exists_cur;
2962                      /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 End*/
2963 
2964                       --Handle error for VAT
2965                       IF(ln_diff_tax <> 0)THEN
2966 
2967                             FOR rec_interface_line_id IN get_err_lines_cur(
2968                              rec_trx_line_count.import_module,
2969                              rec_trx_line_count.trx_id
2970                             )
2971                             LOOP
2972                                --lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice no of '|| lv_error_tax_inv ||'  should be same as each other in a transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
2973                                log_error(
2974                                    pv_err_level              => GV_ERROR_TYPE_LINE,
2975                                    pn_line_id                => rec_interface_line_id.interface_line_id,
2976                                    pn_source_line_id         => rec_interface_line_id.interface_line_id,
2977                                    pv_err_mess               => lv_error_mess,
2978                                    pv_invalid_value          => rec_trx_line_count.TRX_ID
2979                                );
2980                                record_fnd_log(
2981                                    pv_fnd_log   => lv_return_mess
2982                                );
2983 
2984                                update_line_status(
2985                                    pn_interface_line_id => rec_interface_line_id.interface_line_id,
2986                                    pv_import_status     => GV_IMPORT_FAILURE,
2987                                    pv_import_process    => GV_PROCESS_VALIDATION
2988                                );
2989 
2990                                update_error_flag(
2991                                    pn_interface_line_id => rec_interface_line_id.interface_line_id,
2992                                    pv_err_exist         => 'Y'
2993                                );
2994 
2995                                fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'INTEGRATE VALIDATION COMPLETED WITH ERROR.');
2996 
2997                             END LOOP;
2998                       END IF;
2999 
3000                       ln_diff_tax := 0;
3001                       --Excise tax exist, but excistno is null
3002                       IF( nvl(lv_excise_tax_exist, 'N') = 'Y' and NVL(ln_excise_no_count,-1) <= 0 ) THEN
3003                           ln_diff_tax := 4;
3004                           lv_error_tax_inv := 'EXCISE';
3005                       END IF;
3006                       --Excise tax exist, but exciseno is multiple.
3007                       IF(nvl(lv_excise_tax_exist, 'N') = 'Y' and NVL(ln_excise_no_count,-1) > 1 ) THEN
3008                           ln_diff_tax := 5;
3009                           lv_error_tax_inv := 'EXCISE';
3010                       END IF;
3011                       --Excise tax does not exist, but excise no exist.
3012                       --For this case, excise_no will be ignored.
3013                       /*IF ( nvl(lv_excise_tax_exist, 'N') = 'N' and NVL(ln_excise_no_count,-1) > 0  )THEN
3014                           ln_diff_tax := 6;
3015                           lv_error_tax_inv := 'EXCISE';
3016                       END IF;*/
3017 
3018                       --The situation of tax exist but invoiceno is null
3019                       IF(ln_diff_tax = 1 OR ln_diff_tax = 4)THEN
3020                           lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv ||'  should not be null in the transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
3021                           lv_error_mess  := 'JAI_INVOICE_NUM_MISSING';--'The invoice num of VAT/Excise  should not be null in the transaction';
3022                       END IF;
3023                       --The situation of mutiple invoice no or null.
3024                       IF(ln_diff_tax = 2 OR ln_diff_tax = 5)THEN
3025                           lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv ||'  should be same as each other in a transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
3026                           lv_error_mess  := 'JAI_MUTIPLE_INVOICE_NUM';--'Invoice Num should be same as each other in one transaction';
3027                       END IF;
3028                       --The situation of invoice no should be null.
3029                       /*IF(ln_diff_tax = 3 OR ln_diff_tax = 6)THEN
3030                           lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv;
3031                           lv_return_mess := lv_return_mess ||' should according to the existence of '|| lv_error_tax_inv ||' tax With interface_line_id:'||rec_interface_line_id.interface_line_id;
3032                           lv_error_mess  := 'The invoice num of should according to the existence of tax';
3033                       END IF ;*/
3034 
3035 
3036                       --Encounter errors
3037                       IF(ln_diff_tax <> 0)THEN
3038 
3039                             FOR rec_interface_line_id IN get_err_lines_cur(
3040                              rec_trx_line_count.import_module,
3041                              rec_trx_line_count.trx_id
3042                             )
3043                             LOOP
3044                                --lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice no of '|| lv_error_tax_inv ||'  should be same as each other in a transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
3045                                log_error(
3046                                    pv_err_level              => GV_ERROR_TYPE_LINE,
3047                                    pn_line_id                => rec_interface_line_id.interface_line_id,
3048                                    pn_source_line_id         => rec_interface_line_id.interface_line_id,
3049                                    pv_err_mess               => lv_error_mess,
3050                                    pv_invalid_value          => rec_trx_line_count.TRX_ID
3051                                );
3052                                record_fnd_log(
3053                                    pv_fnd_log   => lv_return_mess
3054                                );
3055 
3056                                update_line_status(
3057                                    pn_interface_line_id => rec_interface_line_id.interface_line_id,
3058                                    pv_import_status     => GV_IMPORT_FAILURE,
3059                                    pv_import_process    => GV_PROCESS_VALIDATION
3060                                );
3061 
3062                                update_error_flag(
3063                                    pn_interface_line_id => rec_interface_line_id.interface_line_id,
3064                                    pv_err_exist         => 'Y'
3065                                );
3066 
3067                                fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'INTEGRATE VALIDATION COMPLETED WITH ERROR.');
3068 
3069                             END LOOP;
3070                       END IF;
3071 
3072                       ln_diff_tax := 0;
3073 	            --Service tax exist , but service num is null
3074 	            IF(nvl(lv_service_tax_exist, 'N') = 'Y' and NVL(ln_st_num_count,-1) <= 0)THEN
3075 	                          ln_diff_tax := 7;
3076 	                          lv_error_tax_inv := 'SERVICE';
3077 	            END IF;
3078 	            --Service tax exist ,but Service num is multiple
3079 	            IF(nvl(lv_service_tax_exist, 'N') = 'Y' and NVL(ln_st_num_count,-1) > 1)THEN
3080 	                          ln_diff_tax := 8;
3081 	                          lv_error_tax_inv := 'SERVICE';
3082 	            END IF;
3083 
3084 
3085 	            IF(ln_diff_tax = 7)THEN
3086 	                lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv ||'  should not be null in the transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
3087 	           lv_error_mess  := 'JAI_INVOICE_NUM_MISSING';--'The invoice num of VAT/Excise  should not be null in the transaction';
3088 
3089 	            END IF;
3090 	            --The situation of mutiple invoice no or null.
3091 	            IF(ln_diff_tax = 8)THEN
3092 	                          lv_return_mess := 'VALIDATION in validate_integrate_trx : The invoice num of '|| lv_error_tax_inv ||'  should be same as each other in a transaction With interface_line_id:'||rec_interface_line_id.interface_line_id;
3093 	                          lv_error_mess  := 'JAI_MUTIPLE_INVOICE_NUM';--'Invoice Num should be same as each other in one transaction';
3094 
3095 	             END IF;
3096 	             --The situation of invoice no should be null.
3097 
3098 	           /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 End*/
3099 	           --Handle error for Service
3100 	           IF(ln_diff_tax <> 0)THEN
3101 
3102 	                            FOR rec_interface_line_id IN get_err_lines_cur(
3103 	                             rec_trx_line_count.import_module,
3104 	                             rec_trx_line_count.trx_id
3105 	                            )
3106 	                            LOOP
3107 	                               log_error(
3108 	                                   pv_err_level              => GV_ERROR_TYPE_LINE,
3109 	                                   pn_line_id                => rec_interface_line_id.interface_line_id,
3110 	                                   pn_source_line_id         => rec_interface_line_id.interface_line_id,
3111 	                                   pv_err_mess               => lv_error_mess,
3112 	                                   pv_invalid_value          => rec_trx_line_count.TRX_ID
3113 	                               );
3114 	                               record_fnd_log(
3115 	                                   pv_fnd_log   => lv_return_mess
3116 	                               );
3117 
3118 	                               update_line_status(
3119 	                                   pn_interface_line_id => rec_interface_line_id.interface_line_id,
3120 	                                   pv_import_status     => GV_IMPORT_FAILURE,
3121 	                                   pv_import_process    => GV_PROCESS_VALIDATION
3122 	                               );
3123 
3124 	                               update_error_flag(
3125 	                                   pn_interface_line_id => rec_interface_line_id.interface_line_id,
3126 	                                   pv_err_exist         => 'Y'
3127 	                               );
3128 
3129 	                               fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'INTEGRATE VALIDATION COMPLETED WITH ERROR.');
3130 
3131 	                            END LOOP;
3132 	                      END IF;
3133                         /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 End*/
3134 
3135                  END IF;
3136 
3137              END IF;
3138 
3139      END LOOP;
3140 
3141      --validate one transaction lines are all validate successfully
3142      FOR rec_trx_line_count IN get_trx_line_count_cur
3143      LOOP
3144              --Added by zhiwei for Bug#12630077 on 20110608 begin
3145              ------------------------------------------------------------------------
3146 
3147              FOR four_combination in get_four_comb_for_parent(
3148                   rec_trx_line_count.import_module,
3149                   rec_trx_line_count.trx_id
3150              )
3151              LOOP
3152                    lv_import_module   := four_combination.import_module;
3153                    ln_party_id        := four_combination.party_id;
3154                    ln_party_site_id   := four_combination.party_site_id;
3155                    lv_transaction_num := four_combination.transaction_num;
3156              END LOOP;
3157 
3158              OPEN get_parent_lines_count(
3159                   cv_import_module   => lv_import_module,
3160                   cn_party_id        => ln_party_id,
3161                   cn_party_site_id   => ln_party_site_id,
3162                   cv_transaction_num => lv_transaction_num
3163              );
3164              FETCH get_parent_lines_count INTO ln_lines_count_parent;
3165              CLOSE get_parent_lines_count;
3166 
3167              ------------------------------------------------------------------------
3168              --Added by zhiwei for Bug#12630077 on 20110608 end
3169 
3170              --AR
3171              IF(rec_trx_line_count.IMPORT_MODULE = JAI_CONSTANTS.SOURCE_AR)THEN
3172 
3173 
3174                  OPEN get_ar_lines_count_cur(rec_trx_line_count.trx_id);
3175                  FETCH get_ar_lines_count_cur INTO ln_line_count;
3176                  CLOSE get_ar_lines_count_cur;
3177 
3178                  OPEN get_lines_count(
3179                       rec_trx_line_count.import_module,
3180                       rec_trx_line_count.trx_id
3181                  );
3182                  FETCH get_lines_count INTO ln_complete_count;
3183                  CLOSE get_lines_count;
3184 
3185 
3186 
3187                  IF(NVL(ln_line_count,-1) < NVL(rec_trx_line_count.line_count,-1)
3188                  OR
3189                  NVL(ln_complete_count,-1) <> NVL(rec_trx_line_count.line_count,-1)
3190                  --Added by zhiwei for Bug#12630077 on 20110608 begin
3191                  -----------------------------------------------------------
3192                  OR
3193                  NVL(ln_lines_count_parent,-1) <> NVL(rec_trx_line_count.line_count,-1)
3194                  -----------------------------------------------------------
3195                  --Added by zhiwei for Bug#12630077 on 20110608 end
3196                  )THEN
3197 
3198                      IF (NVL(ln_line_count,-1) < NVL(rec_trx_line_count.line_count,-1))THEN
3199                         lv_determine_flag := 'TRX';
3200                      END IF;
3201                      IF (NVL(ln_complete_count,-1) <> NVL(rec_trx_line_count.line_count,-1)
3202                      --Added by zhiwei for Bug#12630077 on 20110608 begin
3203                      -----------------------------------------------------------
3204                      OR
3205                      NVL(ln_lines_count_parent,-1) <> NVL(rec_trx_line_count.line_count,-1)
3206                      -----------------------------------------------------------
3207                      --Added by zhiwei for Bug#12630077 on 20110608 end
3208                      ) THEN
3209                         lv_determine_flag := 'INT';
3210                      END IF;
3211                      IF( NVL(ln_line_count,-1) < NVL(rec_trx_line_count.line_count,-1)
3212                           AND
3213                          (-- Added by zhiwei for Bug#12630077 on 20110608
3214                          NVL(ln_complete_count,-1) <> NVL(rec_trx_line_count.line_count,-1)
3215                          --Added by zhiwei for Bug#12630077 on 20110608 begin
3216                          -----------------------------------------------------------
3217                          OR
3218                          NVL(ln_lines_count_parent,-1) <> NVL(rec_trx_line_count.line_count,-1)
3219                          )
3220                          -----------------------------------------------------------
3221                          --Added by zhiwei for Bug#12630077 on 20110608 end
3222                      )THEN
3223                         lv_determine_flag := 'TRX||INT';
3224                      END IF;
3225                      --Get lines according to the trx id ,update status and fnd log
3226                      FOR rec_interface_line_id IN get_err_lines_cur(
3227                          rec_trx_line_count.import_module,
3228                          rec_trx_line_count.trx_id
3229                      )
3230                      LOOP
3231                          if( nvl(rec_interface_line_id.error_flag,'N') = 'N' )then
3232                          lv_return_mess := 'VALIDATION in validate_integrate_trx : Internal trx id must be integrated with (';
3233                          lv_return_mess := lv_return_mess || ln_line_count ||') lines after validation With interface_line_id:'||rec_interface_line_id.interface_line_id||' with '||lv_determine_flag;
3234                          lv_error_mess  := 'JAI_LINE_HOLD';--'This line is hold by other error transaction lines.';
3235                          log_error(
3236                              pv_err_level              => GV_ERROR_TYPE_LINE,
3237                              pn_line_id                => rec_interface_line_id.interface_line_id,
3238                              pn_source_line_id         => rec_interface_line_id.interface_line_id,
3239                              pv_err_mess               => lv_error_mess,
3240                              pv_invalid_value          => rec_trx_line_count.TRX_ID
3241                          );
3242                          record_fnd_log(
3243                              pv_fnd_log   => lv_return_mess
3244                          );
3245 
3246                          update_line_status(
3247                              pn_interface_line_id => rec_interface_line_id.interface_line_id,
3248                              pv_import_status     => GV_IMPORT_FAILURE,
3249                              pv_import_process    => GV_PROCESS_VALIDATION
3250                          );
3251 
3252                          update_error_flag(
3253                              pn_interface_line_id => rec_interface_line_id.interface_line_id,
3254                              pv_err_exist         => 'Y'
3255                          );
3256                          end if;
3257                          fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'INTEGRATE VALIDATION COMPLETED WITH ERROR.');
3258 
3259                      END LOOP;
3260                  END IF;
3261              END IF;--AR
3262 
3263              --AP
3264              IF(rec_trx_line_count.IMPORT_MODULE = JAI_CONSTANTS.SOURCE_AP)THEN
3265                  OPEN get_ap_lines_count_cur(rec_trx_line_count.trx_id);
3266                  FETCH get_ap_lines_count_cur INTO ln_line_count;
3267                  CLOSE get_ap_lines_count_cur;
3268 
3269                  OPEN get_lines_count(
3270                       rec_trx_line_count.import_module,
3271                       rec_trx_line_count.trx_id
3272                  );
3273                  FETCH get_lines_count INTO ln_complete_count;
3274                  CLOSE get_lines_count;
3275 
3276                  IF(NVL(ln_line_count,-1) < NVL(rec_trx_line_count.line_count,-1)
3277                  OR
3278                  NVL(ln_complete_count,-1) <> NVL(rec_trx_line_count.line_count,-1)
3279                  --Added by zhiwei for Bug#12630077 on 20110608 begin
3280                  -----------------------------------------------------------
3281                  OR
3282                  NVL(ln_lines_count_parent,-1) <> NVL(rec_trx_line_count.line_count,-1)
3283                  -----------------------------------------------------------
3284                  --Added by zhiwei for Bug#12630077 on 20110608 end
3285                  )THEN
3286 
3287 
3288                      IF (NVL(ln_line_count,-1) < NVL(rec_trx_line_count.line_count,-1))THEN
3289                         lv_determine_flag := 'TRX';
3290                      END IF;
3291                      IF (NVL(ln_complete_count,-1) <> NVL(rec_trx_line_count.line_count,-1)
3292                      --Added by zhiwei for Bug#12630077 on 20110608 begin
3293                      -----------------------------------------------------------
3294                      OR
3295                      NVL(ln_lines_count_parent,-1) <> NVL(rec_trx_line_count.line_count,-1)
3296                      -----------------------------------------------------------
3297                      --Added by zhiwei for Bug#12630077 on 20110608 end
3298                      ) THEN
3299 
3300                         lv_determine_flag := 'INT';
3301                      END IF;
3302                      IF( NVL(ln_line_count,-1) < NVL(rec_trx_line_count.line_count,-1)
3303                           AND
3304                          (--Added by zhiwei for Bug#12630077 on 20110608
3305                          NVL(ln_complete_count,-1) <> NVL(rec_trx_line_count.line_count,-1)
3306                          --Added by zhiwei for Bug#12630077 on 20110608 begin
3307                          -----------------------------------------------------------
3308                          OR
3309                          NVL(ln_lines_count_parent,-1) <> NVL(rec_trx_line_count.line_count,-1)
3310                          )
3311                          -----------------------------------------------------------
3312                          --Added by zhiwei for Bug#12630077 on 20110608 end
3313                      )THEN
3314                         lv_determine_flag := 'TRX||INT';
3315                      END IF;
3316 
3317                      --LOG ERROR
3318                      FOR rec_interface_line_id IN get_err_lines_cur(
3319                          rec_trx_line_count.import_module,
3320                          rec_trx_line_count.trx_id
3321                      )
3322                      LOOP
3323                          if( nvl(rec_interface_line_id.error_flag,'N') = 'N' )then
3324                          lv_return_mess := 'VALIDATION in validate_integrate_trx : Internal trx id must be integrated with (';
3325                          lv_return_mess :=  lv_return_mess || ln_line_count ||') lines after validation With interface_line_id:'||rec_interface_line_id.interface_line_id||' with '||lv_determine_flag;
3326                          lv_error_mess  := 'JAI_LINE_HOLD';--'This line is hold by other error transaction lines.';
3327                          log_error(
3328                              pv_err_level              => GV_ERROR_TYPE_LINE,
3329                              pn_line_id                => rec_interface_line_id.interface_line_id,
3330                              pn_source_line_id         => rec_interface_line_id.interface_line_id,
3331                              pv_err_mess               => lv_error_mess,
3332                              pv_invalid_value          => rec_trx_line_count.TRX_ID
3333                          );
3334                          record_fnd_log(
3335                              pv_fnd_log   => lv_return_mess
3336                          );
3337 
3338                          update_line_status(
3339                              pn_interface_line_id => rec_interface_line_id.interface_line_id,
3340                              pv_import_status     => GV_IMPORT_FAILURE,
3341                              pv_import_process    => GV_PROCESS_VALIDATION
3342                          );
3343 
3344                          update_error_flag(
3345                              pn_interface_line_id => rec_interface_line_id.interface_line_id,
3346                              pv_err_exist         => 'Y'
3347                          );
3348                          end if;
3349                          fnd_file.put_line(FND_FILE.LOG,'INTERFACE LINE:'||rec_interface_line_id.interface_line_id||'INTEGRATE VALIDATION COMPLETED WITH ERROR.');
3350 
3351                      END LOOP;
3352                  END IF;
3353              END IF;--AP
3354 
3355      END LOOP;
3356 
3357 
3358 
3359      EXCEPTION
3360          WHEN OTHERS THEN
3361              lv_return_mess := 'VALIDATION Exception with SQLERR '||SUBSTR(SQLERRM,1,230) ||' in validate_integrate_trx With interface_line_id:'||rec_interface_line_id.interface_line_id;
3362              lv_error_mess  := 'JAI_LINE_HOLD';--'This line is hold by other error transaction lines.';
3363                  log_error(
3364                      pv_err_level              => GV_ERROR_TYPE_LINE,
3365                      pn_line_id                => rec_interface_line_id.interface_line_id,
3366                      pn_source_line_id         => rec_interface_line_id.interface_line_id,
3367                      pv_err_mess               => lv_error_mess,
3368                      pv_invalid_value          => null
3369                  );
3370                  record_fnd_log(
3371                      pv_fnd_log   => lv_return_mess
3372                  );
3373                  update_line_status(
3374                      pn_interface_line_id => rec_interface_line_id.interface_line_id,
3375                      pv_import_status     => GV_IMPORT_FAILURE,
3376                      pv_import_process    => GV_PROCESS_VALIDATION
3377                  );
3378 
3379                  update_error_flag(
3380                      pn_interface_line_id => rec_interface_line_id.interface_line_id,
3381                      pv_err_exist         => 'Y'
3382                  );
3383 
3384   END validate_integrate_trx;
3385 
3386   /*
3387    * Check if AR/AP transactions are created by importing or manuall created in the form.
3388    * If it is created from the form, error message will be logged.
3389    */
3390   PROCEDURE validate_import_trx(
3391                     pn_interface_line_id     IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
3392                     pv_import_module         IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
3393                     pn_trx_id                IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE,
3394                     pn_trx_line_id           IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_LINE_ID%TYPE,
3395                     xn_err_flag              IN OUT NOCOPY NUMBER
3396             ) IS
3397 
3398   --Variable define here
3399   lv_return_mess         VARCHAR2(1000);
3400   lv_error_mess          VARCHAR2(1000);
3401   lv_import_flag         VARCHAR2(1);
3402   --Main block
3403   BEGIN
3404     IF pv_import_module = 'AP' THEN
3405        SELECT 'Y'
3406          INTO lv_import_flag
3407          FROM dual
3408         WHERE EXISTS (SELECT 1
3409                  FROM ap_invoice_lines_all
3410                 WHERE invoice_id = pn_trx_id
3411                   AND line_number = pn_trx_line_id
3412                   AND upper(reference_key3) = 'OFI TAX IMPORT'
3413                 );
3414 
3415     ELSIF pv_import_module = 'AR' THEN
3416     /*--Commented by zhiwei for Bug#12565170 begin
3417        SELECT 'Y'
3418          INTO lv_import_flag
3419          FROM dual
3420         WHERE EXISTS (SELECT 1
3421                  FROM ra_customer_trx_lines_all
3422                 WHERE customer_trx_id = pn_trx_id
3423                   AND customer_trx_line_id = pn_trx_line_id
3424                   --AND upper(interface_line_context) = 'OFI TAX IMPORT'   --DFF
3425                   AND upper(global_attribute_category) = 'JG.IN.ARXTWMAI.OFI TAX IMPORT' --GDF
3426                 );*/--Commented by zhiwei for bug#12565170 end
3427 
3428 
3429        --Added by zhiwei for Bug#12565170 begin
3430        ---------------------------------------------------------------
3431        SELECT 'Y'
3432          INTO lv_import_flag
3433          FROM dual
3434         WHERE EXISTS (SELECT 1
3435                  FROM ra_customer_trx_all head, ra_customer_trx_lines_all line
3436                 WHERE line.customer_trx_id = pn_trx_id
3437                   AND line.customer_trx_line_id = pn_trx_line_id
3438                   AND head.customer_trx_id = line.customer_trx_id
3439                   AND head.createD_from = 'RAXTRX'
3440                   AND upper(line.global_attribute_category) = 'JG.IN.ARXTWMAI.OFI TAX IMPORT' --GDF
3441                   AND line.global_attribute19 is not null
3442                   AND line.global_attribute20 is not null
3443                 );
3444         ---------------------------------------------------------------
3445         --Added by zhiwei for Bug#12565170 end
3446     END IF;
3447     IF nvl(lv_import_flag, 'N') = 'N' THEN
3448        xn_err_flag := 1;
3449        lv_return_mess := 'VALIDATION in validate_import_trx : Only the imported transactions in AR/AP are supported to import the taxes. interface_line_id:'||pn_interface_line_id;
3450        lv_error_mess  := 'JAI_MANUALLY_TRANS';--'Taxes can not be inserted to manually created AR transaction/AP invoice;
3451        log_error(
3452            pv_err_level              => GV_ERROR_TYPE_LINE,
3453            pn_line_id                => pn_interface_line_id,
3454            pn_source_line_id         => pn_interface_line_id,
3455            pv_err_mess               => lv_error_mess,
3456            pv_invalid_value          => pn_trx_id
3457        );
3458        record_fnd_log( pv_fnd_log   => lv_return_mess );
3459     END IF;
3460   EXCEPTION
3461   WHEN OTHERS THEN
3462     xn_err_flag := 1;
3463     lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230)  || ' in validate_import_trx With interface_line_id:'||pn_interface_line_id;
3464     lv_error_mess  := 'JAI_MANUALLY_TRANS';--Taxes can not be inserted to manually created AR transaction/AP invoice;
3465     log_error(
3466         pv_err_level              => GV_ERROR_TYPE_LINE,
3467         pn_line_id                => pn_interface_line_id,
3468         pn_source_line_id         => pn_interface_line_id,
3469         pv_err_mess               => lv_error_mess,
3470         pv_invalid_value          => pn_trx_id
3471      );
3472     record_fnd_log( pv_fnd_log   => lv_return_mess );
3473 
3474   END validate_import_trx;
3475 
3476   /*
3477   ||Check the trx_id get by trx num and trx line num should be same as the trx id is gived by customer
3478   */
3479   PROCEDURE validate_trx_id_equals(
3480                 pr_interface_lines     IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
3481                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
3482                 xn_err_flag            IN OUT NOCOPY NUMBER
3483   )IS
3484 
3485   --Variable define here
3486   lv_return_mess         VARCHAR2(1000);
3487   lv_error_mess          VARCHAR2(1000);
3488   --Main block
3489   BEGIN
3490 
3491      IF( pr_interface_lines.transaction_id = pn_trx_id)THEN
3492          NULL;
3493      ELSE
3494          xn_err_flag := 1;
3495          lv_return_mess := 'VALIDATION in validate_trx_id_equals : Transaction id given by customer should equals the transaction id got from transaction table With interface_line_id:'||pr_interface_lines.interface_line_id;
3496          lv_error_mess  := 'JAI_TRANS_ID_ERR';--'Invalid Trans ID, cannot inset tax to Transaction  '||pr_interface_lines.transaction_id;
3497          log_error(
3498                  pv_err_level              => GV_ERROR_TYPE_LINE,
3499                  pn_line_id                => pr_interface_lines.interface_line_id,
3500                  pn_source_line_id         => pr_interface_lines.interface_line_id,
3501                  pv_err_mess               => lv_error_mess,
3502                  pv_invalid_value          => pr_interface_lines.transaction_id
3503          );
3504          record_fnd_log(
3505                   pv_fnd_log   => lv_return_mess
3506          );
3507      END IF;
3508      EXCEPTION
3509          WHEN OTHERS THEN
3510              xn_err_flag := 1;
3511              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230)  || ' in validate_trx_id_equals With interface_line_id:'||pr_interface_lines.interface_line_id;
3512              lv_error_mess  := 'JAI_TRANS_ID_ERR';--'Invalid Trans ID, cannot inset tax to Transaction  '||pr_interface_lines.transaction_id;
3513              log_error(
3514                  pv_err_level              => GV_ERROR_TYPE_LINE,
3515                  pn_line_id                => pr_interface_lines.interface_line_id,
3516                  pn_source_line_id         => pr_interface_lines.interface_line_id,
3517                  pv_err_mess               => lv_error_mess,
3518                  pv_invalid_value          => pr_interface_lines.transaction_id
3519              );
3520 
3521              record_fnd_log(
3522                  pv_fnd_log   => lv_return_mess
3523              );
3524   END validate_trx_id_equals;
3525 
3526 --==========================================================================
3527 --  PROCEDURE NAME:
3528 --
3529 --   PROCEDURE Get_Invoice_Header_Infor           Private
3530 --
3531 --  DESCRIPTION:
3532 --
3533 --      For a given invoice id RETURN vendor id,vendor site id, currency code
3534 --      and exchange rate
3535 --
3536 --  PARAMETERS:
3537 --      In:   pn_invoice_id      NUMBER         invoice id
3538 --
3539 --
3540 --     Out:   xn_vendor_id       number         vendor id
3541 --            xn_vendor_site_id  number         vendor site id
3542 --            xv_currency_code   varchar2       currency code
3543 --            xn_exchange_rate   number         exchange rate
3544 --            xn_batch_id        number         xn_batch_id
3545 --
3546 -- PRE-COND  : invoice exists
3547 -- EXCEPTIONS:
3548 --
3549 --
3550 --========================================================================
3551 PROCEDURE Get_Invoice_Header_Infor
3552 ( pn_invoice_id      IN             NUMBER
3553 , xn_vendor_id       OUT NOCOPY     NUMBER
3554 , xn_vendor_site_id  OUT NOCOPY     NUMBER
3555 , xv_currency_code   OUT NOCOPY     VARCHAR2
3556 , xn_exchange_rate   OUT NOCOPY     NUMBER
3557 , xn_batch_id        OUT NOCOPY     NUMBER
3558 )
3559 IS
3560 ln_dbg_level   NUMBER         := FND_LOG.g_current_runtime_level;
3561 ln_proc_level  NUMBER         := FND_LOG.level_procedure;
3562 lv_proc_name   VARCHAR2 (100) := 'Get_Invoice_Header_Infor';
3563 
3564 CURSOR Get_Invoice_Header_Infor_cur IS
3565 SELECT
3566   vendor_id
3567 , vendor_site_id
3568 , invoice_currency_code
3569 , exchange_rate
3570 , batch_id
3571 FROM
3572   ap_invoices_all
3573 WHERE invoice_id = pn_invoice_id;
3574 BEGIN
3575   --log for debug
3576   IF ( ln_proc_level >= ln_dbg_level)
3577   THEN
3578     FND_LOG.STRING ( ln_proc_level
3579                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.begin'
3580                    , 'Enter procedure'
3581                    );
3582     FND_LOG.STRING ( ln_proc_level
3583                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3584                    , 'pn_invoice_id ' || pn_invoice_id
3585                    );
3586   END IF; --( ln_proc_level >= ln_dbg_level)  ;
3587 
3588   OPEN  Get_Invoice_Header_Infor_cur ;
3589   FETCH Get_Invoice_Header_Infor_cur
3590   INTO
3591     xn_vendor_id
3592   , xn_vendor_site_id
3593   , xv_currency_code
3594   , xn_exchange_rate
3595   , xn_batch_id ;
3596   CLOSE Get_Invoice_Header_Infor_cur ;
3597 
3598   --log for debug
3599   IF ( ln_proc_level >= ln_dbg_level)
3600   THEN
3601     FND_LOG.STRING ( ln_proc_level
3602                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3603                    , 'xn_vendor_id ' || xn_vendor_id
3604                    );
3605     FND_LOG.STRING ( ln_proc_level
3606                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3607                    , 'xn_vendor_site_id ' || xn_vendor_site_id
3608                    );
3609     FND_LOG.STRING ( ln_proc_level
3610                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3611                    , 'xv_currency_code ' || xv_currency_code
3612                    );
3613     FND_LOG.STRING ( ln_proc_level
3614                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3615                    , 'xn_exchange_rate ' || xn_exchange_rate
3616                    );
3617     FND_LOG.STRING ( ln_proc_level
3618                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3619                    , 'xn_batch_id ' || xn_batch_id
3620                    );
3621     FND_LOG.STRING ( ln_proc_level
3622                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.end'
3623                    , 'Exit procedure'
3624                    );
3625   END IF;   --( ln_proc_level >= ln_dbg_level )
3626 EXCEPTION
3627   WHEN OTHERS THEN
3628     IF ( ln_proc_level >= ln_dbg_level)
3629     THEN
3630       FND_LOG.STRING ( ln_proc_level
3631                      , GV_MODULE_PREFIX|| '.'|| lv_proc_name
3632                      || '. Other_Exception '
3633                      , SQLCODE || ':' || SQLERRM
3634                      );
3635     END IF;   --( ln_proc_level >= ln_dbg_level)  ;
3636     RAISE;
3637 END Get_Invoice_Header_Infor;
3638 
3639 --==========================================================================
3640 --  PROCEDURE NAME:
3641 --
3642 --    Get_Tax_Cat_Serv_Type               Private
3643 --
3644 --  DESCRIPTION:
3645 --    Get the tax category and  service type code for a given vendor site
3646 --    and vendor id
3647 --
3648 --
3649 --  PARAMETERS:
3650 --      In:  pn_invoice_id        NUMBER invoice id
3651 --           pn_vendor_site_id    NUMBER vendor site id
3652 --
3653 --     Out:  x_tax_category_id    NUMBER tax category id
3654 --           x_service_type_code  NUMBER service type code
3655 --
3656 -- PRE-COND  : vendor exists
3657 -- EXCEPTIONS:
3658 --
3659 --===========================================================================
3660 PROCEDURE Get_Tax_Cat_Serv_Type
3661 ( pn_vendor_id          IN             NUMBER
3662 , pn_vendor_site_id     IN             NUMBER
3663 , xn_tax_category_id    OUT NOCOPY     NUMBER
3664 , xv_service_type_code  OUT NOCOPY     VARCHAR2
3665 )
3666 IS
3667 CURSOR get_tax_service_cur IS
3668 SELECT
3669   tax_category_id, service_type_code
3670 FROM
3671   jai_cmn_vendor_sites
3672 WHERE NVL (vendor_site_id, 0) = pn_vendor_site_id
3673   AND vendor_id = pn_vendor_id;
3674 
3675 ln_dbg_level   NUMBER         := FND_LOG.g_current_runtime_level;
3676 ln_proc_level  NUMBER         := FND_LOG.level_procedure;
3677 lv_proc_name   VARCHAR2 (100) := 'Get_Tax_Cat_Serv_Type';
3678 BEGIN
3679   --log for debug
3680   IF ( ln_proc_level >= ln_dbg_level)
3681   THEN
3682     FND_LOG.STRING ( ln_proc_level
3683                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.begin'
3684                    , 'Enter procedure'
3685                    );
3686     FND_LOG.STRING ( ln_proc_level
3687                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3688                    , 'pn_vendor_id ' || pn_vendor_id
3689                    );
3690     FND_LOG.STRING ( ln_proc_level
3691                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3692                    , 'pn_vendor_site_id ' || pn_vendor_site_id
3693                    );
3694   END IF;
3695 
3696   OPEN get_tax_service_cur;
3697 
3698   FETCH get_tax_service_cur
3699   INTO
3700     xn_tax_category_id
3701   , xv_service_type_code;
3702   CLOSE get_tax_service_cur;
3703 
3704   IF ( ln_proc_level >= ln_dbg_level)
3705   THEN
3706     FND_LOG.STRING ( ln_proc_level
3707                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3708                    , 'xn_tax_category_id ' || xn_tax_category_id
3709                    );
3710     FND_LOG.STRING ( ln_proc_level
3711                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.parameters'
3712                    , 'xv_service_type_code ' || xv_service_type_code
3713                    );
3714     FND_LOG.STRING ( ln_proc_level
3715                    , GV_MODULE_PREFIX ||'.'|| lv_proc_name || '.end'
3716                    , 'Exit procedure'
3717                    );
3718   END IF;   --( ln_proc_level >= ln_dbg_level )
3719 EXCEPTION
3720   WHEN OTHERS THEN
3721     IF ( ln_proc_level >= ln_dbg_level)
3722     THEN
3723       FND_LOG.STRING ( ln_proc_level
3724                      , GV_MODULE_PREFIX|| '.'|| lv_proc_name
3725                      || '. Other_Exception '
3726                      ,SQLCODE || ':' || SQLERRM
3727                      );
3728     END IF;   --( ln_proc_level >= ln_dbg_level)  ;
3729     RAISE;
3730 END Get_Tax_Cat_Serv_Type;
3731 
3732 
3733   --Added by zhiwei for Bug#12583958 begin on 20110608
3734   -------------------------------------------
3735   PROCEDURE get_cust_default_taxes (
3736     p_org_id NUMBER,
3737     p_customer_id NUMBER,
3738     p_ship_to_site_use_id NUMBER,
3739     p_inventory_item_id IN NUMBER,
3740     p_header_id NUMBER,
3741     p_line_id NUMBER,
3742     p_tax_category_id IN OUT NOCOPY NUMBER
3743   )
3744   IS
3745     v_address_id           NUMBER;
3746     v_tax_category_list    VARCHAR2(30);
3747     v_tax_category_id      NUMBER;
3748 
3749 
3750     -- to get address_id
3751     CURSOR address_cur(p_ship_to_site_use_id IN NUMBER) IS
3752         SELECT cust_acct_site_id address_id
3753         FROM hz_cust_site_uses_all  A -- Removed ra_site_uses_all from Bug# 4434287
3754         WHERE A.site_use_id = p_ship_to_site_use_id;
3755 
3756     -- to get tax_category_list
3757     CURSOR tax_catg_list_cur(p_customer_id IN NUMBER, p_address_id IN NUMBER DEFAULT 0) IS
3758         SELECT tax_category_list
3759         FROM JAI_CMN_CUS_ADDRESSES a
3760         WHERE A.customer_id = p_customer_id
3761         AND A.address_id = p_address_id;
3762 
3763     -- to get tax_category_id
3764     CURSOR tax_catg_id_cur(p_tax_category_list IN VARCHAR2, p_inventory_item_id IN NUMBER) IS
3765         SELECT tax_category_id
3766         FROM JAI_INV_ITM_TAXCTG_DTLS a
3767         WHERE a.tax_category_list = p_tax_category_list
3768         AND a.inventory_item_id = p_inventory_item_id;
3769 
3770   BEGIN
3771 
3772     OPEN address_cur(p_ship_to_site_use_id);
3773     FETCH address_cur INTO v_address_id;
3774     CLOSE address_cur;
3775 
3776     IF p_customer_id IS NOT NULL AND v_address_id IS NOT NULL THEN
3777         OPEN tax_catg_list_cur(p_customer_id , v_address_id);
3778         FETCH tax_catg_list_cur INTO v_tax_category_list;
3779         CLOSE tax_catg_list_cur;
3780     END IF;
3781 
3782     IF  v_tax_category_list IS NULL THEN
3783         OPEN tax_catg_list_cur(p_customer_id,0);
3784         FETCH tax_catg_list_cur INTO v_tax_category_list;
3785         CLOSE tax_catg_list_cur;
3786     END IF;
3787 
3788     IF v_tax_category_list IS NOT NULL THEN
3789         OPEN tax_catg_id_cur(v_tax_category_list, p_inventory_item_id);
3790         FETCH tax_catg_id_cur INTO v_tax_category_id;
3791         CLOSE tax_catg_id_cur;
3792     END IF;
3793 
3794     p_tax_category_id := v_tax_category_id;
3795 
3796   END get_cust_default_taxes;
3797 
3798 
3799   -------------------------------------------
3800   --Added by zhiwei for Bug#12583958  end on 20110608
3801 
3802   /*
3803   || Get Default Tax Category for AP/AR
3804   */
3805   PROCEDURE get_default_tax_cate_id(
3806             pn_import_module        IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
3807             pn_internal_trx_id      IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE,
3808             pn_internal_trx_line_id IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_LINE_ID%TYPE,
3809             xn_tax_category_id      OUT NOCOPY NUMBER
3810   )IS
3811   --Cursor define here
3812   CURSOR  bind_cur(cn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE)
3813   IS
3814   SELECT  A.org_id,A.bill_to_customer_id,NVL(A.bill_to_site_use_id,0)
3815   FROM    RA_CUSTOMER_TRX_ALL A
3816   WHERE   customer_trx_id = cn_customer_trx_id;
3817 
3818   CURSOR organization_cur(cn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE)
3819   IS
3820   SELECT organization_id, location_id
3821   FROM   JAI_AR_TRXS
3822   WHERE  customer_trx_id = cn_customer_trx_id;
3823 
3824   Cursor address_cur(cn_ship_to_site_use_id IN Number) IS
3825   SELECT cust_acct_site_id address_id
3826   FROM   hz_cust_site_uses_all A
3827   WHERE  A.site_use_id = cn_ship_to_site_use_id;
3828 
3829   CURSOR CREATED_FROM_CUR(cn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE)
3830   IS
3831   SELECT created_from , trx_date
3832   FROM   ra_customer_trx_all
3833   WHERE  customer_trx_id = cn_customer_trx_id;
3834 
3835   CURSOR get_inventory_item_id(cn_customer_trx_line_id IN RA_CUSTOMER_TRX_LINES_ALL.CUSTOMER_TRX_LINE_ID%TYPE)
3836   IS
3837   SELECT
3838          inventory_item_id
3839   FROM   RA_CUSTOMER_TRX_LINES_ALL
3840   WHERE  CUSTOMER_TRX_LINE_ID = cn_customer_trx_line_id;
3841   --Variable define here
3842   ln_tax_category_id        NUMBER;
3843   lv_enable_gst_flag        varchar2(5);
3844   --FOR AR
3845   ln_org_id                 NUMBER;
3846   ln_customer_id            NUMBER;
3847   ln_bill_to_site_use_id    NUMBER;
3848   ln_organization_id        NUMBER;
3849   ln_location_id            NUMBER;
3850   ln_address_id             NUMBER;
3851   ln_inventory_item_id      NUMBER;
3852   lv_created_from           Varchar2(30);
3853   ld_trx_date               RA_CUSTOMER_TRX_ALL.TRX_DATE%TYPE;
3854 
3855 
3856   --FOR AP
3857   ln_vendor_id              NUMBER;
3858   ln_vendor_site_id         NUMBER;
3859   lv_currency_code          VARCHAR2 (15);
3860   ln_exchange_rate          NUMBER;
3861   ln_batch_id               NUMBER;
3862   lv_service_type_code      VARCHAR2 (30);
3863 
3864   --Main block
3865   BEGIN
3866 
3867       IF(pn_import_module = JAI_CONSTANTS.SOURCE_AR)THEN
3868 
3869           lv_enable_gst_flag := 'N';--JAI_GST_GENERAL_PKG.IS_GST_ENABLED;
3870 
3871           OPEN  bind_cur(pn_internal_trx_id);
3872           FETCH bind_cur INTO ln_org_id, ln_customer_id,ln_bill_to_site_use_id ;
3873           CLOSE bind_cur;
3874 
3875           OPEN  organization_cur(pn_internal_trx_id);
3876           FETCH organization_cur INTO ln_organization_id, ln_location_id;
3877           CLOSE organization_cur;
3878 
3879           OPEN address_cur(ln_bill_to_site_use_id);
3880           FETCH address_cur INTO ln_address_id;
3881           CLOSE address_cur;
3882 
3883           OPEN get_inventory_item_id(pn_internal_trx_line_id);
3884           FETCH get_inventory_item_id INTO ln_inventory_item_id;
3885           CLOSE get_inventory_item_id;
3886 
3887           IF nvl(lv_enable_gst_flag,'N') = 'N' THEN
3888 
3889              IF ln_customer_id IS NOT NULL AND ln_address_id IS NOT NULL THEN
3890 
3891                         --jai_cmn_tax_defaultation_pkg.ja_in_cust_default_taxes(--Commented by zhiwei for Bug#12583958 on 20110608
3892                         get_cust_default_taxes(--Added by zhiwei for Bug#Bug#12583958 on 20110608
3893                                                             ln_organization_id ,
3894                                                             ln_customer_id,
3895                                                             ln_bill_to_site_use_id ,
3896                                                             ln_inventory_item_id ,
3897                                                             pn_internal_trx_id ,
3898                                                             pn_internal_trx_line_id ,
3899                                                             ln_tax_category_id
3900                                                            );
3901 
3902               /* --Commented by zhiwei for Bug#Bug#12583958 begin on 20110608
3903               ELSE
3904 
3905                         jai_cmn_tax_defaultation_pkg.ja_in_org_default_taxes(
3906                                                              ln_organization_id ,
3907                                                              ln_inventory_item_id ,
3908                                                              ln_tax_category_id
3909                                                             );
3910                                                             */--Commented by zhiwei for Bug#Bug#12583958 end on 20110608
3911               END IF;
3912 
3913           ELSE
3914 
3915               OPEN   CREATED_FROM_CUR(pn_internal_trx_id);
3916               FETCH  CREATED_FROM_CUR INTO lv_created_from, ld_trx_date;
3917               CLOSE  CREATED_FROM_CUR;
3918 
3919               IF ln_customer_id IS NOT NULL THEN
3920                       jai_gst_tax_defaultation_pkg.jai_gst_cust_default_taxes(
3921                                                       pn_organization_id     => ln_organization_id ,
3922                                                       pn_location_id         => ln_location_id,
3923                                                       pn_customer_id         => ln_customer_id,
3924                                                       pn_ship_to_site_use_id => ln_bill_to_site_use_id ,
3925                                                       pn_inventory_item_id   => ln_inventory_item_id ,
3926                                                       pd_transaction_date    => ld_trx_date,
3927                                                       pn_tax_category_id     => ln_tax_category_id
3928                                                    );
3929               END IF;
3930           END IF;
3931       --FOR AP
3932       ELSE
3933           IF (pn_import_module = JAI_CONSTANTS.SOURCE_AP) THEN
3934 
3935                 Get_Invoice_Header_Infor (
3936                              pn_internal_trx_id--ln_invoice_id
3937                            , ln_vendor_id
3938                            , ln_vendor_site_id
3939                            , lv_currency_code
3940                            , ln_exchange_rate
3941                            , ln_batch_id
3942                            );
3943                  Get_Tax_Cat_Serv_Type (
3944                             pn_vendor_id            => ln_vendor_id
3945                           , pn_vendor_site_id       => ln_vendor_site_id
3946                           , xn_tax_category_id      => ln_tax_category_id
3947                           , xv_service_type_code    => lv_service_type_code
3948                           );
3949 
3950           END IF;
3951 
3952       END IF;
3953       --Assign to the parameter xn_tax_category_id for output.
3954       xn_tax_category_id := ln_tax_category_id;
3955 
3956   END get_default_tax_cate_id;
3957 
3958   /*
3959   || Get tax type code by Tax id
3960   */
3961   FUNCTION get_tax_type_code(
3962            pn_tax_id   IN  NUMBER
3963   )RETURN VARCHAR2
3964   IS
3965   --Cursor define here
3966   CURSOR c_get_tax_type_code(pn_tax_id IN NUMBER) IS
3967   SELECT tax_type
3968   FROM   jai_cmn_taxes_all
3969   WHERE  tax_id = pn_tax_id;
3970 
3971   --Variable define here
3972   ln_tax_type_code      jai_cmn_taxes_all.tax_type%TYPE;
3973   v_debug               char(1);
3974 
3975   --Main block
3976   BEGIN
3977 
3978     v_debug := jai_constants.NO;
3979 
3980     OPEN c_get_tax_type_code(pn_tax_id);
3981     FETCH c_get_tax_type_code INTO ln_tax_type_code;
3982     CLOSE c_get_tax_type_code;
3983 
3984     IF NVL(ln_tax_type_code,'N')='N' THEN
3985        IF v_debug = 'Y' THEN
3986           fnd_file.put_line(fnd_file.log,' Can not get tax type code by tax id ' || pn_tax_id);
3987        END IF;
3988     END IF;
3989 
3990     RETURN ln_tax_type_code;
3991 
3992   END get_tax_type_code;
3993 
3994 
3995 
3996 
3997   /*
3998   || Get trx_id and trx_line_id by trx_num and trx_line_num
3999   */
4000   PROCEDURE get_trx_id_info(
4001       pn_interface_line_id     IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
4002       pv_transaction_num       IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE,
4003       pn_transaction_line_num  IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_LINE_NUM%TYPE,
4004       pv_import_module         IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
4005       pn_party_id              IN  JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
4006       pn_party_site_id         IN  JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE,
4007       xn_trx_id                OUT NOCOPY NUMBER,
4008       xn_trx_line_id           OUT NOCOPY NUMBER,
4009       xn_err_flag              IN OUT NOCOPY NUMBER
4010   )
4011   IS
4012 
4013   --Cursor define here
4014   CURSOR get_trx_info_ar_cur
4015   IS
4016   SELECT
4017      customer_trx_id,customer_trx_line_id,
4018      global_attribute19 transaction_id,
4019      global_attribute20 transaction_line_id
4020   FROM ra_customer_trx_lines_all
4021   WHERE 1=1
4022   AND line_type = 'LINE'
4023   --AND upper(interface_line_context) = 'OFI TAX IMPORT'   --DFF
4024   AND upper(global_attribute_category) = 'JG.IN.ARXTWMAI.OFI TAX IMPORT' --GDF
4025   AND global_attribute19 = pv_transaction_num
4026   AND global_attribute20 = TO_CHAR(pn_transaction_line_num)
4027   AND customer_trx_id in
4028   (
4029       select customer_trx_id
4030       from ra_customer_trx_all
4031       where bill_to_customer_id = pn_party_id
4032       and   bill_to_site_use_id = pn_party_site_id
4033   )
4034   order by 1,2
4035   ;
4036 
4037   CURSOR get_trx_info_ap_cur
4038   IS
4039   SELECT
4040      invoice_id,line_number,
4041      reference_key1 transaction_id,
4042      reference_key2 transaction_line_id
4043   FROM ap_invoice_lines_all
4044   WHERE 1=1
4045   AND line_type_lookup_code = 'ITEM'
4046   AND reference_key3 = 'OFI TAX IMPORT'
4047   AND reference_key1 = pv_transaction_num
4048   AND reference_key2 = TO_CHAR(pn_transaction_line_num)
4049   and invoice_id in
4050   (
4051       select invoice_id
4052       from ap_invoices_all
4053       where vendor_id      = pn_party_id
4054       and   vendor_site_id = pn_party_site_id
4055   )
4056   order by 1,2
4057   ;
4058 
4059   --Variable define here
4060   rec_ar_trx_info        get_trx_info_ar_cur%ROWTYPE;
4061   rec_ap_trx_info        get_trx_info_ap_cur%ROWTYPE;
4062   lv_return_mess         VARCHAR2(1000);
4063   lv_error_mess          VARCHAR2(1000);
4064   ln_trx_id              JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE;
4065   ln_trx_line_id         JAI_INTERFACE_LINES_ALL.TRANSACTION_LINE_NUM%TYPE;
4066 
4067   --Main block
4068   BEGIN
4069 
4070      --AR
4071      IF(pv_import_module = JAI_CONSTANTS.SOURCE_AR)THEN
4072 
4073         OPEN get_trx_info_ar_cur;
4074         FETCH get_trx_info_ar_cur INTO rec_ar_trx_info;
4075         CLOSE get_trx_info_ar_cur;
4076 
4077         ln_trx_id      := rec_ar_trx_info.customer_trx_id;
4078         ln_trx_line_id := rec_ar_trx_info.customer_trx_line_id;
4079      END IF;--AR
4080 
4081      --AP
4082      IF(pv_import_module = JAI_CONSTANTS.SOURCE_AP)THEN
4083         OPEN get_trx_info_ap_cur;
4084         FETCH get_trx_info_ap_cur INTO rec_ap_trx_info;
4085         CLOSE get_trx_info_ap_cur;
4086 
4087         ln_trx_id      := rec_ap_trx_info.invoice_id;
4088         ln_trx_line_id := rec_ap_trx_info.line_number;
4089      END IF;--AP
4090 
4091      IF(NVL(ln_trx_id,-1) = -1)THEN
4092              xn_err_flag := 1;
4093              lv_return_mess := 'INITIAL in get_trx_id_info : Can not get trx_id by Transaction num and Transaction line num With interface_line_id:'||pn_interface_line_id;
4094              lv_error_mess  := 'JAI_TRANS_LINES_ERR';--'Invalid Source Trans Num, cannot inset tax to Transaction ' || pv_transaction_num ;
4095              log_error(
4096                  pv_err_level              => GV_ERROR_TYPE_LINE,
4097                  pn_line_id                => pn_interface_line_id,
4098                  pn_source_line_id         => pn_interface_line_id,
4099                  pv_err_mess               => lv_error_mess,
4100                  pv_invalid_value          => ln_trx_id
4101              );
4102              record_fnd_log(
4103                  pv_fnd_log   => lv_return_mess
4104              );
4105      END IF;
4106 
4107      IF(NVL(ln_trx_line_id,-1) = -1)THEN
4108              xn_err_flag := 1;
4109              lv_return_mess := 'INITIAL in get_trx_id_info: Can not get trx_line_id by Transaction num and Transaction line num With interface_line_id:'||pn_interface_line_id;
4110              lv_error_mess  := 'JAI_TRANS_LINES_ERR';--'Invalid Source Trans Num, cannot inset tax to Transaction ' || pv_transaction_num ;
4111              log_error(
4112                  pv_err_level              => GV_ERROR_TYPE_LINE,
4113                  pn_line_id                => pn_interface_line_id,
4114                  pn_source_line_id         => pn_interface_line_id,
4115                  pv_err_mess               => lv_error_mess,
4116                  pv_invalid_value          => ln_trx_line_id
4117              );
4118              record_fnd_log(
4119                  pv_fnd_log   => lv_return_mess
4120              );
4121      END IF;
4122 
4123      --Assign variable for output
4124      xn_trx_id       := ln_trx_id;
4125      xn_trx_line_id  := ln_trx_line_id;
4126 
4127      EXCEPTION
4128          WHEN OTHERS THEN
4129             xn_err_flag := 1;
4130             lv_return_mess := 'INITIAL Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) ||' in get_trx_id_info With interface_line_id:'||pn_interface_line_id;
4131             lv_error_mess  := 'JAI_TRANS_LINES_ERR';--'Invalid Source Trans Num, cannot inset tax to Transaction ' || pv_transaction_num ;
4132 
4133             log_error(
4134                  pv_err_level              => GV_ERROR_TYPE_LINE,
4135                  pn_line_id                => pn_interface_line_id,
4136                  pn_source_line_id         => pn_interface_line_id,
4137                  pv_err_mess               => lv_error_mess,
4138                  pv_invalid_value          => pv_transaction_num
4139              );
4140              record_fnd_log(
4141                  pv_fnd_log   => lv_return_mess
4142              );
4143   END get_trx_id_info;
4144 
4145   /*
4146   ||Check the party and party site is available.
4147   */
4148   PROCEDURE validate_party_info(
4149                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
4150                 pv_import_module       IN  JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
4151                 pn_party_id            IN  JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
4152                 pn_party_site_id       IN  JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE,
4153                 pn_org_id              IN  JAI_INTERFACE_LINES_ALL.ORG_ID%TYPE,
4154                 xn_err_flag            IN OUT NOCOPY NUMBER
4155   )IS
4156 
4157   CURSOR get_ar_party_cur IS
4158   SELECT COUNT(customer_id)
4159     FROM jai_cmn_cus_addresses
4160    WHERE customer_id = pn_party_id;
4161 
4162   CURSOR get_ar_party_site_cur IS
4163   SELECT count(cuse.site_use_id)
4164     FROM hz_cust_site_uses_all cuse
4165        , jai_cmn_cus_addresses jcca
4166   WHERE cuse.site_use_id = pn_party_site_id
4167   AND cuse.site_use_code = 'BILL_TO'
4168   AND cuse.cust_acct_site_id = jcca.address_id;
4169 
4170   CURSOR chk_ar_party_combination_cur(
4171          cn_party_id       IN JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
4172          cn_party_site_id  IN JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE) IS
4173   SELECT count(cuse.site_use_id)
4174     FROM hz_cust_site_uses_all cuse
4175        , jai_cmn_cus_addresses jcca
4176   WHERE cuse.site_use_id = pn_party_site_id
4177     AND cuse.site_use_code = 'BILL_TO'
4178     AND cuse.cust_acct_site_id = jcca.address_id
4179     AND jcca.customer_id = cn_party_id;
4180 
4181   CURSOR get_ap_party_cur IS
4182   SELECT count(vendor_id)
4183     FROM jai_cmn_vendor_sites
4184    WHERE vendor_id = pn_party_id;
4185 
4186   CURSOR get_ap_party_site_cur IS
4187   SELECT count(vendor_site_id)
4188     FROM jai_cmn_vendor_sites
4189    WHERE vendor_site_id = pn_party_site_id;
4190 
4191   CURSOR chk_ap_party_combination_cur(
4192          cn_party_id       IN JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
4193          cn_party_site_id  IN JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE) IS
4194   SELECT COUNT(vendor_id)
4195     FROM jai_cmn_vendor_sites
4196    WHERE vendor_id = cn_party_id
4197      AND vendor_site_id = cn_party_site_id;
4198 
4199   --Variable define here
4200   ln_party_count    NUMBER;
4201   ln_count_flag     NUMBER;
4202 
4203   lv_return_mess   VARCHAR2(1000);
4204   lv_error_mess    VARCHAR2(1000);
4205   --Main block
4206   BEGIN
4207 
4208      IF(NVL(pv_import_module,'#') = JAI_CONSTANTS.SOURCE_AR)THEN
4209 
4210          IF(NVL(pn_party_id,-1) = -1)THEN
4211              xn_err_flag := 1;
4212              lv_return_mess := 'INITIAL in get_party_info : the customer id given by user should not be null With interface_line_id:'||pn_interface_line_id;
4213              lv_error_mess  := 'JAI_PARTY_ERR';--'Invalid Party Name';
4214              log_error(
4215                      pv_err_level              => GV_ERROR_TYPE_LINE,
4216                      pn_line_id                => pn_interface_line_id,
4217                      pn_source_line_id         => pn_interface_line_id,
4218                      pv_err_mess               => lv_error_mess,
4219                      pv_invalid_value          => pn_party_id
4220              );
4221              record_fnd_log(
4222                      pv_fnd_log   => lv_return_mess
4223              );
4224          ELSE
4225              OPEN  get_ar_party_cur;
4226              FETCH get_ar_party_cur INTO ln_count_flag;
4227              CLOSE get_ar_party_cur;
4228 
4229              IF(NVL(ln_count_flag,-1) < 1)THEN
4230                  xn_err_flag := 1;
4231                  lv_return_mess := 'INITIAL in get_party_info : the customer id given by user is not available With interface_line_id:'||pn_interface_line_id;
4232                  lv_error_mess  := 'JAI_PARTY_ERR';--'Invalid Party Name';
4233                  log_error(
4234                          pv_err_level              => GV_ERROR_TYPE_LINE,
4235                          pn_line_id                => pn_interface_line_id,
4236                          pn_source_line_id         => pn_interface_line_id,
4237                          pv_err_mess               => lv_error_mess,
4238                          pv_invalid_value          => pn_party_id
4239                  );
4240                  record_fnd_log(
4241                          pv_fnd_log   => lv_return_mess
4242                  );
4243              END IF;
4244          END IF;
4245 
4246 
4247          IF(NVL(pn_party_site_id,-1) IN (0, -1))THEN
4248              xn_err_flag := 1;
4249              lv_return_mess := 'INITIAL in validate_party_info : the customer site id given by user should not be null With interface_line_id:'||pn_interface_line_id;
4250              lv_error_mess  := 'JAI_PARTY_SITE_ERR';--'Invalid Party Site Name';
4251              log_error(
4252                      pv_err_level              => GV_ERROR_TYPE_LINE,
4253                      pn_line_id                => pn_interface_line_id,
4254                      pn_source_line_id         => pn_interface_line_id,
4255                      pv_err_mess               => lv_error_mess,
4256                      pv_invalid_value          => pn_party_site_id
4257              );
4258              record_fnd_log(
4259                      pv_fnd_log   => lv_return_mess
4260              );
4261          ELSE
4262              OPEN  get_ar_party_site_cur;
4263              FETCH get_ar_party_site_cur INTO ln_count_flag;
4264              CLOSE get_ar_party_site_cur;
4265 
4266              IF(NVL(ln_count_flag,-1) <> 1)THEN
4267 
4268                  xn_err_flag := 1;
4269                  lv_return_mess := 'INITIAL in validate_party_info : the customer site id given by user is not available With interface_line_id:'||pn_interface_line_id;
4270                  lv_error_mess  := 'JAI_PARTY_SITE_ERR';--'Invalid Party Site Name';
4271                  log_error(
4272                          pv_err_level              => GV_ERROR_TYPE_LINE,
4273                          pn_line_id                => pn_interface_line_id,
4274                          pn_source_line_id         => pn_interface_line_id,
4275                          pv_err_mess               => lv_error_mess,
4276                          pv_invalid_value          => pn_party_site_id
4277                  );
4278                  record_fnd_log(
4279                            pv_fnd_log   => lv_return_mess
4280                  );
4281 
4282               END IF;
4283 
4284          END IF;
4285 
4286      END IF;
4287      IF(NVL(pv_import_module,'#') = JAI_CONSTANTS.SOURCE_AP)THEN
4288 
4289 
4290 
4291          IF(NVL(pn_party_id,-1) = -1)THEN
4292              xn_err_flag := 1;
4293              lv_return_mess := 'INITIAL in get_party_info : the vendor id given by user should not be null With interface_line_id:'||pn_interface_line_id;
4294              lv_error_mess  := 'JAI_PARTY_ERR';--'Invalid Party Name';
4295              log_error(
4296                      pv_err_level              => GV_ERROR_TYPE_LINE,
4297                      pn_line_id                => pn_interface_line_id,
4298                      pn_source_line_id         => pn_interface_line_id,
4299                      pv_err_mess               => lv_error_mess,
4300                      pv_invalid_value          => pn_party_id
4301              );
4302              record_fnd_log(
4303                      pv_fnd_log   => lv_return_mess
4304              );
4305          ELSE
4306              OPEN  get_ap_party_cur;
4307              FETCH get_ap_party_cur INTO ln_count_flag;
4308              CLOSE get_ap_party_cur;
4309 
4310              IF(NVL(ln_count_flag,-1) < 1)THEN
4311                  xn_err_flag := 1;
4312                  lv_return_mess := 'INITIAL in get_party_info : the vendor id given by user is not available With interface_line_id:'||pn_interface_line_id;
4313                  lv_error_mess  := 'JAI_PARTY_ERR';--'Invalid Party Name';
4314                  log_error(
4315                          pv_err_level              => GV_ERROR_TYPE_LINE,
4316                          pn_line_id                => pn_interface_line_id,
4317                          pn_source_line_id         => pn_interface_line_id,
4318                          pv_err_mess               => lv_error_mess,
4319                          pv_invalid_value          => pn_party_id
4320                  );
4321                  record_fnd_log(
4322                          pv_fnd_log   => lv_return_mess
4323                  );
4324              END IF;
4325          END IF;
4326 
4327          IF(NVL(pn_party_site_id,-1) IN (0, -1))THEN
4328              xn_err_flag := 1;
4329              lv_return_mess := 'INITIAL in validate_party_info : the vendor site id given by user should not be null With interface_line_id:'||pn_interface_line_id;
4330              lv_error_mess  := 'JAI_PARTY_SITE_ERR';--'Invalid Party Site Name';
4331              log_error(
4332                      pv_err_level              => GV_ERROR_TYPE_LINE,
4333                      pn_line_id                => pn_interface_line_id,
4334                      pn_source_line_id         => pn_interface_line_id,
4335                      pv_err_mess               => lv_error_mess,
4336                      pv_invalid_value          => pn_party_site_id
4337              );
4338              record_fnd_log(
4339                      pv_fnd_log   => lv_return_mess
4340              );
4341          ELSE
4342              OPEN  get_ap_party_site_cur;
4343              FETCH get_ap_party_site_cur INTO ln_count_flag;
4344              CLOSE get_ap_party_site_cur;
4345 
4346              IF(NVL(ln_count_flag,-1) <> 1)THEN
4347 
4348                  xn_err_flag := 1;
4349                  lv_return_mess := 'INITIAL in validate_party_info : the vendor site id given by user is not available With interface_line_id:'||pn_interface_line_id;
4350                  lv_error_mess  := 'JAI_PARTY_SITE_ERR';--'Invalid Party Site Name';
4351                  log_error(
4352                          pv_err_level              => GV_ERROR_TYPE_LINE,
4353                          pn_line_id                => pn_interface_line_id,
4354                          pn_source_line_id         => pn_interface_line_id,
4355                          pv_err_mess               => lv_error_mess,
4356                          pv_invalid_value          => pn_party_site_id
4357                  );
4358                  record_fnd_log(
4359                            pv_fnd_log   => lv_return_mess
4360                  );
4361 
4362               END IF;
4363 
4364          END IF;
4365 
4366      END IF;
4367 
4368      --Check the combination of party id and party site id is available.
4369      IF(NVL(pv_import_module,'#') = JAI_CONSTANTS.SOURCE_AR)THEN
4370          OPEN  chk_ar_party_combination_cur(
4371                cn_party_id      => pn_party_id,
4372                cn_party_site_id => pn_party_site_id
4373          );
4374          FETCH chk_ar_party_combination_cur INTO ln_party_count;
4375          CLOSE chk_ar_party_combination_cur;
4376      END IF;
4377      IF(NVL(pv_import_module,'#') = JAI_CONSTANTS.SOURCE_AP)THEN
4378          OPEN  chk_ap_party_combination_cur(
4379                cn_party_id      => pn_party_id,
4380                cn_party_site_id => pn_party_site_id
4381          );
4382          FETCH chk_ap_party_combination_cur INTO ln_party_count;
4383          CLOSE chk_ap_party_combination_cur;
4384      END IF;
4385 
4386 
4387 
4388      IF(NVL(ln_party_count,-1) <> 1)THEN
4389 
4390          xn_err_flag := 1;
4391          lv_return_mess := 'INITIAL in validate_party_info : the combination of party name and party site name is not available given by user With interface_line_id:'||pn_interface_line_id;
4392          lv_error_mess  := 'JAI_PARTY_COMBINATION_ERR';--'Invalid Party Name/ Party Site combination';
4393          log_error(
4394                 pv_err_level              => GV_ERROR_TYPE_LINE,
4395                 pn_line_id                => pn_interface_line_id,
4396                 pn_source_line_id         => pn_interface_line_id,
4397                 pv_err_mess               => lv_error_mess,
4398                 pv_invalid_value          => pn_party_id||' '||pn_party_site_id
4399          );
4400          record_fnd_log(
4401                 pv_fnd_log   => lv_return_mess
4402          );
4403      END IF;
4404 
4405      EXCEPTION
4406          WHEN OTHERS THEN
4407               xn_err_flag := 1;
4408               lv_return_mess := 'VALIDATION Exception with SQLERR:' || SUBSTR(SQLERRM,1,230) || ' in get_party_info With interface_line_id:'||pn_interface_line_id;
4409               lv_error_mess  := 'JAI_PARTY_COMBINATION_ERR';--'Invalid Party Name/ Party Site combination';
4410               log_error(
4411                  pv_err_level              => GV_ERROR_TYPE_LINE,
4412                  pn_line_id                => pn_interface_line_id,
4413                  pn_source_line_id         => pn_interface_line_id,
4414                  pv_err_mess               => lv_error_mess,
4415                  pv_invalid_value          => pn_interface_line_id
4416               );
4417               record_fnd_log(
4418                  pv_fnd_log   => lv_return_mess
4419               );
4420   END validate_party_info;
4421 
4422   /*
4423   ||Check the service type for AP, if service type code is not null then vaidate it is available.
4424   ||                                 else find the default service type code and populate.
4425   */
4426   PROCEDURE validate_service_type(
4427                 pn_interface_line_id   IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
4428                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE,
4429                 pv_service_type_code   IN  JAI_INTERFACE_LINES_ALL.SERVICE_TYPE_CODE%TYPE,
4430                 xn_err_flag            IN OUT NOCOPY NUMBER
4431   )IS
4432 
4433   --Cursor define here
4434   CURSOR get_vendor_info_cur
4435   IS
4436   SELECT
4437          vendor_id,
4438          vendor_site_id
4439   FROM AP_INVOICES_ALL
4440   WHERE invoice_id = pn_trx_id;
4441 
4442   CURSOR get_service_type_code(
4443         cn_vendor_id      IN NUMBER,
4444         cn_vendor_site_id IN NUMBER
4445   )
4446   IS
4447   SELECT
4448         service_type_code
4449   FROM  JAI_CMN_VENDOR_SITES
4450   WHERE VENDOR_ID      = cn_vendor_id
4451   AND   VENDOR_SITE_ID = cn_vendor_site_id;
4452 
4453   CURSOR chk_service_type_code
4454   IS
4455   SELECT
4456         COUNT(lookup_code)
4457   FROM  ja_lookups
4458   WHERE lookup_type = 'JAI_SERVICE_TYPE'
4459   AND   lookup_code = pv_service_type_code;
4460 
4461   --Added by zhiwei for Bug#12584814 on 20110607 begin
4462   ----------------------------------------------------------
4463   CURSOR chk_service_exist_cur
4464   IS
4465   SELECT
4466        count(tax.tax_id)
4467   FROM JAI_CMN_TAXES_ALL tax,
4468        JAI_INTERFACE_TAX_LINES_ALL intf
4469   WHERE intf.tax_id = tax.tax_id
4470   and   intf.interface_line_id = pn_interface_line_id
4471   and  (
4472         upper(tax_type) in
4473             (
4474                SELECT jrr.attribute_code
4475                  FROM jai_rgm_registrations jrr
4476                 WHERE jrr.registration_type = jai_constants.regn_type_tax_types
4477                   AND jrr.regime_id IN
4478                             (
4479                              SELECT jrd.regime_id
4480                                FROM jai_rgm_definitions jrd
4481                               WHERE jrd.regime_code = jai_constants.service_regime
4482                             )
4483             )
4484          or
4485         upper(tax_type) in
4486            (
4487                    'SERVICE_EDUCATION_CESS','SERVICE_SH_EDU_CESS','SERVICE'
4488            )
4489   );
4490 
4491 
4492 
4493   CURSOR get_tax_category_cur
4494   IS
4495   SELECT
4496          TAX_CATEGORY_ID
4497   FROM   JAI_INTERFACE_LINES_ALL
4498   WHERE  INTERFACE_LINE_ID = pn_interface_line_id;
4499 
4500 
4501   CURSOR chk_tax_category_cur(cn_tax_category_id JAI_CMN_TAX_CTG_LINES.tax_category_id%type)
4502   IS
4503   SELECT
4504        count(tax.tax_id)
4505   FROM JAI_CMN_TAXES_ALL tax,
4506        JAI_CMN_TAX_CTG_LINES cate
4507   WHERE cate.tax_id = tax.tax_id
4508   and   cate.tax_category_id = cn_tax_category_id
4509   and  (
4510           upper(tax_type) in
4511                (
4512                   SELECT jrr.attribute_code
4513                     FROM jai_rgm_registrations jrr
4514                    WHERE jrr.registration_type = jai_constants.regn_type_tax_types
4515                      AND jrr.regime_id IN
4516                                (
4517                                 SELECT jrd.regime_id
4518                                   FROM jai_rgm_definitions jrd
4519                                  WHERE jrd.regime_code = jai_constants.service_regime
4520                                )
4521                )
4522           or
4523            upper(tax_type) in
4524               (
4525                       'SERVICE_EDUCATION_CESS','SERVICE_SH_EDU_CESS','SERVICE'
4526               )
4527         );
4528 
4529 
4530   ln_count_detail_flag      number;
4531   ln_count_cate_flag        number;
4532   ln_service_exist   number; --1:service tax exist; 0:service tax not exist;
4533   ln_tax_category_id number;
4534   ----------------------------------------------------------
4535   --Added by zhiwei for Bug#12584814 on 20110607 end
4536 
4537   --Variable define here
4538   ln_vendor_id      NUMBER;
4539   ln_vendor_site_id NUMBER;
4540 
4541   ln_result_count   NUMBER;
4542   lv_serv_type_code JAI_CMN_VENDOR_SITES.SERVICE_TYPE_CODE%TYPE;
4543 
4544   lv_return_mess   VARCHAR2(1000);
4545   lv_error_mess    VARCHAR2(1000);
4546   --Main block
4547   BEGIN
4548 
4549      --Added by zhiwei for Bug#12584814 on 20110607 begin
4550      ----------------------------------------------------------
4551      ln_service_exist := 0;
4552 
4553      open chk_service_exist_cur;
4554      fetch chk_service_exist_cur into ln_count_detail_flag;
4555      close chk_service_exist_cur;
4556 
4557      if(nvl(ln_count_detail_flag,0) > 0)then
4558         ln_service_exist := 1;
4559      else
4560         --check service tax in category.
4561         open get_tax_category_cur;
4562         fetch get_tax_category_cur into ln_tax_category_id;
4563         close get_tax_category_cur;
4564 
4565         if(ln_tax_category_id is not null)then
4566            open chk_tax_category_cur(ln_tax_category_id);
4567            fetch chk_tax_category_cur into ln_count_cate_flag;
4568            close chk_tax_category_cur;
4569 
4570            if(nvl(ln_count_cate_flag,0) > 0)then
4571               ln_service_exist := 1;
4572            end if;
4573 
4574         end if;
4575 
4576      end if;
4577 
4578      if(nvl(ln_service_exist,0) = 1)then
4579      ----------------------------------------------------------
4580      --Added by zhiwei for Bug#12584814 on 20110607 end
4581 
4582      --If Service Type is not null,then validate it is available.
4583      IF(NVL(pv_service_type_code,'#') <> '#')THEN
4584           OPEN chk_service_type_code;
4585           FETCH chk_service_type_code INTO ln_result_count;
4586           CLOSE chk_service_type_code;
4587 
4588           IF(NVL(ln_result_count,-1) <= 0)THEN
4589               xn_err_flag := 1;
4590               lv_return_mess := 'VALIDATION in validate_service_type : the service type code given by user is not available With interface_line_id:'||pn_interface_line_id;
4591               lv_error_mess  := 'JAI_INVALID_SERVICE_TYPE';--'Invalid Service Type value.';
4592               log_error(
4593                       pv_err_level              => GV_ERROR_TYPE_LINE,
4594                       pn_line_id                => pn_interface_line_id,
4595                       pn_source_line_id         => pn_interface_line_id,
4596                       pv_err_mess               => lv_error_mess,
4597                       pv_invalid_value          => pv_service_type_code
4598               );
4599               record_fnd_log(
4600                       pv_fnd_log   => lv_return_mess
4601               );
4602           END IF;
4603 
4604      ELSE
4605           --If service type is null ,then find the default service type by party addtional info.
4606           OPEN get_vendor_info_cur;
4607           FETCH get_vendor_info_cur INTO ln_vendor_id,ln_vendor_site_id;
4608           CLOSE get_vendor_info_cur;
4609 
4610           OPEN get_service_type_code(ln_vendor_id,ln_vendor_site_id);
4611           FETCH get_service_type_code INTO lv_serv_type_code;
4612           CLOSE get_service_type_code;
4613 
4614           IF(NVL(lv_serv_type_code,'#') = '#')THEN
4615               xn_err_flag := 1;
4616               lv_return_mess := 'VALIDATION in validate_service_type : Can not get the default service type code by addtional vendor info With interface_line_id:'||pn_interface_line_id;
4617               lv_error_mess  := 'JAI_SERVICE_TYPE_UNDEFINED';--'Cannot get Service Type value';
4618               log_error(
4619                       pv_err_level              => GV_ERROR_TYPE_LINE,
4620                       pn_line_id                => pn_interface_line_id,
4621                       pn_source_line_id         => pn_interface_line_id,
4622                       pv_err_mess               => lv_error_mess,
4623                       pv_invalid_value          => pn_interface_line_id
4624               );
4625               record_fnd_log(
4626                       pv_fnd_log   => lv_return_mess
4627               );
4628           ELSE
4629               --Update to interface line.
4630               update jai_interface_lines_all
4631               set    service_type_code = lv_serv_type_code
4632               where  interface_line_id = pn_interface_line_id;
4633 
4634           END IF;
4635 
4636      END IF;
4637      --Added by zhiwei for Bug#12584814 on 20110607 begin
4638      ----------------------------------------------------------
4639      end if;
4640      ----------------------------------------------------------
4641      --Added by zhiwei for Bug#12584814 on 20110607 end
4642 
4643      EXCEPTION
4644          WHEN OTHERS THEN
4645               xn_err_flag := 1;
4646               lv_return_mess := 'VALIDATION Exception with SQLERR:' || SUBSTR(SQLERRM,1,230) || ' in validate_service_type With interface_line_id:'||pn_interface_line_id;
4647               lv_error_mess  := 'JAI_INVALID_SERVICE_TYPE';--'Invalid Service Type value.';
4648               log_error(
4649                  pv_err_level              => GV_ERROR_TYPE_LINE,
4650                  pn_line_id                => pn_interface_line_id,
4651                  pn_source_line_id         => pn_interface_line_id,
4652                  pv_err_mess               => lv_error_mess,
4653                  pv_invalid_value          => pn_interface_line_id
4654               );
4655               record_fnd_log(
4656                  pv_fnd_log   => lv_return_mess
4657               );
4658 
4659   END validate_service_type;
4660 
4661   /*
4662   ||Check tax lines
4663   */
4664   PROCEDURE validate_tax_line(
4665                 pr_interface_lines     IN  JAI_INTERFACE_LINES_ALL%ROWTYPE,
4666                 pn_trx_id              IN  JAI_INTERFACE_LINES_ALL.TRANSACTION_ID%TYPE,
4667                 xn_err_flag            IN OUT NOCOPY NUMBER
4668   )IS
4669 
4670   --Cursor define here
4671   CURSOR get_tax_line_cur
4672   IS
4673   SELECT *
4674   FROM JAI_INTERFACE_TAX_LINES_ALL
4675   WHERE INTERFACE_LINE_ID = pr_interface_lines.INTERFACE_LINE_ID
4676   ORDER BY INTERFACE_TAX_LINE_ID;
4677 
4678   CURSOR chk_category_id_cur(cn_category_id IN JAI_INTERFACE_LINES_ALL.TAX_CATEGORY_ID%TYPE)
4679   IS
4680   SELECT tax_category_id
4681   FROM   JAI_CMN_TAX_CTGS_ALL
4682   WHERE  tax_category_id = cn_category_id;
4683 
4684   CURSOR get_not_ebs_tax_flag IS
4685   SELECT count(1)
4686     FROM JAI_IM_TAX_MAPPING
4687    WHERE org_id = pr_interface_lines.org_id
4688      AND taxable_event = pr_interface_lines.taxable_event
4689      AND use_ebs_tax = 'N';
4690 
4691   --Variable define here
4692   lv_return_mess            VARCHAR2(1000);
4693   lv_error_mess             VARCHAR2(1000);
4694 
4695   ln_tax_id                 JAI_INTERFACE_TAX_LINES_ALL.TAX_ID%TYPE;
4696   rec_tax_line              JAI_INTERFACE_TAX_LINES_ALL%ROWTYPE;
4697   ln_rec_percent            NUMBER;
4698   ln_func_tax_amount        NUMBER;
4699   ln_tax_category_id        JAI_INTERFACE_LINES_ALL.TAX_CATEGORY_ID%TYPE;
4700   ln_tax_exist_flag         NUMBER;
4701 
4702   ln_not_ebs_code           NUMBER;
4703 
4704 
4705   --Main block
4706   BEGIN
4707 
4708      OPEN get_not_ebs_tax_flag;
4709      FETCH get_not_ebs_tax_flag INTO ln_not_ebs_code;
4710      CLOSE get_not_ebs_tax_flag;
4711 
4712      ln_tax_exist_flag := 0;
4713      --Loop for tax line
4714      FOR rec_tax_line IN get_tax_line_cur
4715      LOOP
4716 
4717           ln_tax_exist_flag := 1;
4718 
4719           --Check the tax line no should not be null
4720           validate_tax_line_no(
4721                 pn_interface_line_id => pr_interface_lines.interface_line_id,
4722                 pn_tax_line_id       => rec_tax_line.interface_tax_line_id,
4723                 pn_tax_line_no       => rec_tax_line.tax_line_no,
4724                 pn_trx_id            => pn_trx_id,
4725                 xn_err_flag          => xn_err_flag
4726           );
4727 
4728           IF(pr_interface_lines.taxable_event = GV_TAXABLE_EVENT_STANDALONE)THEN
4729                 --check the procedence of tax is correct
4730                 validate_tax_precedence(
4731                       pn_interface_line_id => pr_interface_lines.interface_line_id,
4732                       pr_tax_lines         => rec_tax_line,
4733                       pn_trx_id            => pn_trx_id,
4734                       xn_err_flag          => xn_err_flag
4735                 );
4736 
4737                 --Added by zhiwei for Bug#12604133 on 20110623 begin
4738                 ---------------------------------------------------------
4739                 validate_qty_rate(
4740                      pn_interface_line_id   => pr_interface_lines.interface_line_id,
4741                      pn_tax_line_id         => rec_tax_line.interface_tax_line_id,
4742                      pn_tax_id              => rec_tax_line.tax_id,
4743                      xn_err_flag            => xn_err_flag
4744                 );
4745                 ---------------------------------------------------------
4746                 --Added by zhiwei for Bug#12604133 on 20110623 end
4747           END IF;
4748           --Check the external tax code 1 should find mapping relationship in mapping table
4749           --                            2 inclusive flag of tax should be same as the ebs system
4750           --                            3 tax should in available term , startdate and enddate
4751           validate_tax_code(
4752                 pr_interface_lines => pr_interface_lines,
4753                 pr_tax_lines       => rec_tax_line,
4754                 pn_trx_id          => pn_trx_id,
4755                 xn_err_flag        => xn_err_flag,
4756                 xn_tax_id          => ln_tax_id      --Parameter output to Tax id for update and used by following process.
4757           );
4758 
4759           --Tax id outputed is available
4760           IF(NVL(ln_tax_id,-1) <> -1)THEN
4761           --tax_id is updated only for not use ebs tax code
4762             IF ln_not_ebs_code > 0 THEN
4763               --Update tax id to tax line
4764               UPDATE JAI_INTERFACE_TAX_LINES_ALL
4765               SET    TAX_ID =  ln_tax_id
4766               WHERE  INTERFACE_TAX_LINE_ID = rec_tax_line.INTERFACE_TAX_LINE_ID;
4767             END IF;
4768 
4769               --Check the tax type in constains
4770               validate_tax_constrain(
4771                     pr_interface_lines => pr_interface_lines,
4772                     pr_tax_lines       => rec_tax_line,
4773                     pn_trx_id          => pn_trx_id,
4774                     xn_err_flag        => xn_err_flag,
4775                     pn_tax_id          => ln_tax_id
4776               );
4777 
4778               --Validate the distribution line information
4779               validate_dist_info(
4780                     pr_interface_lines => pr_interface_lines,
4781                     pr_tax_lines       => rec_tax_line,
4782                     xn_err_flag        => xn_err_flag
4783               );
4784 
4785           END IF;
4786 
4787      END LOOP;
4788 
4789      --If no tax line exist , then find category id assigned by user, no category id assigned find default category id
4790      IF(ln_tax_exist_flag = 0)THEN
4791        IF upper(pr_interface_lines.taxable_event) = GV_TAXABLE_EVENT_STANDALONE THEN
4792          --Find category id and check the tax category id is available.
4793          IF(NVL(pr_interface_lines.tax_category_id,-1) <> -1)THEN
4794 
4795              --Check the category given by user is available for EBS system.
4796              OPEN  chk_category_id_cur(pr_interface_lines.tax_category_id);
4797              FETCH chk_category_id_cur INTO ln_tax_category_id;
4798              CLOSE chk_category_id_cur;
4799 
4800              IF(NVL(ln_tax_category_id,-1) = -1)THEN
4801                  xn_err_flag := 1;
4802                  lv_return_mess := 'VALIDATION in validate_tax_line : tax category id is not available for EBS With interface_line_id:'||pr_interface_lines.interface_line_id;
4803                  lv_error_mess  := 'JAI_CATEGORY_INVALID';--'Invalid tax category';
4804                  log_error(
4805                       pv_err_level              => GV_ERROR_TYPE_LINE,
4806                       pn_line_id                => pr_interface_lines.interface_line_id,
4807                       pn_source_line_id         => pr_interface_lines.interface_line_id,
4808                       pv_err_mess               => lv_error_mess,
4809                       pv_invalid_value          => pr_interface_lines.tax_category_id
4810                  );
4811                  record_fnd_log(
4812                      pv_fnd_log   => lv_return_mess
4813                  );
4814 
4815              END IF;
4816          ELSE
4817 
4818               --If category id not found then find default category id and feedback to interface line
4819               get_default_tax_cate_id(
4820 
4821                       pn_import_module        => pr_interface_lines.import_module,
4822                       pn_internal_trx_id      => pr_interface_lines.internal_trx_id,
4823                       pn_internal_trx_line_id => pr_interface_lines.internal_trx_line_id,
4824                       xn_tax_category_id      => ln_tax_category_id
4825               );
4826 
4827               IF(NVL(ln_tax_category_id,-1) = -1)THEN
4828                   --If found no default tax category id , error message .
4829                   xn_err_flag := 1;
4830                   lv_return_mess := 'VALIDATION in validate_tax_line : Default tax category id not found With interface_line_id:'||pr_interface_lines.interface_line_id;
4831                   lv_error_mess  := 'JAI_CATEGORY_UNDEFINED';--'Can not get default tax category form party additional info, please check setup.';
4832                   log_error(
4833                       pv_err_level              => GV_ERROR_TYPE_LINE,
4834                       pn_line_id                => pr_interface_lines.interface_line_id,
4835                       pn_source_line_id         => pr_interface_lines.interface_line_id,
4836                       pv_err_mess               => lv_error_mess,
4837                       pv_invalid_value          => null
4838                   );
4839                   record_fnd_log(
4840                      pv_fnd_log   => lv_return_mess
4841                   );
4842               ELSE
4843                   --Update the tax category id to interface line .
4844                   UPDATE JAI_INTERFACE_LINES_ALL
4845                   SET    tax_category_id = ln_tax_category_id --10141--
4846                   where  interface_line_id = pr_interface_lines.interface_line_id;
4847               END IF;
4848          END IF;
4849        END IF;
4850      END IF;
4851 
4852 
4853      EXCEPTION
4854          WHEN OTHERS THEN
4855             xn_err_flag := 1;
4856             lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_tax_line With interface_line_id:'||pr_interface_lines.interface_line_id;
4857 
4858 /*            log_error(
4859                  pv_err_level              => GV_ERROR_TYPE_LINE,
4860                  pn_line_id                => pr_interface_lines.interface_line_id,
4861                  pn_source_line_id         => pr_interface_lines.interface_line_id,
4862                  pv_err_mess               => lv_return_mess,
4863                  pv_invalid_value          => pr_interface_lines.transaction_id
4864             );*/
4865             record_fnd_log(
4866                  pv_fnd_log   => lv_return_mess
4867             );
4868 
4869   END validate_tax_line;
4870 
4871 
4872   /*
4873   || Check the import module should be AR or AP
4874   */
4875   PROCEDURE validate_import_module(
4876            pr_interface_lines  IN      JAI_INTERFACE_LINES_ALL%ROWTYPE,
4877            xn_err_flag         IN OUT NOCOPY NUMBER
4878   )
4879   IS
4880 
4881   --Variable define here
4882   lv_return_mess         VARCHAR2(1000);
4883   lv_error_mess          VARCHAR2(1000);
4884   --Main block
4885   BEGIN
4886 
4887      --Import module should be AR or AP
4888      IF(NVL(pr_interface_lines.import_module,'#') NOT IN (JAI_CONSTANTS.SOURCE_AR,JAI_CONSTANTS.SOURCE_AP))THEN
4889 
4890         lv_return_mess := 'VALIDATION in validate_import_module : Import module is incorrect With interface_line_id:'||pr_interface_lines.interface_line_id;
4891         lv_error_mess  := 'JAI_IMPORT_MODULE_ERR';--'Import module value is invalid';
4892         xn_err_flag := 1;
4893         log_error(
4894                 pv_err_level              => GV_ERROR_TYPE_LINE,
4895                 pn_line_id                => pr_interface_lines.interface_line_id,
4896                 pn_source_line_id         => pr_interface_lines.interface_line_id,
4897                 pv_err_mess               => lv_error_mess,
4898                 pv_invalid_value          => pr_interface_lines.import_module
4899          );
4900          record_fnd_log(
4901                 pv_fnd_log   => lv_return_mess
4902          );
4903      END IF;
4904      EXCEPTION
4905          WHEN OTHERS THEN
4906              xn_err_flag := 1;
4907              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_import_module With interface_line_id:'||pr_interface_lines.interface_line_id;
4908              lv_error_mess  := 'JAI_IMPORT_MODULE_ERR';--'Import module value is invalid';
4909              log_error(
4910                 pv_err_level              => GV_ERROR_TYPE_LINE,
4911                 pn_line_id                => pr_interface_lines.interface_line_id,
4912                 pn_source_line_id         => pr_interface_lines.interface_line_id,
4913                 pv_err_mess               => lv_error_mess,
4914                 pv_invalid_value          => pr_interface_lines.import_module
4915              );
4916              record_fnd_log(
4917                 pv_fnd_log   => lv_return_mess
4918              );
4919   END validate_import_module;
4920 
4921 
4922 
4923   /*
4924   || Validation process
4925   */
4926   PROCEDURE validate_process(
4927            pn_interface_line_id  IN JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE
4928   )
4929   IS
4930 
4931   --Cursor define here
4932   CURSOR get_interface_line_cur
4933   IS
4934   SELECT
4935        *
4936   FROM JAI_INTERFACE_LINES_ALL
4937   WHERE INTERFACE_LINE_ID = pn_interface_line_id
4938   AND   IMPORT_STATUS  = GV_IMPORT_SUCCESS
4939   AND   IMPORT_PROCESS = GV_PROCESS_INITIALIZE
4940   ORDER BY 1;
4941 
4942   --Variable define here
4943   lv_return_code            VARCHAR2(30);
4944   lv_return_mess            VARCHAR2(500);
4945   ln_err_flag               NUMBER;
4946   rec_interface_line        JAI_INTERFACE_LINES_ALL%ROWTYPE;
4947   ln_internal_trx_id        JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE;
4948   ln_internal_trx_line_id   JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_LINE_ID%TYPE;
4949   ln_phase                  NUMBER;
4950 
4951   --Main block
4952   BEGIN
4953 
4954      FOR rec_interface_line IN get_interface_line_cur
4955      LOOP
4956 
4957           ln_phase := 12.1;
4958 
4959           ln_internal_trx_id      := rec_interface_line.internal_trx_id;
4960           ln_internal_trx_line_id := rec_interface_line.internal_trx_line_id;
4961 
4962           ln_err_flag := 0;
4963 
4964           --Change status to 'SUCCESS',process to 'VALIDATION'
4965           update_line_status(
4966                 pn_interface_line_id => rec_interface_line.interface_line_id,
4967                 pv_import_status     => GV_IMPORT_SUCCESS,
4968                 pv_import_process    => GV_PROCESS_VALIDATION
4969                 );
4970 
4971           ln_phase := 12.2;
4972 
4973           --Validate OU/IO/LOC
4974           validate_ou_io_loc(
4975                 pr_interface_lines     => rec_interface_line,
4976                 xn_err_flag            => ln_err_flag
4977           );
4978 
4979           ln_phase := 12.3;
4980 
4981           --Check taxable event must in GV_TAXABLE_EVENT_EXTERNAL,GV_TAXABLE_EVENT_STANDALONE
4982           --GV_TAXABLE_EVENT_EXTERNAL,GV_TAXABLE_EVENT_STANDALONE
4983           --TAX AMOUNT OF LINE EQUALS SUM(TAX_AMOUNT) OF TAX LINES
4984           validate_taxable_event(
4985                 pr_interface_lines     => rec_interface_line,
4986                 xn_err_flag            => ln_err_flag
4987           );
4988 
4989           ln_phase := 12.4;
4990 
4991           --Check the taxable basis , should be in (GV_TAXABLE_BASIS_LINEAMT,GV_TAXABLE_BASIS_AV)
4992           validate_taxable_basis(
4993                 pr_interface_lines     => rec_interface_line,
4994                 xn_err_flag            => ln_err_flag
4995           );
4996 
4997           ln_phase := 12.5;
4998 
4999           --If transaction id gived by customer exists ,Check it equals internal trx id got from transaction table
5000           IF(NVL(rec_interface_line.transaction_id,-1) <> -1) THEN
5001               validate_trx_id_equals(
5002                     pr_interface_lines     => rec_interface_line,
5003                     pn_trx_id              => ln_internal_trx_id,
5004                     xn_err_flag            => ln_err_flag
5005               );
5006 
5007               --Add by Xiao for validate the transaction is created by importing, rather than created from
5008               --the forms.
5009               --IF pass the validation of validate_trx_id_equals, then will check validate_import_trx.
5010               IF ln_err_flag <> 1 THEN
5011                  validate_import_trx(
5012                     pn_interface_line_id   => rec_interface_line.interface_line_id,
5013                     pv_import_module       => rec_interface_line.import_module,
5014                     pn_trx_id              => ln_internal_trx_id,
5015                     pn_trx_line_id         => ln_internal_trx_line_id,
5016                     xn_err_flag            => ln_err_flag );
5017               END IF;
5018 
5019           END IF;
5020 
5021           ln_phase := 12.6;
5022 
5023 
5024           --For external module only ,the tax lines should be exist.
5025           IF(rec_interface_line.taxable_event = GV_TAXABLE_EVENT_EXTERNAL)THEN
5026 
5027               validate_tax_line_exist(
5028                         pn_interface_line_id   => rec_interface_line.interface_line_id,
5029                         xn_err_flag            => ln_err_flag
5030               );
5031 
5032           END IF;
5033 
5034           ln_phase := 12.7;
5035 
5036           --For external module or standalone module , the transaction should no tax attached.
5037           validate_trx_tax_line_exist(
5038                     pn_interface_line_id   => rec_interface_line.interface_line_id,
5039                     pn_trx_id              => ln_internal_trx_id,
5040                     pn_trx_line_id         => ln_internal_trx_line_id,
5041                     xn_err_flag            => ln_err_flag
5042           );
5043 
5044           ln_phase := 12.8;
5045 
5046           --Check the transaction status
5047           validate_trx_status(
5048                     pn_interface_line_id   => rec_interface_line.interface_line_id,
5049                     pv_import_module       => rec_interface_line.import_module,
5050                     pn_trx_id              => ln_internal_trx_id,
5051                     pn_org_id              => rec_interface_line.org_id,
5052                     pv_trx_number          => rec_interface_line.transaction_num,
5053                     xn_err_flag            => ln_err_flag
5054           );
5055 
5056           ln_phase := 12.91;
5057 
5058           --Added by zhiwei for Bug#12639945 on 20110624 begin
5059           -----------------------------------------------------------------
5060           validate_trx_accted(
5061                     pn_interface_line_id   => rec_interface_line.interface_line_id,
5062                     pv_import_module       => rec_interface_line.import_module,
5063                     pn_trx_id              => ln_internal_trx_id,
5064                     pn_trx_line_id         => ln_internal_trx_line_id,
5065                     xn_err_flag            => ln_err_flag
5066           );
5067 
5068 
5069           ln_phase := 12.93;
5070           -----------------------------------------------------------------
5071           --Added by zhiwei for Bug#12639945 on 20110624 end
5072 
5073 
5074 
5075 
5076 
5077           --Check the transaction period status
5078           validate_trx_period(
5079                     pn_interface_line_id   => rec_interface_line.interface_line_id,
5080                     pv_import_module       => rec_interface_line.import_module,
5081                     pn_trx_id              => ln_internal_trx_id,
5082                     xn_err_flag            => ln_err_flag
5083           );
5084 
5085           ln_phase := 13;
5086 
5087 
5088 
5089           --Validate the tax lines
5090           validate_tax_line(
5091                     pr_interface_lines     => rec_interface_line,
5092                     pn_trx_id              => ln_internal_trx_id,
5093                     xn_err_flag            => ln_err_flag
5094           );
5095 
5096           ln_phase := 13.01;
5097 
5098 
5099           --Check the Service Type for AP.
5100           IF(rec_interface_line.import_module = JAI_CONSTANTS.SOURCE_AP)THEN
5101 
5102               validate_service_type(
5103                       pn_interface_line_id   => rec_interface_line.interface_line_id,
5104                       pn_trx_id              => ln_internal_trx_id,
5105                       pv_service_type_code   => rec_interface_line.service_type_code,
5106                       xn_err_flag            => ln_err_flag
5107               );
5108 
5109           END IF;
5110 
5111           ln_phase := 13.1;
5112 
5113           /*
5114           UPDATE JAI_INTERFACE_LINES_ALL
5115           SET    INTERNAL_TRX_ID      = ln_internal_trx_id,
5116                  INTERNAL_TRX_LINE_ID = ln_internal_trx_line_id
5117           WHERE  INTERFACE_LINE_ID    = rec_interface_line.INTERFACE_LINE_ID;
5118           */--Update both column move to initial_process
5119 
5120           --If not found error, the fnd log success
5121           IF(ln_err_flag = 0)THEN
5122                 NULL;
5123              fnd_file.put_line(FND_FILE.LOG,'VALIDATION in VALIDATE_PROCESS : VALIDATION COMPLETED with SUCCESS With interface_line_id' || rec_interface_line.interface_line_id );
5124           ELSE
5125              --If found error , change status to error and fnd log error
5126              update_line_status(
5127                 pn_interface_line_id => rec_interface_line.interface_line_id,
5128                 pv_import_status     => GV_IMPORT_FAILURE,
5129                 pv_import_process    => GV_PROCESS_VALIDATION
5130                 );
5131              update_error_flag(
5132                pn_interface_line_id => rec_interface_line.interface_line_id,
5133                pv_err_exist         => 'Y'
5134              );
5135              fnd_file.put_line(FND_FILE.LOG,'VALIDATION in VALIDATE_PROCESS : VALIDATION COMPLETED with ERRORS With interface_line_id' || rec_interface_line.interface_line_id );
5136           END IF;
5137 
5138      END LOOP;
5139 
5140      EXCEPTION
5141          WHEN OTHERS THEN
5142              lv_return_mess := 'VALIDATION Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in validate_process With interface_line_id:'||pn_interface_line_id||' at POS:'||ln_phase;
5143 /*             log_error(
5144                      pv_err_level              => GV_ERROR_TYPE_LINE,
5145                      pn_line_id                => pn_interface_line_id,
5146                      pn_source_line_id         => pn_interface_line_id,
5147                      pv_err_mess               => lv_return_mess,
5148                      pv_invalid_value          => NULL
5149              );*/
5150              record_fnd_log(
5151                      pv_fnd_log   => lv_return_mess
5152              );
5153              update_line_status(
5154                      pn_interface_line_id => rec_interface_line.interface_line_id,
5155                      pv_import_status     => GV_IMPORT_FAILURE,
5156                      pv_import_process    => GV_PROCESS_VALIDATION
5157                      );
5158              update_error_flag(
5159                      pn_interface_line_id => rec_interface_line.interface_line_id,
5160                      pv_err_exist         => 'Y');
5161 
5162              fnd_file.put_line(FND_FILE.LOG,'VALIDATION in VALIDATE_PROCESS : VALIDATION COMPLETED with EXCEPTIONS With interface_line_id' || rec_interface_line.interface_line_id );
5163 
5164   END validate_process;
5165 
5166 
5167 
5168   /*
5169   || Initial process
5170   */
5171   PROCEDURE initial_process(
5172            pn_interface_line_id    IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE
5173   )
5174   IS
5175   --Cursor define here
5176   CURSOR get_line_info_cur
5177   IS
5178   SELECT TRANSACTION_NUM,
5179          TRANSACTION_LINE_NUM,
5180          IMPORT_MODULE,
5181          PARTY_ID,
5182          PARTY_SITE_ID,
5183          ORG_ID
5184   FROM   JAI_INTERFACE_LINES_ALL
5185   WHERE  INTERFACE_LINE_ID = pn_interface_line_id;
5186 
5187   --Variable define here
5188   lv_transaction_num       JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE;
5189   ln_transaction_line_num  JAI_INTERFACE_LINES_ALL.TRANSACTION_LINE_NUM%TYPE;
5190   lv_import_module         JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE;
5191   ln_trx_id                JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE;
5192   ln_trx_line_id           JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_LINE_ID%TYPE;
5193   lv_return_mess           VARCHAR2(1000);
5194   lv_error_mess            varchar2(1000);
5195   ln_err_flag_init         NUMBER;
5196   ln_phase                 NUMBER;
5197 
5198   ln_party_id              NUMBER;
5199   ln_party_site_id         NUMBER;
5200 
5201   ln_org_id                NUMBER;
5202 
5203 
5204   --Main block
5205   BEGIN
5206 
5207      update_line_status(
5208                pn_interface_line_id => pn_interface_line_id,
5209                pv_import_status     => GV_IMPORT_SUCCESS,
5210                pv_import_process    => GV_PROCESS_INITIALIZE
5211                );
5212 
5213      update_error_flag(
5214                pn_interface_line_id => pn_interface_line_id,
5215                pv_err_exist         => 'N'
5216                );
5217 
5218      ln_phase := 10.1;
5219 
5220      --Del the error lines according to the interface line id
5221      del_line_reference(pn_interface_line_id);
5222 
5223      ln_phase := 10.2;
5224 
5225      ln_err_flag_init := 0;
5226 
5227      OPEN get_line_info_cur;
5228      FETCH get_line_info_cur INTO lv_transaction_num,ln_transaction_line_num,lv_import_module,
5229                                    ln_party_id,ln_party_site_id,ln_org_id;
5230      CLOSE get_line_info_cur;
5231 
5232      ln_phase := 10.3;
5233 
5234      IF(NVL(lv_transaction_num,'#')='#')THEN
5235          ln_err_flag_init := 1;
5236          lv_return_mess := 'INITIAL in initial_process : Transaction num should not be null With interface_line_id:'||pn_interface_line_id;
5237          lv_error_mess  := 'JAI_TRANS_LINES_ERR';--'Invalid Source Trans Num, cannot inset tax to Transaction ' || lv_transaction_num || '.';
5238          log_error(
5239                      pv_err_level              => GV_ERROR_TYPE_LINE,
5240                      pn_line_id                => pn_interface_line_id,
5241                      pn_source_line_id         => pn_interface_line_id,
5242                      pv_err_mess               => lv_error_mess,
5243                      pv_invalid_value          => lv_transaction_num
5244           );
5245 
5246           record_fnd_log(
5247              pv_fnd_log   => lv_return_mess
5248           );
5249      END IF;--Transaction num is null
5250 
5251      ln_phase := 10.4;
5252 
5253      IF(NVL(ln_transaction_line_num,-1) = -1)THEN
5254          ln_err_flag_init := 1;
5255          lv_return_mess := 'INITIAL in initial_process : Transaction line num should not be null With interface_line_id:'||pn_interface_line_id;
5256          lv_error_mess  := 'JAI_TRANS_LINES_ERR';--'Invalid Source Trans Line Num, cannot inset tax to Transaction ' || lv_transaction_num || '.';
5257          log_error(
5258                      pv_err_level              => GV_ERROR_TYPE_LINE,
5259                      pn_line_id                => pn_interface_line_id,
5260                      pn_source_line_id         => pn_interface_line_id,
5261                      pv_err_mess               => lv_error_mess,
5262                      pv_invalid_value          => ln_transaction_line_num
5263           );
5264 
5265           record_fnd_log(
5266              pv_fnd_log   => lv_return_mess
5267           );
5268      END IF;--Transaction line num is null
5269 
5270      ln_phase := 10.5;
5271 
5272      IF(NVL(lv_import_module,'#') = '#'
5273          or( NVL(lv_import_module,'#') <> JAI_CONSTANTS.SOURCE_AR
5274           and NVL(lv_import_module,'#') <> JAI_CONSTANTS.SOURCE_AP))THEN
5275          ln_err_flag_init := 1;
5276          lv_return_mess := 'INITIAL in initial_process : Import module should be '|| jai_constants.source_ar ||' or '||jai_constants.source_ap ||' With interface_line_id:'||pn_interface_line_id;
5277          lv_error_mess  := 'JAI_IMPORT_MODULE_ERR';--'Import module value is invalid';
5278          log_error(
5279                      pv_err_level              => GV_ERROR_TYPE_LINE,
5280                      pn_line_id                => pn_interface_line_id,
5281                      pn_source_line_id         => pn_interface_line_id,
5282                      pv_err_mess               => lv_error_mess,
5283                      pv_invalid_value          => lv_import_module
5284           );
5285 
5286           record_fnd_log(
5287              pv_fnd_log   => lv_return_mess
5288           );
5289      END IF;--Import module should be AR or AP
5290 
5291      ln_phase := 10.51;
5292 
5293      IF(ln_err_flag_init = 0)THEN
5294 
5295          validate_party_info(
5296                         pn_interface_line_id   => pn_interface_line_id,
5297                         pv_import_module       => lv_import_module,
5298                         pn_party_id            => ln_party_id,
5299                         pn_party_site_id       => ln_party_site_id,
5300                         pn_org_id              => ln_org_id,
5301                         xn_err_flag            => ln_err_flag_init
5302          );
5303 
5304      END IF;
5305 
5306      ln_phase := 10.6;
5307 
5308      IF(ln_err_flag_init = 0)THEN
5309 
5310          get_trx_id_info(
5311             pn_interface_line_id     => pn_interface_line_id,
5312             pv_transaction_num       => lv_transaction_num,
5313             pn_transaction_line_num  => ln_transaction_line_num,
5314             pv_import_module         => lv_import_module,
5315             pn_party_id              => ln_party_id,
5316             pn_party_site_id         => ln_party_site_id,
5317             xn_trx_id                => ln_trx_id,
5318             xn_trx_line_id           => ln_trx_line_id,
5319             xn_err_flag              => ln_err_flag_init
5320          );
5321      END IF;
5322 
5323      ln_phase := 10.7;
5324 
5325      IF(ln_err_flag_init = 0)THEN
5326 
5327          ln_phase := 10.8;
5328 
5329          update jai_interface_lines_all
5330          set internal_trx_id      = ln_trx_id,
5331              internal_trx_line_id = ln_trx_line_id
5332          where interface_line_id  = pn_interface_line_id;
5333 
5334 
5335          update_error_flag(
5336                pn_interface_line_id => pn_interface_line_id,
5337                pv_err_exist         => 'N'
5338          );
5339 
5340          ln_phase := 10.9;
5341 
5342          fnd_file.put_line(FND_FILE.LOG,'INITIAL in INITIAL_PROCESS : INITIAL COMPLETED SUCCESS With INTERFACE_LINE_ID:'||pn_interface_line_id);
5343 
5344      END IF;
5345 
5346 
5347      IF(ln_err_flag_init <> 0)THEN
5348 
5349          update_line_status(
5350                     pn_interface_line_id => pn_interface_line_id,
5351                     pv_import_status     => GV_IMPORT_FAILURE   ,
5352                     pv_import_process    => GV_PROCESS_INITIALIZE
5353          );
5354 
5355          update_error_flag(
5356                    pn_interface_line_id => pn_interface_line_id,
5357                    pv_err_exist         => 'Y'
5358          );
5359 
5360          ln_phase := 11.1;
5361 
5362          fnd_file.put_line(FND_FILE.LOG,'INITIAL in INITIAL_PROCESS : INITIAL COMPLETED FAILURE With INTERFACE_LINE_ID:'||pn_interface_line_id);
5363 
5364       END IF;
5365 
5366      EXCEPTION
5367         WHEN OTHERS THEN
5368            lv_return_mess := 'INITIAL Exception with SQLERR '|| SUBSTR(SQLERRM,1,230);
5369            lv_return_mess := lv_return_mess || ' in initial_process With interface_line_id:'||pn_interface_line_id||' at POS:'||ln_phase;
5370            --'Invalid Source Trans Num, cannot inset tax to Transaction ' || lv_transaction_num
5371            lv_error_mess  := 'JAI_TRANS_LINES_ERR';
5372            log_error(
5373                      pv_err_level              => GV_ERROR_TYPE_LINE,
5374                      pn_line_id                => pn_interface_line_id,
5375                      pn_source_line_id         => pn_interface_line_id,
5376                      pv_err_mess               => lv_error_mess,
5377                      pv_invalid_value          => lv_transaction_num
5378            );
5379 
5380            record_fnd_log(
5381                      pv_fnd_log   => lv_return_mess
5382            );
5383 
5384            update_line_status(
5385                 pn_interface_line_id => pn_interface_line_id,
5386                 pv_import_status     => GV_IMPORT_FAILURE   ,
5387                 pv_import_process    => GV_PROCESS_INITIALIZE
5388                 );
5389 
5390            update_error_flag(
5391                pn_interface_line_id => pn_interface_line_id,
5392                pv_err_exist         => 'Y'
5393              );
5394 
5395   END initial_process;
5396 
5397 
5398 
5399 
5400 
5401   /*
5402   ||
5403   */
5404   FUNCTION is_accrual_basis(pn_customer_trx_line_id IN NUMBER)
5405   RETURN BOOLEAN
5406   IS
5407 
5408   CURSOR get_trx_gl_date_cur IS
5409   SELECT rda.gl_date
5410     FROM ra_cust_trx_line_gl_dist_all rda,
5411          jai_ar_trx_tax_lines         rla
5412    WHERE rda.account_class = 'REV'
5413      AND rda.customer_trx_line_id = rla.link_to_cust_trx_line_id
5414      AND rla.customer_trx_line_id = pn_customer_trx_line_id;
5415 
5416 
5417   CURSOR c_get_st_accrual_date(p_organization_id NUMBER, p_location_id NUMBER) IS
5418   select to_date(attribute_value, 'DD/MM/YYYY')
5419   from JAI_RGM_ORG_REGNS_V jrr, jai_rgm_definitions jrd
5420   where jrr.regime_id = jrd.regime_id
5421   AND jrd.regime_code = jai_constants.service_regime
5422   and jrr.organization_id = p_organization_id
5423   and jrr.location_id = p_location_id
5424   AND jrr.attribute_code = 'EFF_DATE_ST_PT'
5425   AND jrr.attribute_type_code = 'OTHERS'
5426   AND jrr.registration_type = 'OTHERS'
5427   AND (NOT EXISTS
5428           (select '1'
5429            from JAI_RGM_ORG_REGNS_V jrr, jai_rgm_definitions jrd
5430            where jrr.regime_id = jrd.regime_id
5431            AND jrd.regime_code = jai_constants.service_regime
5432            and jrr.attribute_code IN 'INV_ORG_CLASSIFICATION'
5433            and jrr.attribute_value <> 'ORGANIZATION'
5434            and jrr.organization_id = p_organization_id
5435            and jrr.location_id = p_location_id)
5436           OR
5437           NOT EXISTS
5438           (select '1'
5439            from JAI_RGM_ORG_REGNS_V jrr, jai_rgm_definitions jrd
5440            where jrr.regime_id = jrd.regime_id
5441            AND jrd.regime_code = jai_constants.service_regime
5442            and jrr.attribute_code IN 'SERVICE TYPE'
5443            and jrr.attribute_value <> 'OTHER'
5444            and jrr.organization_id = p_organization_id
5445            and jrr.location_id = p_location_id)
5446          );
5447 
5448 
5449   --Commented by zhiwei for POT bug#12925963 on 20110908 begin
5450   --------------------------------------------------------------
5451   /*CURSOR c_get_org_loc
5452   IS
5453   SELECT organization_id, location_id
5454   FROM jai_ar_trxs
5455   WHERE customer_trx_id IN(SELECT customer_trx_id
5456                            FROM ra_customer_trx_lines
5457                            WHERE customer_trx_line_id IN pn_customer_trx_line_id);*/
5458   --------------------------------------------------------------
5459   --Commented by zhiwei for POT bug#12925963 on 20110908 end
5460 
5461   CURSOR c_get_org_loc
5462   IS
5463   SELECT organization_id, location_id
5464   FROM jai_ar_trxs
5465   WHERE customer_trx_id IN(
5466                              SELECT customer_trx_id
5467                              FROM ra_customer_trx_lines
5468                              WHERE customer_trx_line_id IN
5469                              (
5470                                   select link_to_cust_trx_line_id
5471                                   from jai_ar_trx_tax_lines
5472                                   where customer_trx_line_id = pn_customer_trx_line_id
5473                              )
5474                            );
5475 
5476 
5477 
5478      ld_st_accrual_date DATE;
5479      ld_gl_date DATE;
5480      r_get_org_loc c_get_org_loc%ROWTYPE;
5481 
5482   BEGIN
5483       OPEN get_trx_gl_date_cur;
5484       FETCH get_trx_gl_date_cur INTO ld_gl_date;
5485       CLOSE get_trx_gl_date_cur;
5486       /*Bug 12805386 -  Derive Inventory Organization ID and Location ID*/
5487       OPEN c_get_org_loc;
5488       FETCH c_get_org_loc INTO r_get_org_loc;
5489       CLOSE c_get_org_loc;
5490       /*Bug 12805386 -  Added parameters Inventory Organization ID and Location ID*/
5491       OPEN c_get_st_accrual_date(r_get_org_loc.organization_id, r_get_org_loc.location_id);
5492       FETCH c_get_st_accrual_date INTO ld_st_accrual_date;
5493       CLOSE c_get_st_accrual_date;
5494       IF ld_gl_date >= ld_st_accrual_date THEN
5495          RETURN TRUE;
5496       ELSE
5497          RETURN FALSE;
5498       END IF;
5499   END is_accrual_basis;
5500   -----------------------------------------------------------
5501   --Added by zhiwei for POT change bug#13023443 end
5502 
5503 
5504 
5505   /*
5506   ||Populate temporary table JAI_AR_TRX_INS_LINES_T
5507   */
5508   PROCEDURE populate_temp_table(
5509                           pn_interface_line_id    IN JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
5510                           pn_customer_trx_id      IN ra_customer_trx_all.customer_trx_id%type,
5511                           pn_customer_trx_line_id IN  jai_ar_trx_lines.customer_trx_line_id%type,
5512                           pv_return_code          OUT NOCOPY VARCHAR2,
5513                           pv_return_message       OUT NOCOPY VARCHAR2)
5514   IS
5515 
5516     v_books_id           NUMBER;
5517     v_salesrep_id        NUMBER;
5518     v_line_type          VARCHAR2(30);
5519     v_vat_tax            NUMBER;
5520     v_ccid               NUMBER;
5521     v_cust_trx_line_id   RA_CUSTOMER_TRX_LINES_ALL.customer_trx_line_id%TYPE;
5522     v_counter            NUMBER;
5523     v_customer_trx_id    NUMBER;
5524     c_from_currency_code VARCHAR2(15);
5525     c_conversion_type    VARCHAR2(30);
5526     c_conversion_date    DATE;
5527     c_conversion_rate    NUMBER := 0;
5528     v_converted_rate     NUMBER := 1;
5529     req_id               NUMBER;
5530     result               BOOLEAN;
5531     v_created_from       VARCHAR2(30);
5532     v_insert_update_flag VARCHAR2(1);
5533     v_organization_id    NUMBER;
5534     v_location_id        NUMBER;
5535     v_batch_source_id    NUMBER;
5536     v_register_code      VARCHAR2(50);
5537 
5538     v_org_id                ra_customer_trx_all.org_id%type;
5539 
5540     v_line_amount           NUMBER := 0;
5541     v_quantity              NUMBER;
5542     v_trans_type            VARCHAR2(30);
5543     v_line_tax_amount       NUMBER := 0;
5544     l_tcs_line_num          NUMBER := 0;
5545     l_tcs_sur_line_num      NUMBER := 0;
5546     ln_tcs_regime_id        JAI_RGM_DEFINITIONS.regime_id%type;
5547     l_org_id                NUMBER;
5548     l_bill_to_customer_id   NUMBER;
5549     l_bill_to_site_use_id   NUMBER;
5550     ln_organization_id      NUMBER;
5551     ln_trx_date             DATE;
5552     ln_threshold_slab_id    jai_ap_tds_thhold_slabs.threshold_slab_id%type;
5553     ln_threshold_tax_cat_id jai_ap_tds_thhold_taxes.tax_category_id%type;
5554     lv_process_flag         VARCHAR2(2);
5555     lv_process_message      VARCHAR2(1996);
5556     ln_tax_amount           NUMBER;
5557     l_tot_tax_lines         NUMBER;
5558     l_max_tax_line_no       NUMBER;
5559 
5560     CURSOR GC_GET_REGIME_ID(CP_REGIME_CODE JAI_RGM_DEFINITIONS.REGIME_CODE%TYPE) IS
5561       SELECT REGIME_ID
5562         FROM JAI_RGM_DEFINITIONS
5563        WHERE REGIME_CODE = CP_REGIME_CODE;
5564 
5565     Cursor transaction_type_cur IS
5566       Select a.type
5567         From RA_CUST_TRX_TYPES_ALL a, RA_CUSTOMER_TRX_ALL b
5568        Where a.cust_trx_type_id = b.cust_trx_type_id
5569          And b.customer_trx_id = v_customer_trx_id
5570          And NVL(a.org_id, 0) = NVL(b.org_id, 0);
5571 
5572     CURSOR bind_cur IS
5573       SELECT RCTA.org_id,
5574              RCTA.bill_to_customer_id,
5575              NVL(RCTA.bill_to_site_use_id, 0),
5576              RCTA.trx_date
5577         FROM RA_CUSTOMER_TRX_ALL RCTA
5578        WHERE RCTA.customer_trx_id = v_customer_trx_id;
5579 
5580     lv_intf_hdr_ctx ra_customer_trx_all.interface_header_context%type;
5581 
5582 
5583     CURSOR tax_type_cur IS
5584       SELECT a.tax_id taxid,
5585              a.tax_rate,
5586              a.uom uom,
5587              a.tax_amount tax_amt,
5588              b.tax_type t_type,
5589              a.customer_trx_line_id line_id,
5590              a.tax_line_no tax_line_no
5591         FROM JAI_AR_TRX_TAX_LINES a, JAI_CMN_TAXES_ALL b
5592        WHERE link_to_cust_trx_line_id = pn_customer_trx_line_id
5593          and a.tax_id = b.tax_id
5594          AND NVL(b.inclusive_tax_flag, 'N') = 'N' --Added by Jia Li for Tax inclusive Computations on 2007/11/22
5595        ORDER BY 1;
5596 
5597 
5598 
5599     CURSOR BOOKS_TRX_CUR IS
5600       SELECT set_of_books_id,
5601              primary_salesrep_id,
5602              invoice_currency_code,
5603              exchange_rate_type,
5604              exchange_date,
5605              exchange_rate
5606         FROM JAI_AR_TRXS
5607        WHERE customer_trx_id = v_customer_trx_id;
5608 
5609     CURSOR ORG_CUR IS
5610       SELECT ORG_ID
5611         FROM RA_CUST_TRX_LINE_GL_DIST_ALL
5612        WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
5613          AND account_class = 'REC'
5614          AND latest_rec_flag = 'Y';
5615 
5616     lv_tax_regime_code      zx_rates_b.tax_regime_code%type;
5617     ln_party_tax_profile_id zx_party_tax_profile.party_tax_profile_id%type;
5618     ln_tax_rate_id          zx_rates_b.tax_rate_id%type;
5619 
5620     CURSOR TAX_CCID_CUR(p_tax_id IN NUMBER) IS
5621       SELECT tax_account_id
5622         FROM JAI_CMN_TAXES_ALL B
5623        WHERE B.tax_id = p_tax_id;
5624 
5625     CURSOR GL_DATE_CUR IS
5626       SELECT gl_date
5627         FROM RA_CUST_TRX_LINE_GL_DIST_ALL
5628        WHERE CUSTOMER_TRX_LINE_ID = pn_customer_trx_line_id;
5629 
5630     CURSOR CREATED_FROM_CUR IS
5631       SELECT created_from
5632         FROM JAI_AR_TRXS -- table reference was previously RA_CUSTOMER_TRX_ALL - using JA_IN_RA_CUSTOMER_TRX instead - bug# 2728636
5633        WHERE customer_trx_id = v_customer_trx_id;
5634 
5635     CURSOR Insert_Update_Cur(p_customer_trx_line_id IN NUMBER) IS
5636       SELECT INSERT_UPDATE_FLAG
5637         FROM JAI_AR_TRX_INS_LINES_T
5638        WHERE customer_trx_id = V_CUSTOMER_TRX_ID
5639          AND Customer_trx_line_id = p_customer_trx_line_id
5640        ORDER BY CUSTOMER_TRX_LINE_ID;
5641 
5642     CURSOR SO_AR_HDR_INFO IS
5643       SELECT organization_id, location_id, batch_source_id
5644         FROM JAI_AR_TRXS
5645        WHERE Customer_Trx_ID = v_customer_trx_id;
5646 
5647     CURSOR register_code_cur(p_org_id IN NUMBER, p_loc_id IN NUMBER, p_batch_source_id IN NUMBER) IS
5648       SELECT register_code
5649         FROM JAI_OM_OE_BOND_REG_HDRS
5650        WHERE organization_id = p_org_id
5651          AND location_id = p_loc_id
5652          AND register_id IN (SELECT register_id
5653                                FROM JAI_OM_OE_BOND_REG_DTLS
5654                               WHERE order_type_id = p_batch_source_id
5655                                 AND order_flag = 'N');
5656 
5657     CURSOR cur_chk_rgm(cp_tax_type JAI_CMN_TAXES_ALL.TAX_TYPE%TYPE) IS
5658       SELECT regime_id, regime_code
5659         FROM jai_regime_tax_types_v jrttv
5660        WHERE upper(jrttv.tax_type) = upper(cp_tax_type);
5661 
5662     ln_regime_code JAI_RGM_DEFINITIONS.REGIME_CODE%TYPE;
5663     lv_attr_value  JAI_RGM_REGISTRATIONS.ATTRIBUTE_VALUE%TYPE;
5664 
5665     -- Start of bug 4089440
5666     ln_regime_id     JAI_RGM_DEFINITIONS.REGIME_ID%TYPE;
5667     lv_error_flag    VARCHAR2(2);
5668     lv_error_message VARCHAR2(4000);
5669     -- End of bug 4089440
5670 
5671     /* Bug 5243532. Added by Lakshmi Gopalsami
5672     * Removed cursor  set_of_books_cur
5673     * and implemented caching logic.
5674     */
5675     l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
5676 
5677     ln_inv_curr_precision NUMBER;
5678 
5679     /* added by CSahoo - bug# 5364120*/
5680     CURSOR c_inv_curr_precision(cp_currency_code varchar2) IS
5681       SELECT NVL(minimum_accountable_unit, NVL(precision, 2)) curr_precision
5682         FROM fnd_currencies
5683        WHERE currency_code = cp_currency_code;
5684     --added the function for bug#8310220
5685 
5686     CURSOR cur_get_jai_line_rec(pn_c_customer_trx_line_id in jai_ar_trx_lines.customer_trx_line_id%type) IS
5687       select
5688       CUSTOMER_TRX_LINE_ID     ,
5689       CUSTOMER_TRX_ID          ,
5690       INVENTORY_ITEM_ID        ,
5691       UNIT_CODE                ,
5692       QUANTITY                 ,
5693       UNIT_SELLING_PRICE       ,
5694       ASSESSABLE_VALUE         ,
5695       CREATION_DATE            ,
5696       CREATED_BY               ,
5697       LAST_UPDATE_DATE         ,
5698       LAST_UPDATED_BY          ,
5699       LAST_UPDATE_LOGIN        ,
5700       VAT_ASSESSABLE_VALUE     ,
5701       GST_ASSESSABLE_VALUE
5702         from jai_ar_trx_lines
5703        where customer_trx_line_id = pn_c_customer_trx_line_id;
5704 
5705     get_jai_trx_line cur_get_jai_line_rec%rowtype;
5706 
5707     FUNCTION get_hdr_ctx(p_customer_trx_id      IN NUMBER,
5708                          p_customer_trx_line_id IN NUMBER) RETURN VARCHAR2 IS
5709       PRAGMA AUTONOMOUS_TRANSACTION;
5710       cursor c_get_hdr_ctx is
5711         select distinct interface_line_context
5712           from ra_customer_trx_lines_all
5713          where customer_trx_id = p_customer_trx_id
5714            and customer_trx_line_id = p_customer_trx_line_id --added for bug#5597146
5715            and interface_line_context is not null
5716            and rownum = 1;
5717       lv_hdr_ctx ra_customer_trx_lines_all.INTERFACE_LINE_CONTEXT%type;
5718     BEGIN
5719       OPEN c_get_hdr_ctx;
5720       FETCH c_get_hdr_ctx
5721         into lv_hdr_ctx;
5722       CLOSE c_get_hdr_ctx;
5723 
5724       return lv_hdr_ctx;
5725     END get_hdr_ctx;
5726 
5727   BEGIN
5728 
5729 
5730     pv_return_code := jai_constants.successful;
5731     --added by zhiwei for Open Interface ER  20101116 begin,
5732     -------------------------------------------------------
5733     --use get_jai_trx_line to replace pr_new
5734     open cur_get_jai_line_rec(pn_customer_trx_line_id);
5735     fetch cur_get_jai_line_rec into get_jai_trx_line;
5736     close cur_get_jai_line_rec;
5737     -------------------------------------------------------
5738     --added by zhiwei for Open Interface ER  20101116 end,
5739     v_org_id := FND_PROFILE.VALUE('ORG_ID');
5740 
5741     v_customer_trx_id := pn_customer_trx_id;
5742 
5743     OPEN CREATED_FROM_CUR;
5744     FETCH CREATED_FROM_CUR
5745       INTO v_created_from;
5746     CLOSE CREATED_FROM_CUR;
5747 
5748     OPEN BOOKS_TRX_CUR;
5749     FETCH BOOKS_TRX_CUR
5750       INTO v_books_id, v_salesrep_id, c_from_currency_code, c_conversion_type, c_conversion_date, c_conversion_rate;
5751     CLOSE BOOKS_TRX_CUR;
5752 
5753     IF c_from_currency_code IS NOT NULL THEN
5754       OPEN c_inv_Curr_precision(c_from_currency_code);
5755       FETCH c_inv_curr_precision
5756         INTO ln_inv_curr_precision;
5757       CLOSE c_inv_curr_precision;
5758     END IF;
5759 
5760     IF ln_inv_curr_precision IS NULL THEN
5761       ln_inv_curr_precision := 0;
5762     END IF;
5763 
5764     OPEN ORG_CUR;
5765     FETCH ORG_CUR
5766       INTO V_ORG_ID;
5767     CLOSE ORG_CUR;
5768 
5769     OPEN jai_ar_trx_pkg.c_tax_regime_code_cur(V_ORG_ID);
5770     FETCH jai_ar_trx_pkg.c_tax_regime_code_cur
5771       INTO lv_tax_regime_code;
5772     CLOSE jai_ar_trx_pkg.c_tax_regime_code_cur;
5773 
5774     OPEN jai_ar_trx_pkg.c_max_tax_rate_id_cur(lv_tax_regime_code);
5775     FETCH jai_ar_trx_pkg.c_max_tax_rate_id_cur
5776       INTO ln_tax_rate_id;
5777     CLOSE jai_ar_trx_pkg.c_max_tax_rate_id_cur;
5778 
5779     OPEN SO_AR_HDR_INFO;
5780     FETCH SO_AR_HDR_INFO
5781       INTO v_organization_id, v_location_id, v_batch_source_id;
5782     CLOSE SO_AR_HDR_INFO;
5783 
5784     lv_intf_hdr_ctx := get_hdr_ctx(get_jai_trx_line.customer_trx_id,
5785                                    get_jai_trx_line.customer_trx_line_id);
5786 
5787     if JAI_AR_RCTLA_TRIGGER_PKG.is_this_projects_context(lv_intf_hdr_ctx) then
5788 
5789       OPEN register_code_cur(v_organization_id,
5790                              v_location_id,
5791                              v_batch_source_id);
5792       FETCH register_code_cur
5793         INTO v_register_code;
5794       CLOSE register_code_cur;
5795 
5796     end if;
5797 
5798     IF v_books_id IS NULL THEN
5799 
5800       l_func_curr_det := jai_plsql_cache_pkg.return_sob_curr(p_org_id => v_organization_id);
5801       v_books_id      := l_func_curr_det.ledger_id;
5802     END IF;
5803     v_converted_rate := jai_cmn_utils_pkg.currency_conversion(v_books_id,
5804                                                               c_from_currency_code,
5805                                                               c_conversion_date,
5806                                                               c_conversion_type,
5807                                                               c_conversion_rate);
5808 
5809     FOR TAX_TYPE_REC IN TAX_TYPE_CUR LOOP
5810 
5811       SELECT COUNT(*)
5812         INTO v_counter
5813         FROM JAI_AR_TRX_INS_LINES_T b
5814        WHERE b.LINK_TO_CUST_TRX_LINE_ID = pn_customer_trx_line_id
5815          AND b.customer_trx_line_id = Tax_Type_Rec.LINE_ID;
5816 
5817       IF (upper(Tax_Type_Rec.T_Type) = 'VAT REVERSAL') THEN
5818         TAX_TYPE_REC.tax_amt := 0;
5819       END IF;
5820 
5821       /*
5822       || added by CSahoo - bug# 5390583 In case of bond reg , the excise taxes should not go to base AR tables.
5823       */
5824       IF NVL(v_register_code, 'N') = 'BOND_REG' THEN
5825         IF upper(Tax_Type_Rec.T_Type) IN
5826            ('EXCISE',
5827             'ADDL. EXCISE',
5828             'OTHER EXCISE',
5829             'EXCISE_EDUCATION_CESS',
5830             'CVD_EDUCATION_CESS',
5831             jai_constants.tax_type_sh_exc_edu_cess,
5832             jai_constants.tax_type_sh_cvd_edu_cess) THEN
5833           TAX_TYPE_REC.tax_amt := 0;
5834         END IF;
5835       END IF;
5836 
5837       /*
5838       || Ends additions by CSahoo - bug# 5390583
5839       */
5840 
5841       OPEN Insert_Update_Cur(TAX_TYPE_REC.line_id);
5842       FETCH Insert_Update_Cur
5843         INTO v_insert_update_flag;
5844       CLOSE Insert_Update_Cur;
5845       IF NVL(v_insert_update_flag, 'I') <> 'X' THEN
5846         IF TAX_TYPE_REC.t_type = 'Freight' THEN
5847           v_line_type := 'FREIGHT';
5848         ELSE
5849           v_line_type := 'TAX';
5850         END IF;
5851 
5852 
5853         IF tax_type_rec.t_type = 'TDS' THEN
5854           tax_type_rec.tax_amt := 0;
5855         END IF;
5856 
5857         /*
5858         || Code modified by aiyer for the bug 4279702.
5859         || Initializing the regime variables
5860         */
5861         ln_regime_id   := null;
5862         ln_regime_code := null;
5863 
5864         /*
5865         || Get the regime attached to a transaction tax type
5866         */
5867         OPEN cur_chk_rgm(cp_tax_type => tax_type_rec.t_type);
5868         FETCH cur_chk_rgm
5869           INTO ln_regime_id, ln_regime_code;
5870         CLOSE cur_chk_rgm;
5871 
5872 
5873 
5874 
5875           -- ORGINAL TAX LOGIC FOR VAT/EXCISE/TDS/TCS/CESS/SHCESS/RMA
5876 
5877 
5878           -- Start of bug 4089440
5879           /*
5880           || The following code has been added by aiyer for the bug 4089440
5881           || IF tax type is SERVICE or SERVICE-CESS then get the account info from regime setup
5882           || IF no setup is found then raise an error and stop the transaction.
5883           */
5884           IF upper(tax_type_rec.t_type) =
5885              upper(jai_constants.tax_type_service) OR
5886              upper(tax_type_rec.t_type) =
5887              upper(jai_constants.tax_type_service_edu_cess) OR
5888              upper(tax_type_rec.t_type) =
5889              upper(jai_constants.tax_type_sh_service_edu_cess) -- added by csahoo for bug#6081806
5890            THEN
5891             -- Start of A1
5892 
5893             /*################################################################################################################
5894             || Get the regime id and also validate the Regime/Regime Registratiom Setup Information
5895             ################################################################################################################*/
5896 
5897             jai_ar_rgm_processing_pkg.get_regime_info(p_regime_code   => jai_constants.service_regime,
5898                                                       p_tax_type_code => tax_type_rec.t_type,
5899                                                       p_regime_id     => ln_regime_id,
5900                                                       p_error_flag    => lv_error_flag,
5901                                                       p_error_message => lv_error_message);
5902 
5903             IF lv_error_flag <> jai_constants.successful THEN
5904               /*
5905               || Encountered an error from the call to jai_ar_rgm_processing_pkg.get_regime_info
5906               || Stop processing and thorw an error
5907               */
5908               /*       raise_application_error (-20130,lv_error_message); */
5909               pv_return_code    := jai_constants.expected_error;
5910               pv_return_message := lv_error_message;
5911               return;
5912               /*
5913               app_exception.raise_exception( EXCEPTION_TYPE  => 'APP',
5914                                               EXCEPTION_CODE => NULL ,
5915                                               EXCEPTION_TEXT => lv_error_message
5916                                            );
5917                   */
5918 
5919             END IF;
5920 
5921             /*################################################################################################################
5922             || Get Tax Account Info from the Regime Organization/Regime Registration setup
5923             ################################################################################################################*/
5924 
5925             /*
5926             || Get the code combination id from the Organization/Regime Registration setup
5927             || by calling the function jai_cmn_rgm_recording_pkg.get_account
5928             */
5929             --Added by zhiwei for POT change Bug#13023443 begin
5930             -----------------------------------------------------------------
5931             if( is_accrual_basis(tax_type_rec.line_id))then
5932             v_ccid := jai_cmn_rgm_recording_pkg.get_account(p_regime_id         => ln_regime_id,
5933                                                             p_organization_type => jai_constants.service_tax_orgn_type,
5934                                                             p_organization_id   => v_organization_id,
5935                                                             p_location_id       => v_location_id,
5936                                                             p_tax_type          => tax_type_rec.t_type,
5937                                                             p_account_name      => jai_constants.liability);
5938 
5939             else
5940             -----------------------------------------------------------------
5941             --Added by zhiwei for POT change Bug#13023443 end
5942             v_ccid := jai_cmn_rgm_recording_pkg.get_account(p_regime_id         => ln_regime_id,
5943                                                             p_organization_type => jai_constants.service_tax_orgn_type,
5944                                                             p_organization_id   => v_organization_id,
5945                                                             p_location_id       => v_location_id,
5946                                                             p_tax_type          => tax_type_rec.t_type,
5947                                                             p_account_name      => jai_constants.liability_interim);
5948             end if;--Added by zhiwei for POT change Bug#13023443
5949 
5950             IF v_ccid IS NULL THEN
5951               /*
5952               || Code Combination id has been returned as null from the function jai_cmn_rgm_recording_pkg.get_account
5953               || This is an error condition and the current processing has to be stopped
5954               */
5955               /*       raise_application_error (-20130,'Invalid Code combination, please check the Service Tax - Tax Accounting Setup'); */
5956               pv_return_code    := jai_constants.expected_error;
5957               pv_return_message := 'Invalid Code combination,please check the Service Tax - Tax Accounting Setup';
5958               return;
5959               /*
5960               app_exception.raise_exception( EXCEPTION_TYPE  => 'APP',
5961                                               EXCEPTION_CODE => NULL ,
5962                                               EXCEPTION_TEXT => 'Invalid Code combination, please check the Service Tax - Tax Type Accounting Setup'
5963                                            );
5964                                                                            */
5965 
5966             END IF;
5967 
5968             /*
5969             || Start of bug 4212816
5970             || Code modified by aiyer for the VAT Enhancement
5971             || Get the Tax accounting information from the vat regime setup when the taxes are as mentioned below taxes
5972             */
5973           ELSIF UPPER(nvl(ln_regime_code, '####')) =
5974                 jai_constants.vat_regime THEN
5975 
5976             /*********************************************************************************************************
5977             || Validate whether the item attached is vatable or not
5978             *********************************************************************************************************/
5979             if get_jai_trx_line.inventory_item_id is not null then
5980               /*Bug 5671400 bduvarag*/
5981               jai_inv_items_pkg.jai_get_attrib(p_regime_code       => ln_regime_code,
5982                                                p_organization_id   => v_organization_id,
5983                                                p_inventory_item_id => get_jai_trx_line.inventory_item_id,
5984                                                p_attribute_code    => jai_constants.rgm_attr_item_applicable,
5985                                                p_attribute_value   => lv_attr_value,
5986                                                p_process_flag      => lv_error_flag,
5987                                                p_process_msg       => lv_error_message);
5988 
5989               IF lv_error_flag <> jai_constants.successful THEN
5990                 /*
5991                 || Encountered an error from the call to jai_ar_rgm_processing_pkg.get_regime_info
5992                 || Stop processing and thorw an error
5993                 */
5994                 /*          raise_application_error (-20130,lv_error_message); */
5995                 pv_return_code    := jai_constants.expected_error;
5996                 pv_return_message := lv_error_message;
5997                 return;
5998                 /*
5999                 app_exception.raise_exception( EXCEPTION_TYPE  => 'APP',
6000                                                 EXCEPTION_CODE => NULL ,
6001                                                 EXCEPTION_TEXT => lv_error_message
6002                                              );
6003                 */
6004 
6005               END IF;
6006             END IF; /*Bug 5671400 bduvarag*/
6007             /*********************************************************************************************************
6008             || Raise an error if item is not vatable
6009             *********************************************************************************************************/
6010             IF get_jai_trx_line.inventory_item_id is not null and
6011                nvl(lv_attr_value, 'N') = 'N' THEN
6012               /*Bug 5671400 bduvarag */
6013 
6014               /*
6015               || Item is not vatable . Stop processing and throw an error
6016               */
6017               /*          raise_application_error (-20130,'ITEM not vatable'); */
6018               pv_return_code    := jai_constants.expected_error;
6019               pv_return_message := 'ITEM not vatable';
6020               return;
6021               /* DO not delete this code, enable this code while doing the messageing project
6022                app_exception.raise_exception( EXCEPTION_TYPE  => 'APP',
6023                                               EXCEPTION_CODE => NULL ,
6024                                               EXCEPTION_TEXT => 'Cannot attach VAT type of taxes to non vatable items.'
6025                                             );
6026               */
6027 
6028             END IF;
6029 
6030             /*################################################################################################################
6031             || Get Tax Account Info from the Regime Organization/Regime Registration setup
6032             ################################################################################################################*/
6033 
6034             /*
6035             || Get the code combination id from the Organization/Regime Registration setup
6036             || by calling the function jai_cmn_rgm_recording_pkg.get_account
6037             */
6038 
6039             v_ccid := jai_cmn_rgm_recording_pkg.get_account(p_regime_id         => ln_regime_id,
6040                                                             p_organization_type => jai_constants.orgn_type_io,
6041                                                             p_organization_id   => v_organization_id,
6042                                                             p_location_id       => v_location_id,
6043                                                             p_tax_type          => tax_type_rec.t_type,
6044                                                             p_account_name      => jai_constants.liability_interim);
6045             IF v_ccid IS NULL THEN
6046               /*
6047               || Code Combination id has been returned as null from the function jai_cmn_rgm_recording_pkg.get_account
6048               || This is an error condition and the current processing has to be stopped
6049               */
6050               /*          raise_application_error (-20130,'Invalid Code combination ,please check the VAT Tax - Tax Accounting Setup'); */
6051               pv_return_code    := jai_constants.expected_error;
6052               pv_return_message := 'Invalid Code combination ,please check the VAT Tax - Tax Accounting Setup';
6053               return;
6054               /*
6055               app_exception.raise_exception( EXCEPTION_TYPE  => 'APP',
6056                                              EXCEPTION_CODE => NULL ,
6057                                              EXCEPTION_TEXT => 'Invalid Code combination ,please check the VAT Tax - Tax Type Accounting Setup'
6058                                            );
6059                       */
6060             END IF;
6061 
6062             /*
6063             || End of bug 4212816
6064             */
6065 
6066             /* Added by CSahoo for the TCS enhancements Bug# 5631784 */
6067           ELSIF UPPER(nvl(ln_regime_code, '####')) =
6068                 jai_constants.tcs_regime THEN
6069             -- Start of A1
6070 
6071             /*********************************************************************************************************
6072             || Get the code combination id from the Organization/Regime Registration setup
6073             || by calling the function jai_rgm_trx_recording_pkg.get_account
6074             *********************************************************************************************************/
6075 
6076             v_ccid := jai_cmn_rgm_recording_pkg.get_account(p_regime_id         => ln_regime_id,
6077                                                             p_organization_type => jai_constants.orgn_type_io,
6078                                                             p_organization_id   => v_organization_id,
6079                                                             p_location_id       => v_location_id,
6080                                                             p_tax_type          => tax_type_rec.t_type,
6081                                                             p_account_name      => jai_constants.liability_interim);
6082             IF v_ccid IS NULL THEN
6083               /**********************************************************************************************************
6084               || Code Combination id has been returned as null from the function jai_rgm_trx_recording_pkg.get_account
6085               || This is an error condition and the current processing has to be stopped
6086               **********************************************************************************************************/
6087               pv_return_code := jai_constants.expected_error;
6088               pv_return_message := 'Invalid Code combination ,please check the TCS Tax - Tax Accounting Setup'|| tax_type_rec.t_type;
6089               return;
6090               /*raise_application_error(-20130,
6091                                       'Invalid Code combination ,please check the TCS Tax - Tax Accounting Setup');*/--Commented by zhiwei for open interface ER 20101116
6092 
6093             END IF;
6094 
6095             /*End of bug 5631784 */
6096 
6097           ELSE
6098             -- ELSE of A1
6099             /*
6100             || As tax type is not SERVICE hence
6101             || get code combination from tax definition setup
6102             */
6103             OPEN TAX_CCID_CUR(TAX_TYPE_REC.taxid);
6104             FETCH TAX_CCID_CUR
6105               INTO v_ccid;
6106             CLOSE TAX_CCID_CUR;
6107           END IF;
6108         IF NVL(v_counter, 0) = 0 THEN
6109 
6110 
6111 
6112           INSERT INTO JAI_AR_TRX_INS_LINES_T
6113             (
6114              INTERFACE_FLAG,--added by zhiwei for Open Interface ER 20101116
6115              extended_amount,
6116              customer_trx_line_id,
6117              customer_trx_id,
6118              set_of_books_id,
6119              link_to_cust_trx_line_id,
6120              line_type,
6121              uom_code,
6122              vat_tax_id,
6123              acctd_amount,
6124              amount,
6125              CODE_COMBINATION_ID,
6126              cust_trx_line_sales_rep_id,
6127              insert_update_flag,
6128              last_update_date,
6129              last_updated_by,
6130              creation_date,
6131              created_by,
6132              last_update_login,
6133              tax_rate, -- Tax_rate column added by Jagdish/Subbu 10-Jun-01
6134              Source, -- Source Column added by Sriram / Pavan
6135              org_id, -- org_id column added by sriram - bug # 2779967
6136              line_number) -- added by sriram - bug # 2769439
6137           VALUES
6138             (
6139              'Y',--added by zhiwei for Open Interface ER 20101116
6140              round(TAX_TYPE_REC.tax_amt, ln_inv_curr_precision), /* rounding based on inv currency precision - bug# 5364120*/
6141              TAX_TYPE_REC.line_id,
6142              v_customer_trx_id,
6143              v_books_id,
6144              get_jai_trx_line.customer_trx_line_id,
6145              v_line_type,
6146              TAX_TYPE_REC.uom,
6147              ln_tax_rate_id, --v_vat_tax, /* Modified by Ramananda for bug#4468353 due to ebtax uptake by AR */
6148              v_converted_rate * TAX_TYPE_REC.tax_amt,
6149              round(TAX_TYPE_REC.tax_amt, ln_inv_curr_precision), /* rounding based on inv currency precision - bug# 5364120*/
6150              v_ccid,
6151              v_salesrep_id,
6152              'U',
6153              get_jai_trx_line.last_update_date,
6154              get_jai_trx_line.last_updated_by,
6155              get_jai_trx_line.creation_date,
6156              get_jai_trx_line.created_by,
6157              get_jai_trx_line.last_update_login,
6158              TAX_TYPE_REC.tax_rate, --- Tax_rate column added by Jagdish/Subbu 10-Jun-01
6159              v_Created_from, -- v_created_from column added by Sriram - 09-MAY-2002
6160              v_org_id, -- added by sriram bug # 2779967
6161              tax_type_rec.tax_line_no); -- added by sriram - bug # 2769439
6162         ELSE
6163 
6164           UPDATE JAI_AR_TRX_INS_LINES_T
6165              SET extended_amount    = TAX_TYPE_REC.tax_amt,
6166                  set_of_books_id    = v_books_id,
6167                  line_type          = v_line_type,
6168                  uom_code           = TAX_TYPE_REC.uom,
6169                  acctd_amount       = v_converted_rate *
6170                                       TAX_TYPE_REC.tax_amt,
6171                  amount             = TAX_TYPE_REC.tax_amt,
6172                  insert_update_flag = 'U',
6173                  tax_rate           = TAX_TYPE_REC.tax_rate -- Tax_rate column added by Jagdish/Subbu 10-Jun-01
6174            WHERE customer_trx_id = v_customer_trx_id
6175              AND customer_trx_line_id = TAX_TYPE_REC.line_id;
6176         END IF;
6177       END IF;
6178     END LOOP;
6179 
6180 
6181 --  END IF; Commented BY ZHIWEI
6182   EXCEPTION
6183     WHEN OTHERS THEN
6184       pv_return_code    := jai_constants.unexpected_error;
6185       pv_return_message := 'Encountered an error in JAI_JAR_TL_TRIGGER_PKG.ARU_T1 ' ||
6186                            substr(sqlerrm, 1, 1900);
6187 
6188   END populate_temp_table;
6189 
6190   /*
6191   || Delete TAX OR FREIGHT LINE IN RA_CUSTOMER_TRX_LINES_ALL AND RA_CUST_TRX_LINE_GL_DIS_ALL
6192   */
6193   PROCEDURE delete_trx_data(p_customer_trx_id          IN ra_customer_trx_all.customer_trx_id%TYPE,
6194                             p_link_to_cust_trx_line_id IN ra_customer_trx_lines_all.link_to_cust_trx_line_id%TYPE DEFAULT NULL,
6195                             p_process_status           OUT NOCOPY VARCHAR2,
6196                             p_process_message          OUT NOCOPY VARCHAR2) IS
6197     lv_object_name           user_procedures.object_name%type;
6198     lv_procedure_name        user_procedures.procedure_name%type;
6199     ln_exists                NUMBER := 0;
6200     lv_sqlstmt               VARCHAR2(2000);
6201     lv_account_class_tax     VARCHAR2(10) := 'TAX';
6202     lv_account_class_freight VARCHAR2(10) := 'FREIGHT';
6203 
6204     --get the sum of amount, acctd_amount and max of acctd_amount from ra_cust_trx_line_gl_dist_all for cp_customer_trx_id
6205     --and account_class in ('TAX','FREIGHT')
6206     CURSOR cur_total_amt_gl_dist(cp_customer_trx_id ra_customer_trx_all.customer_trx_id%TYPE) IS
6207       SELECT NVL(SUM(amount), 0) amount,
6208              NVL(SUM(acctd_amount), 0) acctd_amount,
6209              MAX(acctd_amount) max_acctd_amount
6210         FROM ra_cust_trx_line_gl_dist_all
6211        WHERE customer_trx_id = cp_customer_trx_id
6212          AND account_class IN
6213              (lv_account_class_tax, lv_account_class_freight);
6214 
6215     --get the data from JAI_AR_TRX_INS_LINES_T for customer_trx_id and link_to_cust_trx_line_id
6216     CURSOR cur_temp_lines_insert(cp_customer_trx_id ra_customer_trx_all.customer_trx_id%TYPE, cp_link_to_cust_trx_line_id JAI_AR_TRX_INS_LINES_T.link_to_cust_trx_line_id%TYPE DEFAULT NULL) IS
6217       SELECT *
6218         FROM JAI_AR_TRX_INS_LINES_T
6219        WHERE customer_trx_id = cp_customer_trx_id
6220          AND link_to_cust_trx_line_id =
6221              NVL(cp_link_to_cust_trx_line_id, link_to_cust_trx_line_id)
6222        ORDER BY link_to_cust_trx_line_id, customer_trx_line_id;
6223 
6224     /* Ramananda for bug#5219225. */
6225     CURSOR c_proc_exists(cp_object_name user_procedures.object_name%type, cp_procedure_name user_procedures.procedure_name%type) IS
6226       SELECT 1
6227         FROM user_procedures
6228        WHERE object_name = cp_object_name
6229          AND procedure_name = cp_procedure_name;
6230 
6231   BEGIN
6232     p_process_status  := jai_constants.successful;
6233     p_process_message := NULL;
6234 
6235     /* Ramananda for bug#5219225. START */
6236     lv_object_name    := 'AR_MRC_ENGINE';
6237     lv_procedure_name := 'MAINTAIN_MRC_DATA';
6238 
6239     OPEN c_proc_exists(lv_object_name, lv_procedure_name);
6240     FETCH c_proc_exists
6241       INTO ln_exists;
6242     CLOSE c_proc_exists;
6243     IF ln_exists = 1 THEN
6244       --delete the mrc data from ra_cust_trx_line_gl_dist_all
6245       FOR rec_mrc IN (SELECT cust_trx_line_gl_dist_id
6246                         FROM ra_cust_trx_line_gl_dist_all
6247                        WHERE customer_trx_id = p_customer_trx_id
6248                          AND account_class IN ('TAX', 'FREIGHT')
6249                          AND customer_trx_line_id IN
6250                              (SELECT customer_trx_line_id
6251                                 FROM ra_customer_trx_lines_all
6252                                WHERE customer_trx_id = p_customer_trx_id
6253                                  AND link_to_cust_trx_line_id =
6254                                      NVL(p_link_to_cust_trx_line_id,
6255                                          link_to_cust_trx_line_id)
6256                                  AND line_type in ('TAX', 'FREIGHT'))) LOOP
6257 
6258         lv_sqlstmt := 'BEGIN ar_mrc_engine.maintain_mrc_data(
6259                                                       p_event_mode        =>''DELETE'',
6260                                                       p_table_name        =>''RA_CUST_TRX_LINE_GL_DIST'',
6261                                                       p_mode              =>''SINGLE'',
6262                                                       p_key_value         => :1
6263                                                      );
6264 
6265                         END; ';
6266         EXECUTE IMMEDIATE lv_sqlstmt
6267           USING rec_mrc.cust_trx_line_gl_dist_id;
6268       END LOOP;
6269     END IF;
6270 
6271     --delete the data from ra_cust_trx_line_gl_dist_all
6272     DELETE ra_cust_trx_line_gl_dist_all
6273      WHERE customer_trx_id = p_customer_trx_id
6274        AND account_class IN ('TAX', 'FREIGHT')
6275        AND customer_trx_line_id IN
6276            (SELECT customer_trx_line_id
6277               FROM ra_customer_trx_lines_all
6278              WHERE customer_trx_id = p_customer_trx_id
6279                AND link_to_cust_trx_line_id =
6280                    NVL(p_link_to_cust_trx_line_id, link_to_cust_trx_line_id)
6281                AND line_type in ('TAX', 'FREIGHT'));
6282 
6283     --delete the data from ra_customer_trx_lines_all
6284     DELETE ra_customer_trx_lines_all
6285      WHERE customer_trx_id = p_customer_trx_id
6286        AND link_to_cust_trx_line_id =
6287            NVL(p_link_to_cust_trx_line_id, link_to_cust_trx_line_id)
6288        AND line_type IN ('TAX', 'FREIGHT');
6289 
6290   EXCEPTION
6291     WHEN OTHERS THEN
6292       p_process_status  := jai_constants.unexpected_error;
6293       p_process_message := SUBSTR(SQLERRM, 1, 300);
6294   END delete_trx_data;
6295 
6296 
6297 
6298 
6299 
6300 
6301   /*
6302   || Fire jai_ar_rcta_trigger_pkg.aru_t1
6303   */
6304   PROCEDURE fire_aru_t1(
6305             pn_customer_trx_id IN  RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE,
6306             ov_return_code     OUT NOCOPY VARCHAR2,
6307             ov_return_message  OUT NOCOPY VARCHAR2
6308   )
6309   IS
6310   --Cursor define here
6311   CURSOR get_ar_detail_cur
6312   IS
6313   SELECT *
6314   FROM RA_CUSTOMER_TRX_ALL
6315   WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6316   --Variable define here
6317   lv_action             VARCHAR2(20) := jai_constants.updating;
6318   lv_return_message     VARCHAR2(2000);
6319   lv_return_code        VARCHAR2(100) ;
6320   rec_ar_detail         RA_CUSTOMER_TRX_ALL%ROWTYPE;
6321   --Main block
6322   BEGIN
6323       FOR rec_ar_detail IN  get_ar_detail_cur
6324       LOOP
6325           --PROCESS HERE
6326           JAI_AR_RCTA_TRIGGER_PKG.ARU_T1(
6327                     pr_old            =>  rec_ar_detail,
6328                     pr_new            =>  rec_ar_detail,
6329                     pv_action         =>  lv_action,
6330                     pv_return_code    =>  lv_return_code,
6331                     pv_return_message =>  lv_return_message
6332           );
6333           ov_return_code := lv_return_code;
6334           ov_return_message := lv_return_message;
6335 
6336 
6337       END LOOP;
6338 
6339   END fire_aru_t1;
6340 
6341 
6342   /*
6343   || Fire jai_ar_rcta_trigger_pkg.aru_t1
6344   */
6345   PROCEDURE fire_aru_t3(
6346             pn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE,
6347             ov_return_code     OUT NOCOPY VARCHAR2,
6348             ov_return_message  OUT NOCOPY VARCHAR2
6349   )
6350   IS
6351   CURSOR get_ar_detail_cur
6352   IS
6353   SELECT *
6354   FROM RA_CUSTOMER_TRX_ALL
6355   WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6356 
6357   lv_action             VARCHAR2(20) := jai_constants.updating;
6358   lv_return_message     VARCHAR2(2000);
6359   lv_return_code        VARCHAR2(100) ;
6360   rec_ar_detail         RA_CUSTOMER_TRX_ALL%ROWTYPE;
6361   BEGIN
6362       FOR rec_ar_detail IN  get_ar_detail_cur
6363       LOOP
6364           --PROCESS HERE
6365           JAI_AR_RCTA_TRIGGER_PKG.ARU_T3(
6366                     pr_old            =>  rec_ar_detail         ,
6367                     pr_new            =>  rec_ar_detail         ,
6368                     pv_action         =>  lv_action         ,
6369                     pv_return_code    =>  lv_return_code    ,
6370                     pv_return_message =>  lv_return_message
6371           );
6372           ov_return_code := lv_return_code;
6373           ov_return_message := lv_return_message;
6374           --IF lv_return_code <> jai_constants.successful   then
6375           --   RAISE le_error;
6376           --END IF;
6377       END LOOP;
6378 
6379   END fire_aru_t3;
6380 
6381 
6382   /*
6383   || Fire jai_ar_rcta_trigger_pkg.aru_t1
6384   */
6385   PROCEDURE fire_aru_t4(
6386              pn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE,
6387             ov_return_code     OUT NOCOPY VARCHAR2,
6388             ov_return_message  OUT NOCOPY VARCHAR2
6389   )
6390   IS
6391   CURSOR get_ar_detail_cur
6392   IS
6393   SELECT *
6394   FROM RA_CUSTOMER_TRX_ALL
6395   WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6396 
6397   lv_action             VARCHAR2(20) := jai_constants.updating;
6398   lv_return_message     VARCHAR2(2000);
6399   lv_return_code        VARCHAR2(100) ;
6400   rec_ar_detail         RA_CUSTOMER_TRX_ALL%ROWTYPE;
6401   BEGIN
6402       FOR rec_ar_detail IN  get_ar_detail_cur
6403       LOOP
6404           --PROCESS HERE
6405           JAI_AR_RCTA_TRIGGER_PKG.ARU_T4(
6406                     pr_old            =>  rec_ar_detail         ,
6407                     pr_new            =>  rec_ar_detail         ,
6408                     pv_action         =>  lv_action         ,
6409                     pv_return_code    =>  lv_return_code    ,
6410                     pv_return_message =>  lv_return_message
6411           );
6412           ov_return_code := lv_return_code;
6413           ov_return_message := lv_return_message;
6414           --IF lv_return_code <> jai_constants.successful   then
6415           --   RAISE le_error;
6416 
6417           --END IF;
6418       END LOOP;
6419 
6420   END fire_aru_t4;
6421 
6422 
6423   /*
6424   || Fire jai_ar_rcta_trigger_pkg.aru_t1
6425   */
6426   PROCEDURE fire_aru_t7(
6427              pn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE,
6428              ov_return_code     OUT NOCOPY VARCHAR2,
6429              ov_return_message  OUT NOCOPY VARCHAR2
6430   )
6431   IS
6432   CURSOR get_ar_detail_cur
6433   IS
6434   SELECT *
6435   FROM RA_CUSTOMER_TRX_ALL
6436   WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6437 
6438   lv_action             VARCHAR2(20) := jai_constants.updating;
6439   lv_return_message     VARCHAR2(2000);
6440   lv_return_code        VARCHAR2(100) ;
6441   rec_ar_detail         RA_CUSTOMER_TRX_ALL%ROWTYPE;
6442   BEGIN
6443       FOR rec_ar_detail IN  get_ar_detail_cur
6444       LOOP
6445           --PROCESS HERE
6446           JAI_AR_RCTA_TRIGGER_PKG.ARU_T7(
6447                     pr_old            =>  rec_ar_detail         ,
6448                     pr_new            =>  rec_ar_detail         ,
6449                     pv_action         =>  lv_action         ,
6450                     pv_return_code    =>  lv_return_code    ,
6451                     pv_return_message =>  lv_return_message
6452           );
6453           ov_return_code := lv_return_code;
6454           ov_return_message := lv_return_message;
6455           --IF lv_return_code <> jai_constants.successful   then
6456           --   RAISE le_error;
6457 
6458           --END IF;
6459       END LOOP;
6460 
6461   END fire_aru_t7;
6462 
6463 /*
6464   || Fire jai_jar_trxs_trigger_pkg.aru_t1
6465   */
6466   PROCEDURE fire_jai_aru_t1(
6467              pn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE,
6468              ov_return_code     OUT NOCOPY VARCHAR2,
6469              ov_return_message  OUT NOCOPY VARCHAR2
6470   )
6471   IS
6472   CURSOR get_jai_ar_detail_cur
6473   IS
6474   SELECT *
6475   FROM jai_ar_trxs
6476   WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6477 
6478   CURSOR get_item_info_cur
6479   IS
6480   SELECT inventory_item_id, org_id
6481   FROM   ra_customer_trx_lines_all
6482   WHERE customer_trx_id = pn_customer_trx_id
6483   AND   line_type = 'LINE';
6484 
6485   cursor item_class_cur(P_ORG_ID IN NUMBER,P_INVENTORY_ITEM_ID IN NUMBER)  IS
6486   select item_class--, excise_flag,item_trading_flag
6487   from   jai_inv_itm_setups
6488   where  inventory_item_id = p_inventory_item_id
6489   AND    organization_id = p_org_id;
6490 
6491   lv_action             VARCHAR2(20) := jai_constants.updating;
6492   lv_return_message     VARCHAR2(2000);
6493   lv_return_code        VARCHAR2(100) ;
6494   rec_jai_ar_detail     jai_ar_trxs%ROWTYPE;
6495   ln_item_id            NUMBER;
6496   ln_org_id             NUMBER;
6497   v_item_class          VARCHAR2(20);
6498   v_payment_register    Varchar2(30) ;
6499   BEGIN
6500 
6501     /*FOR item_rec IN get_item_info_cur
6502     LOOP
6503 --     IF NVL(v_excise_flag,'N') = 'Y' THEN
6504 
6505       OPEN item_class_cur(item_rec.org_id,item_rec.inventory_item_id);
6506      FETCH item_class_cur INTO v_item_class; --, v_excise_flag,V_item_trading_flag;
6507      CLOSE item_class_cur;
6508      IF v_item_class IN ('CGIN', 'CGEX') THEN
6509         v_payment_register := 'RG23C';
6510      ELSIF v_item_class IN ('RMIN', 'RMEX') THEN
6511         v_payment_register := 'RG23A';
6512      END IF;*/
6513   /*    in Manufacturing org: Update RG23C register
6514 Item RMIN, RMEX in Manufacturing org: Update RG23A register
6515 For above cases, PLA register will be updated when adjust amount is > RG23 banlance amount.
6516 
6517 Item FGIN,FGEX,CCIN,CCEX in Manufacturing org: Update RG1 register
6518 In Trading org: Update RG23D register*/
6519 
6520     --END LOOP;
6521 
6522 
6523       FOR rec_jai_ar_detail IN  get_jai_ar_detail_cur
6524       LOOP
6525           --PROCESS HERE
6526           jai_jar_trxs_trigger_pkg.aru_t1(
6527                     pr_old            =>  rec_jai_ar_detail,
6528                     pr_new            =>  rec_jai_ar_detail,
6529                     pv_action         =>  lv_action,
6530                     pv_return_code    =>  lv_return_code,
6531                     pv_return_message =>  lv_return_message
6532           );
6533           ov_return_code := lv_return_code;
6534           ov_return_message := lv_return_message;
6535           --IF lv_return_code <> jai_constants.successful   then
6536           --   RAISE le_error;
6537           --END IF;
6538       END LOOP;
6539 
6540   END fire_jai_aru_t1;
6541 
6542   /*
6543   ||
6544   */
6545   PROCEDURE acc_inclusive_tax(
6546              pn_customer_trx_id IN RA_CUSTOMER_TRX_ALL.CUSTOMER_TRX_ID%TYPE,
6547              ov_return_code     OUT NOCOPY VARCHAR2,
6548              ov_return_message  OUT NOCOPY VARCHAR2
6549   )
6550   IS
6551   CURSOR organization_id_check(cn_customer_trx_id number) IS
6552   SELECT
6553       NVL(organization_id,-1) organization_id
6554   FROM jai_ar_trxs
6555   WHERE customer_trx_id = cn_customer_trx_id;
6556 
6557   CURSOR get_ar_org_id_cur
6558   IS
6559   SELECT ORG_ID,cust_trx_type_id
6560   FROM RA_CUSTOMER_TRX_ALL
6561   WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6562 
6563   CURSOR inclu_flag_cur(cn_org_id IN NUMBER)
6564   IS
6565   SELECT
6566     NVL(ja.inclusive_tax_flag, 'N')  inclusive_tax_flag
6567   FROM
6568     jai_ap_tds_years ja
6569   WHERE ja.legal_entity_id = cn_org_id
6570   AND sysdate between ja.start_date and ja.end_date;
6571 
6572 
6573   lv_return_message     VARCHAR2(2000);
6574   lv_return_code        VARCHAR2(100) ;
6575   ln_organization_id    NUMBER;
6576   ln_org_id             NUMBER;
6577   lv_inclu_tax_flag     VARCHAR2(3)   ;
6578   ln_cust_trx_type_id   NUMBER;
6579 
6580   BEGIN
6581        lv_return_code := JAI_CONSTANTS.SUCCESSFUL;
6582 
6583        OPEN organization_id_check(pn_customer_trx_id);
6584        FETCH organization_id_check INTO ln_organization_id;
6585        CLOSE organization_id_check;
6586 
6587        OPEN get_ar_org_id_cur;
6588        FETCH get_ar_org_id_cur INTO ln_org_id,ln_cust_trx_type_id;
6589        CLOSE get_ar_org_id_cur;
6590 
6591        IF ln_organization_id <> -1 THEN --Added for bug#8864023
6592        -- Check if inclusive taxes needs to be accounted separately
6593         OPEN inclu_flag_cur(ln_org_id);
6594         FETCH inclu_flag_cur INTO lv_inclu_tax_flag;
6595         CLOSE inclu_flag_cur;
6596 
6597         IF lv_inclu_tax_flag = 'Y'
6598         THEN
6599           jai_ar_match_tax_pkg.acct_inclu_taxes( pn_customer_trx_id  => pn_customer_trx_id
6600                                                , pn_org_id           => ln_org_id
6601                                                , pn_cust_trx_type_id => ln_cust_trx_type_id
6602                                                , xv_process_flag     => lv_return_code
6603                                                , xv_process_message  => lv_return_message);
6604 
6605           ov_return_code := lv_return_code;
6606           ov_return_message := lv_return_message;
6607           --IF lv_return_code <> jai_constants.successful   then
6608           --   RAISE le_error;
6609 
6610           --END IF;
6611 
6612         END IF;  --lv_inclu_tax_flag = 'Y'
6613        END IF; -- v_organization_id <> -1
6614   END;
6615 
6616   /*
6617   || Update ar refernece field for Standard Event.
6618   */
6619   PROCEDURE update_ar_reference(
6620                    ov_retcode OUT NOCOPY VARCHAR2,
6621                    ov_errbuf  OUT NOCOPY VARCHAR2,
6622                    pn_customer_trx_id IN NUMBER )
6623   IS
6624     lv_return_message     VARCHAR2(2000);
6625     lv_return_code        VARCHAR2(100) := '0';
6626     ln_external_flag      NUMBER;
6627   BEGIN
6628 
6629     SELECT COUNT(lines.customer_trx_id)
6630       INTO ln_external_flag
6631       FROM jai_ar_trx_lines        lines,
6632            jai_interface_lines_all intfs
6633      WHERE lines.customer_trx_line_id = intfs.internal_trx_line_id
6634        AND lines.customer_trx_id = pn_customer_trx_id
6635        AND lines.interface_flag = 'Y'
6636        AND intfs.taxable_event = 'EXTERNAL';
6637 
6638       jai_ar_trx_pkg.update_reference(
6639               retcode => lv_return_code,
6640               errbuf  => lv_return_message,
6641               pn_customer_trx_id => pn_customer_trx_id);
6642 
6643     IF lv_return_code = '0' THEN
6644        ov_retcode := 'SS';
6645     ELSE
6646        ov_retcode := 'UE';
6647     END IF;
6648        ov_errbuf := lv_return_message;
6649 
6650   END update_ar_reference;
6651 
6652 
6653   --Added by zhwiei for POT change bug#13023443 begin
6654   --------------------------------------------------------------------
6655   /*
6656   || Exists Service Tax, if Y return true; else return false;
6657   */
6658   FUNCTION exist_service_tax(pn_customer_trx_line_id IN NUMBER)
6659   RETURN BOOLEAN
6660   IS
6661     cursor chk_service_tax
6662     is
6663     select 1
6664     from
6665           JAI_AR_TRX_TAX_LINES  taxes ,
6666           JAI_CMN_TAXES_ALL     define
6667     where taxes.tax_id = define.tax_id
6668     and   taxes.customer_trx_line_id = pn_customer_trx_line_id
6669     and   upper(define.tax_type) IN ( upper(jai_constants.tax_type_service),
6670                                       jai_constants.tax_type_service_edu_cess ,
6671                                       jai_constants.tax_type_sh_service_edu_cess);
6672     ln_flag number;
6673   BEGIN
6674       open chk_service_tax;
6675       fetch chk_service_tax into ln_flag;
6676       close chk_service_tax;
6677 
6678       if nvl(ln_flag,0) = 1 then
6679          return true;
6680       else
6681          return false;
6682       end if;
6683 
6684   END exist_service_tax;
6685 
6686 
6687   /*
6688       LOGIC COME FROM AR FRIGHT CONCURRENT for manual AR. JAI_AR_MATCH_TAX_PKG.PROCESS_MANUAL_INVOICE
6689       GET DATA FROM LINE_T , POPULATE INTO RA_CUSTOMER_TRX_LINES_ALL TAX LINE,
6690                              POPULATE INTO RA_CUSTOMER_TRX_GL_DIS_ALL
6691   */
6692   PROCEDURE process_trx_dis_bal_lines(pv_type                 IN VARCHAR2,
6693                                       pv_event                IN VARCHAR2,
6694                                       pn_customer_trx_id      IN NUMBER,
6695                                       pn_customer_trx_line_id IN NUMBER,
6696                                       pn_interface_line_id    IN NUMBER,
6697                                       p_process_flag          OUT NOCOPY VARCHAR2,
6698                                       p_process_message       OUT NOCOPY VARCHAR2
6699                                       )
6700     IS
6701     v_counter                 Number := 0;
6702     v_organization_id         NUMBER;
6703     v_location_id             NUMBER;
6704     v_batch_source_id         NUMBER;
6705     v_register_code           VARCHAR2(50);
6706     v_salesrep_id             NUMBER;
6707     v_gl_date                 Date;
6708     v_org_id                  Number;
6709     v_line_no                 Number := 0;
6710     v_receivable_amount       Number := 0;
6711     v_receivable_acctd_amount Number := 0;
6712     v_old_amount              Number := 0;
6713     v_old_acctd_amount        Number := 0;
6714     v_vat_tax_id              nUMBER(15);
6715     v_created_from            Varchar2(40);
6716     v_tax_amount              Number := 0;
6717     v_tax_amount1             Number := 0;
6718     v_freight_amount          Number := 0;
6719     v_freight_amount1         Number := 0;
6720     v_payment_schedule_id     Number;
6721     lv_tax_const         CONSTANT VARChar2(10) := 'TAX';
6722     lv_freight_acc_class CONSTANT varchar2(10) := 'FREIGHT';
6723     lv_acc_class_rev     CONSTANT varchar2(10) := 'REV';
6724     lv_acc_class_rec     CONSTANT varchar2(10) := 'REC';
6725     v_books_id           NUMBER;
6726     c_from_currency_code VARCHAR2(15);
6727     c_conversion_type    VARCHAR2(30);
6728     c_conversion_date    DATE;
6729     c_conversion_rate    NUMBER := 0;
6730     v_converted_rate     NUMBER := 1;
6731     l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
6732 
6733     CURSOR count_cur IS
6734     SELECT count(customer_trx_line_id)
6735     FROM JAI_AR_TRX_INS_LINES_T
6736     WHERE customer_trx_id = pn_customer_trx_id;
6737 
6738     v_exter_code_combination_id JAI_INTERFACE_TAX_LINES_ALL.CODE_COMBINATION_ID%TYPE;
6739     v_exter_percent             NUMBER;
6740     v_exter_amount              JAI_INTERFACE_TAX_LINES_ALL.TAX_AMOUNT%TYPE;
6741 
6742     v_exter_request_id          NUMBER;
6743 
6744     CURSOR cur_get_external_dis_detail(pn_c_tax_line_no IN JAI_INTERFACE_TAX_LINES_ALL.TAX_LINE_NO%TYPE) IS
6745     SELECT
6746            CODE_COMBINATION_ID,
6747            100,--Hardcode temporarily.
6748            TAX_AMOUNT,
6749            GN_REQUEST_ID
6750     FROM JAI_INTERFACE_TAX_LINES_ALL TAX
6751     WHERE  TAX.INTERFACE_LINE_ID = pn_interface_line_id
6752     AND    TAX_LINE_NO           = pn_c_tax_line_no;--TEMP_REC.LINE_NUMBER
6753 
6754 
6755     CURSOR SO_AR_HDR_INFO IS
6756     SELECT organization_id, location_id, batch_source_id
6757     FROM JAI_AR_TRXS
6758     WHERE Customer_Trx_ID = pn_customer_trx_id;
6759 
6760     CURSOR ORG_CUR IS
6761     SELECT ORG_ID, CREATED_FROM
6762     FROM RA_CUSTOMER_TRX_ALL
6763     WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6764 
6765 
6766     CURSOR TEMP_CUR IS
6767     SELECT   EXTENDED_AMOUNT,
6768              CUSTOMER_TRX_LINE_ID,
6769              CUSTOMER_TRX_ID,
6770              SET_OF_BOOKS_ID,
6771              LINK_TO_CUST_TRX_LINE_ID,
6772              LINE_TYPE,
6773              UOM_CODE,
6774              VAT_TAX_ID,
6775              ACCTD_AMOUNT,
6776              AMOUNT,
6777              CODE_COMBINATION_ID,
6778              CUST_TRX_LINE_SALES_REP_ID,
6779              LAST_UPDATE_DATE,
6780              LAST_UPDATED_BY,
6781              CREATION_DATE,
6782              CREATED_BY,
6783              LAST_UPDATE_LOGIN,
6784              INSERT_UPDATE_FLAG,
6785              LINE_NUMBER                --ADD BY ZHIWEI
6786     FROM JAI_AR_TRX_INS_LINES_T
6787     WHERE customer_trx_id = pn_customer_trx_id
6788     and link_to_cust_trx_line_id = pn_customer_trx_line_id
6789     order by CUSTOMER_TRX_LINE_ID;
6790 
6791 
6792     /* Added by Ramananda for bug#4468353 due to SLA uptake by AR */
6793 
6794     CURSOR c_gl_posted_date_cur(p_customer_trx_line_id RA_CUST_TRX_LINE_GL_DIST_ALL.customer_trx_line_id%type) IS
6795     SELECT gl_posted_date
6796     from RA_CUST_TRX_LINE_GL_DIST_ALL
6797     where customer_trx_line_id = p_customer_trx_line_id
6798     and account_class = 'REC'
6799     and latest_rec_flag = 'Y';
6800 
6801 
6802     ld_gl_posted_date RA_CUST_TRX_LINE_GL_DIST_ALL.gl_posted_date%type;
6803 
6804     CURSOR GL_DATE_CUR IS
6805     SELECT DISTINCT gl_date
6806     FROM RA_CUST_TRX_LINE_GL_DIST_ALL
6807     WHERE CUSTOMER_TRX_LINE_ID IN
6808                (SELECT LINK_TO_CUST_TRX_LINE_ID
6809                 FROM JAI_AR_TRX_INS_LINES_T
6810                 WHERE customer_trx_id = pn_customer_trx_id);
6811 
6812 
6813     CURSOR MAX_LINE_CUR(p_cust_link_line_id IN NUMBER, p_line_type IN VARCHAR2) IS
6814     SELECT NVL(MAX(line_number), 0)
6815     FROM RA_CUSTOMER_TRX_LINES_ALL
6816     WHERE link_to_cust_trx_line_id = p_cust_link_line_id
6817     and line_type = p_line_type;
6818 
6819 
6820     CURSOR LINK_LINE_CUR IS
6821     SELECT LINK_TO_CUST_TRX_LINE_ID, ERROR_FLAG --added the error_flag condition to process the records,which got stuck up
6822     FROM JAI_AR_TRX_INS_LINES_T
6823     WHERE customer_trx_id = pn_customer_trx_id
6824     AND LINK_TO_CUST_TRX_LINE_ID = pn_customer_trx_line_id;
6825 
6826 
6827     CURSOR PREVIOUS_AMOUNT_CUR IS
6828     SELECT A.AMOUNT, A.ACCTD_AMOUNT
6829     FROM RA_CUST_TRX_LINE_GL_DIST_ALL A,
6830          RA_CUSTOMER_TRX_LINES_ALL    B,
6831          JAI_AR_TRX_INS_LINES_T       C
6832     WHERE A.CUSTOMER_TRX_LINE_ID = B.CUSTOMER_TRX_LINE_ID
6833     AND B.LINK_TO_CUST_TRX_LINE_ID = C.LINK_TO_CUST_TRX_LINE_ID
6834     AND C.CUSTOMER_TRX_ID = pn_customer_trx_id
6835     AND A.ACCOUNT_CLASS IN (lv_tax_const, lv_freight_acc_class)
6836     AND A.CUSTOMER_TRX_LINE_ID = C.CUSTOMER_TRX_LINE_ID;
6837 
6838 
6839     /* Added by Ramananda for bug#4468353 due to ebtax uptake by AR, start */
6840 
6841     lv_tax_regime_code      zx_rates_b.tax_regime_code%type;
6842     ln_party_tax_profile_id zx_party_tax_profile.party_tax_profile_id%type;
6843     ln_tax_rate_id          zx_rates_b.tax_rate_id%type;
6844     /* Added by Ramananda for bug#4468353 due to ebtax uptake by AR, end */
6845 
6846 
6847     --2001/06/26 Anuradha Parthasarathy
6848     Cursor payment_schedule_cur IS
6849     Select min(payment_schedule_id)
6850     From Ar_Payment_Schedules_All
6851     Where Customer_trx_ID = pn_customer_trx_id;
6852 
6853 
6854     /* AR Transactions with Invoicing Acctg Rules not supported by Localization, Enhancement Done on 16th NOV */
6855 
6856     Cursor accounting_set_cur IS
6857     Select accounting_rule_id
6858     From Ra_Customer_Trx_Lines_All
6859     Where Customer_Trx_Line_Id = pn_customer_trx_line_id;
6860 
6861     v_accounting_rule_id Number;
6862     v_account_set_flag   Char(1);
6863 
6864     Cursor prev_customer_trx_cur(p_line_type ra_customer_trx_lines_all.line_type%TYPE) is
6865     Select previous_customer_trx_id
6866     from ra_customer_trx_lines_all
6867     where customer_trx_id = pn_customer_trx_id
6868     and line_type = p_line_type;
6869 
6870     --AND  customer_trx_line_id = pn_customer_trx_line_id;  --Added this condition on 05-Apr-2002 as it should fetch only one value
6871     v_prev_customer_trx_id Number;
6872 
6873     Cursor Inv_payment_schedule_cur(p_prev_customer_trx_id IN Number) is
6874     Select payment_schedule_id
6875     from ar_payment_schedules_all
6876     where customer_trx_id = p_prev_customer_trx_id;
6877 
6878 
6879     --2001/07/04 Anuradha Parthasarathy
6880     v_interface_line_attribute6  Varchar2(30);
6881     v_return_reference_type_code Varchar2(30);
6882     v_credit_invoice_line_id     Number;
6883 
6884     Cursor line_id_cur(p_line_type ra_customer_trx_lines_all.line_type%TYPE) is
6885     Select interface_line_attribute6
6886     From ra_customer_trx_lines_all
6887     Where customer_trx_id = pn_customer_trx_id
6888     and line_type = p_line_type;
6889 
6890 
6891     Cursor Ref_type_cur(p_line_id IN Number) is
6892     Select context, reference_line_id
6893     From oe_order_lines_all
6894     Where line_id = p_line_id;
6895 
6896 
6897     v_upd_created_from varchar2(15);
6898     v_rma_check        Number;
6899     v_temp_cust_trx_id Number;
6900 
6901     CURSOR ORG_CUR_UPD IS
6902     SELECT created_from, NVL(exchange_rate, 1) exchange_rate --9177024
6903     FROM RA_CUSTOMER_TRX_ALL
6904     WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6905 
6906 
6907     CURSOR check_rma_ref IS
6908     SELECT 1
6909     from JAI_OM_OE_RMA_LINES
6910     WHERE TO_CHAR(RMA_NUMBER) IN
6911             (SELECT INTERFACE_HEADER_ATTRIBUTE1
6912              FROM RA_CUSTOMER_TRX_ALL
6913              WHERE CUSTOMER_TRX_ID = pn_customer_trx_id)
6914          AND Rma_line_id in
6915             (Select RMA_LINE_ID
6916              from JAI_OM_OE_RMA_TAXES a, JAI_CMN_TAXES_ALL b
6917              Where a.tax_id = b.tax_id
6918              AND b.tax_type = jai_constants.tax_type_freight);
6919 
6920 
6921     --added 12-Mar-2002
6922     CURSOR tax_type IS
6923     SELECT b.tax_type t_type, a.customer_trx_line_id line_id
6924     FROM JAI_AR_TRX_TAX_LINES A, JAI_CMN_TAXES_ALL B
6925     WHERE link_to_cust_trx_line_id = pn_customer_trx_line_id
6926     and A.tax_id = B.tax_id;
6927 
6928 
6929     CURSOR get_reason IS
6930     SELECT reason_code
6931     FROM RA_CUSTOMER_TRX_ALL
6932     WHERE CUSTOMER_TRX_ID = pn_customer_trx_id;
6933 
6934     v_reason_code ra_customer_trx_all.reason_code%TYPE;
6935     --end 12-Mar-2002
6936     v_tax_amt  Number;
6937     v_err_mesg VARCHAR2(250);
6938     l_retcode  NUMBER(1);
6939     l_errbuf   VARCHAR2(1996);
6940 
6941     CURSOR get_trx_num IS
6942     SELECT --21-Mar-2002 for ar tax and freight
6943     trx_number
6944     FROM ra_customer_trx_all
6945     WHERE customer_trx_id = pn_customer_trx_id;
6946 
6947 
6948     --added the following cursor for bug#8476512
6949     CURSOR cur_chk_jai_tax_dtls(cp_customer_trx_line_id IN ra_customer_trx_lines_all.customer_trx_line_id%TYPE, cp_link_to_cust_trx_line_id IN ra_customer_trx_lines_all.link_to_cust_trx_line_id%TYPE) IS
6950     SELECT 1
6951     FROM jai_ar_trx_tax_lines
6952     WHERE customer_trx_line_id = cp_customer_trx_line_id
6953     AND link_to_cust_trx_line_id = cp_link_to_cust_trx_line_id;
6954 
6955     ln_tax_line_exists NUMBER; --added for bug#8476512
6956 
6957     v_trx_num   ra_customer_trx_all.trx_number%TYPE;
6958     v_count_trx NUMBER;
6959     V_sum_amt   NUMBER;
6960 
6961     ------------------------------------------------------------------------------------------------
6962     -- start of modification added by subbu and Jagdish on 10-jun-01 for discount issue.
6963     v_extended_amount_line number;
6964     v_taxable_amt          number := 0;
6965 
6966     Cursor get_ext_amt_ln(p_line_type ra_customer_trx_lines.line_type%TYPE) is
6967     Select extended_amount
6968     from Ra_customer_trx_lines_all
6969     where customer_trx_id = pn_customer_trx_id
6970     and customer_trx_line_id = pn_customer_trx_line_id
6971     and line_type = p_line_type; --rchandan for bug#4428980
6972 
6973     Cursor get_ext_amt_tax is
6974     Select extended_amount, customer_trx_line_id
6975     from Ra_customer_trx_lines_all
6976     where customer_trx_id = pn_customer_trx_id
6977     and Link_to_cust_trx_line_id = pn_customer_trx_line_id
6978     and line_type = lv_tax_const; --rchandan for bug#4428980
6979 
6980     get_ext_amt_tax_rec get_ext_amt_tax%rowtype;
6981 
6982     Cursor get_taxable_amt(cust_trx_ln_id number) Is
6983     Select nvl(taxable_amount, 0)
6984     from ra_customer_trx_lines_all
6985     where customer_trx_line_id = cust_trx_ln_id
6986     and customer_trx_id = pn_customer_trx_id
6987     and line_type = lv_tax_const; --rchandan for bug#4428980
6988 
6989     CURSOR BOOKS_TRX_CUR IS
6990     SELECT set_of_books_id,
6991            primary_salesrep_id,
6992            invoice_currency_code,
6993            exchange_rate_type,
6994            exchange_date,
6995            exchange_rate
6996     FROM JAI_AR_TRXS
6997     WHERE customer_trx_id = pn_customer_trx_id;
6998     -- end of modification  by subbu and Jagdish on 10-jun-01 for discount issue.
6999     ------------------------------------------------------------------------------------------------
7000     --05-Apr-2002
7001 
7002     lv_event_id RA_CUST_TRX_LINE_GL_DIST_ALL.EVENT_ID%TYPE; --Added by Bo Li
7003 
7004     v_rec_ctr     Number;
7005     v_PAYMENT_amt Number := 0;
7006     v_FREIGHT_amt Number := 0;
7007     V_TEMP        Number;
7008     v_sql_num     Number;
7009     v_amt_a       NUMBER;
7010     v_tot_amount  NUMBER;
7011     v_sql_count   NUMBER;
7012     v1_sql_count  NUMBER;
7013 
7014     Localization_tax_not_defined EXCEPTION; -- added by sriram - 3340594
7015     Item_lines_already_accounted EXCEPTION;
7016     -- declaration for mrc starts here bug # 3326394
7017 
7018     cursor c_gl_dist_cur is
7019     select cust_trx_line_gl_dist_id
7020     from ra_cust_trx_line_gl_dist_all
7021     where customer_trx_id = pn_customer_trx_id
7022     and account_class = lv_acc_class_rec --rchandan for bug#4428980
7023     and latest_rec_flag = 'Y';
7024 
7025 
7026     v_gl_dist_id number;
7027 
7028     /* Added by Ramananda for bug#4468353 due to sla uptake by AR, end */
7029 
7030     l_xla_event arp_xla_events.xla_events_type;
7031     --start additions for bug#9177024
7032 
7033     lv_process_status        VARCHAR2(100);
7034     lv_process_message       VARCHAR2(2000);
7035     ln_exchange_rate         jai_ar_trxs.exchange_rate%type;
7036     lv_account_class_tax     VARCHAR2(10) := 'TAX';
7037     lv_account_class_freight VARCHAR2(10) := 'FREIGHT';
7038     lv_account_class_rec     VARCHAR2(10) := 'REC';
7039     ln_precision             fnd_currencies.precision%TYPE;
7040     ln_old_amount            NUMBER;
7041     ln_taxable_amount        NUMBER;
7042     ln_tax_amt               NUMBER;
7043     ln_tax_acctd_amount      NUMBER;
7044 
7045     CURSOR cur_total_amt_trx_lines(cpn_customer_trx_id ra_customer_trx_all.customer_trx_id%TYPE, cp_customer_trx_line_id ra_customer_trx_lines_all.customer_trx_line_id%TYPE DEFAULT NULL, cp_line_type ra_customer_trx_lines_all.line_type%TYPE) IS
7046     SELECT NVL(SUM(extended_amount), 0) extended_amount
7047     FROM ra_customer_trx_lines_all
7048     WHERE customer_trx_id = cpn_customer_trx_id
7049     AND customer_trx_line_id = NVL(cp_customer_trx_line_id, customer_trx_line_id)
7050     AND line_type = cp_line_type;
7051 
7052 
7053     CURSOR cur_total_amt_gl_dist(cpn_customer_trx_id ra_customer_trx_all.customer_trx_id%TYPE) IS
7054     SELECT NVL(SUM(amount), 0) amount,
7055            NVL(SUM(acctd_amount), 0) acctd_amount
7056     FROM ra_cust_trx_line_gl_dist_all
7057     WHERE customer_trx_id = cpn_customer_trx_id
7058     AND account_class IN (lv_account_class_tax, lv_account_class_freight);
7059 
7060     --Added by zhiwei for POT change bug#13023443 begin
7061     -----------------------------------------------------------
7062     Cursor get_org_info_cur
7063     IS
7064     SELECT organization_id,location_id
7065     from   JAI_INTERFACE_LINES_ALL
7066     WHERE  INTERFACE_LINE_ID = pn_interface_line_id;
7067 
7068     ln_organization_id   number;
7069     ln_location_id       number;
7070     -----------------------------------------------------------
7071     --Added by zhiwei for POT change bug#13023443 end
7072   BEGIN
7073     --MAIN BLOCK BEGIN
7074 
7075     v_sql_num := 0;
7076 
7077     OPEN get_trx_num;
7078     FETCH get_trx_num INTO v_trx_num;
7079     CLOSE get_trx_num;
7080 
7081     l_retcode := 0;
7082     v_sql_num := 1;
7083 
7084     open prev_customer_trx_cur('LINE'); --rchandan for bug#4428980
7085     fetch prev_customer_trx_cur into v_temp_cust_trx_id;
7086     close prev_customer_trx_cur;
7087 
7088     v_sql_num := 2;
7089 
7090     OPEN ORG_CUR_UPD;
7091     FETCH ORG_CUR_UPD INTO v_upd_created_from, ln_exchange_rate;
7092     CLOSE ORG_CUR_UPD;
7093     v_sql_num := 3;
7094 
7095     OPEN check_rma_ref;
7096     FETCH check_rma_ref INTO v_rma_check;
7097     CLOSE check_rma_ref;
7098     v_sql_num := 4;
7099 
7100     --12-MAR-2002
7101     OPEN get_reason;
7102     FETCH get_reason INTO v_reason_code;
7103     CLOSE get_reason;
7104     v_sql_num := 5;
7105 
7106     OPEN payment_schedule_cur;
7107     FETCH payment_schedule_cur INTO v_payment_schedule_id;
7108     CLOSE payment_schedule_cur;
7109     v_sql_num := 6;
7110 
7111     OPEN prev_customer_trx_cur('LINE'); --rchandan for bug#4428980
7112     FETCH prev_customer_trx_cur INTO v_prev_customer_trx_id;
7113     CLOSE prev_customer_trx_cur;
7114     v_sql_num := 7;
7115 
7116     v_sql_num := 9;
7117 
7118     --start additions for bug#9177024
7119     --if v_upd_created_from = 'ARXTWMAI' then --commented by zhiwei for ER OPEN INTERFACE 20101110
7120     --DELETE THE TAX AND FRIGHT LINES IN RA_CUSTOMER_TRX_LINES_ALL AND RA_CUST_TRX_LINE_GL_DIS_ALL--ADDED BY ZHIWEI FOR OPEN INTERFACE 20101116
7121     delete_trx_data(p_customer_trx_id           => pn_customer_trx_id,
7122                       p_link_to_cust_trx_line_id  => pn_customer_trx_line_id,
7123                       p_process_status            => lv_process_status,
7124                       p_process_message           => lv_process_message);
7125 
7126     --get the tax amount
7127     OPEN cur_total_amt_gl_dist(pn_customer_trx_id);
7128     FETCH cur_total_amt_gl_dist INTO ln_tax_amt, ln_tax_acctd_amount;
7129     CLOSE cur_total_amt_gl_dist;
7130 
7131     --get the line amount
7132     OPEN cur_total_amt_trx_lines(pn_customer_trx_id, NULL, 'LINE');
7133     FETCH cur_total_amt_trx_lines INTO ln_old_amount;
7134     CLOSE cur_total_amt_trx_lines;
7135 
7136     /* Modified for bug#5495711
7137     || acctd_amount = ROUND( (ln_old_acctd_amount + ln_tax_acctd_amount + ln_diff_tax_frt), ln_precision)
7138     */
7139 /*
7140     UPDATE ra_cust_trx_line_gl_dist_all
7141     SET amount       = ln_old_amount + ln_tax_amt,
7142         acctd_amount = ROUND((ln_old_amount * ln_exchange_rate +
7143                               ln_tax_acctd_amount),
7144                               ln_precision)
7145     WHERE customer_trx_id = pn_customer_trx_id
7146     AND account_class = lv_account_class_rec --'REC'
7147     AND latest_rec_flag = 'Y';
7148 */--Commented by zhiwei for open interface 20101123
7149 
7150     --end if;--commented by zhiwei for ER OPEN INTERFACE 20101110
7151 
7152     --end addtiions for bug#9177024
7153 
7154     SELECT NVL(SUM(AMOUNT), 0)
7155     INTO V_sum_amt
7156     FROM RA_CUST_TRX_LINE_GL_DIST_ALL
7157     WHERE ACCOUNT_CLASS = lv_acc_class_rev
7158     AND CUSTOMER_TRX_ID = pn_customer_trx_id; --added on 22-Mar-2002 to get the revenue amount for the invoice
7159     v_sql_num := 10;
7160 
7161     OPEN COUNT_CUR;
7162     FETCH COUNT_CUR INTO v_counter;
7163     CLOSE COUNT_CUR;
7164     v_sql_num := 11;
7165 
7166     IF NVL(v_counter, 0) > 0 THEN
7167       --Main v_counter if
7168       FOR PREVIOUS_AMOUNT_REC IN PREVIOUS_AMOUNT_CUR LOOP
7169         v_old_amount       := NVL(v_old_amount, 0) +
7170                               nvl(PREVIOUS_AMOUNT_REC.amount, 0);
7171         v_old_acctd_amount := NVL(v_old_acctd_amount, 0) +
7172                               NVL(PREVIOUS_AMOUNT_REC.acctd_amount, 0);
7173 
7174       END LOOP;
7175 
7176       v_sql_num := 12;
7177 
7178       FOR LINK_REC IN LINK_LINE_CUR LOOP
7179         v_sql_num := 13;
7180 
7181         -- the following select statement commented and using the next one instead
7182         -- because this is wrong.We need to compare the ra_customer_trx_lines_all table
7183         -- with the link_to_cust_trx_line_id column instead of based on the customer_trx_line_id
7184         -- column in the ra_cust_trx_line_gl_dist_all table. -- bug # 2784431
7185 
7186         /*
7187         SELECT COUNT(Customer_trx_line_id) INTO v_rec_ctr FROM ra_cust_trx_line_gl_dist_all
7188         WHERE customer_trx_line_id = pn_customer_trx_line_id
7189         AND Account_class IN ('TAX','FREIGHT');  --Added on 09-Apr-2002 For the BUG#2303830
7190         */
7191 
7192 
7193         SELECT COUNT(Customer_trx_line_id)
7194         INTO v_rec_ctr
7195         FROM ra_customer_trx_lines_all
7196         where link_to_cust_trx_line_id = pn_customer_trx_line_id
7197         and line_type in (lv_tax_const, lv_freight_acc_class); --rchandan for bug#4428980
7198 
7199         IF v_rec_ctr > 0 THEN
7200           --Added on 09-Apr-2002 for the BUG#2303830
7201 
7202           v_sql_num := 14;
7203 
7204           DELETE RA_CUST_TRX_LINE_GL_DIST_ALL
7205           WHERE CUSTOMER_TRX_LINE_ID IN
7206                  (SELECT CUSTOMER_TRX_LINE_ID
7207                     FROM RA_CUSTOMER_TRX_LINES_ALL
7208                    WHERE LINK_TO_CUST_TRX_LINE_ID =
7209                          LINK_REC.LINK_TO_CUST_TRX_LINE_ID)
7210           AND ACCOUNT_CLASS IN (lv_tax_const, lv_freight_acc_class); --rchandan for bug#4428980
7211 
7212           -- added for mrc -- sriram - 26/12 -- 3326394
7213 
7214           for mrc_rec in (SELECT CUST_TRX_LINE_GL_DIST_ID
7215                             FROM RA_CUST_TRX_LINE_GL_DIST_ALL
7216                            WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
7217                              AND ACCOUNT_CLASS IN
7218                                  (lv_tax_const, lv_freight_acc_class) --rchandan for bug#4428980
7219                              AND CUSTOMER_TRX_LINE_ID IN
7220                                  (SELECT CUSTOMER_TRX_LINE_ID
7221                                     FROM RA_CUSTOMER_TRX_LINES_ALL
7222                                    WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
7223                                      AND LINK_TO_CUST_TRX_LINE_ID =
7224                                          pn_customer_trx_line_id
7225                                      AND LINE_TYPE IN
7226                                          (lv_tax_const, lv_freight_acc_class) --rchandan for bug#4428980
7227                                   )) Loop
7228             ar_mrc_engine.maintain_mrc_data(p_event_mode => 'DELETE',
7229                                             p_table_name => 'RA_CUST_TRX_LINE_GL_DIST',
7230                                             p_mode       => 'SINGLE',
7231                                             p_key_value  => mrc_rec.CUST_TRX_LINE_GL_DIST_ID);
7232 
7233           end loop;
7234 
7235 
7236 
7237 
7238 
7239           v_sql_num := 15;
7240 
7241           DELETE RA_CUSTOMER_TRX_LINES_ALL
7242            WHERE LINK_TO_CUST_TRX_LINE_ID =
7243                  LINK_REC.LINK_TO_CUST_TRX_LINE_ID;
7244 
7245           v_sql_num := 16;
7246 
7247           Update Ar_Payment_Schedules_All
7248              Set Tax_Original               = 0,
7249                  Tax_remaining              = 0,
7250                  Freight_Original           = 0,
7251                  Freight_remaining          = 0,
7252                  Amount_Due_Original        = v_sum_amt,
7253                  Amount_Due_remaining       = v_sum_amt,
7254                  Acctd_amount_due_remaining = v_sum_amt
7255            Where Customer_Trx_ID = pn_customer_trx_id
7256              And Payment_Schedule_ID = v_payment_schedule_id;
7257 
7258 
7259         END IF;
7260 
7261 
7262         v_sql_num := 17;
7263 
7264       END LOOP;
7265 
7266 
7267       OPEN ORG_CUR;
7268       FETCH ORG_CUR INTO V_ORG_ID, V_CREATED_FROM;
7269       CLOSE ORG_CUR;
7270       v_sql_num := 18;
7271 
7272       OPEN GL_DATE_CUR;
7273       FETCH GL_DATE_CUR INTO v_gl_date;
7274       CLOSE GL_DATE_CUR;
7275       v_sql_num := 19;
7276 
7277       OPEN jai_ar_trx_pkg.c_tax_regime_code_cur(V_ORG_ID);
7278       FETCH jai_ar_trx_pkg.c_tax_regime_code_cur INTO lv_tax_regime_code;
7279       CLOSE jai_ar_trx_pkg.c_tax_regime_code_cur;
7280 
7281       OPEN jai_ar_trx_pkg.c_party_tax_profile_id_cur(V_ORG_ID);
7282       FETCH jai_ar_trx_pkg.c_party_tax_profile_id_cur INTO ln_party_tax_profile_id;
7283       CLOSE jai_ar_trx_pkg.c_party_tax_profile_id_cur;
7284 
7285       OPEN jai_ar_trx_pkg.c_tax_rate_id_cur(lv_tax_regime_code,
7286                                             ln_party_tax_profile_id);
7287       FETCH jai_ar_trx_pkg.c_tax_rate_id_cur INTO ln_tax_rate_id;
7288       CLOSE jai_ar_trx_pkg.c_tax_rate_id_cur;
7289 
7290       if ln_tax_rate_id is null then
7291         raise Localization_tax_not_defined;
7292       end if;
7293 
7294       /* Added by Ramananda for bug#4468353 due to ebtax uptake by AR, end */
7295 
7296 
7297       v_sql_num := 20;
7298 
7299       OPEN ACCOUNTING_SET_CUR;
7300       FETCH ACCOUNTING_SET_CUR INTO v_accounting_rule_id;
7301       CLOSE ACCOUNTING_SET_CUR;
7302       v_sql_num := 21;
7303 
7304       IF v_accounting_rule_id IS NOT NULL THEN
7305         v_account_Set_flag := 'Y';
7306       ELSE
7307         v_account_Set_flag := 'N';
7308       END IF;
7309 
7310 
7311       BEGIN
7312         --Begin Temp_Cur Block
7313 
7314         SAVEPOINT TEMP_CUR_BLK_SVP;
7315 
7316         FOR TEMP_REC IN TEMP_CUR LOOP
7317 
7318           --added for bug#8476512,start
7319           OPEN cur_chk_jai_tax_dtls(temp_rec.customer_trx_line_id,
7320                                     temp_rec.link_to_cust_trx_line_id);
7321           FETCH cur_chk_jai_tax_dtls
7322             INTO ln_tax_line_exists;
7323           CLOSE cur_chk_jai_tax_dtls;
7324 
7325           IF nvl(ln_tax_line_exists, 0) <> 1 THEN
7326             Delete JAI_AR_TRX_INS_LINES_T
7327              WHERE customer_trx_line_id = temp_rec.customer_trx_line_id
7328                AND link_to_cust_trx_line_id =
7329                    temp_rec.link_to_cust_trx_line_id;
7330 
7331           ELSE
7332             OPEN MAX_LINE_CUR(TEMP_REC.LINK_TO_CUST_TRX_LINE_ID,
7333                               TEMP_REC.line_type);
7334             FETCH MAX_LINE_CUR
7335               INTO v_line_no;
7336             CLOSE MAX_LINE_CUR;
7337             v_sql_num := 22;
7338 
7339             v_line_no := NVL(v_line_no, 0) + 1;
7340 
7341             IF TEMP_REC.INSERT_UPDATE_FLAG IN ('U', 'X') THEN
7342               v_sql_num := 23;
7343 
7344               OPEN c_gl_posted_date_cur(TEMP_REC.link_to_cust_trx_line_id);
7345               FETCH c_gl_posted_date_cur INTO ld_gl_posted_date;
7346               CLOSE c_gl_posted_date_cur;
7347 
7348               IF ld_gl_posted_date is NULL THEN
7349 
7350 
7351                 INSERT INTO RA_CUSTOMER_TRX_LINES_ALL
7352                   (extended_amount,
7353                    customer_trx_line_id,
7354                    last_update_date,
7355                    last_updated_by,
7356                    creation_date,
7357                    created_by,
7358                    last_update_login,
7359                    customer_trx_id,
7360                    line_number,
7361                    set_of_books_id,
7362                    link_to_cust_trx_line_id,
7363                    line_type,
7364                    org_id,
7365                    uom_code,
7366                    autotax,
7367                    vat_tax_id)
7368                 VALUES
7369                   (TEMP_REC.extended_amount,
7370                    TEMP_REC.customer_trx_line_id,
7371                    TEMP_REC.last_update_date,
7372                    TEMP_REC.last_updated_by,
7373                    TEMP_REC.creation_date,
7374                    TEMP_REC.created_by,
7375                    TEMP_REC.last_update_login,
7376                    TEMP_REC.customer_trx_id,
7377                    v_line_no,
7378                    TEMP_REC.set_of_books_id,
7379                    TEMP_REC.link_to_cust_trx_line_id,
7380                    TEMP_REC.line_type,
7381                    v_org_id,
7382                    TEMP_REC.uom_code,
7383                    'N',
7384                    v_vat_tax_id);
7385 
7386                 v_sql_num := 24;
7387                 --added by zhiwei begin
7388                 --------------------------------------------------------
7389                 --Added by Bo Li-------------------
7390                  SELECT event_id
7391                  INTO   lv_event_id
7392                  FROM RA_CUST_TRX_LINE_GL_DIST_ALL
7393                  WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
7394                  AND ACCOUNT_CLASS = lv_acc_class_rec;
7395 
7396                 --Commented by zhiwei for POT change bug#13023443 on 20110929 begin
7397                 -----------------------------------
7398                 /*
7399                 IF(pv_event = GV_TAXABLE_EVENT_EXTERNAL)THEN
7400 
7401                   --OPEN INTERFACE FOR AR
7402                   --GET DIST FROM INTERFACE_DIS_ALL
7403 
7404                       OPEN cur_get_external_dis_detail(TEMP_REC.LINE_NUMBER);
7405                       FETCH cur_get_external_dis_detail INTO v_exter_code_combination_id,v_exter_percent,v_exter_amount,
7406                                                              v_exter_request_id;
7407                       CLOSE cur_get_external_dis_detail;
7408 
7409 
7410                       --jai_ar_trx_tax_lines        get tax_line_no base TEMP_REC.customer_trx_line_id and TEMP_REC.link_to_cust_trx_line_id
7411                       --jai_interface_tax_lines_all get interface_TAX_line_id base pn_interface_line_id and TEMP_REC.LINE_NUMBER
7412                       --JAI-INTERFACE_DIS_LINES_ALL GET CODE_COMBINATION_ID PERCENT AMOUNT ATTRIBUTE_CATEGORY ATTRIBUTE1 ATTRIBUTE2 ATTRIBUTE3 ATTRIBUTE4 ATTRIBUTE5 REQUEST_ID
7413                       OPEN SO_AR_HDR_INFO;
7414                       FETCH SO_AR_HDR_INFO INTO v_organization_id, v_location_id, v_batch_source_id;
7415                       CLOSE SO_AR_HDR_INFO;
7416 
7417                       OPEN BOOKS_TRX_CUR;
7418                       FETCH BOOKS_TRX_CUR
7419                       INTO v_books_id, v_salesrep_id, c_from_currency_code, c_conversion_type, c_conversion_date, c_conversion_rate;
7420                       CLOSE BOOKS_TRX_CUR;
7421                       IF v_books_id IS NULL THEN
7422                              l_func_curr_det := jai_plsql_cache_pkg.return_sob_curr(p_org_id => v_organization_id);
7423                              v_books_id      := l_func_curr_det.ledger_id;
7424                       END IF;
7425                       v_converted_rate := jai_cmn_utils_pkg.currency_conversion(v_books_id,
7426                                                                             c_from_currency_code,
7427                                                                             c_conversion_date,
7428                                                                             c_conversion_type,
7429                                                                             c_conversion_rate);
7430 
7431                       INSERT INTO RA_CUST_TRX_LINE_GL_DIST_ALL
7432                       (account_class,
7433                        account_set_flag,
7434                        acctd_amount,
7435                        amount,
7436                        code_combination_id,
7437                        cust_trx_line_gl_dist_id,
7438                        cust_trx_line_salesrep_id,
7439                        customer_trx_id,
7440                        customer_trx_line_id,
7441                        gl_date,
7442                        last_update_date,
7443                        last_updated_by,
7444                        creation_date,
7445                        created_by,
7446                        last_update_login,
7447                        org_id,
7448                        percent,
7449                        posting_control_id,
7450                        set_of_books_id
7451                        ,event_id --Added by zhiwei for Bug#12583975 on 20110531
7452                        )
7453                     VALUES
7454                       (TEMP_REC.line_type,
7455                        v_account_set_flag,
7456                        v_converted_rate * v_exter_amount, --TEMP_REC.acctd_amount,??
7457                        v_exter_amount,--TEMP_REC.amount,
7458                        v_exter_code_combination_id,--TEMP_REC.CODE_COMBINATION_ID,
7459                        RA_CUST_TRX_LINE_GL_DIST_S.nextval,
7460                        TEMP_REC.cust_trx_line_sales_rep_id,
7461                        TEMP_REC.customer_trx_id,
7462                        TEMP_REC.customer_trx_line_id,
7463                        v_gl_date,
7464                        TEMP_REC.last_update_date,
7465                        TEMP_REC.last_updated_by,
7466                        TEMP_REC.creation_date,
7467                        TEMP_REC.created_by,
7468                        TEMP_REC.last_update_login,
7469                        v_org_id,
7470                        v_exter_percent,
7471                        -3,
7472                        TEMP_REC.set_of_books_id
7473                        ,lv_event_id --Added by zhiwei for Bug#12583975 on 20110531
7474                        )
7475                     RETURNING cust_trx_line_gl_dist_id INTO v_gl_dist_id;
7476 
7477                 ELSE
7478                     --NORMAL
7479 
7480                     -------------------------------------------
7481                     --added by zhiwei end
7482 
7483                     INSERT INTO RA_CUST_TRX_LINE_GL_DIST_ALL
7484                       (account_class,
7485                        account_set_flag,
7486                        acctd_amount,
7487                        amount,
7488                        code_combination_id,
7489                        cust_trx_line_gl_dist_id,
7490                        cust_trx_line_salesrep_id,
7491                        customer_trx_id,
7492                        customer_trx_line_id,
7493                        gl_date,
7494                        last_update_date,
7495                        last_updated_by,
7496                        creation_date,
7497                        created_by,
7498                        last_update_login,
7499                        org_id,
7500                        percent,
7501                        posting_control_id,
7502                        set_of_books_id
7503                        ,event_id --Added by zhiwei for Bug#12583975 on 20110531
7504                        )
7505                     VALUES
7506                       (TEMP_REC.line_type,
7507                        v_account_set_flag,
7508                        TEMP_REC.acctd_amount,
7509                        TEMP_REC.amount,
7510                        TEMP_REC.CODE_COMBINATION_ID,
7511                        RA_CUST_TRX_LINE_GL_DIST_S.nextval,
7512                        TEMP_REC.cust_trx_line_sales_rep_id,
7513                        TEMP_REC.customer_trx_id,
7514                        TEMP_REC.customer_trx_line_id,
7515                        v_gl_date,
7516                        TEMP_REC.last_update_date,
7517                        TEMP_REC.last_updated_by,
7518                        TEMP_REC.creation_date,
7519                        TEMP_REC.created_by,
7520                        TEMP_REC.last_update_login,
7521                        v_org_id,
7522                        100,
7523                        -3,
7524                        TEMP_REC.set_of_books_id
7525                        ,lv_event_id --Added by zhiwei for Bug#12583975 on 20110531
7526                        )
7527                     RETURNING cust_trx_line_gl_dist_id INTO v_gl_dist_id;
7528 
7529                 END IF; --(pv_type = 'OPAPI');*/
7530                 ---------------------------------------------------------------
7531                 --Commented by zhiwei for POT change bug#13023443 on 20110929 end
7532 
7533 
7534                 --Added by zhiwei for POT change bug#13023443 on 20110929 begin
7535                 -------------------------------------------------------------------------------
7536                 /*
7537                 For Standard event, get Acct from Regime
7538                 For External Event, if Service tax
7539                                           if GL date >= POT date
7540                                                  get Acct from JAI api
7541                                           if GL date < POT date
7542                                                  get Acct from Regime
7543                                     if other tax
7544                                           get Acct from JAI api.
7545                 */
7546                 IF(pv_event = GV_TAXABLE_EVENT_STANDALONE
7547                      OR
7548                      (
7549                              pv_event = GV_TAXABLE_EVENT_EXTERNAL
7550                         and  exist_service_tax(temp_rec.customer_trx_line_id)
7551                         and  not is_accrual_basis(temp_rec.customer_trx_line_id)
7552                      )
7553                   )
7554                 THEN
7555                    --Get Acct from Regime
7556                    INSERT INTO RA_CUST_TRX_LINE_GL_DIST_ALL
7557                       (account_class,
7558                        account_set_flag,
7559                        acctd_amount,
7560                        amount,
7561                        code_combination_id,
7562                        cust_trx_line_gl_dist_id,
7563                        cust_trx_line_salesrep_id,
7564                        customer_trx_id,
7565                        customer_trx_line_id,
7566                        gl_date,
7567                        last_update_date,
7568                        last_updated_by,
7569                        creation_date,
7570                        created_by,
7571                        last_update_login,
7572                        org_id,
7573                        percent,
7574                        posting_control_id,
7575                        set_of_books_id
7576                        ,event_id --Added by zhiwei for Bug#12583975 on 20110531
7577                        )
7578                     VALUES
7579                       (TEMP_REC.line_type,
7580                        v_account_set_flag,
7581                        TEMP_REC.acctd_amount,
7582                        TEMP_REC.amount,
7583                        TEMP_REC.CODE_COMBINATION_ID,
7584                        RA_CUST_TRX_LINE_GL_DIST_S.nextval,
7585                        TEMP_REC.cust_trx_line_sales_rep_id,
7586                        TEMP_REC.customer_trx_id,
7587                        TEMP_REC.customer_trx_line_id,
7588                        v_gl_date,
7589                        TEMP_REC.last_update_date,
7590                        TEMP_REC.last_updated_by,
7591                        TEMP_REC.creation_date,
7592                        TEMP_REC.created_by,
7593                        TEMP_REC.last_update_login,
7594                        v_org_id,
7595                        100,
7596                        -3,
7597                        TEMP_REC.set_of_books_id
7598                        ,lv_event_id --Added by zhiwei for Bug#12583975 on 20110531
7599                        )
7600                     RETURNING cust_trx_line_gl_dist_id INTO v_gl_dist_id;
7601 
7602                 ELSE
7603                    --Get Acct from API
7604                    --OPEN INTERFACE FOR AR
7605                    --GET DIST FROM INTERFACE_DIS_ALL
7606 
7607                       OPEN cur_get_external_dis_detail(TEMP_REC.LINE_NUMBER);
7608                       FETCH cur_get_external_dis_detail INTO v_exter_code_combination_id,v_exter_percent,v_exter_amount,
7609                                                              v_exter_request_id;
7610                       CLOSE cur_get_external_dis_detail;
7611 
7612 
7613                       --jai_ar_trx_tax_lines        get tax_line_no base TEMP_REC.customer_trx_line_id and TEMP_REC.link_to_cust_trx_line_id
7614                       --jai_interface_tax_lines_all get interface_TAX_line_id base pn_interface_line_id and TEMP_REC.LINE_NUMBER
7615                       --JAI-INTERFACE_DIS_LINES_ALL GET CODE_COMBINATION_ID PERCENT AMOUNT ATTRIBUTE_CATEGORY ATTRIBUTE1 ATTRIBUTE2 ATTRIBUTE3 ATTRIBUTE4 ATTRIBUTE5 REQUEST_ID
7616                       OPEN SO_AR_HDR_INFO;
7617                       FETCH SO_AR_HDR_INFO INTO v_organization_id, v_location_id, v_batch_source_id;
7618                       CLOSE SO_AR_HDR_INFO;
7619 
7620                       OPEN BOOKS_TRX_CUR;
7621                       FETCH BOOKS_TRX_CUR
7622                       INTO v_books_id, v_salesrep_id, c_from_currency_code, c_conversion_type, c_conversion_date, c_conversion_rate;
7623                       CLOSE BOOKS_TRX_CUR;
7624                       IF v_books_id IS NULL THEN
7625                              l_func_curr_det := jai_plsql_cache_pkg.return_sob_curr(p_org_id => v_organization_id);
7626                              v_books_id      := l_func_curr_det.ledger_id;
7627                       END IF;
7628                       v_converted_rate := jai_cmn_utils_pkg.currency_conversion(v_books_id,
7629                                                                             c_from_currency_code,
7630                                                                             c_conversion_date,
7631                                                                             c_conversion_type,
7632                                                                             c_conversion_rate);
7633 
7634                       INSERT INTO RA_CUST_TRX_LINE_GL_DIST_ALL
7635                       (account_class,
7636                        account_set_flag,
7637                        acctd_amount,
7638                        amount,
7639                        code_combination_id,
7640                        cust_trx_line_gl_dist_id,
7641                        cust_trx_line_salesrep_id,
7642                        customer_trx_id,
7643                        customer_trx_line_id,
7644                        gl_date,
7645                        last_update_date,
7646                        last_updated_by,
7647                        creation_date,
7648                        created_by,
7649                        last_update_login,
7650                        org_id,
7651                        percent,
7652                        posting_control_id,
7653                        set_of_books_id
7654                        ,event_id --Added by zhiwei for Bug#12583975 on 20110531
7655                        )
7656                     VALUES
7657                       (TEMP_REC.line_type,
7658                        v_account_set_flag,
7659                        v_converted_rate * v_exter_amount, --TEMP_REC.acctd_amount,??
7660                        v_exter_amount,--TEMP_REC.amount,
7661                        v_exter_code_combination_id,--TEMP_REC.CODE_COMBINATION_ID,
7662                        RA_CUST_TRX_LINE_GL_DIST_S.nextval,
7663                        TEMP_REC.cust_trx_line_sales_rep_id,
7664                        TEMP_REC.customer_trx_id,
7665                        TEMP_REC.customer_trx_line_id,
7666                        v_gl_date,
7667                        TEMP_REC.last_update_date,
7668                        TEMP_REC.last_updated_by,
7669                        TEMP_REC.creation_date,
7670                        TEMP_REC.created_by,
7671                        TEMP_REC.last_update_login,
7672                        v_org_id,
7673                        v_exter_percent,
7674                        -3,
7675                        TEMP_REC.set_of_books_id
7676                        ,lv_event_id --Added by zhiwei for Bug#12583975 on 20110531
7677                        )
7678                     RETURNING cust_trx_line_gl_dist_id INTO v_gl_dist_id;
7679 
7680                 END IF;
7681 
7682                 -------------------------------------------------------------------------------
7683                 --Added by zhiwei for POT change bug#13023443 on 20110929 end
7684 
7685                 /* SLA Impact uptake */
7686 
7687                 --l_xla_event.xla_from_doc_id ;
7688                 --l_xla_event.xla_to_doc_id   ;
7689                 l_xla_event.xla_req_id    := NULL;
7690                 l_xla_event.xla_dist_id   := v_gl_dist_id;
7691                 l_xla_event.xla_doc_table := 'CT';
7692                 l_xla_event.xla_doc_event := NULL;
7693                 l_xla_event.xla_mode      := 'O';
7694                 l_xla_event.xla_call      := 'D';
7695                 --l_xla_event.xla_fetch_size
7696 
7697                 --ARP_XLA_EVENTS.CREATE_EVENTS(p_xla_ev_rec => l_xla_event);
7698 
7699                 -- code for mrc insert starts here -- bug # 3326394
7700                 ar_mrc_engine.maintain_mrc_data(p_event_mode => 'INSERT',
7701                                                 p_table_name => 'RA_CUST_TRX_LINE_GL_DIST',
7702                                                 p_mode       => 'SINGLE',
7703                                                 p_key_value  => v_gl_dist_id);
7704 
7705                 -- code for mrc ends here -- bug # 3326394
7706 
7707                 v_sql_num := 25;
7708 
7709               ELSE
7710                 /*  v_gl_posted_date will not be null when the execution comes here */
7711 
7712                 raise Item_lines_already_accounted;
7713 
7714               END IF; --v_gl_posted_date is null
7715               /* Modified by Ramananda for bug#4468353 due to sla uptake by AR, end */
7716 
7717 
7718             ELSE
7719 
7720               UPDATE RA_CUSTOMER_TRX_LINES_ALL
7721                  SET EXTENDED_AMOUNT   = TEMP_REC.EXTENDED_AMOUNT,
7722                      LAST_UPDATE_DATE  = TEMP_REC.LAST_UPDATE_DATE,
7723                      LAST_UPDATED_BY   = TEMP_REC.LAST_UPDATED_BY,
7724                      CREATION_DATE     = TEMP_REC.CREATION_DATE,
7725                      CREATED_BY        = TEMP_REC.CREATED_BY,
7726                      LAST_UPDATE_LOGIN = TEMP_REC.LAST_UPDATE_LOGIN
7727                WHERE CUSTOMER_TRX_LINE_ID = TEMP_REC.CUSTOMER_TRX_LINE_ID;
7728 
7729               v_sql_num := 26;
7730 
7731               UPDATE RA_CUST_TRX_LINE_GL_DIST_ALL
7732                  SET ACCTD_AMOUNT      = TEMP_REC.ACCTD_AMOUNT,
7733                      AMOUNT            = TEMP_REC.EXTENDED_AMOUNT,
7734                      LAST_UPDATE_DATE  = TEMP_REC.LAST_UPDATE_DATE,
7735                      LAST_UPDATED_BY   = TEMP_REC.LAST_UPDATED_BY,
7736                      CREATION_DATE     = TEMP_REC.CREATION_DATE,
7737                      CREATED_BY        = TEMP_REC.CREATED_BY,
7738                      LAST_UPDATE_LOGIN = TEMP_REC.LAST_UPDATE_LOGIN
7739                WHERE CUSTOMER_TRX_LINE_ID = TEMP_REC.CUSTOMER_TRX_LINE_ID;
7740 
7741               v_sql_num := 27;
7742 
7743             END IF;
7744 
7745             IF TEMP_REC.LINE_TYPE = 'TAX' THEN
7746               v_tax_amount := nvl(v_tax_amount, 0) +
7747                               nvl(TEMP_REC.EXTENDED_AMOUNT, 0);
7748 
7749             ELSIF TEMP_REC.LINE_TYPE = 'FREIGHT' THEN
7750               v_freight_amount := nvl(v_freight_amount, 0) +
7751                                   nvl(TEMP_REC.EXTENDED_AMOUNT, 0);
7752 
7753             END IF;
7754 
7755 
7756             v_receivable_amount       := nvl(v_receivable_amount, 0) +
7757                                          nvl(TEMP_REC.EXTENDED_AMOUNT, 0);
7758             v_receivable_acctd_amount := nvl(v_receivable_acctd_amount, 0) +
7759                                          nvl(TEMP_REC.ACCTD_AMOUNT, 0);
7760 
7761           END IF; -- 8476512  IF nvl(ln_tax_line_exists,0) <> 1 THEN
7762         END LOOP;
7763 
7764 
7765         v_sql_num := 28;
7766 
7767         Select SUM(amount), SUM(acctd_amount)
7768           into v_old_amount, v_old_acctd_amount
7769           From RA_CUST_TRX_LINE_GL_DIST_ALL
7770          Where customer_trx_id = pn_customer_trx_id
7771            AND ACCOUNT_CLASS = lv_acc_class_rev;
7772         v_sql_num := 29;
7773 
7774         Select SUM(amount)
7775           INTO v_tax_amt
7776           From RA_CUST_TRX_LINE_GL_DIST_ALL
7777          Where customer_trx_id = pn_customer_trx_id
7778            AND ACCOUNT_CLASS IN (lv_tax_const, lv_freight_acc_class);
7779         v_sql_num := 30;
7780 
7781         UPDATE RA_CUST_TRX_LINE_GL_DIST_ALL
7782            SET AMOUNT       = NVL(v_old_amount, 0) + NVL(v_tax_amt, 0),
7783                ACCTD_AMOUNT = NVL(v_old_acctd_amount, 0) + NVL(v_tax_amt, 0)
7784          WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
7785            AND ACCOUNT_CLASS = lv_acc_class_rec;
7786 
7787 
7788 
7789         open c_gl_dist_cur;
7790         fetch c_gl_dist_cur into v_gl_dist_id;
7791         close c_gl_dist_cur;
7792 
7793         ar_mrc_engine.maintain_mrc_data(p_event_mode => 'UPDATE',
7794                                         p_table_name => 'RA_CUST_TRX_LINE_GL_DIST',
7795                                         p_mode       => 'SINGLE',
7796                                         p_key_value  => v_gl_dist_id);
7797 
7798         v_amt_a := NVL(v_old_amount, 0) + NVL(v_tax_amt, 0);
7799 
7800         v_sql_num := 31;
7801 
7802         If v_prev_customer_trx_id is null then
7803 
7804           v_sql_num := 32;
7805 
7806           Update Ar_Payment_Schedules_All
7807              Set Tax_Original               = NVL(Tax_Original, 0) +
7808                                               NVL(v_tax_amount, 0),
7809                  Tax_remaining              = NVL(Tax_remaining, 0) +
7810                                               NVL(v_tax_amount, 0),
7811                  Freight_Original           = NVL(Freight_Original, 0) +
7812                                               NVL(v_freight_amount, 0),
7813                  Freight_remaining          = NVL(Freight_remaining, 0) +
7814                                               NVL(v_freight_amount, 0),
7815                  Amount_Due_Original        = NVL(Amount_Due_Original, 0) +
7816                                               NVL(v_receivable_amount, 0),
7817                  Amount_Due_remaining       = NVL(Amount_Due_remaining, 0) +
7818                                               NVL(v_receivable_amount, 0),
7819                  Acctd_amount_due_remaining = NVL(Acctd_amount_due_remaining,
7820                                                   0) + NVL(v_receivable_acctd_amount,
7821                                                            0)
7822            Where Customer_Trx_ID = pn_customer_trx_id
7823              And Payment_Schedule_ID = v_payment_schedule_id;
7824 
7825 
7826           fnd_file.put_line(FND_FILE.LOG,
7827                             'TAX ORIGINAL 1.......' || v_trx_num || 'is   ' ||
7828                             NVL(v_tax_amount, -111));
7829           fnd_file.put_line(FND_FILE.LOG,
7830                             'TAX --|AINING 1......' || v_trx_num || 'is   ' ||
7831                             NVL(v_tax_amount, -111));
7832           fnd_file.put_line(FND_FILE.LOG,
7833                             'FREIGHT ORIGINAL 1...' || v_trx_num ||
7834                             'is      ' || NVL(v_freight_amount, -77));
7835           fnd_file.put_line(FND_FILE.LOG,
7836                             'FREIGHT --|AINING 1..' || v_trx_num ||
7837                             'is     ' || NVL(v_freight_amount, -66));
7838           fnd_file.put_line(FND_FILE.LOG,
7839                             'AMOUNT DUE --|AINING 1...' || v_trx_num ||
7840                             'is  ' || NVL(v_receivable_amount, -222));
7841           fnd_file.put_line(FND_FILE.LOG,
7842                             'AMOUNT DUE ORIGINAL 1...' || v_trx_num ||
7843                             'is   ' || NVL(v_receivable_amount, 333));
7844           fnd_file.put_line(FND_FILE.LOG,
7845                             'ACCTD AMOUNT DUE 1...' || v_trx_num ||
7846                             'is      ' ||
7847                             NVL(v_receivable_acctd_amount, 444));
7848 
7849           V_TEMP := NVL(v_old_amount, 0) + NVL(v_tax_amt, 0);
7850 
7851           fnd_file.put_line(FND_FILE.LOG,
7852                             'TAX ORIGINAL 2.......' || v_trx_num || 'is   ' ||
7853                             NVL(v_PAYMENT_amt, -111));
7854           fnd_file.put_line(FND_FILE.LOG,
7855                             'TAX --|AINING 2......' || v_trx_num || 'is   ' ||
7856                             NVL(v_PAYMENT_amt, -111));
7857           fnd_file.put_line(FND_FILE.LOG,
7858                             'FREIGHT ORIGINAL 2...' || v_trx_num ||
7859                             'is      ' || NVL(v_FREIGHT_amt, -77));
7860           fnd_file.put_line(FND_FILE.LOG,
7861                             'FREIGHT --|AINING 2...' || v_trx_num ||
7862                             'is     ' || NVL(v_FREIGHT_amt, -66));
7863           fnd_file.put_line(FND_FILE.LOG,
7864                             'AMOUNT DUE --|AINING 2...' || v_trx_num ||
7865                             'is  ' || V_TEMP);
7866           fnd_file.put_line(FND_FILE.LOG,
7867                             'AMOUNT DUE ORIGINAL 2...' || v_trx_num ||
7868                             'is   ' || V_TEMP);
7869           fnd_file.put_line(FND_FILE.LOG,
7870                             'ACCTD AMOUNT DUE 2...' || v_trx_num ||
7871                             'is      ' ||
7872                             NVL(v_receivable_acctd_amount, 444));
7873 
7874         end if; --END 22-MAR-02 FOR PROPER UPDATION
7875 
7876         v_sql_num := 33;
7877 
7878         DELETE JAI_AR_TRX_INS_LINES_T
7879          WHERE customer_trx_id = pn_customer_trx_id
7880            and link_to_cust_trx_line_id = pn_customer_trx_line_id;
7881 
7882         v_sql_num := 34;
7883 
7884         p_process_flag := SQLERRM;
7885 
7886         fnd_file.put_line(FND_FILE.LOG,
7887                           'The total tax amount for the line  is....' ||
7888                           v_tax_amt);
7889         fnd_file.put_line(FND_FILE.LOG,
7890                           'The receivable amount for the line is....' ||
7891                           v_receivable_amount);
7892         fnd_file.put_line(FND_FILE.LOG,
7893                           'Successfully Processed the Invoice... ' ||
7894                           v_trx_num);
7895         --fnd_file.put_line(FND_FILE.LOG, 'COMPLETED RUN.Processed the Invoice  Retcode = '|| retcode);
7896 
7897       EXCEPTION
7898         when others then
7899           p_process_message := SUBSTR(SQLERRM, 1, 230);
7900           ROLLBACK TO TEMP_CUR_BLK_SVP;
7901 
7902           UPDATE JAI_AR_TRX_INS_LINES_T
7903              SET ERROR_FLAG = 'R', ERR_MESG = p_process_message
7904            WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
7905              AND LINK_TO_CUST_TRX_LINE_ID = pn_customer_trx_line_id;
7906 
7907           --COMMIT; --Commented by zhiwei for open interface ER 20101116
7908 
7909           fnd_file.put_line(FND_FILE.LOG,
7910                             'Updated the customer_trx_id error_flag to ...' || 'R');
7911           fnd_file.put_line(FND_FILE.LOG,
7912                             'Unable to Process the invoice...   ' ||
7913                             v_trx_num);
7914           fnd_file.put_line(FND_FILE.LOG,
7915                             'ABORTED RUN... the err   = ' || SQLERRM);
7916           fnd_file.put_line(FND_FILE.LOG,
7917                             'ABORTED RUN... the err   = ' || SQLERRM ||
7918                             v_sql_num);
7919 
7920       END; --End Temp_Cur Block
7921 
7922     END IF; --End Main v_counter if
7923 
7924 
7925     OPEN get_ext_amt_ln('LINE'); --rchandan for bug#4428980
7926     FETCH get_ext_amt_ln INTO v_extended_amount_line;
7927     CLOSE get_ext_amt_ln;
7928 
7929     OPEN get_ext_amt_tax;
7930     LOOP
7931       FETCH get_ext_amt_tax INTO get_ext_amt_tax_rec;
7932       EXIT WHEN get_ext_amt_tax%NOTFOUND;
7933       OPEN get_taxable_amt(get_ext_amt_tax_rec.customer_trx_line_id);
7934       FETCH get_taxable_amt INTO v_taxable_amt;
7935       IF v_taxable_amt = 0 THEN
7936         UPDATE ra_customer_trx_lines_all
7937            SET Taxable_amount = (v_extended_amount_line -
7938                                 get_ext_amt_tax_rec.extended_amount)
7939          WHERE Customer_trx_line_id =
7940                get_ext_amt_tax_rec.customer_trx_line_id
7941            and customer_trx_id = pn_customer_trx_id
7942            and link_to_cust_trx_line_id = pn_customer_trx_line_id
7943            and Line_type = lv_tax_const;
7944 
7945       END IF;
7946 
7947       CLOSE get_taxable_amt;
7948     END LOOP;
7949 
7950     CLOSE get_ext_amt_tax;
7951 
7952 
7953     p_process_flag := SQLERRM;
7954     v_err_mesg := p_process_message;
7955 
7956     --Added by Bo Li for Bug9803555  on 01-JUL-2010 ,Begin
7957     --------------------------------------------------------------------------
7958     /*
7959     OPEN get_max_request_id_cur(pn_customer_trx_id, pn_customer_trx_line_id);
7960     FETCH get_max_request_id_cur
7961       INTO ln_max_req_id;
7962     CLOSE get_max_request_id_cur;
7963 
7964     IF ln_max_req_id = fnd_global.conc_request_id THEN
7965       COMMIT;
7966     ELSE
7967       ROLLBACK;
7968 
7969     End IF;
7970     */
7971     --------------------------------------------------------------------------
7972     --Added by Bo Li for Bug9803555  on 01-JUL-2010 ,End
7973 
7974 
7975     fnd_file.put_line(FND_FILE.LOG,'COMPLETED RUN.Processed the invoice   = ' || v_trx_num);
7976 
7977   EXCEPTION
7978 
7979     when Localization_tax_not_defined then
7980       fnd_file.put_line(FND_FILE.LOG,
7981                         ' ''Localization'' Tax not defined or is end-dated. Please ensure that a valid ''Localization'' Tax exists and is not enddated ');
7982       p_process_message := ' ''Localization'' Tax not defined or is end-dated. Please ensure that a valid ''Localization'' Tax exists and is not enddated ';
7983       p_process_flag    := 2;
7984 
7985     WHEN OTHERS THEN
7986 
7987       p_process_message := SUBSTR(SQLERRM, 1, 230);
7988       UPDATE JAI_AR_TRX_INS_LINES_T
7989          SET ERROR_FLAG = 'R', ERR_MESG = p_process_message
7990        WHERE CUSTOMER_TRX_ID = pn_customer_trx_id
7991          AND LINK_TO_CUST_TRX_LINE_ID = pn_customer_trx_line_id;
7992 
7993       --COMMIT;--Commented by zhiwei for open interface ER 20101116
7994 
7995       fnd_file.put_line(FND_FILE.LOG,
7996                         'ABORTED RUN... the invoice   = ' || v_trx_num);
7997       fnd_file.put_line(FND_FILE.LOG,
7998                         'ABORTED RUN... the err   = ' || SQLERRM);
7999       fnd_file.put_line(FND_FILE.LOG,
8000                         'Main Block.... the err   = ' || SQLERRM);
8001       fnd_file.put_line(FND_FILE.LOG,
8002                         'Please Contact the System Administrator Or Oracle Software Support Services...');
8003 
8004   END process_trx_dis_bal_lines;
8005 
8006 
8007 
8008 
8009 
8010 
8011   /*
8012   || process ar accounting,update reposotory,account inclusive tax.
8013   */
8014   PROCEDURE process_ar_updating_lines(
8015      pn_interface_line_id  IN  JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE,
8016      ov_return_code        OUT NOCOPY VARCHAR2,
8017      ov_return_message     OUT NOCOPY VARCHAR2
8018   )
8019   IS
8020 
8021     --VARIABLE DEFINITION AS BELOW
8022     lv_return_code           VARCHAR2(100);
8023     lv_return_mess           VARCHAR2(2000);
8024     ln_customer_trx_id       JAI_AR_TRXS.CUSTOMER_TRX_ID%TYPE;
8025     ln_interface_line_id     JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE;
8026     ln_customer_trx_line_id  JAI_AR_TRX_LINES.CUSTOMER_TRX_LINE_ID%TYPE;
8027     lv_taxable_event    JAI_INTERFACE_LINES_ALL.TAXABLE_EVENT%TYPE;
8028 
8029     --CURSOR DEFINITION AS BELOW
8030     CURSOR get_interface_line_cur
8031     IS
8032     SELECT INTERFACE_LINE_ID,
8033            INTERNAL_TRX_ID,
8034            INTERNAL_TRX_LINE_ID,
8035            TAXABLE_EVENT,
8036            VAT_INVOICE_NO,
8037            EXCISE_INVOICE_NO,
8038            TAX_CATEGORY_ID
8039     FROM   JAI_INTERFACE_LINES_ALL
8040     WHERE  INTERFACE_LINE_ID = pn_interface_line_id;
8041 
8042     CURSOR get_vat_tax_exists_cur IS
8043     SELECT 'Y'
8044       FROM dual
8045      WHERE EXISTS (SELECT 1
8046                      FROM jai_cmn_taxes_all           jcta,
8047                           jai_interface_tax_lines_all jitla,
8048                           jai_interface_lines_all     jila
8049                     WHERE jitla.tax_id = jcta.tax_id
8050                       AND jila.interface_line_id = jitla.interface_line_id
8051                       --AND jila.interface_line_id = pn_interface_line_id --Commented by zhiwei for Bug#12564566 on 20110523
8052                       --Added by zhiwei for bug#12564566 begin
8053                       ----------------------------------------------
8054                       AND jila.interface_line_id in
8055                       (
8056                           select interface_line_id
8057                           from   jai_interface_lines_all
8058                           where  internal_trx_id = ln_customer_trx_id
8059                       )
8060                       ----------------------------------------------
8061                       --Added by zhiwei for bug#12564566 end
8062                       AND upper(jcta.tax_type) IN
8063                          (SELECT jrr.attribute_code
8064                             FROM jai_rgm_registrations jrr
8065                            WHERE jrr.registration_type = jai_constants.regn_type_tax_types
8066                              AND jrr.regime_id = (SELECT jrd.regime_id
8067                                                     FROM jai_rgm_definitions jrd
8068                                                    WHERE jrd.regime_code = jai_constants.vat_regime)));
8069 
8070     CURSOR get_excise_tax_exists_cur IS
8071     SELECT 'Y'
8072       FROM dual
8073      WHERE EXISTS (SELECT 1
8074                      FROM jai_cmn_taxes_all           jcta,
8075                           jai_interface_tax_lines_all jitla,
8076                           jai_interface_lines_all     jila
8077                     WHERE jitla.tax_id = jcta.tax_id
8078                       AND jila.interface_line_id = jitla.interface_line_id
8079                       --AND jila.interface_line_id = pn_interface_line_id--Commented by zhiwei for Bug#12564566 on 20110523
8080                       --Added by zhiwei for bug#12564566 begin
8081                       ----------------------------------------------
8082                       AND jila.interface_line_id in
8083                       (
8084                           select interface_line_id
8085                           from   jai_interface_lines_all
8086                           where  internal_trx_id = ln_customer_trx_id
8087                       )
8088                       ----------------------------------------------
8089                       --Added by zhiwei for bug#12564566 end
8090                       AND upper(jcta.tax_type) IN ('EXCISE', 'EXCISE_EDUCATION_CESS', 'EXCISE_SH_EDU_CESS'));
8091 
8092     --Added by zhiwei for bug#12564566 begin
8093     --------------------------------------------
8094     CURSOR get_trx_vat_no_cur
8095     IS
8096     SELECT
8097            distinct(VAT_INVOICE_NO)
8098     FROM   JAI_INTERFACE_LINES_ALL
8099     WHERE  internal_trx_id = ln_customer_trx_id
8100     and    nvl(VAT_INVOICE_NO,'###')<> '###';
8101 
8102     CURSOR get_trx_excise_no_cur
8103     IS
8104     SELECT
8105            distinct(EXCISE_INVOICE_NO)
8106     FROM   JAI_INTERFACE_LINES_ALL
8107     WHERE  internal_trx_id = ln_customer_trx_id
8108     and    nvl(EXCISE_INVOICE_NO,'###')<> '###';
8109     --------------------------------------------
8110     --Added by zhiwei for bug#12564566 end
8111 
8112 
8113     --VARIABLE DEFINITION
8114     ln_sum_tax_amount         JAI_AR_TRX_TAX_LINES.TAX_AMOUNT%TYPE;
8115     ln_vat_invoice_no         JAI_INTERFACE_LINES_ALL.VAT_INVOICE_NO%TYPE;
8116     ln_excise_invoice_no      JAI_INTERFACE_LINES_ALL.EXCISE_INVOICE_NO%TYPE;
8117     rec_interface_line        get_interface_line_cur%ROWTYPE;
8118 
8119     ln_tax_category_id        JAI_INTERFACE_LINES_ALL.TAX_CATEGORY_ID%TYPE;
8120 
8121     ln_vat_assessable_value    NUMBER;
8122     ln_excise_assessable_value NUMBER;
8123 
8124     lv_vat_tax_exists VARCHAR2(1);
8125     lv_excise_tax_exists VARCHAR2(1);
8126 
8127     le_exception    EXCEPTION;
8128     ln_phase        NUMBER;
8129 
8130     /*Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952 Begin*/
8131     CURSOR get_service_tax_exists_cur IS
8132     SELECT 'Y'
8133       FROM dual
8134      WHERE EXISTS (SELECT 1
8135                      FROM jai_cmn_taxes_all           jcta,
8136                           jai_interface_tax_lines_all jitla,
8137                           jai_interface_lines_all     jila
8138                     WHERE jitla.tax_id = jcta.tax_id
8139                       AND jila.interface_line_id = jitla.interface_line_id
8140                       AND jila.interface_line_id in
8141                       (
8142                           select interface_line_id
8143                           from   jai_interface_lines_all
8144                           where  internal_trx_id = ln_customer_trx_id
8145                       )
8146                       AND upper(jcta.tax_type) IN
8147                          (SELECT upper(jrr.attribute_code)
8148                             FROM jai_rgm_registrations jrr
8149                            WHERE jrr.registration_type = jai_constants.regn_type_tax_types
8150                              AND jrr.regime_id = (SELECT jrd.regime_id
8151                                                     FROM jai_rgm_definitions jrd
8152                                                    WHERE jrd.regime_code = jai_constants.service_regime)));
8153     CURSOR get_trx_st_no_cur
8154     IS
8155     SELECT
8156            DISTINCT(st_inv_number)
8157     FROM   JAI_INTERFACE_LINES_ALL
8158     WHERE  internal_trx_id = ln_customer_trx_id
8159     AND    nvl(st_inv_number,'###')<> '###';
8160 
8161     lv_st_invoice_num         jai_interface_lines_all.ST_INV_NUMBER%TYPE;
8162     lv_st_tax_exists VARCHAR2(1);
8163     --Added by Qinglei for the Advanced Receipt for Service Tax enhancement Bug 13361952
8164 
8165     --PROGRAM BLOCK BEGIN
8166     BEGIN
8167 
8168        ln_phase := 90.1;
8169 
8170        OPEN get_interface_line_cur;
8171        FETCH get_interface_line_cur INTO rec_interface_line;
8172        CLOSE get_interface_line_cur;
8173 
8174        ln_customer_trx_id      := rec_interface_line.internal_trx_id;
8175        ln_customer_trx_line_id := rec_interface_line.internal_trx_line_id;
8176        ln_interface_line_id    := pn_interface_line_id;
8177        lv_taxable_event        := rec_interface_line.taxable_event;
8178        ln_vat_invoice_no       := rec_interface_line.vat_invoice_no;
8179        ln_excise_invoice_no    := rec_interface_line.excise_invoice_no;
8180 
8181        ln_tax_category_id      := rec_interface_line.tax_category_id;
8182 
8183        ln_phase := 90.2;
8184 
8185        SELECT SUM(TAX_AMOUNT) INTO ln_sum_tax_amount
8186        FROM   JAI_AR_TRX_TAX_LINES
8187        WHERE  LINK_TO_CUST_TRX_LINE_ID = ln_customer_trx_line_id;
8188 
8189        ln_phase := 90.3;
8190 
8191        --IF EXTERNAL NEED UPDATE INVOICE NO TO TRX
8192        IF(lv_taxable_event = GV_TAXABLE_EVENT_EXTERNAL)THEN
8193 
8194 
8195           --Added by zhiwei for bug#12564566 begin
8196           ------------------------------------------------------------------------------------------
8197           open get_trx_vat_no_cur;
8198           fetch get_trx_vat_no_cur into ln_vat_invoice_no;
8199           close get_trx_vat_no_cur;
8200 
8201           open get_trx_excise_no_cur;
8202           fetch get_trx_excise_no_cur into ln_excise_invoice_no;
8203           close get_trx_excise_no_cur;
8204           ------------------------------------------------------------------------------------------
8205           --Added by zhiwei for bug#12564566 end
8206 
8207 
8208 
8209           OPEN get_vat_tax_exists_cur;
8210           FETCH get_vat_tax_exists_cur INTO lv_vat_tax_exists;
8211           CLOSE get_vat_tax_exists_cur;
8212 
8213           OPEN get_excise_tax_exists_cur;
8214           FETCH get_excise_tax_exists_cur INTO lv_excise_tax_exists;
8215           CLOSE get_excise_tax_exists_cur;
8216 
8217           -----------------------------------------------------------------------
8218           --Added by qinglei 26-Oct-2011 E/R Service Tax on Advance Receipt begin
8219           OPEN get_trx_st_no_cur;
8220           FETCH get_trx_st_no_cur INTO lv_st_invoice_num;
8221           CLOSE get_trx_st_no_cur;
8222 
8223           OPEN get_service_tax_exists_cur;
8224           FETCH get_service_tax_exists_cur INTO lv_st_tax_exists;
8225           CLOSE get_service_tax_exists_cur;
8226 
8227           IF nvl(lv_st_tax_exists,'N') = 'N' THEN
8228             lv_st_invoice_num := NULL;
8229           ELSE
8230             UPDATE jai_ar_trxs
8231             SET
8232                    st_inv_number = lv_st_invoice_num
8233             WHERE customer_trx_id = ln_customer_trx_id;
8234           END IF;
8235           --Added by qinglei 26-Oct-2011 E/R Service Tax on Advance Receipt end
8236           -----------------------------------------------------------------------
8237 
8238           --IF there is no vat/excise tax, vat/excise no will leave null, and will not pass to AR/AP.
8239           IF nvl(lv_vat_tax_exists, 'N') = 'N' THEN
8240              ln_vat_invoice_no := NULL;
8241           --Added by zhiwei for bug#12564566 begin
8242           ------------------------------------------------
8243           ELSE
8244              UPDATE JAI_AR_TRXS
8245              SET
8246                     VAT_INVOICE_NO   = ln_vat_invoice_no
8247              WHERE  CUSTOMER_TRX_ID = ln_customer_trx_id;
8248           ------------------------------------------------
8249           --Added by zhiwei for bug#12564566 end
8250           END IF;
8251 
8252           IF nvl(lv_excise_tax_exists, 'N') = 'N' THEN
8253              ln_excise_invoice_no := NULL;
8254           --Added by zhiwei for bug#12564566 begin
8255           ------------------------------------------------
8256           ELSE
8257              UPDATE JAI_AR_TRX_LINES
8258              SET
8259                    EXCISE_INVOICE_NO = ln_excise_invoice_no
8260              WHERE  CUSTOMER_TRX_ID      = ln_customer_trx_id;
8261           ------------------------------------------------
8262           --Added by zhiwei for bug#12564566 end
8263           END IF;
8264 
8265 
8266           /*--Commented by zhiwei for bug#12564566 begin
8267           UPDATE JAI_AR_TRXS
8268           SET
8269                  VAT_INVOICE_NO   = ln_vat_invoice_no
8270           WHERE  CUSTOMER_TRX_ID = ln_customer_trx_id;
8271           */--Commented by zhiwei for bug#12564566 end
8272 
8273           ln_phase := 90.4;
8274 
8275 
8276           UPDATE JAI_AR_TRX_LINES
8277           SET    TAX_AMOUNT        = ln_sum_tax_amount,
8278                  TOTAL_AMOUNT      = LINE_AMOUNT + ln_sum_tax_amount,
8279                  INTERFACE_FLAG    = 'Y',
8280                  INTERFACE_EVENT   = GV_TAXABLE_EVENT_EXTERNAL,--Added by zhiwei for Bug#12537533 on 20110510
8281                  --EXCISE_INVOICE_NO = ln_excise_invoice_no,   --Commented by zhiwei for bug#12564566
8282                  tax_category_id   = ln_tax_category_id
8283           WHERE  CUSTOMER_TRX_ID      = ln_customer_trx_id
8284           AND    CUSTOMER_TRX_LINE_ID = ln_customer_trx_line_id;
8285 
8286           ln_phase := 90.5;
8287 
8288        ELSE
8289 
8290           ln_phase := 90.6;
8291 
8292           UPDATE JAI_AR_TRX_LINES
8293           SET    TAX_AMOUNT     = ln_sum_tax_amount,
8294                  TOTAL_AMOUNT   = LINE_AMOUNT + ln_sum_tax_amount,
8295                  INTERFACE_FLAG = 'Y',
8296                  INTERFACE_EVENT   = GV_TAXABLE_EVENT_STANDALONE,--Added by zhiwei for Bug#12537533 on 20110510
8297                  tax_category_id   = ln_tax_category_id
8298           WHERE  CUSTOMER_TRX_ID      = ln_customer_trx_id
8299           AND    CUSTOMER_TRX_LINE_ID = ln_customer_trx_line_id;
8300 
8301           ln_phase := 90.7;
8302        END IF;
8303 
8304        --AFTER UPDATE TAXAMOUNT AND TOTALAMOUNT OF JAI_AR_TRX_LINES ,
8305        --TRIGGER JAI_JAR_TL_ARIUD_T1 WILL BE INVOKED, IF  OPEN_INTF_SOURCE = 'OPENINTF' THEN RETURN, SO THE TRIGGER WILL DO NOTHING FOR OPEN INTERFACE
8306        --
8307        --THE PROCEDURE insert_line_t WILL BE FIRED TO POPULATE DATA INTO TABLE JAI_AR_TRX_INS_LINES_T
8308        --DETAILS REFER TO IN JAI_JAR_TL_TRIGGER_PKG.ARU_T1
8309        --
8310 
8311        ln_phase := 90.8;
8312 
8313        populate_temp_table(
8314 
8315                           pn_interface_line_id    => pn_interface_line_id,
8316                           pn_customer_trx_id      => ln_customer_trx_id,
8317                           pn_customer_trx_line_id => ln_customer_trx_line_id,
8318                           pv_return_code          => lv_return_code,
8319                           pv_return_message       => lv_return_mess
8320                           );
8321        IF(lv_return_code <> jai_constants.successful)THEN
8322            ov_return_code    := lv_return_code;
8323            ov_return_message := lv_return_mess ;
8324 
8325            --pv_process_flag := lv_return_code;
8326            --pv_proeess_mess := lv_return_mess;
8327            RETURN;
8328        END IF;
8329 
8330        ln_phase := 90.9;
8331 
8332 
8333        --Get logic from concurrent 'AR TAX FREIGHT DEFAULTATION'
8334        process_trx_dis_bal_lines(
8335                                 pv_type                   => 'OPAPI',
8336                                 pv_event                  => lv_taxable_event,
8337                                 pn_customer_trx_id        => ln_customer_trx_id,
8338                                 pn_customer_trx_line_id   => ln_customer_trx_line_id,
8339                                 pn_interface_line_id      => ln_interface_line_id,
8340                                 p_process_flag            => lv_return_code,
8341                                 p_process_message         => lv_return_mess);
8342        IF(lv_return_code = jai_constants.expected_error)THEN
8343            ov_return_code    := lv_return_code;
8344            ov_return_message := lv_return_mess ;
8345 
8346            --pv_process_flag := lv_return_code;
8347            --pv_proeess_mess := lv_return_mess;
8348            RETURN;
8349        END IF;
8350 
8351        ln_phase := 91;
8352 
8353 
8354        /*
8355        after process above , RA_CUSTOMER_TRX_LINES_ALL LINES FOR 'TAX' HAVE BEEN POPULATE.
8356                              RA_CUST_TRX_GL_DIS_ALL    LINES FOR 'TAX' HAVE BEEN POPULATE.
8357                              BALANCE  HAVE BEEN UPDATED.
8358                              TOTAL AMOUNT AND TAX AMOUNT OF JAI_AR_TRX_LINES HAVE BEEN UPDATED.
8359                              THE REST LOGIC IS MAINLY INCLUDE INVOICE GENERATION
8360                                                               INSERT REPOSITORY
8361                                                               INCLUSIVE TAX ACCOUNTING
8362                                                               UPDATE INVOICE NO TO TRSANCTIOIN TABLE
8363        */
8364 
8365        --
8366        /*
8367        update ra_customer_trx_all
8368        set complete_flag = 'Y'
8369        where customer_trx_id = ln_customer_trx_id;
8370          */
8371 
8372 
8373 
8374     EXCEPTION
8375         WHEN OTHERS THEN
8376            lv_return_mess := 'PROCESSING Exception with SQLERR '||SUBSTR(SQLERRM,1,230) ||' in PROCESS_AR_UPDATING_LINES With interface_line_id:'||pn_interface_line_id||', at POS:'||ln_phase;
8377            ov_return_code    := jai_constants.unexpected_error;
8378            ov_return_message := lv_return_mess ;
8379 
8380            RETURN;
8381 
8382 
8383 
8384   END process_ar_updating_lines;
8385 
8386 
8387 
8388 
8389   /*
8390   || process ar accounting,update reposotory,account inclusive tax.
8391   */
8392   PROCEDURE process_ar_accounting_lines(
8393      pn_trx_id             IN  JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE,
8394      ov_return_code        OUT NOCOPY VARCHAR2,
8395      ov_return_message     OUT NOCOPY VARCHAR2
8396   )
8397   IS
8398     CURSOR get_taxable_event_cur IS
8399     SELECT DISTINCT(taxable_event)
8400       FROM jai_interface_lines_all
8401      WHERE internal_trx_id = pn_trx_id;
8402 
8403     --VARIABLE DEFINITION AS BELOW
8404     lv_return_code           VARCHAR2(100);
8405     lv_return_message           VARCHAR2(2000);
8406     ln_customer_trx_id       JAI_AR_TRXS.CUSTOMER_TRX_ID%TYPE;
8407     ln_interface_line_id     JAI_INTERFACE_LINES_ALL.INTERFACE_LINE_ID%TYPE;
8408     ln_customer_trx_line_id  JAI_AR_TRX_LINES.CUSTOMER_TRX_LINE_ID%TYPE;
8409     lv_taxable_event    JAI_INTERFACE_LINES_ALL.TAXABLE_EVENT%TYPE;
8410 
8411 
8412     ln_phase        NUMBER;
8413     le_exception    EXCEPTION;
8414     --PROGRAM BLOCK BEGIN
8415     BEGIN
8416 
8417 
8418 
8419         ln_phase := 110.1;
8420         --ARU_T1
8421         ------------------------------------------------------------------------------------
8422         fire_aru_t1(
8423                    pn_customer_trx_id => pn_trx_id,
8424                    ov_return_code     => lv_return_code,
8425                    ov_return_message  => lv_return_message
8426         );
8427         IF(lv_return_code <> jai_constants.successful)THEN
8428             ov_return_code    := lv_return_code   ;
8429             ov_return_message := lv_return_message;
8430             RETURN;
8431         END IF;
8432 
8433         ln_phase := 110.2;
8434 
8435         --ARU_T3
8436         -------------------------------------------------------------------------------
8437         fire_aru_t3(
8438                    pn_customer_trx_id => pn_trx_id,
8439                    ov_return_code     => lv_return_code,
8440                    ov_return_message  => lv_return_message
8441         );
8442         IF(lv_return_code <> jai_constants.successful)THEN
8443             ov_return_code    := lv_return_code   ;
8444             ov_return_message := lv_return_message;
8445             RETURN;
8446         END IF;
8447 
8448         ln_phase := 110.3;
8449         --ARU_T4
8450         ------------------------------------------------------------------------------------
8451         fire_aru_t4(
8452                    pn_customer_trx_id => pn_trx_id,
8453                    ov_return_code     => lv_return_code,
8454                    ov_return_message  => lv_return_message
8455         );
8456 
8457         IF(lv_return_code <> jai_constants.successful)THEN
8458            ov_return_code    := lv_return_code   ;
8459            ov_return_message := lv_return_message;
8460            RETURN;
8461         END IF;
8462 
8463         ln_phase := 110.4;
8464         --ARU_T4
8465         -------------------------------------------------------------------------------
8466         fire_aru_t7(
8467                    pn_customer_trx_id => pn_trx_id,
8468                    ov_return_code     => lv_return_code,
8469                    ov_return_message  => lv_return_message
8470         );
8471         IF(lv_return_code <> jai_constants.successful)THEN
8472            ov_return_code    := lv_return_code   ;
8473            ov_return_message := lv_return_message;
8474            RETURN;
8475         END IF;
8476         ln_phase := 110.5;
8477         --acc_inclusive_tax
8478         -------------------------------------------------------------------------
8479         OPEN get_taxable_event_cur;
8480         FETCH get_taxable_event_cur INTO lv_taxable_event;
8481         CLOSE get_taxable_event_cur;
8482 
8483         /*--Add if condition by Xiao for bug#11903425
8484         --For AR, only standard event will generate accounting for inclusive tax.
8485         IF nvl(upper(lv_taxable_event), GV_TAXABLE_EVENT_EXTERNAL) = GV_TAXABLE_EVENT_STANDALONE THEN */
8486         --Above IF condition Commented by zhiwei for POT change Bug#13023443 on 20110929
8487         --For External Service Tax , if GL < POT ,need to insert gl_interface also. so comments if condition
8488         -- and add code determination in jai_ar_match_tax_pkg.acc_inclusive_tax.
8489           acc_inclusive_tax(
8490                      pn_customer_trx_id => pn_trx_id,
8491                      ov_return_code     => lv_return_code,
8492                      ov_return_message  => lv_return_message
8493           );
8494           IF(lv_return_code <> jai_constants.successful)THEN
8495               ov_return_code    := lv_return_code   ;
8496               ov_return_message := lv_return_message;
8497               RETURN;
8498           END IF;
8499         --END IF;--Commented by zhiwei for POT change Bug#13023443 on 20110929
8500         ln_phase := 110.6;
8501        --update reference field
8502        -----------------------------------------------------------------------
8503        update_ar_reference(
8504                    ov_retcode => lv_return_code,
8505                    ov_errbuf  => lv_return_message,
8506                    pn_customer_trx_id => pn_trx_id);
8507 
8508        IF(lv_return_code <> jai_constants.successful)THEN
8509           ov_return_code    := lv_return_code   ;
8510           ov_return_message := lv_return_message;
8511           RETURN;
8512        END IF;
8513        ln_phase := 110.7;
8514 
8515        --update register balance.
8516        -----------------------------------------------------------------------
8517        fire_jai_aru_t1(
8518                    pn_customer_trx_id => pn_trx_id,
8519                    ov_return_code     => lv_return_code,
8520                    ov_return_message  => lv_return_message
8521         );
8522 
8523     EXCEPTION
8524         WHEN OTHERS THEN
8525            lv_return_message := 'PROCESSING Exception with SQLERR: '||SUBSTR(SQLERRM,1,230) ||' in PROCESS_AR_ACCOUNTING_LINES With internal_trx_id :'||pn_trx_id||', at POS:'||ln_phase;
8526            ov_return_code    := jai_constants.unexpected_error;
8527            ov_return_message := lv_return_message ;
8528 
8529            RETURN;
8530 
8531 
8532 
8533   END process_ar_accounting_lines;
8534 
8535 
8536 --==========================================================================
8537 --  PROCEDURE NAME:
8538 --
8539 --    ja_in_calc_prec_taxes               Public
8540 --
8541 --  DESCRIPTION:
8542 --
8543 --      This procedure calculates taxes based on existing tax calculation logic
8544 --      for each AR/AP lines, and will populate func_tax_amount, base_tax_amount,
8545 --      tax_amount to AR/AP tax lines.
8546 --
8547 --  PARAMETERS:
8548 --      In:  transaction_name        VARCHAR2,
8549 --           p_header_id             NUMBER,
8550 --           p_line_id               NUMBER,
8551 --           p_assessable_value      NUMBER
8552 --           p_tax_amount            IN OUT NOCOPY NUMBER,
8553 --           p_inventory_item_id     NUMBER,
8554 --           p_line_quantity         NUMBER,
8555 --           p_uom_code              VARCHAR2,
8556 --           p_vendor_id             NUMBER,
8557 --           p_currency              VARCHAR2,
8558 --           p_currency_conv_factor  NUMBER,
8559 --           p_creation_date         DATE,
8560 --           p_created_by            NUMBER,
8561 --           p_last_update_date      DATE,
8562 --           p_last_updated_by       NUMBER,
8563 --           p_last_update_login     NUMBER,
8564 --           p_operation_flag        NUMBER DEFAULT NULL ,
8565 --           p_vat_assessable_value  NUMBER DEFAULT 0
8566 --
8567 --
8568 --     Out:
8569 --
8570 --
8571 --  DESIGN REFERENCES:
8572 --     AR/AP API Technical Design 1.0.doc
8573 --
8574 --  CHANGE HISTORY:
8575 --
8576 --  1. 16-Dec-2010   Xiao Lv    Created for bug#11683927,
8577 --                              A dummy bug for tracking the er of Open Interface.
8578 --  2. 24-Mar-2011   Xiao Lv    For bug#11903425,
8579 --                              Enhanced function of tax category preview for Open Interface ER.
8580 --
8581 --===========================================================================
8582 
8583 
8584 PROCEDURE ja_in_calc_prec_taxes(
8585         transaction_name        VARCHAR2,
8586         p_header_id             NUMBER,
8587         p_line_id               NUMBER,
8588         p_assessable_value      NUMBER DEFAULT 0,
8589         p_tax_amount            IN OUT NOCOPY NUMBER,
8590         p_inventory_item_id     NUMBER,
8591         p_line_quantity         NUMBER,
8592         p_uom_code              VARCHAR2,
8593         p_vendor_id             NUMBER,
8594         p_currency              VARCHAR2,
8595         p_currency_conv_factor  NUMBER,
8596         p_creation_date         DATE,
8597         p_created_by            NUMBER,
8598         p_last_update_date      DATE,
8599         p_last_updated_by       NUMBER,
8600         p_last_update_login     NUMBER,
8601         p_operation_flag        NUMBER DEFAULT NULL , -- for CRM this is used to hold aso_shipments.shipment_id
8602         p_vat_assessable_value  NUMBER DEFAULT 0
8603         /** bgowrava for forward porting bug#5631784,Following parameters are added for TCS enh.*/
8604       , p_thhold_cat_base_tax_typ JAI_CMN_TAXES_ALL.tax_type%TYPE DEFAULT NULL  -- tax type to be considered as base when calculating threshold taxes
8605       , p_threshold_tax_cat_id    JAI_AP_TDS_THHOLD_TAXES.tax_category_id%TYPE DEFAULT NULL
8606       , p_source_trx_type         jai_cmn_document_taxes.source_doc_type%TYPE DEFAULT NULL
8607       , p_source_table_name       jai_cmn_document_taxes.source_table_name%TYPE DEFAULT NULL
8608       , p_action                 VARCHAR2   DEFAULT  NULL
8609         /** End bug 5631784 */
8610       , pv_retroprice_changed     IN VARCHAR2 DEFAULT 'N' --Added by Kevin Cheng for Retroactive Price 2008/01/13
8611       , p_modified_by_agent_flag  po_requisition_lines_all.modified_by_agent_flag%TYPE DEFAULT NULL /*Added for Bug 8241905*/
8612       , p_parent_req_line_id      po_requisition_lines_all.parent_req_line_id%TYPE DEFAULT NULL /*Added for Bug 8241905*/
8613       , p_max_tax_line            NUMBER DEFAULT 0 /*Added for Bug 8371741*/
8614       , p_max_rgm_tax_line        NUMBER DEFAULT 0 /*Added for Bug 8371741*/
8615 ) IS
8616     --TYPE num_tab IS TABLE OF NUMBER(30,3) INDEX BY BINARY_INTEGER; -- sriram - bug # 2812781 was 14 eaerler changed to 30
8617     --TYPE tax_amt_num_tab IS TABLE OF NUMBER(30,3) INDEX BY BINARY_INTEGER; -- sriram - bug # 2812781 was 14 eaerler changed to 30
8618 
8619 
8620 -- Date 02/11/2006 Bug 5228046 added by SACSETHI
8621 
8622       TYPE num_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8623       TYPE tax_amt_num_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8624       TYPE tax_adhoc_flag_tab  IS TABLE OF VARCHAR2(2) INDEX BY BINARY_INTEGER; /* rchandan bug#6030615 */
8625 
8626 
8627 
8628       TYPE char_tab IS TABLE OF  VARCHAR2(10)
8629       INDEX BY BINARY_INTEGER;
8630 
8631       lt_adhoc_tax_tab          CHAR_TAB;
8632       lt_inclusive_tax_tab      CHAR_TAB;
8633       ln_exclusive_price        NUMBER;
8634       lt_tax_rate_per_rupee     NUM_TAB;
8635       lt_cumul_tax_rate_per_rupee NUM_TAB;
8636       ln_total_non_rate_tax     NUMBER :=0;
8637       ln_total_inclusive_factor NUMBER;
8638       lt_tax_amt_rate_tax_tab   TAX_AMT_NUM_TAB;
8639       lt_tax_amt_non_rate_tab   TAX_AMT_NUM_TAB;
8640       ln_bsln_amt_nr            NUMBER :=0;
8641       ln_tax_amt_nr             NUMBER(38,10) :=0;
8642       ln_vamt_nr                NUMBER(38,10) :=0;
8643       ln_total_tax_per_rupee    NUMBER;
8644       ln_assessable_value       NUMBER;
8645       ln_vat_assessable_value   NUMBER;
8646 
8647       base_tax_amount_nr_tab tax_amt_num_tab; --added by Xiao Lv for bug#8789761
8648       ln_amount NUMBER; --Added by Shyan for bug 10358786.
8649 
8650     /* Added by Ramananda for bug#4407165 */
8651     lv_object_name CONSTANT VARCHAR2(61) := 'ja_in_calc_prec_taxes';
8652 
8653     p1          NUM_TAB;
8654     p2          NUM_TAB;
8655     p3          NUM_TAB;
8656     p4          NUM_TAB;
8657     p5          NUM_TAB;
8658     p6          NUM_TAB;
8659     p7          NUM_TAB;
8660     p8          NUM_TAB;
8661     p9          NUM_TAB;
8662     p10         NUM_TAB;
8663 
8664     line_no_tab NUM_TAB;
8665 
8666     tax_rate_tab        NUM_TAB;
8667 
8668     TYPE tax_vat_flag_tab  IS TABLE OF VARCHAR2(2) INDEX BY BINARY_INTEGER; --Added by zhiwei for Bug#12604133 on 20110623
8669     tax_amount_temp_tab num_tab;          --Added by zhiwei for Bug#12604133 on 20110623
8670     qty_rate_tab        NUM_TAB;          --Added by zhiwei for Bug#12604133 on 20110623
8671     vat_flag_tab        tax_vat_flag_tab; --Added by zhiwei for Bug#12604133 on 20110623
8672     reverse_flag_tab    NUM_TAB;          --Added by zhiwei for Bug#12604133 on 20110623
8673     /*
8674     || Aiyer for the fwd ported bug#4691616 . Added tax_rate_zero_tab table
8675        -------------------------------------------------------------
8676        tax_rate(i)            tax_rate_tab(i)   tax_rate_zero_tab(i)
8677        -------------------------------------------------------------
8678        NULL                       0                 0
8679        0                          0               -9999
8680        n (non-zero and not null)  n                 n
8681        -------------------------------------------------------------
8682     */
8683     tax_rate_zero_tab   NUM_TAB;
8684     tax_type_tab        NUM_TAB;
8685     tax_target_tab      NUM_TAB;
8686     tax_amt_tab         TAX_AMT_NUM_TAB;
8687     round_factor_tab    TAX_AMT_NUM_TAB; --added by csahoo for bug#6077133
8688     base_tax_amt_tab    TAX_AMT_NUM_TAB;
8689     func_tax_amt_tab    TAX_AMT_NUM_TAB;
8690     adhoc_flag_tab      TAX_ADHOC_FLAG_TAB ; /* rchandan bug#6030615 */
8691     end_date_tab        NUM_TAB;
8692 
8693     bsln_amt            NUMBER;  -- := p_tax_amount; --Ramananda for File.Sql.35
8694 
8695     v_conversion_rate       NUMBER;  -- := 0; --Ramananda for File.Sql.35
8696     v_currency_conv_factor  NUMBER; -- := p_currency_conv_factor;  --Ramananda for File.Sql.35
8697 
8698 
8699     v_tax_amt               NUMBER := 0;
8700     v_func_tax_amt          NUMBER := 0;
8701     vamt                    NUMBER := 0;
8702 
8703     v_amt                   NUMBER;
8704     row_count               NUMBER := 1;
8705     counter                 NUMBER;
8706     max_iter                NUMBER := 10;
8707     v_excise_jb             NUMBER;
8708 
8709     v_line_focus_id_holder JAI_PO_LINE_LOCATIONS.line_focus_id%TYPE;  -- cbabu for EnhancementBug# 2427465
8710 
8711     /** bgowrava, Begin forward porting bug#5631784 */
8712     refc_tax_cur          ref_cur_typ;
8713     rec                   tax_rec_typ;
8714     TYPE tax_table_typ IS
8715     TABLE OF tax_rec_typ INDEX BY BINARY_INTEGER;
8716     lt_tax_table          tax_table_typ;
8717     ln_max_tax_line       NUMBER;
8718     ln_max_rgm_tax_line   NUMBER;
8719     ln_base               NUMBER;
8720     ln_dup_tax_exists     NUMBER;
8721     v_modvat_flag         VARCHAR2(1);  -- moved from prev location to here
8722     lv_recalculation_sql  VARCHAR2(4000);
8723     ln_exists             NUMBER(2);
8724     ln_prev_quantity      NUMBER;       /*Bug 8241905*/
8725     ln_tax_modified_flag  VARCHAR2(1);  /*Bug 8241905*/
8726     ln_rounding_factor    NUMBER;       /*Bug 8241905*/
8727     l_created_from        VARCHAR2(10); /*Bug 8371741*/
8728 
8729     CURSOR uom_class_cur(p_line_uom_code IN VARCHAR2, p_tax_line_uom_code IN VARCHAR2) IS
8730     SELECT a.uom_class
8731       FROM mtl_units_of_measure A, mtl_units_of_measure B
8732      WHERE a.uom_code = p_line_uom_code
8733        AND b.uom_code = p_tax_line_uom_code
8734        AND a.uom_class = b.uom_class;
8735 
8736     v_organization_id   NUMBER;
8737     v_location_id       NUMBER;
8738     v_batch_source_id   NUMBER;
8739 
8740     CURSOR get_header_info_cur IS
8741     SELECT organization_id, location_id, batch_source_id
8742       FROM JAI_AR_TRXS
8743      WHERE customer_trx_id = p_header_id;
8744 
8745     v_debug boolean := true;        -- Vijay Shankar for Bug# 2837970
8746     v_line_num number:=1 ;--added by rchandan for bug#6030615
8747     ln_reg_id   number;
8748 
8749     uom_cls UOM_CLASS_CUR%ROWTYPE;
8750 
8751 BEGIN
8752 
8753    bsln_amt := p_tax_amount ;
8754    v_conversion_rate := 0;
8755    v_currency_conv_factor  := p_currency_conv_factor;
8756    ln_base :=  0 ;
8757 
8758       /**
8759             Following is a dynamic sql string which can be modifed as per requirement
8760 
8761             The sql has four place holders defined as below
8762             $$EXTRA_SELECT_COLUMN_LIST$$    -  Use this place holder to select additional columns in the sql.
8763                                                You must also change corrosponding fetch statements and the record being used for fetch.
8764                                                SELECT statement above should also be changed to include the newly added columns
8765                                                as they are sharing a common cursor and fetch record.
8766 
8767             $$TAX_SOURCE_TABLE$$            -  At runtime this placeholder must be replaced with name of
8768                                                source table to be used for recalculation
8769             $$SOURCE_TABLE_FILTER$$         -  At runtime, this place holder must represent a boolean condition
8770                                                which can filter required rows from the source table
8771                                                for recalculation.  It must be the first condition and should never
8772                                                start with either AND or OR
8773             $$ADDITIONAL_WHERE_CLAUSE$$     -  Replace the placeholder with additional conditions if any.
8774                                                The condition must start with either AND or OR keyword
8775             $$ADDITIONAL_ORDER_BY$$         -  Replace the placeholder with list of columns and order sequence, if required.
8776                                                Column list must start with comma (,)
8777             If any of this placeholder is not required to be used it must be replaced with a null value as below
8778                 replace ( lv_recalculation_sql
8779                         , '$$EXTRA_SELECT_COLUMN_LIST$$'
8780                         , ''
8781                         );
8782         */
8783         lv_recalculation_sql :=
8784            '  select  a.tax_id
8785                     , a.tax_line_no     lno
8786                     , a.precedence_1    p_1
8787                     , a.precedence_2    p_2
8788                     , a.precedence_3    p_3
8789                     , a.precedence_4    p_4
8790                     , a.precedence_5    p_5
8791                     , a.precedence_6    p_6
8792                     , a.precedence_7    p_7
8793                     , a.precedence_8    p_8
8794                     , a.precedence_9    p_9
8795                     , a.precedence_10   p_10
8796                     , a.tax_rate
8797                     , a.tax_amount
8798                     , b.uom_code
8799                     , b.end_date        valid_date
8800                     , DECODE(rttv.regime_code, '''||jai_constants.vat_regime||''', 4,  /* added by ssumaith - bug# 4245053*/
8801                                                '''||jai_constants.cgst_regime||''', 7,  /* Added by Jia for GST Bug#10043656 on 2010/09/10 */
8802                                                '''||jai_constants.sgst_regime||''', 7, /* Added by Jia for GST Bug#10043656 on 2010/09/10 */
8803                                               DECODE(UPPER(b.tax_type), ''EXCISE''      , 1
8804                                                                       , ''ADDL. EXCISE'', 1
8805                                                                       , ''OTHER EXCISE'', 1
8806                                                                       , ''TDS''         , 2
8807                                                                       , ''EXCISE_EDUCATION_CESS'',6 --modified by walton for inclusive tax
8808                                                                       , '''||JAI_CONSTANTS.TAX_TYPE_SH_EXC_EDU_CESS||''' , 6 /*bduvarag for the bug#5989740*/ --modified by walton for inclusive tax
8809                                                                       , ''CVD_EDUCATION_CESS''   ,6 --modified by walton for inclusive tax
8810                                                                       , '''||JAI_CONSTANTS.TAX_TYPE_SH_CVD_EDU_CESS||''' , 6  /*bduvarag for the bug#5989740*/ --modified by walton for inclusive tax
8811                                                                       , 0
8812                                                     )
8813                             )           tax_type_val
8814                    , b.mod_cr_percentage
8815                    , b.vendor_id
8816                    , b.tax_type
8817                    , nvl(b.rounding_factor,0) rounding_factor
8818                   , b.adhoc_flag
8819                   $$EXTRA_SELECT_COLUMN_LIST$$
8820       ,b.inclusive_tax_flag  --added by walton for inclusive tax on 08-Dev-07,--Added inclusive_tax_flag in end as it is last column in record type. by JMEENA for bug#9489492
8821       ,a.qty_rate --Added by zhiwei for Bug#12604133 on 20110623
8822       ,b.vat_flag --Added by zhiwei for Bug#12604133 on 20110623
8823               from  $$TAX_SOURCE_TABLE$$        a
8824                     , JAI_CMN_TAXES_ALL           b
8825                     , jai_regime_tax_types_v   rttv
8826               where $$SOURCE_TABLE_FILTER$$
8827               and   rttv.tax_type (+) = b.tax_type
8828               and   a.tax_id = b.tax_id   $$ADDITIONAL_WHERE_CLAUSE$$
8829               order by  a.tax_line_no   $$ADDITIONAL_ORDER_BY$$';
8830 
8831 
8832            /** No extra columns required. Dummy column (NULL) tax_category_id needs to be added in the last as same record (rec) is being used
8833                when fetching the cursor.  If there is a need to override this default behaviour then please replace these place holder with
8834                desired strings which can be evaluated at runtime by sql-engine
8835             */
8836             lv_recalculation_sql :=
8837             REPLACE ( lv_recalculation_sql
8838                     , '$$EXTRA_SELECT_COLUMN_LIST$$'
8839                     , ',null   tax_category_id'
8840                     );
8841 
8842             /** No additional filtering required */
8843             lv_recalculation_sql :=
8844             REPLACE ( lv_recalculation_sql
8845                     , '$$ADDITIONAL_WHERE_CLAUSE$$'
8846                     , ''
8847                     );
8848 
8849             /** No additional sorting required */
8850             lv_recalculation_sql :=
8851             REPLACE ( lv_recalculation_sql
8852                     , '$$ADDITIONAL_ORDER_BY$$'
8853                     , ''
8854                     );
8855    --For AR transactions, replace it with AR tax tables
8856    -----------------------------------------------------------
8857         IF upper(p_source_trx_type) = 'AR_TRANSACTION' THEN
8858 
8859             lv_recalculation_sql :=
8860             REPLACE ( lv_recalculation_sql
8861                     , '$$TAX_SOURCE_TABLE$$'
8862                     , 'JAI_AR_TRX_TAX_LINES'
8863                     );
8864             /* replace join condition */
8865             lv_recalculation_sql :=
8866             REPLACE ( lv_recalculation_sql
8867                     , '$$SOURCE_TABLE_FILTER$$'
8868                     , 'a.link_to_cust_trx_line_id = ' || p_line_id
8869                     );
8870 
8871    --For AP standalone, replace it with AP tax tables
8872    -----------------------------------------------------------
8873         ELSIF upper(p_source_trx_type) = jai_constants.G_AP_STANDALONE_INVOICE THEN
8874 
8875           lv_recalculation_sql :=
8876             REPLACE( lv_recalculation_sql
8877                    , 'a.tax_amount'
8878                    , 'a.tax_amt'
8879                    );
8880 
8881           lv_recalculation_sql :=
8882             REPLACE( lv_recalculation_sql
8883                    , '$$TAX_SOURCE_TABLE$$'
8884                    , 'JAI_CMN_DOCUMENT_TAXES'
8885                    );
8886           -- replace join condition
8887           lv_recalculation_sql :=
8888             REPLACE( lv_recalculation_sql
8889                    , '$$SOURCE_TABLE_FILTER$$'
8890                    , 'a.SOURCE_DOC_LINE_ID = ' || p_line_id ||
8891                    ' and SOURCE_DOC_ID = '|| p_header_id ||
8892                    ' and SOURCE_DOC_TYPE ='''||
8893                    jai_constants.G_AP_STANDALONE_INVOICE || ''''
8894                    );
8895         END IF;
8896 
8897           /**
8898               When control comes here, a valid sql statement hold by variable lv_recalculate_sql
8899               must be ready to execute.
8900               open a dynamic select statement using OPEN-FOR statement
8901           */
8902 
8903           OPEN refc_tax_cur FOR lv_recalculation_sql;
8904 
8905         /** Clear the tax table */
8906         lt_tax_table.delete;
8907 
8908         LOOP
8909 
8910           FETCH refc_tax_cur INTO rec;
8911           EXIT WHEN refc_tax_cur%NOTFOUND;
8912     /** Add current record in the lt_tax_table for future use at the time of either UPDATE or INSERT into the tables*/
8913 
8914         lt_tax_table(lt_tax_table.count+1) := rec;
8915         p1(row_count) := nvl(rec.p_1,-1);
8916         p2(row_count) := nvl(rec.p_2,-1);
8917         p3(row_count) := nvl(rec.p_3,-1);
8918         p4(row_count) := nvl(rec.p_4,-1);
8919         p5(row_count) := nvl(rec.p_5,-1);
8920         p6(row_count) := nvl(rec.p_6,-1);
8921         p7(row_count) := nvl(rec.p_7,-1);
8922         p8(row_count) := nvl(rec.p_8,-1);
8923         p9(row_count) := nvl(rec.p_9,-1);
8924         p10(row_count) := nvl(rec.p_10,-1);
8925 
8926         tax_rate_tab(row_count) := NVL(rec.tax_rate,0);
8927         line_no_tab(row_count)  := rec.lno;
8928 
8929 
8930         --Added by walton for inclusive tax on 08-Dev-07, begin
8931         -----------------------------------------------------------------
8932         lt_tax_rate_per_rupee(row_count):=NVL(rec.tax_rate,0)/100;
8933         ln_total_tax_per_rupee:=0;
8934         lt_inclusive_tax_tab(row_count):=NVL(rec.inclusive_tax_flag,'N');
8935         lt_tax_amt_rate_tax_tab(row_count):=0;
8936         lt_tax_amt_non_rate_tab(row_count):=0;
8937         ------------------------------------------------------------------
8938         --Added by walton for inclusive tax on 08-Dev-07, end
8939 
8940         /*
8941         || The following code added by aiyer for the bug 4691616
8942         || Purpose:
8943         || rec.tax_rate = 0 means that tax_rate for such a tax line is actually zero (i.e it is not a replacement of null value)
8944         || So, when rec.tax_rate = 0, tax_rate_zero_tab is populated with -9999 to identify that this tax_line actually has tax_rate = 0
8945         || To calculate the BASE_TAX_AMOUNT of the taxes whose tax_rate is zero
8946         */
8947 
8948         IF rec.tax_rate is null THEN
8949 
8950           tax_rate_zero_tab(row_count) := 0;
8951 
8952         ELSIF rec.tax_rate = 0 THEN
8953           /*
8954           ||Indicates 0% tax rate becasue a tax can have a rate as 0%.
8955           */
8956           tax_rate_zero_tab(row_count) := -9999;
8957 
8958         ELSE
8959           tax_rate_zero_tab(row_count) := rec.tax_rate;
8960 
8961         END IF;
8962 
8963         tax_type_tab(row_count) := rec.tax_type_val;
8964         /*End of bug 4691616 */
8965 
8966         --Added by zhiwei for Bug#12604133 on 20110623 begin
8967         ---------------------------------------------------------
8968         qty_rate_tab(row_count) :=   NVL(rec.qty_rate,0);
8969         vat_flag_tab(row_count) :=   NVL(rec.vat_flag,'N');
8970         tax_amount_temp_tab(row_count) := nvl(rec.tax_amount,0);
8971         reverse_flag_tab(row_count) := 0;
8972 
8973         IF  NVL(rec.adhoc_flag,'N') = 'Y'  THEN
8974            tax_amt_tab(row_count) := nvl(rec.tax_amount,0) ;
8975 
8976            if( nvl(rec.vat_flag,'N') = 'Q') then
8977 
8978               if qty_rate_tab(row_count) <> 0 then
8979                  tax_amt_tab(row_count) := rec.qty_rate * p_line_quantity;
8980               else
8981                  reverse_flag_tab(row_count) := 1;
8982                  qty_rate_tab(row_count) := nvl(rec.tax_amount,0)/p_line_quantity;
8983                  tax_amt_tab(row_count) := nvl(rec.tax_amount,0);
8984               end if;
8985 
8986            end if;
8987             lt_tax_amt_non_rate_tab(rec.lno):=tax_amt_tab(row_count);--NVL(rec.tax_amount , 0);
8988             base_tax_amt_tab(rec.lno) := lt_tax_amt_non_rate_tab(rec.lno);
8989         ELSE
8990 
8991            tax_amt_tab(row_count) := 0;
8992 
8993 
8994         END IF ;
8995 
8996         base_tax_amt_tab(row_count) := tax_amt_tab(row_count);
8997 
8998         ---------------------------------------------------------
8999         --Added by zhiwei for Bug#12604133 on 20110623 end
9000 
9001         --tax_amt_tab(row_count) := 0;--Commented by zhiwei for Bug#12604133 on 20110627
9002 
9003         round_factor_tab(row_count):=rec.rounding_factor;  --added by csahoo for bug#6077133
9004         --base_tax_amt_tab(row_count) := 0;--Commentd by zhiwei for Bug#12604133 on 20110628
9005         adhoc_flag_tab(row_count):=rec.adhoc_flag ; /* rchandan bug#6030615 */
9006 
9007         IF tax_rate_tab(row_count) = 0
9008           AND rec.uom_code is not null  --added by csahoo for bug#6498072
9009         THEN
9010           -- Start of bug 3749294
9011           /*
9012           Code added by aiyer for the bug 3749294
9013           Check whether an exact match exists between the transaction uom and the setup uom (obtained through the tax_category list).
9014           IF an exact match is found then the conversion rate is equal to 1  else the conversion rate between the two uom's would be
9015           determined and tax amounts,base_tax_amounts are calculated for defaultation.
9016           */
9017           Inv_Convert.inv_um_conversion( p_uom_code, rec.uom_code, p_inventory_item_id, v_conversion_rate);
9018           IF NVL(v_conversion_rate, 0) <= 0 THEN
9019               -- pramasub start FP
9020             /*4281841 ..rchandan..start*/
9021               OPEN  uom_class_cur(p_uom_code, rec.uom_code);
9022               FETCH uom_class_cur INTO uom_cls;
9023               IF uom_class_cur%FOUND THEN
9024                 Inv_Convert.inv_um_conversion( p_uom_code, rec.uom_code, 0, v_conversion_rate);
9025               ELSE
9026                 v_conversion_rate := 0;
9027               END IF;
9028               CLOSE uom_class_cur;
9029               /*4281841 ..rchandan..end*/
9030              -- pramasub end FP
9031             --Inv_Convert.inv_um_conversion( p_uom_code, rec.uom_code, 0, v_conversion_rate); commented by pramasub
9032             IF NVL(v_conversion_rate, 0) <= 0 THEN
9033 
9034               /* for cash receipt there will be no lines. sacsethi for 6012570 (5876390) */
9035               IF (p_uom_code IS NULL AND p_inventory_item_id IS NULL )
9036                 AND p_source_trx_type = jai_constants.ar_cash
9037               THEN
9038                 v_conversion_rate := 1;
9039               /*
9040               Date 22-feb-2007  Added by SACSETHI for bug 6012570 (5876390)
9041               in This , Recalculation will be happen in Draft invoice
9042               */
9043               ELSIF (p_uom_code IS NULL AND p_inventory_item_id IS NULL )
9044                 AND p_source_trx_type IN (jai_constants.pa_draft_invoice
9045                 ,jai_constants.G_AP_STANDALONE_INVOICE)
9046               THEN
9047                 v_conversion_rate := 0;
9048               ELSE
9049                 v_conversion_rate := 0;
9050               END IF;
9051 
9052             END IF;
9053           END IF;
9054 
9055           lt_tax_amt_non_rate_tab(rec.lno):=NVL(rec.tax_amount * v_conversion_rate, 0) * p_line_quantity;
9056           base_tax_amt_tab(rec.lno) := lt_tax_amt_non_rate_tab(rec.lno); --added by walton for inclusive tax
9057 
9058         END IF;
9059 
9060 
9061 
9062         IF rec.valid_date IS NULL OR rec.valid_date >= SYSDATE THEN
9063             end_date_tab(row_count) := 1;
9064         ELSE
9065             --tax_amt_tab(row_count)  := 0;--Commented by zhiwei for Bug#12604133
9066             end_date_tab(row_count) := 0;
9067         END IF;
9068         row_count := row_count + 1;
9069 
9070         --added for bug#9214366, start
9071         IF p_action = jai_constants.default_taxes
9072            and p_thhold_cat_base_tax_typ = jai_constants.tax_type_tcs
9073         THEN
9074           tax_amt_tab(rec.lno) := 0;
9075         END IF;
9076         --bug#9214366, end
9077 
9078     END LOOP;
9079 
9080     row_count := row_count - 1;
9081 
9082     IF p_vat_assessable_value<>p_tax_amount
9083     THEN
9084       ln_vat_assessable_value:=p_vat_assessable_value;
9085     ELSE
9086       ln_vat_assessable_value:=1;
9087     END IF;
9088 
9089     IF p_assessable_value<>p_tax_amount
9090     THEN
9091       ln_assessable_value:=p_assessable_value;
9092     ELSE
9093       ln_assessable_value:=1;
9094     END IF;
9095 
9096     FOR I IN 1..row_count LOOP
9097         IF end_date_tab(I) <> 0 THEN
9098             IF tax_type_tab(I) = 1 THEN
9099                 --Added by walton for inclusive tax on 08-Dec-07
9100                 ------------------------------------------------
9101                 IF ln_assessable_value =1
9102                 THEN
9103                   bsln_amt:=1;
9104                   ln_bsln_amt_nr :=0;
9105                 ELSE
9106                   bsln_amt :=0;
9107                   ln_bsln_amt_nr :=ln_assessable_value;
9108                 END IF;
9109 
9110             ELSIF tax_type_tab(I) = 4 THEN
9111                 --Added by walton for inclusive tax on 08-Dec-07
9112                 ------------------------------------------------
9113                 IF ln_vat_assessable_value =1
9114                 THEN
9115                   bsln_amt:=1;
9116                   ln_bsln_amt_nr :=0;
9117                 ELSE
9118                   bsln_amt :=0;
9119                   ln_bsln_amt_nr :=ln_vat_assessable_value;
9120                 END IF;
9121 
9122             ELSIF tax_type_tab(I) = 6 THEN
9123                 --Added by walton for inclusive tax
9124                 -------------------------------------
9125                 bsln_amt:=0;
9126                 ln_bsln_amt_nr :=0;
9127             ELSE
9128                 bsln_amt:=1;                --Added by walton for inclusive tax
9129                 ln_bsln_amt_nr :=0;         --Added by walton for inclusive tax
9130             END IF;
9131 
9132             IF tax_rate_tab(I) <> 0 THEN
9133              /* Commented out by Shyan for bug 10358786  on  28-Jan-2011 , Begin
9134              ------------------------------------------------------------------------------
9135                 IF P1(I) < line_no_tab(I) AND P1(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9136                     vamt := vamt + NVL(tax_amt_tab(P1(I)),0);
9137                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P1(I)),0); --added by walton for inclusive tax
9138                 ELSIF P1(I) = 0 THEN
9139                     vamt := vamt + bsln_amt;
9140                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9141 
9142                 END IF;
9143                 IF p2(I) < line_no_tab(I) AND p2(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9144                     vamt := vamt + NVL(tax_amt_tab(p2(I)),0);
9145                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P2(I)),0); --added by walton for inclusive tax
9146                 ELSIF p2(I) = 0 THEN
9147                     vamt := vamt + bsln_amt;
9148                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9149                 END IF;
9150                 IF p3(I) < line_no_tab(I) AND p3(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9151                     vamt := vamt + NVL(tax_amt_tab(p3(I)),0);
9152                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P3(I)),0); --added by walton for inclusive tax
9153                 ELSIF p3(I) = 0 THEN
9154                     vamt := vamt + bsln_amt;
9155                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9156                 END IF;
9157                 IF p4(I) < line_no_tab(I) AND p4(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9158                     vamt := vamt + NVL(tax_amt_tab(p4(I)),0);
9159                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P4(I)),0); --added by walton for inclusive tax
9160                 ELSIF p4(I) = 0 THEN
9161                     vamt := vamt + bsln_amt;
9162                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9163                 END IF;
9164                 IF p5(I) < line_no_tab(I) AND p5(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9165                     vamt := vamt + NVL(tax_amt_tab(p5(I)),0);
9166                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P5(I)),0); --added by walton for inclusive tax
9167                 ELSIF p5(I) = 0 THEN
9168                     vamt := vamt + bsln_amt;
9169                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9170                 END IF;
9171                 -- Date 31/10/2006 Bug 5228046 added by SACSETHI  ( added column from Precedence 6 to 10 )
9172                 -- start bug 5228046
9173                 IF P6(I) < line_no_tab(I) AND P6(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9174                     vamt := vamt + NVL(tax_amt_tab(P6(I)),0);
9175                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P6(I)),0); --added by walton for inclusive tax
9176                 ELSIF P6(I) = 0 THEN
9177                     vamt := vamt + bsln_amt;
9178                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9179                 END IF;
9180                 IF p7(I) < line_no_tab(I) AND p7(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9181                     vamt := vamt + NVL(tax_amt_tab(p7(I)),0);
9182                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P7(I)),0); --added by walton for inclusive tax
9183                 ELSIF p7(I) = 0 THEN
9184                     vamt := vamt + bsln_amt;
9185                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9186                 END IF;
9187                 IF p8(I) < line_no_tab(I) AND p8(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9188                     vamt := vamt + NVL(tax_amt_tab(p8(I)),0);
9189                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P8(I)),0); --added by walton for inclusive tax
9190                 ELSIF p8(I) = 0 THEN
9191                     vamt := vamt + bsln_amt;
9192                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9193                 END IF;
9194                 IF p9(I) < line_no_tab(I) AND p9(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9195                     vamt := vamt + NVL(tax_amt_tab(p9(I)),0);
9196                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P9(I)),0); --added by walton for inclusive tax
9197                 ELSIF p9(I) = 0 THEN
9198                     vamt := vamt + bsln_amt;
9199                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9200                 END IF;
9201                 IF p10(I) < line_no_tab(I) AND p10(I) NOT IN (-1,0) THEN --replaced I by line_no_tab(I) for bug#9214366
9202                     vamt := vamt + NVL(tax_amt_tab(p10(I)),0);
9203                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P10(I)),0); --added by walton for inclusive tax
9204                 ELSIF p10(I) = 0 THEN
9205                     vamt := vamt + bsln_amt;
9206                     ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9207                 END IF;
9208                 -- end bug 5228046
9209                 ------------------------------------------------------------------------------
9210                 Commented out by Shyan for bug 10358786  on  28-Jan-2011 , end. */
9211 
9212             --Added by Shujuan for 10358786 on 28-Jan-2011, Begin
9213             -----------------------------------------------------------------------
9214             lt_tax_amt_non_rate_tab(I):=0;
9215             IF P1(I) < line_no_tab(I) AND P1(I) NOT IN (-1, 0) THEN  --replaced I by line_no_tab(I) for bug#9214366
9216               IF lt_inclusive_tax_tab(P1(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P1(I)) IS NOT NULL then
9217                 IF NVL( adhoc_flag_tab(P1(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9218                 vamt := vamt + NVL(tax_amt_tab(P1(I)), 0);
9219                 END IF;--Added by zhiwei for Bug#12604133 on 20110627
9220                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P1(I)), 0); --added by walton for inclusive tax
9221              END IF;
9222 
9223             ELSIF P1(I) = 0 THEN
9224               IF lt_inclusive_tax_tab(I) = 'Y' then
9225                 vamt := vamt + bsln_amt;
9226                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9227               ELSE
9228                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9229 
9230               END IF;
9231             END IF;
9232             IF p2(I) < line_no_tab(I) AND p2(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9233               IF lt_inclusive_tax_tab(P2(I)) = 'Y' OR
9234                  lt_tax_amt_rate_tax_tab(P2(I)) IS NOT NULL then
9235                  IF NVL( adhoc_flag_tab(P2(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9236                  vamt := vamt + NVL(tax_amt_tab(p2(I)), 0);
9237                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9238                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P2(I)), 0); --added by walton for inclusive tax
9239               END IF;
9240 
9241             ELSIF p2(I) = 0 THEN
9242               IF lt_inclusive_tax_tab(I) = 'Y' then
9243                 vamt := vamt + bsln_amt;
9244                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9245               ELSE
9246                  ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9247               END IF;
9248 
9249             END IF;
9250             IF p3(I) < line_no_tab(I) AND p3(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9251               IF lt_inclusive_tax_tab(P3(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P3(I)) IS NOT NULL then
9252                  IF NVL( adhoc_flag_tab(P3(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9253                  vamt := vamt + NVL(tax_amt_tab(p3(I)), 0);
9254                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9255                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P3(I)), 0); --added by walton for inclusive tax
9256               END IF;
9257 
9258             ELSIF p3(I) = 0 THEN
9259               IF lt_inclusive_tax_tab(I) = 'Y' then
9260                 vamt := vamt + bsln_amt;
9261                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9262               ELSE
9263                  ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9264               END IF;
9265             END IF;
9266 
9267             IF p4(I) < line_no_tab(I) AND p4(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9268               IF lt_inclusive_tax_tab(P4(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P4(I)) IS NOT NULL then
9269                  IF NVL( adhoc_flag_tab(P4(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9270                  vamt := vamt + NVL(tax_amt_tab(p4(I)), 0);
9271                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9272                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P4(I)), 0); --added by walton for inclusive tax
9273               END IF;
9274             ELSIF p4(I) = 0 THEN
9275               IF lt_inclusive_tax_tab(I) = 'Y' then
9276                 vamt := vamt + bsln_amt;
9277                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9278               ELSE
9279                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9280               END IF;
9281             END IF;
9282 
9283             IF p5(I) < line_no_tab(I) AND p5(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9284               IF lt_inclusive_tax_tab(P5(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P5(I)) IS NOT NULL then
9285                  IF NVL( adhoc_flag_tab(P5(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9286                  vamt := vamt + NVL(tax_amt_tab(p5(I)), 0);
9287                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9288                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P5(I)), 0); --added by walton for inclusive tax
9289               END IF;
9290             ELSIF p5(I) = 0 THEN
9291               IF lt_inclusive_tax_tab(I) = 'Y' then
9292                 vamt := vamt + bsln_amt;
9293                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9294               ELSE
9295                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9296               END IF;
9297             END IF;
9298             -- Date 31/10/2006 Bug 5228046 added by SACSETHI  ( added column from Precedence 6 to 10 )
9299             -- start bug 5228046
9300            IF p6(I) < line_no_tab(I) AND p6(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9301               IF lt_inclusive_tax_tab(P6(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P6(I)) IS NOT NULL then
9302                  IF NVL( adhoc_flag_tab(P6(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9303                  vamt := vamt + NVL(tax_amt_tab(p6(I)), 0);
9304                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9305                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P6(I)), 0); --added by walton for inclusive tax
9306               END IF;
9307 
9308             ELSIF p6(I) = 0 THEN
9309               IF lt_inclusive_tax_tab(I) = 'Y' then
9310                 vamt := vamt + bsln_amt;
9311                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9312               ELSE
9313                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9314               END IF;
9315             END IF;
9316 
9317            IF p7(I) < line_no_tab(I) AND p7(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9318               IF lt_inclusive_tax_tab(P7(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P7(I)) IS NOT NULL then
9319                  IF NVL( adhoc_flag_tab(P7(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9320                  vamt := vamt + NVL(tax_amt_tab(p7(I)), 0);
9321                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9322                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P7(I)), 0); --added by walton for inclusive tax
9323               END IF;
9324 
9325             ELSIF p7(I) = 0 THEN
9326               IF lt_inclusive_tax_tab(I) = 'Y' then
9327                 vamt := vamt + bsln_amt;
9328                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9329               ELSE
9330                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9331               END IF;
9332             END IF;
9333 
9334             IF p8(I) < line_no_tab(I) AND p8(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9335               IF lt_inclusive_tax_tab(P8(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P8(I)) IS NOT NULL then
9336                  IF NVL( adhoc_flag_tab(P8(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9337                  vamt := vamt + NVL(tax_amt_tab(p8(I)), 0);
9338                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9339                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P8(I)), 0); --added by walton for inclusive tax
9340               END IF;
9341 
9342             ELSIF p8(I) = 0 THEN
9343               IF lt_inclusive_tax_tab(I) = 'Y' then
9344                 vamt := vamt + bsln_amt;
9345                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9346               ELSE
9347                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9348               END IF;
9349             END IF;
9350 
9351             IF p9(I) < line_no_tab(I) AND p9(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9352               IF lt_inclusive_tax_tab(P9(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P9(I)) IS NOT NULL then
9353                  IF NVL( adhoc_flag_tab(P9(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9354                  vamt := vamt + NVL(tax_amt_tab(p4(I)), 0);
9355                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9356                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P9(I)), 0); --added by walton for inclusive tax
9357               END IF;
9358 
9359             ELSIF p9(I) = 0 THEN
9360               IF lt_inclusive_tax_tab(I) = 'Y' then
9361                 vamt := vamt + bsln_amt;
9362                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9363               ELSE
9364                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9365               END IF;
9366             END IF;
9367 
9368             IF p10(I) < line_no_tab(I) AND p10(I) NOT IN (-1, 0) THEN --replaced I by line_no_tab(I) for bug#9214366
9369               IF lt_inclusive_tax_tab(P10(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P10(I)) IS NOT NULL then
9370                  IF NVL( adhoc_flag_tab(P10(I)),'N') = 'N' THEN --Added by zhiwei for Bug#12604133 on 20110627
9371                  vamt := vamt + NVL(tax_amt_tab(p10(I)), 0);
9372                  END IF;--Added by zhiwei for Bug#12604133 on 20110627
9373                  ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P10(I)), 0); --added by walton for inclusive tax
9374               END IF;
9375 
9376             ELSIF p10(I) = 0 THEN
9377               IF lt_inclusive_tax_tab(I) = 'Y' then
9378                 vamt := vamt + bsln_amt;
9379                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9380               ELSE
9381                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9382               END IF;
9383             END IF;
9384             -- end bug 5228046
9385             ----------------------------------------------------------------------
9386             --Added by Shujuan for 10358786 on 28-Jan-2011, End
9387 
9388 
9389 
9390 
9391                 v_tax_amt := v_tax_amt + (vamt * (tax_rate_tab(I)/100));
9392                 ln_tax_amt_nr:=ln_tax_amt_nr+(ln_vamt_nr*(tax_rate_tab(I)/100)); --added by walton for inclusive tax
9393                 /*base_tax_amt_tab(I) := vamt;--Commemnted by zhiwei for Bug#
9394                 tax_amt_tab(I) := NVL(tax_amt_tab(I),0) + v_tax_amt;
9395                 lt_tax_amt_non_rate_tab(I):=NVL(lt_tax_amt_non_rate_tab(I),0)+ln_tax_amt_nr;  --added by walton for inclusive tax
9396 
9397                 -- Modified by Shyan for bug 10358786 on 28-Jan-2011, Begin
9398                 -------------------------------------------------------------------
9399                 --lt_tax_amt_rate_tax_tab(I):= tax_amt_tab(I);   --added by walton for inclusive tax
9400                 --IF lt_inclusive_tax_tab(I) = 'Y' then--Commented by zhiwei for Bug#12604133 on 20110628
9401                 IF lt_inclusive_tax_tab(I) = 'Y' and nvl(adhoc_flag_tab(I),'N')='N' then--Added by zhiwei for Bug#12604133 on 20110628
9402                     lt_tax_amt_rate_tax_tab(I) := tax_amt_tab(I); --added by walton for inclusive tax
9403                 END IF;
9404                 -------------------------------------------------------------------
9405                 -- Modified by Shyan for bug 10358786 on  28-Jan-2011, End
9406 
9407                 \*tax_amt_tab(I) :=  round(tax_amt_tab(I)  ,round_factor_tab(I)); --added by csahoo for bug#6077133*\ --commented by walton for inclusive tax
9408                 base_tax_amount_nr_tab(I):=ln_vamt_nr; --added by Xiao Lv for bug#8789761 on 30-Oct-09
9409                 */--Commented by zhiwei for bug# end
9410                 /*vamt := 0;--Commented by zhiwei for Bug#12604133 on 20110627 begin
9411                 v_tax_amt := 0;
9412                 ln_tax_amt_nr:=0; --added by walton for inclusive tax
9413                 ln_vamt_nr:=0; --added by walton for inclusive tax*/--Commented by zhiwei for Bug#12604133 on 20110627 end
9414 
9415             --Added by zhiwei for Bug#12604133 on 20110627 begin
9416             ------------------------------------------------------------------------
9417             elsif tax_rate_tab(I) = 0  then
9418 
9419                 if P1(I) = -1 and qty_rate_tab(I) = 0 then
9420                    if nvl(adhoc_flag_tab(I),'N') = 'Y' then
9421                        ln_tax_amt_nr := lt_tax_amt_non_rate_tab(I) * 1;--v_conversion_rate;
9422                    else
9423                        ln_tax_amt_nr := lt_tax_amt_non_rate_tab(I);
9424                    end if;
9425                 elsif nvl(qty_rate_tab(I),0) <> 0 then
9426 
9427                    ln_tax_amt_nr := qty_rate_tab(I) * p_line_quantity;
9428 
9429                 end if;
9430 
9431             ------------------------------------------------------------------------
9432             --Added by zhiwei for Bug#12604133 on 20110627 end
9433             END IF;
9434 
9435             --Added by zhiwei for bug#12604133 on 20110628 begin
9436             --------------------------------------------------------------------------
9437                 base_tax_amt_tab(I) := vamt;
9438                 tax_amt_tab(I) := NVL(tax_amt_tab(I),0) + v_tax_amt;
9439                 --lt_tax_amt_non_rate_tab(I):=NVL(lt_tax_amt_non_rate_tab(I),0)+ln_tax_amt_nr;  --Commented by zhiwei for Bugbug#12604133
9440                 lt_tax_amt_non_rate_tab(I):= ln_tax_amt_nr;--Added by zhiwei for Bugbug#12604133
9441                 -- Modified by Shyan for bug 10358786 on 28-Jan-2011, Begin
9442                 -------------------------------------------------------------------
9443                 --lt_tax_amt_rate_tax_tab(I):= tax_amt_tab(I);   --added by walton for inclusive tax
9444                 --IF lt_inclusive_tax_tab(I) = 'Y' then--Commented by zhiwei for Bug#12604133 on 20110628
9445                 IF lt_inclusive_tax_tab(I) = 'Y' and nvl(adhoc_flag_tab(I),'N')='N' then--Added by zhiwei for Bug#12604133 on 20110628
9446                     lt_tax_amt_rate_tax_tab(I) := tax_amt_tab(I);
9447                 END IF;
9448                 -------------------------------------------------------------------
9449                 -- Modified by Shyan for bug 10358786 on  28-Jan-2011, End
9450                 --lt_tax_amt_rate_tax_tab(I) := NVL( lt_tax_amt_rate_tax_tab(I),0) + v_tax_amt;  --Added by zhiwei for Bugbug#12604133
9451                 tax_amt_tab(I) :=  round(tax_amt_tab(I)  ,round_factor_tab(I));
9452                 base_tax_amount_nr_tab(I):=ln_vamt_nr;
9453 
9454 
9455             --------------------------------------------------------------------------
9456             --Added by zhiwei for bug#12604133 on 20110628 end
9457 
9458         ELSE
9459             tax_amt_tab(I) := 0;
9460             base_tax_amt_tab(I) := 0;
9461             base_tax_amount_nr_tab(I):=0;
9462         END IF;
9463 
9464 
9465 /*my.hou_log('Loop1',I) ;
9466 my.hou_log('tax_amt_tab('||I||')',tax_amt_tab(I)) ;
9467 my.hou_log('base_tax_amt_tab('||I||')',base_tax_amt_tab(I)) ;
9468 my.hou_log('base_tax_amount_nr_tab('||I||')',base_tax_amount_nr_tab(I)) ;
9469 my.hou_log('lt_tax_amt_rate_tax_tab('||I||')',lt_tax_amt_rate_tax_tab(I)) ;
9470 my.hou_log('lt_tax_amt_non_rate_tab('||I||')',lt_tax_amt_non_rate_tab(I)) ;*/
9471 
9472 
9473 
9474         --Added by zhiwei for Bug#12604133 on 20110627 begin
9475         ------------------------------------------------------------------------
9476         vamt := 0;
9477         v_tax_amt := 0;
9478         ln_tax_amt_nr:=0; --added by walton for inclusive tax
9479         ln_vamt_nr:=0; --added by walton for inclusive tax
9480         ------------------------------------------------------------------------
9481         --Added by zhiwei for Bug#12604133 on 20110627 end
9482 
9483     END LOOP;
9484 
9485     FOR I IN 1..row_count LOOP
9486         IF end_date_tab( I ) <> 0 THEN
9487             IF tax_rate_tab(I) <> 0 THEN
9488                 IF P1(I) > line_no_tab(I) THEN  --replaced I by line_no_tab(I) for bug#9214366
9489                     vamt := vamt + NVL(tax_amt_tab(P1(I)),0);
9490                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P1(I)),0); --added by walton for inclusive tax
9491                 END IF;
9492                 IF p2(I) > line_no_tab(I)  THEN  --replaced I by line_no_tab(I) for bug#9214366
9493                     vamt := vamt + NVL(tax_amt_tab(p2(I)),0);
9494                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P2(I)),0); --added by walton for inclusive tax
9495                 END IF;
9496                 IF p3(I) > line_no_tab(I)  THEN  --replaced I by line_no_tab(I) for bug#9214366
9497                     vamt := vamt + NVL(tax_amt_tab(p3(I)),0);
9498                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P3(I)),0); --added by walton for inclusive tax
9499                 END IF;
9500                 IF p4(I) > line_no_tab(I) THEN  --replaced I by line_no_tab(I) for bug#9214366
9501                     vamt := vamt + NVL(tax_amt_tab(p4(I)),0);
9502                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P4(I)),0); --added by walton for inclusive tax
9503                 END IF;
9504                 IF p5(I) > line_no_tab(I) THEN  --replaced I by line_no_tab(I) for bug#9214366
9505                     vamt := vamt + NVL(tax_amt_tab(p5(I)),0);
9506                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P5(I)),0); --added by walton for inclusive tax
9507                 END IF;
9508                 -- Date 31/10/2006 Bug 5228046 added by SACSETHI  ( added column from Precedence 6 to 10 )
9509                 -- start bug 5228046
9510                 IF P6(I) > line_no_tab(I) THEN  --replaced I by line_no_tab(I) for bug#9214366
9511                     vamt := vamt + NVL(tax_amt_tab(P6(I)),0);
9512                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P6(I)),0); --added by walton for inclusive tax
9513                 END IF;
9514                 IF p7(I) > line_no_tab(I)  THEN  --replaced I by line_no_tab(I) for bug#9214366
9515                     vamt := vamt + NVL(tax_amt_tab(p7(I)),0);
9516                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P7(I)),0); --added by walton for inclusive tax
9517                 END IF;
9518                 IF p8(I) > line_no_tab(I)  THEN  --replaced I by line_no_tab(I) for bug#9214366
9519                     vamt := vamt + NVL(tax_amt_tab(p8(I)),0);
9520                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P8(I)),0); --added by walton for inclusive tax
9521                 END IF;
9522                 IF p9(I) > line_no_tab(I) THEN  --replaced I by line_no_tab(I) for bug#9214366
9523                     vamt := vamt + NVL(tax_amt_tab(p9(I)),0);
9524                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P9(I)),0); --added by walton for inclusive tax
9525                 END IF;
9526                 IF p10(I) > line_no_tab(I) THEN  --replaced I by line_no_tab(I) for bug#9214366
9527                     vamt := vamt + NVL(tax_amt_tab(p10(I)),0);
9528                     ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P10(I)),0); --added by walton for inclusive tax
9529                 END IF;
9530                 -- end bug 5228046
9531                 base_tax_amt_tab(I) := vamt;
9532                 base_tax_amount_nr_tab(I):=ln_vamt_nr; /*9692478*/
9533 
9534                 v_tax_amt := v_tax_amt + (vamt * (tax_rate_tab(I)/100));
9535                 ln_tax_amt_nr:=ln_tax_amt_nr+(ln_vamt_nr * (tax_rate_tab(I)/100)); --added by walton for inclusive tax
9536                 IF vamt <> 0 THEN
9537                     base_tax_amt_tab(I) := base_tax_amt_tab(I) + vamt;
9538                 END IF;
9539                 tax_amt_tab(I) := NVL(tax_amt_tab(I),0) + v_tax_amt;
9540                 lt_tax_amt_non_rate_tab(I):=NVL(lt_tax_amt_non_rate_tab(I),0)+ln_tax_amt_nr;  --added by walton for inclusive tax
9541                 lt_tax_amt_rate_tax_tab(I):= tax_amt_tab(I);   --added by walton for inclusive tax
9542                 base_tax_amount_nr_tab(I):=ln_vamt_nr; --added by Xiao Lv for bug#8789761 on 30-Oct-09
9543                 vamt := 0;
9544                 v_tax_amt := 0;
9545                 ln_vamt_nr :=0;    --added by walton for inclusive tax
9546                 ln_tax_amt_nr :=0; --added by walton for inclusive tax
9547             END IF;
9548         ELSE
9549           base_tax_amt_tab(I) := vamt;
9550           base_tax_amount_nr_tab(I):=ln_vamt_nr; /*9692478*/
9551           tax_amt_tab(I) := 0;
9552         END IF;
9553 
9554 /*my.hou_log('Loop2',I) ;
9555 my.hou_log('tax_amt_tab('||I||')',tax_amt_tab(I)) ;
9556 my.hou_log('base_tax_amt_tab('||I||')',base_tax_amt_tab(I)) ;
9557 my.hou_log('base_tax_amount_nr_tab('||I||')',base_tax_amount_nr_tab(I)) ;
9558 my.hou_log('lt_tax_amt_rate_tax_tab('||I||')',lt_tax_amt_rate_tax_tab(I)) ;
9559 my.hou_log('lt_tax_amt_non_rate_tab('||I||')',lt_tax_amt_non_rate_tab(I)) ;*/
9560 
9561 
9562 
9563     END LOOP;
9564 
9565     FOR counter IN 1 .. max_iter LOOP
9566         vamt := 0;
9567         v_tax_amt := 0;
9568         ln_vamt_nr:= 0;   --added by walton for inclusive tax
9569         ln_tax_amt_nr:=0; --added by walton for inclusive tax
9570 
9571         FOR i IN 1 .. row_count LOOP
9572 
9573           /*
9574           || Modified by aiyer for the fwd porting bug 4691616.
9575           || The following if clause will restrict the taxes whose tax_rate is null
9576           || i.e when tax_rate is null, tax_rate_tab(i) is 0.
9577           */
9578           IF ( tax_rate_tab( i )    <> 0           OR
9579                tax_rate_zero_tab(I) = -9999
9580               )                                    AND
9581             end_date_tab( I ) <> 0
9582           THEN
9583             IF tax_type_tab( I ) = 1 THEN
9584                 --Added by walton for inclusive tax on 08-Dec-07
9585                 ------------------------------------------------
9586                 IF ln_assessable_value =1
9587                 THEN
9588                   v_amt:=1;
9589                   ln_bsln_amt_nr :=0;
9590                 ELSE
9591                   v_amt :=0;
9592                   ln_bsln_amt_nr :=ln_assessable_value;
9593                 END IF;
9594 
9595             ELSIF tax_type_tab(I) = 4 THEN
9596                 --Added by walton for inclusive tax on 08-Dec-07
9597                 ------------------------------------------------
9598                 IF ln_vat_assessable_value =1
9599                 THEN
9600                   v_amt:=1;
9601                   ln_bsln_amt_nr :=0;
9602                 ELSE
9603                   v_amt :=0;
9604                   ln_bsln_amt_nr :=ln_vat_assessable_value;
9605                 END IF;
9606 
9607 
9608             --Added by walton for inclusive tax
9609             -------------------------------------
9610             ELSIF tax_type_tab(I) = 6 THEN
9611                 v_amt:=0;
9612                 ln_bsln_amt_nr :=0;
9613             -------------------------------------
9614             ELSE
9615               IF p_assessable_value IN ( 0, -1 ) OR tax_type_tab( I ) <> 1 THEN
9616                  v_amt:=1;                --Added by walton for inclusive tax
9617                  ln_bsln_amt_nr :=0;      --Added by walton for inclusive tax
9618               ELSIF p_vat_assessable_value IN ( 0, -1 ) OR tax_type_tab( I ) <> 4 THEN
9619                  v_amt:=1;                --Added by walton for inclusive tax
9620                  ln_bsln_amt_nr :=0;      --Added by walton for inclusive tax
9621               END IF;
9622             END IF;
9623 
9624  /* Commented out by Shyan for bug 10358786 on 28-Jan-2011 , Begin
9625  --------------------------------------------------------------------
9626             IF P1( i ) <> -1 THEN
9627               IF P1( i ) <> 0 THEN
9628                   vamt := vamt + tax_amt_tab( P1( I ) );
9629                   ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P1(I)),0); --added by walton for inclusive tax
9630               ELSIF P1(i) = 0 THEN
9631                   vamt := vamt + v_amt;
9632                   ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9633               END IF;
9634             END IF;
9635 
9636             IF p2( i ) <> -1 THEN
9637               IF p2( i ) <> 0 THEN
9638                   vamt := vamt + tax_amt_tab( p2( I ) );
9639                   ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P2(I)),0); --added by walton for inclusive tax
9640               ELSIF p2(i) = 0 THEN
9641                   vamt := vamt + v_amt;
9642                   ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9643               END IF;
9644             END IF;
9645             IF p3( i ) <> -1 THEN
9646               IF p3( i ) <> 0 THEN
9647                   vamt := vamt + tax_amt_tab( p3( I ) );
9648                   ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P3(I)),0); --added by walton for inclusive tax
9649               ELSIF p3(i) = 0 THEN
9650                   vamt := vamt + v_amt;
9651                   ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9652               END IF;
9653             END IF;
9654 
9655             IF p4( i ) <> -1 THEN
9656               IF p4( i ) <> 0 THEN
9657                 vamt := vamt + tax_amt_tab( p4( i ) );
9658                 ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P4(I)),0); --added by walton for inclusive tax
9659               ELSIF p4(i) = 0 THEN
9660                 vamt := vamt + v_amt;
9661                 ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9662               END IF;
9663             END IF;
9664 
9665             IF p5( i ) <> -1 THEN
9666               IF p5( i ) <> 0 THEN
9667                 vamt := vamt + tax_amt_tab( p5( i ) );
9668                 ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P5(I)),0); --added by walton for inclusive tax
9669               ELSIF p5(i) = 0 THEN
9670                 vamt := vamt + v_amt;
9671                 ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9672               END IF;
9673             END IF;
9674 
9675             IF P6( i ) <> -1 THEN
9676               IF P6( i ) <> 0 THEN
9677                   vamt := vamt + tax_amt_tab( P6( I ) );
9678                   ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P6(I)),0); --added by walton for inclusive tax
9679               ELSIF P6(i) = 0 THEN
9680                   vamt := vamt + v_amt;
9681                   ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9682               END IF;
9683             END IF;
9684 
9685             IF p7( i ) <> -1 THEN
9686               IF p7( i ) <> 0 THEN
9687                   vamt := vamt + tax_amt_tab( p7( I ) );
9688                   ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P7(I)),0); --added by walton for inclusive tax
9689               ELSIF p7(i) = 0 THEN
9690                   vamt := vamt + v_amt;
9691                   ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9692               END IF;
9693             END IF;
9694             IF p8( i ) <> -1 THEN
9695               IF p8( i ) <> 0 THEN
9696                   vamt := vamt + tax_amt_tab( p8( I ) );
9697                   ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P8(I)),0); --added by walton for inclusive tax
9698               ELSIF p8(i) = 0 THEN
9699                   vamt := vamt + v_amt;
9700                   ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9701               END IF;
9702             END IF;
9703 
9704             IF p9( i ) <> -1 THEN
9705               IF p9( i ) <> 0 THEN
9706                 vamt := vamt + tax_amt_tab( p9( i ) );
9707                 ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P9(I)),0); --added by walton for inclusive tax
9708               ELSIF p9(i) = 0 THEN
9709                 vamt := vamt + v_amt;
9710                 ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9711               END IF;
9712             END IF;
9713 
9714             IF p10( i ) <> -1 THEN
9715               IF p10( i ) <> 0 THEN
9716                 vamt := vamt + tax_amt_tab( p10( i ) );
9717                 ln_vamt_nr:=ln_vamt_nr+NVL(lt_tax_amt_non_rate_tab(P10(I)),0); --added by walton for inclusive tax
9718               ELSIF p10(i) = 0 THEN
9719                 vamt := vamt + v_amt;
9720                 ln_vamt_nr:=ln_vamt_nr+ln_bsln_amt_nr; --added by walton for inclusive tax
9721               END IF;
9722             END IF;
9723    ----------------------------------------------------------------
9724    Commented out by Shyan for bug 10358786 on 28-Jan-2011, End */
9725 
9726             -- Added by shujuan for bug 10358786 on 28-Jan-2011, Begin
9727             -----------------------------------------------------------
9728             ln_vamt_nr :=0;
9729             lt_tax_amt_non_rate_tab(I):=0;
9730             IF P1(i) <> -1 THEN
9731               IF P1(i) <> 0 THEN
9732                  IF lt_inclusive_tax_tab(P1(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P1(I)) IS NOT NULL then
9733                  IF NVL(adhoc_flag_tab(P1(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110704
9734                  vamt:= vamt + tax_amt_tab(P1(I));
9735                  END IF;--Added by zhiwei for bug#12604133 on 20110704
9736                  ln_vamt_nr := ln_vamt_nr +  NVL(lt_tax_amt_non_rate_tab(P1(I)), 0); --added by walton for inclusive tax
9737                  END IF;
9738               ELSIF P1(i) = 0 THEN
9739                 IF lt_inclusive_tax_tab(I) = 'Y' then
9740                 vamt := vamt + v_amt;
9741                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr;
9742                 ELSE
9743                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9744                 END IF;
9745                END IF;
9746             END IF;
9747 
9748             IF p2(i) <> -1 THEN
9749               IF p2(i) <> 0 THEN
9750                 IF lt_inclusive_tax_tab(P2(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P2(I)) IS NOT NULL then
9751                 IF NVL(adhoc_flag_tab(P2(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9752                 vamt := vamt + tax_amt_tab(p2(I));
9753                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9754                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P2(I)), 0); --added by walton for inclusive tax
9755                 END IF;
9756               ELSIF p2(i) = 0 THEN
9757                 IF lt_inclusive_tax_tab(I) = 'Y' then
9758                 vamt := vamt + v_amt;
9759                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9760                 ELSE
9761                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9762                 END IF;
9763               END IF;
9764             END IF;
9765 
9766             IF p3(i) <> -1 THEN
9767               IF p3(i) <> 0 THEN
9768                 IF lt_inclusive_tax_tab(P3(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P3(I)) IS NOT NULL then
9769                 IF NVL(adhoc_flag_tab(P3(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9770                 vamt       := vamt + tax_amt_tab(p3(I));
9771                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9772                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P3(I)), 0); --added by walton for inclusive tax
9773                  END IF;
9774               ELSIF p3(i) = 0 THEN
9775                 IF lt_inclusive_tax_tab(I) = 'Y' then
9776                 vamt := vamt + v_amt;
9777                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9778 
9779                 ELSE
9780                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9781                 END IF;
9782               END IF;
9783             END IF;
9784 
9785            IF p4(i) <> -1 THEN
9786               IF p4(i) <> 0 THEN
9787                 IF lt_inclusive_tax_tab(P4(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P4(I)) IS NOT NULL then
9788                 IF NVL(adhoc_flag_tab(P4(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9789                 vamt := vamt + tax_amt_tab(p4(I));
9790                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9791                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P4(I)), 0); --added by walton for inclusive tax
9792                  END IF;
9793               ELSIF p4(i) = 0 THEN
9794                 IF lt_inclusive_tax_tab(I) = 'Y' then
9795                 vamt := vamt + v_amt;
9796                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9797                 ELSE
9798                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9799                 END IF;
9800               END IF;
9801             END IF;
9802 
9803            IF p5(i) <> -1 THEN
9804               IF p5(i) <> 0 THEN
9805                 IF lt_inclusive_tax_tab(P5(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P5(I)) IS NOT NULL then
9806                 IF NVL(adhoc_flag_tab(P5(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9807                 vamt       := vamt + tax_amt_tab(p5(I));
9808                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9809                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P5(I)), 0); --added by walton for inclusive tax
9810                  END IF;
9811               ELSIF p5(i) = 0 THEN
9812                 IF lt_inclusive_tax_tab(I) = 'Y' then
9813                 vamt := vamt + v_amt;
9814                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9815                 ELSE
9816                ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9817                 END IF;
9818               END IF;
9819             END IF;
9820 
9821             -- Date 31/10/2006 Bug 5228046 added by SACSETHI  ( added column from Precedence 6 to 10 )
9822             -- start bug 5228046
9823             IF p6(i) <> -1 THEN
9824               IF p6(i) <> 0 THEN
9825                 IF lt_inclusive_tax_tab(P6(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P6(I)) IS NOT NULL then
9826                 IF NVL(adhoc_flag_tab(P6(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9827                 vamt := vamt + tax_amt_tab(p6(I));
9828                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9829                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P6(I)), 0); --added by walton for inclusive tax
9830                  END IF;
9831               ELSIF p6(i) = 0 THEN
9832                 IF lt_inclusive_tax_tab(I) = 'Y' then
9833                 vamt := vamt + v_amt;
9834                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9835                 ELSE
9836                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9837                 END IF;
9838               END IF;
9839             END IF;
9840             IF p7(i) <> -1 THEN
9841               IF p7(i) <> 0 THEN
9842                 IF lt_inclusive_tax_tab(P7(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P7(I)) IS NOT NULL then
9843                 IF NVL(adhoc_flag_tab(P7(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9844                 vamt := vamt + tax_amt_tab(p7(I));
9845                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9846                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P7(I)), 0); --added by walton for inclusive tax
9847                  END IF;
9848               ELSIF p7(i) = 0 THEN
9849                 IF lt_inclusive_tax_tab(I) = 'Y' then
9850                 vamt := vamt + v_amt;
9851                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9852                 ELSE
9853                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9854                 END IF;
9855               END IF;
9856             END IF;
9857 
9858             IF p8(i) <> -1 THEN
9859               IF p8(i) <> 0 THEN
9860                 IF lt_inclusive_tax_tab(P8(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P8(I)) IS NOT NULL then
9861                 IF NVL(adhoc_flag_tab(P8(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9862                 vamt := vamt + tax_amt_tab(p8(I));
9863                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9864                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P8(I)), 0); --added by walton for inclusive tax
9865                  END IF;
9866               ELSIF p8(i) = 0 THEN
9867                 IF lt_inclusive_tax_tab(I) = 'Y' then
9868                 vamt := vamt + v_amt;
9869                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9870                 ELSE
9871                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9872                 END IF;
9873               END IF;
9874             END IF;
9875 
9876             IF p9(i) <> -1 THEN
9877               IF p9(i) <> 0 THEN
9878                 IF lt_inclusive_tax_tab(P9(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P9(I)) IS NOT NULL then
9879                 IF NVL(adhoc_flag_tab(P9(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9880                 vamt := vamt + tax_amt_tab(p9(I));
9881                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9882                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P9(I)), 0); --added by walton for inclusive tax
9883                  END IF;
9884               ELSIF p9(i) = 0 THEN
9885                 IF lt_inclusive_tax_tab(I) = 'Y' then
9886                 vamt := vamt + v_amt;
9887                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9888                 ELSE
9889                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9890                 END IF;
9891               END IF;
9892             END IF;
9893 
9894            IF p10(i) <> -1 THEN
9895               IF p10(i) <> 0 THEN
9896                 IF lt_inclusive_tax_tab(P10(I)) = 'Y' OR lt_tax_amt_rate_tax_tab(P10(I)) IS NOT NULL then
9897                 IF NVL(adhoc_flag_tab(P10(I)),'N') = 'N' THEN--Added by zhiwei for bug#12604133 on 20110627
9898                 vamt := vamt + tax_amt_tab(p10(I));
9899                 END IF;--Added by zhiwei for bug#12604133 on 20110627
9900                 ln_vamt_nr := ln_vamt_nr + NVL(lt_tax_amt_non_rate_tab(P10(I)), 0); --added by walton for inclusive tax
9901                  END IF;
9902               ELSIF p10(i) = 0 THEN
9903                 IF lt_inclusive_tax_tab(I) = 'Y' then
9904                 vamt := vamt + v_amt;
9905                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr; --added by walton for inclusive tax
9906                 ELSE
9907                 ln_vamt_nr := ln_vamt_nr + ln_bsln_amt_nr + p_tax_amount;
9908                 END IF;
9909               END IF;
9910             END IF;
9911             -- end bug 5228046
9912             -----------------------------------------------------------
9913             -- Added by shujuan for bug 10358786 on 28-Jan-2011, End
9914 
9915 
9916             base_tax_amt_tab(I) := vamt;
9917             tax_target_tab(I) := vamt;
9918             base_tax_amount_nr_tab(I):=ln_vamt_nr;/*9692478*/
9919 
9920             --------------------------------------------------------------------------------------
9921             /*Change History: jai_cmn_tax_defaultation_pkg
9922             Last Modified By Jagdish Bhosle.  2001/04/05
9923             The follow check will ensure that for Bond reg. Txns
9924             excise duty will not be added to original Line amount. */
9925             --------------------------------------------------------------------------------------
9926            /* IF (v_register_code='BOND_REG') THEN            --- Added By Jagdish    2001/04/05
9927               IF  counter = max_iter AND tax_type_tab( I ) NOT IN ( 1, 2 ) THEN
9928                 v_func_tax_amt := v_tax_amt +  ( vamt * ( tax_rate_tab( i )/100));
9929                 v_tax_amt := v_tax_amt + ( vamt * ( tax_rate_tab( i )/100));
9930                 ln_tax_amt_nr:=ln_tax_amt_nr+(ln_vamt_nr*(tax_rate_tab(i)/100)); --added by walton for inclusive
9931               END IF;
9932 
9933             ELSE*/ --commented by Xiao for API.
9934               v_func_tax_amt := v_tax_amt +  ( vamt * ( tax_rate_tab( i )/100));
9935               v_tax_amt := v_tax_amt + ( vamt * ( tax_rate_tab( i )/100));
9936               ln_tax_amt_nr:=ln_tax_amt_nr+(ln_vamt_nr*(tax_rate_tab(i)/100)); --added by walton for inclusive
9937             --END IF;  -- End of Addition Jagdish 2001/04/05*/
9938 
9939             ELSIF tax_rate_tab(I) = 0 THEN
9940               base_tax_amt_tab(I) := tax_amt_tab(i);
9941               v_tax_amt := tax_amt_tab( i );
9942               ln_tax_amt_nr:=lt_tax_amt_non_rate_tab(i);
9943               tax_target_tab(I) := v_tax_amt;
9944             ELSIF end_date_tab( I ) = 0 THEN
9945               tax_amt_tab(I) := 0;
9946               base_tax_amt_tab(I) := 0;
9947               base_tax_amount_nr_tab(I):=0; /*9692478*/
9948 
9949               tax_target_tab(I) := 0;
9950             END IF;
9951             tax_amt_tab( I ) := NVL( v_tax_amt, 0 );
9952 
9953           -- Modified by Shyan for bug 10358786 on 28-Jan-2011, Begin
9954           -------------------------------------------------------------------
9955           --lt_tax_amt_rate_tax_tab(I) := tax_amt_tab(I); --added by walton for inclusive tax
9956            --IF lt_inclusive_tax_tab(I) = 'Y' THEN--Commented by zhiwei for Bug#12604133
9957            IF lt_inclusive_tax_tab(I) = 'Y'  AND NVL(adhoc_flag_tab(I),'N') = 'N' then--Added by zhiwei for Bug#12604133
9958               lt_tax_amt_rate_tax_tab(I) := tax_amt_tab(I);
9959            END IF;
9960           -------------------------------------------------------------------
9961           -- Modified by Shyan for bug 10358786 on 28-Jan-2011, end
9962 
9963             lt_tax_amt_non_rate_tab(I):=ln_tax_amt_nr;  --added by walton for inclusive tax
9964             /*tax_amt_tab(I) :=  round(tax_amt_tab(I)  ,round_factor_tab(I));  --added by csahoo for bug#6077133*/--commented by walton for inclusive tax
9965             --func_tax_amt_tab(I) := NVL(v_func_tax_amt,0);  --Commented by walton for bug#9288016
9966             base_tax_amount_nr_tab(I):=ln_vamt_nr; --added by Xiao Lv for bug#8789761 on 30-Oct-09
9967 
9968             IF counter = max_iter THEN
9969               IF end_date_tab(I) = 0 THEN
9970                 tax_amt_tab( i ) := 0;
9971                 func_tax_amt_tab(i) := 0;
9972               END IF;
9973             END IF;
9974 
9975 
9976 /*my.hou_log('Loop3',I) ;
9977 my.hou_log('tax_amt_tab('||I||')',tax_amt_tab(I)) ;
9978 my.hou_log('base_tax_amt_tab('||I||')',base_tax_amt_tab(I)) ;
9979 my.hou_log('base_tax_amount_nr_tab('||I||')',base_tax_amount_nr_tab(I)) ;
9980 my.hou_log('lt_tax_amt_rate_tax_tab('||I||')',lt_tax_amt_rate_tax_tab(I)) ;
9981 my.hou_log('lt_tax_amt_non_rate_tab('||I||')',lt_tax_amt_non_rate_tab(I)) ;
9982 my.hou_log('reverse_flag_tab('||I||')',reverse_flag_tab(I)) ;
9983 my.hou_log('tax_rate_tab('||I||')',tax_rate_tab(I)) ;*/
9984 
9985 
9986 
9987             vamt := 0;
9988             v_amt := 0;
9989             v_tax_amt := 0;
9990             v_func_tax_amt := 0;
9991             ln_vamt_nr :=0;    --added by walton for inclusive tax
9992             ln_tax_amt_nr:=0;   --added by walton for inclusive tax
9993         END LOOP;
9994     END LOOP;
9995 
9996     --Added by walton for inclusive tax
9997     ---------------------------------------------------------------------------------------
9998     FOR I IN 1 .. ROW_COUNT --Compute Factor
9999     LOOP
10000       IF lt_inclusive_tax_tab(I) = 'Y'
10001       THEN
10002         ln_total_tax_per_rupee := ln_total_tax_per_rupee + nvl(lt_tax_amt_rate_tax_tab(I),0) ;
10003         ln_total_non_rate_tax := ln_total_non_rate_tax + nvl(lt_tax_amt_non_rate_tab(I),0);
10004       END IF;
10005     END LOOP; --End Compute Factor
10006 
10007     ln_total_tax_per_rupee := ln_total_tax_per_rupee + 1;
10008 
10009     IF ln_total_tax_per_rupee <> 0
10010     THEN
10011       ln_exclusive_price := (NVL(p_tax_amount,0)  -  ln_total_non_rate_tax ) / ln_total_tax_per_rupee;
10012     END If;
10013 
10014 
10015 
10016 
10017 
10018 
10019     FOR i in 1 .. row_count  --Compute Tax Amount
10020     LOOP
10021        -- Added by Shyan for bug 10358786 on 28-Jan-2011 , Begin
10022        ------------------------------------------------------------------
10023        --tax_amt_tab (i) := (lt_tax_amt_rate_tax_tab(I) * ln_exclusive_price ) + lt_tax_amt_non_rate_tab(I);
10024         tax_amt_tab (i):=0;
10025         IF lt_inclusive_tax_tab(I) = 'Y' THEN
10026            IF  (tax_type_tab(I) = 1 and  ln_assessable_value>1) OR
10027                (tax_type_tab(I) = 4 and  ln_vat_assessable_value> 1)
10028                --OR (tax_type_tab(I) = 7 and ln_gst_assessable_value >1)
10029                THEN
10030 
10031                IF tax_type_tab(I) = 1 and ln_assessable_value >1 Then
10032                   ln_amount:= ln_assessable_value;
10033                ELSIF tax_type_tab(I) = 4 and ln_vat_assessable_value >1 Then
10034                   ln_amount:= ln_vat_assessable_value;
10035 /*               ELSIF tax_type_tab(I) = 7 and ln_gst_assessable_value >1 Then
10036                 ln_amount:= ln_gst_assessable_value;*/
10037                END IF;
10038 
10039               IF P1(I) < line_no_tab(I) AND p1(I) NOT IN (-1, 0) then
10040                  tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P1(i))* tax_rate_tab(i)/100;
10041               ELSIF P1(I)=0 Then
10042                  tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10043               END IF;
10044 
10045              IF P2(I) < line_no_tab(I) AND p2(I) NOT IN (-1, 0) then
10046                 tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P2(i))* tax_rate_tab(i)/100;
10047              ELSIF P2(I)=0 Then
10048                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10049              END IF;
10050 
10051              IF P3(I) < line_no_tab(I) AND p3(I) NOT IN (-1, 0) then
10052                 tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P3(i))* tax_rate_tab(i)/100;
10053              ELSIF P3(I)=0 Then
10054                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10055              END IF;
10056 
10057              IF P4(I) < line_no_tab(I) AND p4(I) NOT IN (-1, 0) then
10058               tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P4(i))* tax_rate_tab(i)/100;
10059              ELSIF P4(I)=0 Then
10060                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10061              END IF;
10062 
10063              IF P5(I) < line_no_tab(I) AND p5(I) NOT IN (-1, 0) then
10064              tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P5(i))* tax_rate_tab(i)/100;
10065              ELSIF P5(I)=0 Then
10066                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10067              END IF;
10068 
10069              IF P6(I) < line_no_tab(I) AND p6(I) NOT IN (-1, 0) then
10070                  tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P6(i))* tax_rate_tab(i)/100;
10071              ELSIF P6(I)=0 Then
10072                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10073              END IF;
10074 
10075              IF P7(I) < line_no_tab(I) AND p7(I) NOT IN (-1, 0) then
10076                 tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P7(i))* tax_rate_tab(i)/100;
10077              ELSIF P7(I)=0 Then
10078                 tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10079              END IF;
10080 
10081              IF P8(I) < line_no_tab(I) AND p8(I) NOT IN (-1, 0) then
10082                 tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P8(i))* tax_rate_tab(i)/100;
10083              ELSIF P8(I)=0 Then
10084                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10085              END IF;
10086 
10087              IF P9(I) < line_no_tab(I) AND p9(I) NOT IN (-1, 0) then
10088                 tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P9(i))* tax_rate_tab(i)/100;
10089              ELSIF P9(I)=0 Then
10090                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10091              END IF;
10092 
10093              IF P10(I) < line_no_tab(I) AND p10(I) NOT IN (-1, 0) then
10094                 tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P10(i))* tax_rate_tab(i)/100;
10095              ELSIF P10(I)=0 Then
10096                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10097               END IF;
10098         ELSE
10099              tax_amt_tab (i) := (lt_tax_amt_rate_tax_tab(I) * ln_exclusive_price ) + lt_tax_amt_non_rate_tab(I);
10100         END IF;
10101       ELSE
10102           IF   (tax_type_tab(I) = 1 and ln_assessable_value >1) OR
10103                (tax_type_tab(I) = 4 and ln_vat_assessable_value > 1)
10104                --OR (tax_type_tab(I) = 7 and ln_gst_assessable_value >1)
10105                THEN
10106 
10107                IF tax_type_tab(I) = 1 and ln_assessable_value >1 Then
10108                   ln_amount:= ln_assessable_value;
10109                ELSIF tax_type_tab(I) = 4 and ln_vat_assessable_value >1 Then
10110                   ln_amount:= ln_vat_assessable_value;
10111 /*               ELSIF tax_type_tab(I) = 7 and ln_gst_assessable_value >1 Then
10112                 ln_amount:= ln_gst_assessable_value;*/
10113                END IF;
10114            ELSE ln_amount:= p_tax_amount;
10115            END IF;
10116           IF P1(I) < line_no_tab(I) AND p1(I) NOT IN (-1, 0) then
10117            tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P1(i))* tax_rate_tab(i)/100;
10118           ELSIF P1(I)=0 Then
10119                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10120           END IF;
10121 
10122           IF P2(I) < line_no_tab(I) AND p2(I) NOT IN (-1, 0) then
10123              tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P2(i))* tax_rate_tab(i)/100;
10124           ELSIF P2(I)=0 Then
10125                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10126           END IF;
10127 
10128           IF P3(I) < line_no_tab(I) AND p3(I) NOT IN (-1, 0) then
10129              tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P3(i))* tax_rate_tab(i)/100;
10130           ELSIF P3(I)=0 Then
10131                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10132           END IF;
10133 
10134           IF P4(I) < line_no_tab(I) AND p4(I) NOT IN (-1, 0) then
10135               tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P4(i))* tax_rate_tab(i)/100;
10136           ELSIF P4(I)=0 Then
10137                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10138           END IF;
10139 
10140           IF P5(I) < line_no_tab(I) AND p5(I) NOT IN (-1, 0) then
10141              tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P5(i))* tax_rate_tab(i)/100;
10142           ELSIF P5(I)=0 Then
10143                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10144           END IF;
10145 
10146           IF P6(I) < line_no_tab(I) AND p6(I) NOT IN (-1, 0) then
10147            tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P6(i))* tax_rate_tab(i)/100;
10148           ELSIF P6(I)=0 Then
10149                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10150           END IF;
10151 
10152           IF P7(I) < line_no_tab(I) AND p7(I) NOT IN (-1, 0) then
10153            tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P7(i))* tax_rate_tab(i)/100;
10154           ELSIF P7(I)=0 Then
10155                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10156           END IF;
10157 
10158           IF P8(I) < line_no_tab(I) AND p8(I) NOT IN (-1, 0) then
10159            tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P8(i))* tax_rate_tab(i)/100;
10160           ELSIF P8(I)=0 Then
10161                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10162           END IF;
10163 
10164           IF P9(I) < line_no_tab(I) AND p9(I) NOT IN (-1, 0) then
10165            tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P9(i))* tax_rate_tab(i)/100;
10166           ELSIF P9(I)=0 Then
10167                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10168           END IF;
10169 
10170           IF P10(I) < line_no_tab(I) AND p10(I) NOT IN (-1, 0) then
10171            tax_amt_tab(i) :=  tax_amt_tab(i) + tax_amt_tab(P10(i))* tax_rate_tab(i)/100;
10172           ELSIF P10(I)=0 Then
10173                tax_amt_tab(i) :=  tax_amt_tab(i) + ln_amount * tax_rate_tab(i)/100;
10174           END IF;
10175        END IF;
10176        ------------------------------------------------------------------
10177        -- Added by Shyan for bug 10358786 on 28-Jan-2011 , End
10178 
10179 
10180        --Added by zhiwei for Bug#12604133 on 20110623 begin
10181        ---------------------------------------------------------
10182        if nvl(adhoc_flag_tab(I),'N') = 'Y' then
10183            tax_amt_tab(I) := tax_amount_temp_tab(I);
10184        end if;
10185        if nvl(adhoc_flag_tab(I),'N') = 'Y'
10186                   and nvl(vat_flag_tab(I),'N')='Q'
10187                   and nvl(reverse_flag_tab(I),0) = 0 then
10188            tax_amt_tab(I) := qty_rate_tab(I) * p_line_quantity;
10189        end if;
10190        ---------------------------------------------------------
10191        --Added by zhiwei for Bug#12604133 on 20110623 end
10192 
10193 
10194        func_tax_amt_tab(i):=tax_amt_tab (i); --Added by walton for bug#9288016
10195        tax_amt_tab(I) :=  round(tax_amt_tab(I)  ,round_factor_tab(I));
10196        base_tax_amt_tab(I):= ln_exclusive_price * base_tax_amt_tab(I)
10197                            + base_tax_amount_nr_tab(I);  --added by Xiao Lv for bug#8789761 on 30-Oct-09
10198     END LOOP; --End Compute Tax Amount
10199     --------------------------------------------------------------------------------------------------------
10200 
10201     row_count := 1;
10202 
10203     -- this is the place where you hv to add your insert statements for transaction specific tables
10204     rec := null ; -- added by ssumaith - code review Commented for TCS buG#6109941
10205     FOR i in 1.. lt_tax_table.count LOOP
10206         rec := lt_tax_table(i);
10207     -- ends additions by ssumaith - code review comments for TCS bug# 6109941
10208         IF tax_type_tab(row_count) <> 2 THEN
10209             v_tax_amt := v_tax_amt + NVL(tax_amt_tab(row_count),0);
10210         END IF;
10211 
10212         /** bgowrava for forward porting bug# 5631784  */
10213           if rec.mod_cr_percentage is not null and rec.mod_cr_percentage > 0 then
10214             v_modvat_flag := 'Y';
10215             elsif rec.mod_cr_percentage is null then
10216             v_modvat_flag := 'N';
10217         end if;
10218         /*end  bug# 5631784  */
10219 
10220     IF transaction_name = 'AR_LINES' THEN
10221       --Added by zhiwei for Bug#12604133 on 20110628 begin
10222       ------------------------------------------------------
10223       if adhoc_flag_tab(row_count) = 'Y' and vat_flag_tab(row_count) = 'Q' and nvl(reverse_flag_tab(I),0) = 1 then
10224           UPDATE JAI_AR_TRX_TAX_LINES
10225 
10226              SET tax_amount      = ROUND(NVL(tax_amt_tab(row_count), 0), REC.ROUNDING_FACTOR),
10227                  base_tax_amount   = DECODE(NVL(base_tax_amt_tab(row_count), 0), 0, NVL(tax_amt_tab(row_count),0), NVL(base_tax_amt_tab(row_count), 0)),
10228                  func_tax_amount   = NVL(func_tax_amt_tab(row_count),0) *  v_currency_conv_factor,
10229                  qty_rate          = qty_rate_tab(row_count),
10230                  last_update_date  = p_last_update_date,
10231                  last_updated_by   = p_last_updated_by,
10232                  last_update_login = p_last_update_login
10233            WHERE link_to_cust_trx_line_id = P_line_id
10234              AND tax_line_no = row_count;
10235 
10236       else
10237       ------------------------------------------------------
10238       --Added by zhiwei for Bug#12604133 on 20110628 end
10239 
10240             UPDATE JAI_AR_TRX_TAX_LINES
10241                SET tax_amount      = ROUND(NVL(tax_amt_tab(row_count), 0), REC.ROUNDING_FACTOR),
10242                    base_tax_amount   = DECODE(NVL(base_tax_amt_tab(row_count), 0), 0, NVL(tax_amt_tab(row_count),0), NVL(base_tax_amt_tab(row_count), 0)),
10243                    func_tax_amount   = NVL(func_tax_amt_tab(row_count),0) *  v_currency_conv_factor,
10244                    last_update_date  = p_last_update_date,
10245                    last_updated_by   = p_last_updated_by,
10246                    last_update_login = p_last_update_login
10247              WHERE link_to_cust_trx_line_id = P_line_id
10248                AND tax_line_no = row_count;
10249        end if;--Added by zhiwei for Bug#12604133 on 20110628
10250     ELSIF transaction_name = 'AP_STANDALONE' THEN
10251       --Added by zhiwei for Bug#12604133 on 20110628 begin
10252       ------------------------------------------------------
10253       if adhoc_flag_tab(row_count) = 'Y' and vat_flag_tab(row_count) = 'Q' and nvl(reverse_flag_tab(I),0) = 1 then
10254           UPDATE jai_cmn_document_taxes
10255              SET tax_amt      = ROUND(NVL(tax_amt_tab(row_count), 0), REC.ROUNDING_FACTOR),
10256                  --base_tax_amount   = DECODE(NVL(base_tax_amt_tab(row_count), 0), 0, NVL(tax_amt_tab(row_count),0), NVL(base_tax_amt_tab(row_count), 0)),
10257                  func_tax_amt   = NVL(func_tax_amt_tab(row_count),0) *  v_currency_conv_factor,
10258                  qty_rate          = qty_rate_tab(row_count),
10259                  last_update_date  = p_last_update_date,
10260                  last_updated_by   = p_last_updated_by,
10261                  last_update_login = p_last_update_login
10262            WHERE source_doc_id = p_header_id
10263              AND source_doc_line_id = P_line_id
10264              AND tax_line_no = row_count;
10265 
10266 
10267       else
10268       ------------------------------------------------------
10269       --Added by zhiwei for Bug#12604133 on 20110628 end
10270       UPDATE jai_cmn_document_taxes
10271          SET tax_amt      = ROUND(NVL(tax_amt_tab(row_count), 0), REC.ROUNDING_FACTOR),
10272              --base_tax_amount   = DECODE(NVL(base_tax_amt_tab(row_count), 0), 0, NVL(tax_amt_tab(row_count),0), NVL(base_tax_amt_tab(row_count), 0)),
10273              func_tax_amt   = NVL(func_tax_amt_tab(row_count),0) *  v_currency_conv_factor,
10274              last_update_date  = p_last_update_date,
10275              last_updated_by   = p_last_updated_by,
10276              last_update_login = p_last_update_login
10277        WHERE source_doc_id = p_header_id
10278          AND source_doc_line_id = P_line_id
10279          AND tax_line_no = row_count;
10280       end if; --Added by zhiwei for Bug#12604133 on 20110628
10281     END IF;
10282 
10283     row_count := row_count + 1;
10284   END LOOP;
10285 
10286     p_tax_amount := nvl(v_tax_amt,0);
10287 
10288    EXCEPTION
10289      WHEN OTHERS THEN
10290       FND_MESSAGE.SET_NAME('JA','JAI_EXCEPTION_OCCURED');
10291       FND_MESSAGE.SET_TOKEN('JAI_PROCESS_MSG', lv_object_name ||'. Err:'||sqlerrm );
10292       app_exception.raise_exception;
10293 
10294 END ja_in_calc_prec_taxes;
10295 
10296 
10297 /*
10298   ||When occurred error, populate table jai_interface_err_lines and fnd log error info ,
10299   */
10300 /*PROCEDURE log_err(
10301       pv_err_level             IN JAI_INTERFACE_ERR_LINES.ERROR_TYPE%TYPE, --'LINE' OR 'TAX' OR 'DIS'
10302       pn_line_id               IN JAI_INTERFACE_ERR_LINES.INTERFACE_ERROR_ID%TYPE,
10303       pn_interface_line_id     IN JAI_INTERFACE_ERR_LINES.INTERFACE_ERROR_ID%TYPE,
10304       pn_interface_tax_line_id IN JAI_INTERFACE_ERR_LINES.INTERFACE_ERROR_ID%TYPE,
10305       pn_interface_dis_line_id IN JAI_INTERFACE_ERR_LINES.INTERFACE_ERROR_ID%TYPE,
10306       pv_err_mess              IN JAI_INTERFACE_ERR_LINES.ERROR_MESSAGE%TYPE,
10307       pv_invalid_value         IN JAI_INTERFACE_ERR_LINES.INVALID_VALUE%TYPE,
10308       pn_request_id            IN JAI_INTERFACE_ERR_LINES.REQUEST_ID%TYPE
10309      )
10310 IS
10311 BEGIN
10312   INSERT INTO JAI_INTERFACE_ERR_LINES
10313     ( --LINE_ID,
10314      ERROR_TYPE,
10315      INTERFACE_LINE_ID,
10316      INTERFACE_TAX_LINE_ID,
10317      INTERFACE_DIS_LINE_ID,
10318      ERROR_MESSAGE,
10319      INVALID_VALUE,
10320      REQUEST_ID
10321      )
10322  VALUES
10323     ( --pn_line_id,
10324      pv_err_level,
10325      pn_interface_line_id,
10326      pn_interface_tax_line_id,
10327      pn_interface_dis_line_id,
10328      pv_err_mess,
10329      pv_invalid_value,
10330      pn_request_id
10331      );
10332   --fnd_file.put_line(FND_FILE.LOG,pv_err_mess);
10333 END log_err;*/
10334 
10335 
10336 PROCEDURE get_line_status(
10337   pn_interface_line_id IN  NUMBER
10338 , xv_import_status     OUT NOCOPY VARCHAR2
10339 , xv_process_status    OUT NOCOPY VARCHAR2
10340 )
10341 IS
10342 
10343 CURSOR line_status_cur IS
10344 SELECT import_status,
10345        import_process
10346   FROM jai_interface_lines_all
10347  WHERE interface_line_id = pn_interface_line_id;
10348 
10349 BEGIN
10350 
10351   OPEN line_status_cur;
10352   FETCH line_status_cur INTO xv_import_status, xv_process_status;
10353   CLOSE line_status_cur;
10354 
10355 END get_line_status;
10356 
10357 FUNCTION get_external_dist_account_ccid(
10358   pn_invoice_id       IN         NUMBER
10359 , pn_line_number      IN         NUMBER
10360 , pn_tax_line_no      IN         NUMBER
10361 )
10362 RETURN NUMBER IS
10363   CURSOR external_dist_ccid_cur IS
10364   SELECT
10365     tax.code_combination_id
10366   FROM
10367     --jai_interface_dis_lines_all  dist,
10368     jai_interface_lines_all      lines,
10369     jai_interface_tax_lines_all  tax
10370   WHERE tax.tax_line_no = pn_tax_line_no
10371     AND tax.interface_line_id = lines.interface_line_id
10372     AND lines.internal_trx_id = pn_invoice_id
10373     AND lines.internal_trx_line_id = pn_line_number;
10374 
10375 ln_external_dist_acct_ccid             NUMBER;
10376 
10377 ln_dbg_level        NUMBER         := FND_LOG.g_current_runtime_level;
10378 ln_proc_level       NUMBER         := FND_LOG.level_procedure;
10379 lv_proc_name        VARCHAR2 (100) := 'get_external_dist_account_ccid';
10380 BEGIN
10381    OPEN external_dist_ccid_cur;
10382    FETCH external_dist_ccid_cur INTO ln_external_dist_acct_ccid;
10383    CLOSE external_dist_ccid_cur;
10384 
10385    RETURN ln_external_dist_acct_ccid;
10386 
10387 END get_external_dist_account_ccid;
10388 
10389 
10390 
10391 --==========================================================================
10392 --  PROCEDURE NAME:
10393 --
10394 --    populate_jai_interface_taxes               Private
10395 --
10396 --  DESCRIPTION:
10397 --    Fetch the tax lines from jai_interface_tax_lines_all, and insert them
10398 --  to AR/AP tax tables.
10399 --
10400 --  PARAMETERS:
10401 --      In:  pn_interface_line_id        IN NUMBER    interface line id
10402 --
10403 --     Out:
10404 --
10405 --
10406 -- PRE-COND  : interface line exists
10407 -- EXCEPTIONS: errors when fail to insert the taxes.
10408 --
10409 --===========================================================================
10410 PROCEDURE populate_jai_interface_taxes( pn_interface_line_id NUMBER)
10411 IS
10412   ln_user_id            NUMBER  := fnd_global.user_id;
10413   ln_login_id           NUMBER  := fnd_global.login_id;
10414   ld_sys_date           DATE    := SYSDATE;
10415 
10416   lv_insert_jai_ap_tax_sql      VARCHAR2(32000);
10417   lv_insert_jai_ar_tax_sql      VARCHAR2(32000);
10418   v_modvat_flag                 VARCHAR2(1);
10419   lv_tax_sql                    VARCHAR2(4000);
10420   ln_tax_category_id            NUMBER;
10421   ln_tax_line_count             NUMBER;
10422 
10423   refc_tax_cur          ref_cur_typ;
10424   tax_lines_rec         tax_typ;
10425   no_tax_cate_exc       EXCEPTION;
10426   error_module          EXCEPTION;
10427 
10428   ln_doc_tax_id         NUMBER;
10429   ln_header_id          NUMBER;
10430   lv_err_mess           VARCHAR2(300);
10431 
10432   ln_dbg_level          NUMBER         := FND_LOG.g_current_runtime_level;
10433   ln_proc_level         NUMBER         := FND_LOG.level_procedure;
10434   lv_proc_name          VARCHAR2 (100) := 'populate_jai_interface_taxes';
10435 
10436   cursor cur_get_jai_line_rec(
10437              pn_trx_id      jai_ar_trx_lines.CUSTOMER_TRX_ID%TYPE,
10438              pn_trx_line_id jai_ar_trx_lines.CUSTOMER_TRX_ID%TYPE
10439   )
10440   is
10441   select
10442        CUSTOMER_TRX_LINE_ID     ,
10443        CUSTOMER_TRX_ID          ,
10444        INVENTORY_ITEM_ID        ,
10445        UNIT_CODE                ,
10446        QUANTITY                 ,
10447        UNIT_SELLING_PRICE       ,
10448        ASSESSABLE_VALUE         ,
10449        CREATION_DATE            ,
10450        CREATED_BY               ,
10451        LAST_UPDATE_DATE         ,
10452        LAST_UPDATED_BY          ,
10453        LAST_UPDATE_LOGIN        ,
10454        VAT_ASSESSABLE_VALUE     ,
10455        GST_ASSESSABLE_VALUE
10456   from jai_ar_trx_lines
10457   where customer_trx_id = pn_trx_id
10458   and   customer_trx_line_id = pn_trx_line_id;
10459 
10460   get_jai_trx_line cur_get_jai_line_rec%rowtype;
10461 
10462   Cursor transaction_type_cur(cn_customer_trx_id number)
10463   IS
10464   Select a.type
10465   From RA_CUST_TRX_TYPES_ALL a, RA_CUSTOMER_TRX_ALL b
10466   Where a.cust_trx_type_id = b.cust_trx_type_id
10467   And b.customer_trx_id = cn_customer_trx_id
10468   And NVL(a.org_id, 0) = NVL(b.org_id, 0);
10469 
10470   v_line_amount number;
10471   v_quantity    number;
10472   v_line_tax_amount number;
10473   l_tcs_line_num number;
10474   ln_tcs_regime_id  number;
10475   ln_organization_id number;
10476   l_org_id number;
10477   l_bill_to_customer_id number;
10478   l_bill_to_site_use_id number;
10479   ln_trx_date date;
10480   ln_threshold_slab_id number;
10481   ln_threshold_tax_cat_id number;
10482   ln_tax_amount           NUMBER;
10483   lv_process_flag    varchar2(100);
10484   lv_process_message varchar2(1000);
10485   lv_taxable_event   jai_interface_lines_all.taxable_event%type;
10486   ln_internal_trx_line_id jai_interface_lines_all.internal_trx_line_id%type;
10487   ln_internal_trx_id jai_interface_lines_all.internal_trx_id%type;
10488   l_tcs_sur_line_num number;
10489   l_tot_tax_lines    number;
10490 
10491   CURSOR BOOKS_TRX_CUR(cn_customer_trx_id number)
10492   IS
10493   SELECT set_of_books_id,
10494              primary_salesrep_id,
10495              invoice_currency_code,
10496              exchange_rate_type,
10497              exchange_date,
10498              exchange_rate
10499   FROM JAI_AR_TRXS
10500   WHERE customer_trx_id = cn_customer_trx_id;
10501 
10502   c_from_currency_code VARCHAR2(15);
10503   c_conversion_type    VARCHAR2(30);
10504   c_conversion_date    DATE;
10505   c_conversion_rate    NUMBER := 0;
10506   v_converted_rate     NUMBER := 1;
10507   v_books_id           NUMBER;
10508   v_salesrep_id        NUMBER;
10509   v_trans_type            VARCHAR2(30);
10510 
10511   CURSOR GC_GET_REGIME_ID(CP_REGIME_CODE JAI_RGM_DEFINITIONS.REGIME_CODE%TYPE) IS
10512   SELECT REGIME_ID
10513   FROM JAI_RGM_DEFINITIONS
10514   WHERE REGIME_CODE = CP_REGIME_CODE;
10515 
10516   CURSOR bind_cur(cn_customer_trx_id number)
10517   IS
10518   SELECT RCTA.org_id,
10519              RCTA.bill_to_customer_id,
10520              NVL(RCTA.bill_to_site_use_id, 0),
10521              RCTA.trx_date
10522   FROM RA_CUSTOMER_TRX_ALL RCTA
10523   WHERE RCTA.customer_trx_id = cn_customer_trx_id;
10524 
10525   l_max_tax_line_no number;
10526 
10527   CURSOR get_taxable_event_cur IS
10528   SELECT taxable_event
10529     FROM jai_interface_lines_all
10530    WHERE interface_line_id = pn_interface_line_id;
10531 
10532   ln_p1 NUMBER;
10533   ln_p2 NUMBER;
10534   ln_p3 NUMBER;
10535   ln_p4 NUMBER;
10536   ln_p5 NUMBER;
10537   ln_p6 NUMBER;
10538   ln_p7 NUMBER;
10539   ln_p8 NUMBER;
10540   ln_p9 NUMBER;
10541   ln_p10 NUMBER;
10542   ln_tax_rate NUMBER;
10543   ln_qty_rate number;--Added by zhiwei for Bug#12604133 on 20110623
10544 BEGIN
10545 
10546 lv_insert_jai_ap_tax_sql :=
10547     'INSERT INTO jai_cmn_document_taxes
10548      ( doc_tax_id
10549      , tax_line_no
10550      , tax_id
10551      , tax_type
10552      , currency_code
10553      , tax_rate
10554      , uom
10555      , tax_amt
10556      , func_tax_amt
10557      , modvat_flag
10558      , source_doc_type
10559      , source_doc_id
10560      , source_doc_line_id
10561      , source_table_name
10562      , tax_modified_by
10563      , adhoc_flag
10564      , precedence_1
10565      , precedence_2
10566      , precedence_3
10567      , precedence_4
10568      , precedence_5
10569      , precedence_6
10570      , precedence_7
10571      , precedence_8
10572      , precedence_9
10573      , precedence_10
10574      , creation_date
10575      , created_by
10576      , last_update_date
10577      , last_updated_by
10578      , last_update_login
10579      , object_version_number
10580      , source_doc_parent_line_no
10581      , qty_rate
10582      )
10583      VALUES
10584      ( :1
10585      , :2
10586      , :3
10587      , :4
10588      , :5
10589      , :6
10590      , :7
10591      , :8
10592      , :9
10593      , :10
10594      , :11
10595      , :12
10596      , :13
10597      , :14
10598      , :15
10599      , :16
10600      , :17
10601      , :18
10602      , :19
10603      , :20
10604      , :21
10605      , :22
10606      , :23
10607      , :24
10608      , :25
10609      , :26
10610      , :27
10611      , :28
10612      , :29
10613      , :30
10614      , :31
10615      , :32
10616      , :33
10617      , :34
10618      )';
10619 lv_insert_jai_ar_tax_sql :=
10620     'insert into jai_ar_trx_tax_lines
10621      ( tax_line_no
10622      , customer_trx_line_id
10623      , link_to_cust_trx_line_id
10624      , precedence_1
10625      , precedence_2
10626      , precedence_3
10627      , precedence_4
10628      , precedence_5
10629      , tax_id
10630      , tax_rate
10631      , uom
10632      , tax_amount
10633      , invoice_class
10634      , func_tax_amount
10635      , base_tax_amount
10636      , creation_date
10637      , created_by
10638      , last_update_date
10639      , last_updated_by
10640      , last_update_login
10641      , object_version_number
10642      , precedence_6
10643      , precedence_7
10644      , precedence_8
10645      , precedence_9
10646      , precedence_10
10647      , qty_rate
10648      )
10649      values
10650      ( :1
10651      , :2
10652      , :3
10653      , :4
10654      , :5
10655      , :6
10656      , :7
10657      , :8
10658      , :9
10659      , :10
10660      , :11
10661      , :12
10662      , :13
10663      , :14
10664      , :15
10665      , :16
10666      , :17
10667      , :18
10668      , :19
10669      , :20
10670      , :21
10671      , :22
10672      , :23
10673      , :24
10674      , :25
10675      , :26
10676      , :27
10677      )';
10678 
10679 lv_tax_sql :=
10680     ' SELECT c.internal_trx_id
10681            , c.internal_trx_line_id
10682            , c.interface_line_id
10683            , a.tax_id
10684            , a.precedence_1    p_1
10685            , a.precedence_2    p_2
10686            , a.precedence_3    p_3
10687            , a.precedence_4    p_4
10688            , a.precedence_5    p_5
10689            , a.precedence_6    p_6
10690            , a.precedence_7    p_7
10691            , a.precedence_8    p_8
10692            , a.precedence_9    p_9
10693            , a.precedence_10   p_10
10694            , b.tax_type
10695            , b.tax_rate
10696            , b.uom_code
10697            , b.adhoc_flag
10698            , b.mod_cr_percentage
10699            $$QTY_RATE_FIELD$$
10700 
10701            $$EXTRA_SELECT_COLUMN_LIST$$
10702        FROM $$TAX_SOURCE_TABLE$$       a
10703            , JAI_CMN_TAXES_ALL         b
10704            , jai_interface_lines_all   c
10705       WHERE $$SOURCE_TABLE_FILTER$$
10706         AND a.tax_id = b.tax_id
10707        $$ADDITIONAL_WHERE_CLAUSE$$
10708       ORDER BY $$ADDITIONAL_ORDER_BY$$';
10709 
10710   lv_tax_sql :=
10711      REPLACE ( lv_tax_sql
10712              , '$$ADDITIONAL_WHERE_CLAUSE$$'
10713              , ' AND c.interface_line_id =' || pn_interface_line_id
10714              );
10715 
10716 
10717   SELECT COUNT(1)
10718     INTO ln_tax_line_count
10719     FROM jai_interface_tax_lines_all
10720    WHERE interface_line_id = pn_interface_line_id;
10721 
10722 -- Tax lines exist in JAI_INTERFACE_TAX_LINES_ALL
10723 -- Will fetch taxes from JAI_INTERFACE_TAX_LINES_ALL
10724 
10725   IF ln_tax_line_count > 0 THEN
10726 
10727      lv_tax_sql :=
10728        REPLACE( lv_tax_sql
10729               , '$$QTY_RATE_FIELD$$'
10730               , ' , a.qty_rate qty_rate '
10731               );
10732 
10733 
10734 
10735      lv_tax_sql :=
10736        REPLACE( lv_tax_sql
10737               , '$$ADDITIONAL_ORDER_BY$$'
10738               , 'a.tax_line_no'
10739               );
10740 
10741      lv_tax_sql :=
10742        REPLACE( lv_tax_sql
10743               , '$$EXTRA_SELECT_COLUMN_LIST$$'
10744               , ', a.tax_line_no lno
10745                  , a.tax_amount
10746                  , a.func_tax_amount
10747                  , a.base_tax_amount'
10748               );
10749      lv_tax_sql :=
10750        REPLACE( lv_tax_sql
10751               , '$$TAX_SOURCE_TABLE$$'
10752               , 'JAI_INTERFACE_TAX_LINES_ALL'
10753               );
10754 
10755      lv_tax_sql :=
10756        REPLACE( lv_tax_sql
10757               , '$$SOURCE_TABLE_FILTER$$'
10758               , 'a.interface_line_id = ' || pn_interface_line_id
10759               );
10760 
10761   ELSE -- No related tax lines in JAI_INTERFACE_TAX_LINES_ALL, tax category will be used.
10762        -- Tax_category_id is populated in jai_interface_lines_all during VALIDATION phase.
10763        -- Will fetch taxes from JAI_CMN_TAX_CTG_LINES
10764 
10765     SELECT tax_category_id
10766       INTO ln_tax_category_id
10767       FROM jai_interface_lines_all
10768      WHERE interface_line_id = pn_interface_line_id;
10769 
10770     IF ln_tax_category_id IS NOT NULL THEN
10771 
10772 
10773        lv_tax_sql :=
10774          REPLACE( lv_tax_sql
10775               , '$$QTY_RATE_FIELD$$'
10776               , ' , NULL qty_rate '
10777               );
10778 
10779 
10780        lv_tax_sql :=
10781          REPLACE( lv_tax_sql
10782                 , '$$ADDITIONAL_ORDER_BY$$'
10783                 , 'a.line_no'
10784                 );
10785 
10786        lv_tax_sql :=
10787          REPLACE( lv_tax_sql
10788                 , '$$EXTRA_SELECT_COLUMN_LIST$$'
10789                 , ', a.line_no lno
10790                    , 0         tax_amount
10791                    , 0         func_tax_amount
10792                    , 0         base_tax_amount'
10793                 );
10794        lv_tax_sql :=
10795          REPLACE( lv_tax_sql
10796                 , '$$TAX_SOURCE_TABLE$$'
10797                 , 'JAI_CMN_TAX_CTG_LINES'
10798                 );
10799             -- replace join condition
10800        lv_tax_sql :=
10801          REPLACE( lv_tax_sql
10802                 , '$$SOURCE_TABLE_FILTER$$'
10803                 , 'a.tax_category_id = c.tax_category_id'
10804                 );
10805      ELSE
10806         RAISE no_tax_cate_exc;
10807      END IF;
10808    END IF;
10809 
10810    /**
10811     When control comes here, a valid sql statement hold by variable lv_tax_sql
10812     must be ready to execute.
10813     open a dynamic select statement using OPEN-FOR statement
10814    */
10815 
10816    OPEN get_taxable_event_cur;
10817    FETCH get_taxable_event_cur INTO lv_taxable_event;
10818    CLOSE get_taxable_event_cur;
10819 
10820    OPEN refc_tax_cur FOR lv_tax_sql;
10821    LOOP
10822      FETCH refc_tax_cur INTO tax_lines_rec;
10823      EXIT WHEN refc_tax_cur%NOTFOUND;
10824 
10825      IF lv_taxable_event = 'STANDARD' THEN
10826         ln_p1 := tax_lines_rec.p_1;
10827         ln_p2 := tax_lines_rec.p_2;
10828         ln_p3 := tax_lines_rec.p_3;
10829         ln_p4 := tax_lines_rec.p_4;
10830         ln_p5 := tax_lines_rec.p_5;
10831         ln_p6 := tax_lines_rec.p_6;
10832         ln_p7 := tax_lines_rec.p_7;
10833         ln_p8 := tax_lines_rec.p_8;
10834         ln_p9 := tax_lines_rec.p_9;
10835         ln_p10 := tax_lines_rec.p_10;
10836         ln_tax_rate := tax_lines_rec.tax_rate;
10837         ln_qty_rate := tax_lines_rec.qty_rate;--Added by zhiwei for Bug#12604133 on 20110623
10838      END IF;
10839 
10840     -- Loop each tax line in dynamic cursor, and insert taxex into AR/AP tax tables.
10841     --FOR tax_lines_rec IN tax_lines_cur
10842     --LOOP
10843       IF GV_IMPORT_MODULE = 'AP' THEN
10844         IF tax_lines_rec.mod_cr_percentage IS NOT NULL AND
10845            tax_lines_rec.mod_cr_percentage > 0
10846         THEN
10847            v_modvat_flag := 'Y';
10848         ELSIF tax_lines_rec.mod_cr_percentage IS NULL
10849         THEN
10850            v_modvat_flag := 'N';
10851         END IF;
10852 
10853         EXECUTE IMMEDIATE lv_insert_jai_ap_tax_sql
10854           USING jai_cmn_document_taxes_s.nextval
10855               , tax_lines_rec.lno
10856               , tax_lines_rec.tax_id
10857               , tax_lines_rec.tax_type
10858               , 'INR'
10859               , ln_tax_rate
10860               , tax_lines_rec.uom_code
10861               , tax_lines_rec.tax_amount
10862               , tax_lines_rec.tax_amount           --Function tax amount
10863               , v_modvat_flag                      --Modvat_Flag
10864               , 'STANDALONE_INVOICE'               --Source_Doc_Type
10865               , tax_lines_rec.internal_trx_id      --Source_Doc_ID
10866               , tax_lines_rec.internal_trx_line_id --Source_Doc_Line_ID, will update with real invoice line number in later program.
10867               , 'JAI_AP_INVOICE_LINES'             --Source_Table_Name
10868               , 'SYSTEM'                           --Tax_Modified_By
10869               , tax_lines_rec.adhoc_flag
10870               , ln_p1
10871               , ln_p2
10872               , ln_p3
10873               , ln_p4
10874               , ln_p5
10875               , ln_p6
10876               , ln_p7
10877               , ln_p8
10878               , ln_p9
10879               , ln_p10
10880               , ld_sys_date
10881               , ln_user_id
10882               , ld_sys_date
10883               , ln_user_id
10884               , ln_login_id
10885               , ''--object_version_number
10886               , tax_lines_rec.internal_trx_line_id--Source_Doc_Parent_Line_No
10887               , ln_qty_rate --Added by zhiwei for Bug#12604133 on 20110623
10888               ;
10889       ELSIF GV_IMPORT_MODULE = 'AR' THEN --GV_IMPORT_MODULE = 'AR'
10890 
10891         EXECUTE IMMEDIATE lv_insert_jai_ar_tax_sql
10892           USING tax_lines_rec.lno
10893               , RA_CUSTOMER_TRX_LINES_S.NEXTVAL -- modified by zhiwei
10894               , tax_lines_rec.internal_trx_line_id--tax_lines_rec.internal_trx_line_id --mmodified by zhiwei
10895               , ln_p1
10896               , ln_p2
10897               , ln_p3
10898               , ln_p4
10899               , ln_p5
10900               , tax_lines_rec.tax_id
10901               , ln_tax_rate
10902               , tax_lines_rec.uom_code
10903               , tax_lines_rec.tax_amount
10904               , ''--invoice_class
10905               , tax_lines_rec.tax_amount  --function tax amount
10906               , tax_lines_rec.base_tax_amount
10907               , ld_sys_date
10908               , ln_user_id
10909               , ld_sys_date
10910               , ln_user_id
10911               , ln_login_id
10912               , ''--object_version_number
10913               , ln_p6
10914               , ln_p7
10915               , ln_p8
10916               , ln_p9
10917               , ln_p10
10918               , ln_qty_rate --Added by zhiwei for Bug#12604133 on 20110623
10919               ;
10920       ELSE
10921           --log the error.
10922           lv_err_mess := 'Module '|| GV_IMPORT_MODULE ||' is not expected';
10923           --fnd_file.put_line(FND_FILE.LOG,lv_err_mess);
10924           RAISE error_module;
10925       END IF;
10926     END LOOP;
10927 
10928 
10929 
10930 EXCEPTION
10931 WHEN no_tax_cate_exc THEN
10932   IF ( ln_proc_level >= ln_dbg_level)
10933   THEN
10934     FND_LOG.STRING ( ln_proc_level
10935                    , GV_MODULE_PREFIX || '.' || lv_proc_name
10936                      || '. no_tax_cate_excexception '
10937                    , 'No Tax Category'
10938                    );
10939   END IF;   --( ln_proc_level >= ln_dbg_level)  ;
10940   RAISE;
10941 WHEN error_module THEN
10942   IF ( ln_proc_level >= ln_dbg_level)
10943   THEN
10944     FND_LOG.STRING ( ln_proc_level
10945                    , GV_MODULE_PREFIX || '.' || lv_proc_name
10946                      || '. error_module_exception '
10947                    , 'Not Expected Module' || ':' || GV_IMPORT_MODULE
10948                    );
10949   END IF;   --( ln_proc_level >= ln_dbg_level)  ;
10950   RAISE;
10951 WHEN OTHERS THEN
10952   IF ( ln_proc_level >= ln_dbg_level)
10953   THEN
10954     FND_LOG.STRING ( ln_proc_level
10955                    , GV_MODULE_PREFIX || '.' || lv_proc_name
10956                      || '. Other_Exception '
10957                    , SQLCODE || ':' || SQLERRM
10958                    );
10959   END IF;   --( ln_proc_level >= ln_dbg_level)  ;
10960   RAISE;
10961 END populate_jai_interface_taxes;
10962 
10963 
10964 --==========================================================================
10965 --  PROCEDURE NAME:
10966 --
10967 --    recal_standalone_trx_txes               Private
10968 --
10969 --  DESCRIPTION:
10970 --    The procedure will invoke the tax calculation logic to calculate the
10971 --  base_tax_amount, func_tax_amount, and tax_amount based on the existing
10972 --  calculation logic.
10973 --
10974 --
10975 --  PARAMETERS:
10976 --      In:  pn_interface_line_id        IN NUMBER    interface line id
10977 --
10978 --     Out:
10979 --
10980 --
10981 -- PRE-COND  : interface line exists
10982 -- EXCEPTIONS: errors exist when calculating the taxes.
10983 --
10984 --===========================================================================
10985 
10986 PROCEDURE recal_standalone_trx_taxes(pn_interface_line_id NUMBER)
10987 IS
10988 
10989 CURSOR ar_lines_cur (pn_customer_trx_id NUMBER, pn_customer_trx_line_id NUMBER)
10990 IS
10991 SELECT extended_amount,
10992        inventory_item_id,
10993        quantity_invoiced,
10994        uom_code,
10995        unit_selling_price
10996   FROM ra_customer_trx_lines_all rtla
10997  WHERE rtla.customer_trx_id = pn_customer_trx_id
10998    AND rtla.customer_trx_line_id = pn_customer_trx_line_id;
10999 
11000 CURSOR ar_header_info_cur(pn_customer_trx_id NUMBER) IS
11001 SELECT A.ship_to_customer_id,
11002        nvl(A.ship_to_site_use_id,0),
11003        trx_date,
11004        set_of_books_id
11005   FROM ra_customer_trx_all A
11006  WHERE customer_trx_id = pn_customer_trx_id;
11007 
11008   ln_header_id jai_interface_lines_all.internal_trx_id%TYPE;
11009   ln_line_num  jai_interface_lines_all.internal_trx_line_id%TYPE;
11010 
11011   ln_vendor_id NUMBER;
11012   ln_vendor_site_id NUMBER;
11013   ln_line_amount NUMBER;
11014   ln_assessable_value NUMBER := 0;
11015   ln_vat_assessable_value NUMBER := 0;
11016   lv_taxable_basis jai_interface_lines_all.taxable_basis%TYPE;
11017 
11018   ln_item_id NUMBER;
11019   ln_quantity NUMBER;
11020   lv_unit_code VARCHAR2(10);
11021   ln_set_of_books_id NUMBER;
11022 
11023   ln_party_id             ra_customer_trx_all.ship_to_customer_id%TYPE ;
11024   ln_party_site_id        ra_customer_trx_all.ship_to_site_use_id%TYPE ;
11025   ld_trx_date             ra_customer_trx_all.trx_date%TYPE ;
11026   ln_unit_selling_price   ra_customer_trx_lines_all.unit_selling_price%TYPE;
11027   lv_module               VARCHAR2(30);
11028 
11029   lv_err_mess           VARCHAR2(300);
11030   ln_dbg_level          NUMBER         := FND_LOG.g_current_runtime_level;
11031   ln_proc_level         NUMBER         := FND_LOG.level_procedure;
11032   lv_proc_name          VARCHAR2 (100) := 'recal_standalone_trx_taxes';
11033 
11034 BEGIN
11035       SELECT internal_trx_id
11036            , internal_trx_line_id
11037            , taxable_basis
11038            , import_module
11039         INTO ln_header_id
11040            , ln_line_num
11041            , lv_taxable_basis
11042            , lv_module
11043         FROM jai_interface_lines_all
11044        WHERE interface_line_id = pn_interface_line_id;
11045 
11046       IF lv_module = 'AP' THEN
11047          SELECT vendor_id, vendor_site_id
11048            INTO ln_vendor_id
11049               , ln_vendor_site_id
11050            FROM ap_invoices_all
11051           WHERE invoice_id = ln_header_id;
11052 
11053          SELECT amount
11054                ,nvl(quantity_invoiced,1) --Added by zhiwei for Bug#12604133 on 20110623
11055            INTO ln_line_amount
11056                ,ln_quantity       --Added by zhiwei for Bug#12604133 on 20110623
11057            FROM ap_invoice_lines_all
11058           WHERE invoice_id = ln_header_id
11059             AND line_number = ln_line_num;
11060 
11061          IF ln_vat_assessable_value = 0 THEN
11062             ln_vat_assessable_value := ln_line_amount;
11063          END IF;
11064          ja_in_calc_prec_taxes
11065             ( transaction_name        => 'AP_STANDALONE'
11066             , p_header_id             => ln_header_id
11067             , p_line_id               => ln_line_num
11068             , p_assessable_value      => ln_line_amount
11069             , p_tax_amount            => ln_line_amount
11070             , p_inventory_item_id     => NULL
11071             , p_line_quantity         => ln_quantity--1--Changed by zhiwei for Bug#12604133 on 20110623
11072             , p_uom_code              => NULL
11073             , p_vendor_id             => ln_vendor_id
11074             , p_currency              => 'INR'
11075             , p_currency_conv_factor  => 1
11076             , p_creation_date         => SYSDATE
11077             , p_created_by            => FND_GLOBAL.user_id
11078             , p_last_update_date      => SYSDATE
11079             , p_last_updated_by       => FND_GLOBAL.user_id
11080             , p_last_update_login     => FND_GLOBAL.login_id
11081             , p_operation_flag        => NULL
11082             , p_vat_assessable_value  => ln_line_amount--ln_vat_assessable_value
11083             , p_source_trx_type       => jai_constants.G_AP_STANDALONE_INVOICE
11084             );
11085       ELSIF lv_module = 'AR' THEN
11086 
11087            OPEN ar_lines_cur(ln_header_id, ln_line_num);
11088           FETCH ar_lines_cur
11089            INTO ln_line_amount, ln_item_id,
11090                 ln_quantity, lv_unit_code, ln_unit_selling_price;
11091           CLOSE ar_lines_cur;
11092 
11093            OPEN ar_header_info_cur(ln_header_id);
11094           FETCH ar_header_info_cur INTO ln_party_id, ln_party_site_id, ld_trx_date, ln_set_of_books_id ;
11095           CLOSE ar_header_info_cur;
11096 
11097          IF upper(lv_taxable_basis) = GV_TAXABLE_BASIS_AV THEN
11098 
11099             ln_vat_assessable_value := jai_general_pkg.ja_in_vat_assessable_value(
11100                                          ln_party_id,
11101                                          ln_party_site_id,
11102                                          ln_item_id,
11103                                          lv_unit_code,
11104                                          ln_unit_selling_price,
11105                                          ld_trx_date,
11106                                          'C'
11107                                           );
11108 
11109             -- Fetch assessable_value for Excise Tax.
11110             ln_assessable_value := jai_om_utils_pkg.get_oe_assessable_value(
11111                                           p_customer_id => ln_party_id,
11112                                           p_ship_to_site_use_id => ln_party_site_id,
11113                                           p_inventory_item_id => ln_item_id,
11114                                           p_uom_code => lv_unit_code,
11115                                           p_default_price => ln_unit_selling_price,
11116                                           p_ass_value_date => ld_trx_date,
11117                                           p_sob_id        => ln_set_of_books_id ,
11118                                           p_curr_conv_code => 'INR' ,
11119                                           p_conv_rate      => 1
11120                                         );
11121          END IF;
11122 
11123          IF ln_assessable_value = 0 THEN
11124             ln_assessable_value := ln_line_amount;
11125          END IF;
11126          IF ln_vat_assessable_value = 0 THEN
11127             ln_vat_assessable_value := ln_line_amount;
11128          END IF;
11129 
11130             ja_in_calc_prec_taxes
11131                  (
11132                    transaction_name         => 'AR_LINES',
11133                    p_header_id              => ln_header_id,
11134                    p_line_id                => ln_line_num,
11135                    p_assessable_value       => ln_assessable_value * ln_quantity,
11136                    p_tax_amount             => ln_line_amount,
11137                    p_inventory_item_id      => ln_item_id,
11138                    p_line_quantity          => ln_quantity,
11139                    p_uom_code               => lv_unit_code,
11140                    p_vendor_id              => NULL,
11141                    p_currency               => NULL,
11142                    p_currency_conv_factor   => 1,
11143                    p_creation_date          => sysdate,
11144                    p_created_by             => FND_GLOBAL.user_id,
11145                    p_last_update_date       => sysdate,
11146                    p_last_updated_by        => FND_GLOBAL.user_id,
11147                    p_last_update_login      => FND_GLOBAL.login_id,
11148                    p_operation_flag         => NULL,
11149                    p_vat_assessable_value   => ln_vat_assessable_value,
11150                    p_source_trx_type        => 'AR_TRANSACTION'
11151                    );
11152 
11153             --update assessable value
11154             UPDATE jai_ar_trx_lines
11155                SET assessable_value =  ln_assessable_value * ln_quantity
11156                  , vat_assessable_value = ln_vat_assessable_value
11157                  , quantity = ln_quantity
11158              WHERE customer_trx_id = ln_header_id
11159                AND customer_trx_line_id = ln_line_num;
11160 
11161 
11162       ELSE
11163         --log the error.
11164         lv_err_mess := 'Module '|| GV_IMPORT_MODULE ||' is not expected';
11165         --fnd_file.put_line(FND_FILE.LOG,lv_err_mess);
11166       END IF;
11167 
11168 EXCEPTION
11169 WHEN OTHERS THEN
11170   IF ( ln_proc_level >= ln_dbg_level)
11171   THEN
11172     FND_LOG.STRING ( ln_proc_level
11173                    , GV_MODULE_PREFIX || '.' || lv_proc_name
11174                      || '. Other_Exception '
11175                    , SQLCODE || ':' || SQLERRM
11176                    );
11177   END IF;   --( ln_proc_level >= ln_dbg_level)  ;
11178   RAISE;
11179 END recal_standalone_trx_taxes;
11180 
11181 PROCEDURE process_ap_accounting_lines(pn_interface_line_id NUMBER)
11182 IS
11183 CURSOR interface_lines_cur
11184 IS
11185 SELECT interface_line_id,
11186        internal_trx_id,
11187        internal_trx_line_id,
11188        organization_id,
11189        location_id,
11190        taxable_event,
11191        service_type_code,
11192        tax_category_id
11193   FROM jai_interface_lines_all
11194  WHERE interface_line_id = pn_interface_line_id;
11195 
11196  ln_interface_line_id NUMBER;
11197  ln_invoice_id        NUMBER;
11198 
11199  ln_line_num          NUMBER;
11200  ln_organization_id   NUMBER;
11201  ln_location_id       NUMBER;
11202  lv_taxable_event     VARCHAR2(30);
11203 
11204  ln_tax_category_id   NUMBER;
11205  lv_service_type_code VARCHAR2(30);
11206 
11207  ln_dbg_level          NUMBER         := FND_LOG.g_current_runtime_level;
11208  ln_proc_level         NUMBER         := FND_LOG.level_procedure;
11209  lv_proc_name          VARCHAR2 (100) := 'process_ap_accounting_lines';
11210 
11211 BEGIN
11212    OPEN interface_lines_cur;
11213   FETCH interface_lines_cur
11214    INTO ln_interface_line_id
11215       , ln_invoice_id
11216       , ln_line_num
11217       , ln_organization_id
11218       , ln_location_id
11219       , lv_taxable_event
11220       , lv_service_type_code
11221       , ln_tax_category_id;
11222   CLOSE interface_lines_cur;
11223 
11224 /* For item lines in jai_ap_invoice_lines, organization_id, location_id,
11225  * service_type_code, tax_category will leave as NULL after Open API importing.
11226  * So, following code manually update organization_id, location_id, service_type_code
11227  * tax_category column on table jai_ap_invoice_lines.
11228  */
11229       UPDATE jai_ap_invoice_lines
11230       SET organization_id = ln_organization_id
11231         , location_id = ln_location_id
11232         , service_type_code = nvl(lv_service_type_code,service_type_code) --Changed by zhiwei for Bug#12537533 on 20110510
11233         , tax_category_id = ln_tax_category_id
11234         , interface_flag = 'Y'               --Added by zhiwei for POT change Bug#13023443 on 20110929
11235         , interface_event = lv_taxable_event --Added by zhiwei for POT change Bug#13023443 on 20110929
11236     WHERE invoice_id = ln_invoice_id
11237       AND invoice_line_number = ln_line_num;
11238 
11239 
11240 
11241        jai_ap_stnd_tax_process.create_tax_lines
11242        ( ln_organization_id
11243        , 'INR'--pv_currency
11244        , ln_location_id
11245        , ln_invoice_id
11246        , ln_line_num
11247        , jai_constants.default_taxes--pv_action
11248        , ln_tax_category_id--, 0--pn_tax_category_id --Changed by zhiwei for Bug#12537533 on 20110510
11249        , 'N'--pv_tax_modified
11250        );
11251 
11252 
11253 EXCEPTION
11254 WHEN OTHERS THEN
11255   IF ( ln_proc_level >= ln_dbg_level)
11256   THEN
11257     FND_LOG.STRING ( ln_proc_level
11258                    , GV_MODULE_PREFIX || '.' || lv_proc_name
11259                      || '. Other_Exception '
11260                    , SQLCODE || ':' || SQLERRM
11261                    );
11262   END IF;   --( ln_proc_level >= ln_dbg_level)  ;
11263   RAISE;
11264 END process_ap_accounting_lines;
11265 
11266 
11267 
11268 
11269   /*
11270   || Generate the sequence no for interface lines and tax lines for processing.
11271   */
11272   PROCEDURE  mark_sequence_id
11273   IS
11274   --Curosr define here
11275 
11276   --Commented by zhiwei for Bug#12561396 on 20110607 begin
11277   ---------------------------------------------------------
11278   /*CURSOR get_interface_lines_rec
11279   IS
11280   SELECT
11281          PARTY_ID,
11282          PARTY_SITE_ID,
11283          IMPORT_MODULE,
11284          TRANSACTION_NUM,
11285          TRANSACTION_LINE_NUM,
11286          INTERFACE_LINE_ID
11287   FROM
11288          JAI_INTERFACE_LINES_ALL
11289   WHERE  REQUEST_ID = GN_REQUEST_ID;*/
11290   ----------------------------------------------------------
11291 
11292   --Commented by zhiwei for Bug#12561396 and Bug#12589644  on 20110607 end
11293 
11294   --Added by zhiwei for Bug#12561396 and Bug#12589644  on 20110607 begin
11295   ----------------------------------------------------------------
11296   CURSOR get_interface_lines_rec(
11297          cn_party_id               JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
11298          cn_party_site_id          JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE,
11299          cv_import_module          JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
11300          cv_transaction_num        JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE,
11301          cn_transaction_line_num   JAI_INTERFACE_LINES_ALL.TRANSACTION_LINE_NUM%TYPE
11302   )
11303   IS
11304   SELECT
11305          PARTY_ID,
11306          PARTY_SITE_ID,
11307          IMPORT_MODULE,
11308          TRANSACTION_NUM,
11309          TRANSACTION_LINE_NUM,
11310          INTERFACE_LINE_ID,
11311          ROWID
11312   FROM
11313          JAI_INTERFACE_LINES_ALL
11314   WHERE  REQUEST_ID = GN_REQUEST_ID
11315   AND    PARTY_ID             = cn_party_id
11316   AND    PARTY_SITE_ID        = cn_party_site_id
11317   AND    IMPORT_MODULE        = cv_import_module
11318   AND    TRANSACTION_NUM      = cv_transaction_num
11319   AND    TRANSACTION_LINE_NUM = cn_transaction_line_num;
11320 
11321 
11322   CURSOR get_five_combination_rec
11323   IS
11324   SELECT
11325          PARTY_ID,
11326          PARTY_SITE_ID,
11327          IMPORT_MODULE,
11328          TRANSACTION_NUM,
11329          TRANSACTION_LINE_NUM
11330   FROM
11331          JAI_INTERFACE_LINES_ALL
11332   WHERE  REQUEST_ID = GN_REQUEST_ID
11333   ;
11334 
11335   rec_five_combination get_five_combination_rec%rowtype;
11336 
11337   ----------------------------------------------------------------
11338   --Added by zhiwei for Bug#12561396 and Bug#12589644  on 20110607 end
11339 
11340   CURSOR get_tax_line_no_rec(
11341          cn_party_id              IN JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE,
11342          cn_party_site_id         IN JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE,
11343          cv_import_module         IN JAI_INTERFACE_LINES_ALL.IMPORT_MODULE%TYPE,
11344          cv_transaction_num       IN JAI_INTERFACE_LINES_ALL.TRANSACTION_NUM%TYPE,
11345          cn_transaction_line_num  IN JAI_INTERFACE_LINES_ALL.TRANSACTION_LINE_NUM%TYPE
11346 
11347   )
11348   IS
11349   SELECT
11350          TAX_LINE_NO,
11351          INTERFACE_TAX_LINE_ID,
11352          INTERFACE_LINE_ID
11353          ,ROWID--Added by zhiwei for Bug#12561396 and Bug#12589644 on 20110607
11354   FROM
11355          JAI_INTERFACE_TAX_LINES_ALL
11356   WHERE
11357          PARTY_ID             = cn_party_id
11358   AND    PARTY_SITE_ID        = cn_party_site_id
11359   AND    IMPORT_MODULE        = cv_import_module
11360   AND    TRANSACTION_NUM      = cv_transaction_num
11361   AND    TRANSACTION_LINE_NUM = cn_transaction_line_num
11362   order by tax_line_no;
11363 
11364 
11365 
11366   --Variable define here
11367   rec_interface_line get_interface_lines_rec%ROWTYPE;
11368   rec_tax_line_no    get_tax_line_no_rec%ROWTYPE;
11369   lv_return_mess     varchar2(1000);
11370 
11371   ln_interface_line_id number;
11372   ln_interface_tax_line_id number;
11373   ln_tax_line_no     number;
11374 
11375   BEGIN
11376 
11377 
11378     --Added by zhiwei for Bug#12561396 and Bug#12589644 on 20110607 begin
11379     ------------------------------------------------------------
11380     FOR rec_five_combination IN get_five_combination_rec
11381     LOOP
11382 
11383       FOR rec_interface_line IN get_interface_lines_rec(
11384                cn_party_id              => rec_five_combination.party_id,
11385                cn_party_site_id         => rec_five_combination.PARTY_SITE_ID,
11386                cv_import_module         => rec_five_combination.IMPORT_MODULE,
11387                cv_transaction_num       => rec_five_combination.TRANSACTION_NUM,
11388                cn_transaction_line_num  => rec_five_combination.TRANSACTION_LINE_NUM
11389       )
11390 
11391     ------------------------------------------------------------
11392     --Added by zhiwei for Bug#12561396 and Bug#12589644 on 20110607 end
11393 
11394       --Commented by zhiwei for Bug#12561396 and Bug#12589644  begin
11395       --------------------------------------------------------------
11396       --FOR rec_interface_line IN get_interface_lines_rec
11397       --------------------------------------------------------------
11398       --Commented by zhiwei for Bug#12561396 and Bug#12589644  end
11399       LOOP
11400 
11401 
11402 
11403           ln_interface_line_id := 0;
11404 
11405           IF(NVL(rec_interface_line.interface_line_id,-1) <= 0)THEN
11406 
11407               ln_interface_line_id := JAI_INTERFACE_LINES_ALL_S.nextval;
11408 
11409               --Mark line sequence no
11410               UPDATE jai_interface_lines_all
11411               SET    interface_line_id = ln_interface_line_id
11412               WHERE  party_id             =  rec_interface_line.party_id
11413               AND    party_site_id        =  rec_interface_line.PARTY_SITE_ID
11414               AND    import_module        =  rec_interface_line.IMPORT_MODULE
11415               AND    transaction_num      =  rec_interface_line.TRANSACTION_NUM
11416               AND    transaction_line_num =  rec_interface_line.TRANSACTION_LINE_NUM
11417               AND    ROWID                =  rec_interface_line.ROWID; --Added by zhiwei for Bug#12561396 and Bug#12589644  on 20110607
11418           ELSE
11419 
11420               ln_interface_line_id := rec_interface_line.interface_line_id;
11421 
11422           END IF;
11423 
11424           ln_tax_line_no := 0;
11425           FOR rec_tax_line_no IN get_tax_line_no_rec(
11426                cn_party_id              => rec_interface_line.party_id,
11427                cn_party_site_id         => rec_interface_line.PARTY_SITE_ID,
11428                cv_import_module         => rec_interface_line.IMPORT_MODULE,
11429                cv_transaction_num       => rec_interface_line.TRANSACTION_NUM,
11430                cn_transaction_line_num  => rec_interface_line.TRANSACTION_LINE_NUM
11431           )
11432           LOOP
11433                ln_tax_line_no := ln_tax_line_no + 1;
11434 
11435                IF(NVL(rec_tax_line_no.interface_tax_line_id,-1) = -1)THEN
11436                    --If interface_tax_line_id is null then generate interface_tax_line_id use sequence
11437                    ln_interface_tax_line_id := JAI_INTERFACE_TAX_LINES_ALL_S.nextval;
11438 
11439                    --If interface_tax_line_id is null
11440                    -- and
11441                    --(interface_line_id is null or interface_line_id is not as same as interface_line_id of jai_interface_lines_all accordingly)
11442                    --both mark
11443                    IF(NVL(rec_tax_line_no.interface_line_id,-1) = -1
11444                       OR
11445                       NVL(rec_tax_line_no.interface_line_id,-1) <> ln_interface_line_id
11446                    )THEN
11447 
11448                        UPDATE jai_interface_tax_lines_all
11449                        SET    interface_tax_line_id = ln_interface_tax_line_id,
11450                               interface_line_id     = ln_interface_line_id,
11451                               tax_line_no           = ln_tax_line_no
11452                        WHERE  party_id             =  rec_interface_line.party_id
11453                        AND    party_site_id        =  rec_interface_line.PARTY_SITE_ID
11454                        AND    import_module        =  rec_interface_line.IMPORT_MODULE
11455                        AND    transaction_num      =  rec_interface_line.TRANSACTION_NUM
11456                        AND    transaction_line_num =  rec_interface_line.TRANSACTION_LINE_NUM
11457                        AND    tax_line_no          =  rec_tax_line_no.tax_line_no
11458                        AND    ROWID                =  rec_tax_line_no.ROWID; --Added by zhiwei for Bug#12561396 and Bug#12589644  on 20110607
11459                    ELSE
11460                        --interface_tax_line_id is null
11461                        --and
11462                        --interface_line_id is as same as interface_line_id of jai_interface_lines_all accordingly
11463                        --only mark interface_tax_line_id
11464                        UPDATE jai_interface_tax_lines_all
11465                        SET    interface_tax_line_id = ln_interface_tax_line_id,
11466                               tax_line_no           = ln_tax_line_no
11467                        WHERE  party_id             =  rec_interface_line.party_id
11468                        AND    party_site_id        =  rec_interface_line.PARTY_SITE_ID
11469                        AND    import_module        =  rec_interface_line.IMPORT_MODULE
11470                        AND    transaction_num      =  rec_interface_line.TRANSACTION_NUM
11471                        AND    transaction_line_num =  rec_interface_line.TRANSACTION_LINE_NUM
11472                        AND    tax_line_no          =  rec_tax_line_no.tax_line_no
11473                        AND    ROWID                =  rec_tax_line_no.ROWID; --Added by zhiwei for Bug#12561396 and Bug#12589644  on 20110607
11474 
11475 
11476                    END IF;
11477                ELSE
11478                    --If interface_tax_line_id is not null
11479 
11480                    IF( NVL(rec_tax_line_no.interface_line_id,-1) = -1
11481                        OR
11482                        NVL(rec_tax_line_no.interface_line_id,-1) <> ln_interface_line_id
11483                    )THEN
11484                        UPDATE jai_interface_tax_lines_all
11485                        SET
11486                               interface_line_id     = ln_interface_line_id,
11487                               tax_line_no           = ln_tax_line_no
11488                        WHERE  party_id             =  rec_interface_line.party_id
11489                        AND    party_site_id        =  rec_interface_line.PARTY_SITE_ID
11490                        AND    import_module        =  rec_interface_line.IMPORT_MODULE
11491                        AND    transaction_num      =  rec_interface_line.TRANSACTION_NUM
11492                        AND    transaction_line_num =  rec_interface_line.TRANSACTION_LINE_NUM
11493                        AND    tax_line_no          =  rec_tax_line_no.tax_line_no;
11494                    END IF;
11495 
11496                END IF;
11497 
11498           END LOOP;
11499 
11500       END LOOP;
11501 
11502     END LOOP;--Added by zhiwei for Bug#12561396 on 20110607
11503 
11504 
11505       --COMMIT;
11506       record_fnd_log(
11507                   pv_fnd_log   => 'Mark Sequence id successfully.'
11508       );
11509 
11510 
11511   EXCEPTION
11512      WHEN OTHERS THEN
11513           lv_return_mess := 'Mark sequence Exception with SQLERR:'|| SUBSTR(SQLERRM,1,230) || ' in mark_sequence_id with line:';
11514           lv_return_mess := lv_return_mess ||rec_interface_line.party_id
11515                                            ||'-'||rec_interface_line.party_id
11516                                            ||'-'||rec_interface_line.PARTY_SITE_ID
11517                                            ||'-'||rec_interface_line.IMPORT_MODULE
11518                                            ||'-'||rec_interface_line.TRANSACTION_NUM
11519                                            ||'-'||rec_interface_line.TRANSACTION_LINE_NUM;
11520           record_fnd_log(
11521                  pv_fnd_log   => lv_return_mess
11522           );
11523           RAISE;
11524   END  mark_sequence_id;
11525 
11526 
11527 
11528 
11529 
11530   /*
11531   || Main process block
11532   */
11533   PROCEDURE populate_jai_interface_lines(
11534         errbuf                   OUT NOCOPY VARCHAR2
11535       , retcode                  OUT NOCOPY VARCHAR2
11536       , pv_import_module         VARCHAR2
11537       , pn_org_id                NUMBER
11538       , pn_organization_id       NUMBER
11539       , pn_location_id           NUMBER
11540       , pn_party_id              NUMBER
11541       , pn_party_site_id         NUMBER
11542       , pv_transaction_num_from  VARCHAR2
11543       , pv_transaction_num_to    VARCHAR2
11544   )
11545   IS
11546   --Cursor define here
11547   CURSOR get_request_line_id_cur
11548   is
11549   select interface_line_id
11550   from   jai_interface_lines_all
11551   where  1=1 --(import_status=GV_IMPORT_FAILURE OR import_status IS NULL)
11552   and    request_id = GN_REQUEST_ID;
11553 
11554   CURSOR interface_lines_cur(cn_trx_id IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
11555   IS
11556   SELECT interface_line_id,
11557          import_status,
11558          import_process
11559   FROM jai_interface_lines_all
11560   WHERE import_status   = GV_IMPORT_SUCCESS
11561   AND import_process   = GV_PROCESS_VALIDATION
11562   AND import_module    = pv_import_module
11563   AND internal_trx_id  = cn_trx_id
11564   FOR UPDATE NOWAIT;
11565 
11566   CURSOR get_trx_id_cur
11567   IS
11568   SELECT DISTINCT internal_trx_id   trx_id
11569   FROM   JAI_INTERFACE_LINES_ALL
11570   WHERE import_status   = GV_IMPORT_SUCCESS
11571   AND   import_process   = GV_PROCESS_VALIDATION
11572   AND   import_module    = pv_import_module
11573   AND   organization_id = nvl(pn_organization_id, organization_id)
11574   AND   org_id          = nvl(pn_org_id, org_id)
11575   AND   location_id     = nvl(pn_location_id, location_id)
11576   AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
11577   AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
11578   AND   REQUEST_ID      = GN_REQUEST_ID
11579   ORDER BY 1;
11580 
11581   CURSOR get_interface_id_cur(cn_internal_trx_id IN JAI_INTERFACE_LINES_ALL.INTERNAL_TRX_ID%TYPE)
11582   IS
11583   SELECT
11584          interface_line_id
11585   FROM   JAI_INTERFACE_LINES_ALL
11586   WHERE  INTERNAL_TRX_ID = cn_internal_trx_id;
11587 
11588   --Variable define here
11589   rec_interface_id       get_interface_id_cur%ROWTYPE;
11590   rec_request_line_id    get_request_line_id_cur%ROWTYPE;
11591   rec_trx_id             get_trx_id_cur%ROWTYPE;
11592 
11593   ln_dbg_level          NUMBER         := FND_LOG.g_current_runtime_level;
11594   ln_proc_level         NUMBER         := FND_LOG.level_procedure;
11595   lv_proc_name          VARCHAR2 (100) := 'populate_jai_interface_lines';
11596 
11597   ln_total_amount       NUMBER;
11598   ln_invoice_id         NUMBER;
11599   ln_invoice_line_num   NUMBER;
11600   lv_import_status      VARCHAR2(30);
11601   lv_import_process     VARCHAR2(30);
11602   lv_err_mess           VARCHAR2(300);
11603   ln_interface_line_id  jai_interface_lines_all.interface_line_id%TYPE;
11604   lv_taxable_event      jai_interface_lines_all.taxable_event%TYPE;
11605   lv_process_message    VARCHAR2(2000);
11606   le_exception          EXCEPTION;
11607 
11608   lv_return_message     VARCHAR2(2000);
11609   lv_return_code        VARCHAR2(100) ;
11610   ln_phase              NUMBER;
11611 
11612   BEGIN
11613      --Get request id for concurrent.
11614      GN_REQUEST_ID    := fnd_global.conc_request_id;
11615 
11616      --Get import module for process
11617      GV_IMPORT_MODULE := pv_import_module;
11618 
11619      --Mark the request id for interface line need to process.
11620      mark_request_id(
11621             pv_type                 => 'ON'
11622           , pn_org_id               => pn_org_id
11623           , pn_organization_id      => pn_organization_id
11624           , pn_location_id          => pn_location_id
11625           , pn_party_id             => pn_party_id
11626           , pn_party_site_id        => pn_party_site_id
11627           , pv_transaction_num_from => pv_transaction_num_from
11628           , pv_transaction_num_to   => pv_transaction_num_to
11629      );
11630 
11631      ln_phase := 5;
11632 
11633      mark_sequence_id;
11634 
11635      ln_phase := 10;
11636 
11637      --Loop for all lines to initial and validation which have been marked request id
11638      FOR rec_request_line_id IN get_request_line_id_cur
11639      LOOP
11640          --Initial get Internal transaction id and Internal transaction line id By Transaction num and Transaction line num of interface line detail.
11641          --Check the import module
11642          --Update the Internal transaction id and Interanl transaction line id to interface line
11643 
11644          initial_process(rec_request_line_id.interface_line_id);
11645 
11646          --Validation rule.
11647          --Get internal tax id from mapping and update to the interface tax line.
11648          validate_process(rec_request_line_id.interface_line_id);
11649 
11650      END LOOP;
11651 
11652      ln_phase := 20;
11653 
11654      --Validate the duplicate lines
11655      validate_duplicate_lines;
11656 
11657      ln_phase := 30;
11658 
11659      --Validate transaction integrated after validation successful.
11660      validate_integrate_trx;
11661 
11662      ln_phase := 40;
11663 
11664      --Loop for trx id begin ,
11665      --Note: if trx success then success , if any line of trx encountered errors , the whole transaction process rollback.
11666      ---------------------------------------------------------------------------------------------------------------------------------
11667      FOR rec_trx_id  IN get_trx_id_cur
11668      LOOP
11669 
11670          --Save point here
11671          SAVEPOINT PROC_MAIN_SVP;
11672 
11673          ---Loop for process populate ,recalculate ,ap accounting , ar updating. begin
11674          ----------------------------------------------------------------------------------------------------
11675          FOR interface_line_rec IN interface_lines_cur(rec_trx_id.trx_id)
11676          LOOP
11677 
11678              ln_interface_line_id := interface_line_rec.interface_line_id;
11679              lv_import_status     := interface_line_rec.import_status;
11680              lv_import_process    := interface_line_rec.import_process;
11681 
11682              --Populate tax begin
11683              -------------------------------------------------------------------------------
11684              BEGIN
11685              IF lv_import_status = GV_IMPORT_SUCCESS THEN
11686 
11687                 lv_import_process := GV_PROCESS_POPULATION;
11688 
11689                 ln_phase := 50;
11690 
11691                 populate_jai_interface_taxes(ln_interface_line_id);
11692 
11693                 ln_phase := 60;
11694 
11695              END IF;
11696 
11697              update_line_status(ln_interface_line_id, lv_import_status, lv_import_process );
11698 
11699              EXCEPTION
11700              WHEN OTHERS THEN
11701                   IF ( ln_proc_level >= ln_dbg_level)
11702                   THEN
11703                       FND_LOG.STRING ( ln_proc_level
11704                                      , GV_MODULE_PREFIX || '.' || lv_proc_name
11705                                        || '. Other_Exception '
11706                                      , SQLCODE || ':' || SQLERRM
11707                                      );
11708                   END IF;
11709 
11710                   ROLLBACK TO PROC_MAIN_SVP;
11711 
11712                   lv_import_status := GV_IMPORT_FAILURE;
11713                   update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
11714                   update_error_flag(ln_interface_line_id,'Y');
11715 
11716                   --Error message record
11717                   lv_process_message := 'PROCESSING Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in POPULATING With interface_line_id:'||ln_interface_line_id;
11718                   log_error(
11719                      pv_err_level              => GV_ERROR_TYPE_LINE,
11720                      pn_line_id                => ln_interface_line_id,
11721                      pn_source_line_id         => ln_interface_line_id,
11722                      pv_err_mess               => lv_process_message,
11723                      pv_invalid_value          => NULL
11724                   );
11725 
11726                   GOTO NEXT_LINE;
11727              END ;
11728              -------------------------------------------------------------------------------
11729              --Populate tax end
11730 
11731 
11732              --Calculate Taxes begin
11733              -------------------------------------------------------------------------------
11734              BEGIN
11735              IF lv_import_status = GV_IMPORT_SUCCESS THEN
11736 
11737                  SELECT taxable_event
11738                    INTO lv_taxable_event
11739                    FROM jai_interface_lines_all
11740                   WHERE interface_line_id = ln_interface_line_id;
11741 
11742                  SELECT internal_trx_id, internal_trx_line_id
11743                    INTO ln_invoice_id, ln_invoice_line_num
11744                    FROM jai_interface_lines_all
11745                   WHERE interface_line_id = ln_interface_line_id;
11746 
11747                   --ap_invoice_lines_all.reference_key3 values 'OFI TAX IMPORT'
11748                   /* The purpose is for distinguish Standard or External Case,
11749                    * In External Case, when Service Taxes are imported and attached to AP lines,
11750                    * the same will not be picked up and updated in the Service Tax Repository.
11751                    */
11752                   /*UPDATE ap_invoice_lines_all
11753                      SET reference_key3 = 'OFI TAX IMPORT.' || upper(lv_taxable_event)
11754                    WHERE invoice_id = ln_invoice_id
11755                      AND line_number = ln_invoice_line_num;*/
11756 
11757                  IF lv_taxable_event = GV_TAXABLE_EVENT_STANDALONE THEN
11758 
11759                      lv_import_process := GV_PROCESS_CALCULATION;
11760 
11761                      ln_phase := 70;
11762 
11763                      recal_standalone_trx_taxes(ln_interface_line_id);
11764 
11765                      ln_phase := 80;
11766 
11767                  END IF;
11768 
11769 
11770                  update_line_status(ln_interface_line_id, lv_import_status, lv_import_process );
11771 
11772              END IF;
11773              EXCEPTION
11774              WHEN OTHERS THEN
11775                    IF ( ln_proc_level >= ln_dbg_level)
11776                    THEN
11777                         FND_LOG.STRING ( ln_proc_level
11778                                        , GV_MODULE_PREFIX || '.' || lv_proc_name
11779                                          || '. Other_Exception '
11780                                        , SQLCODE || ':' || SQLERRM
11781                                        );
11782                    END IF;
11783 
11784                    ROLLBACK TO PROC_MAIN_SVP;
11785 
11786                    lv_import_status := GV_IMPORT_FAILURE;
11787                    update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
11788                    update_error_flag(ln_interface_line_id,'Y');
11789 
11790                    --Error message record
11791                    lv_process_message := 'PROCESSING Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in RECALCULATING With interface_line_id:'||ln_interface_line_id;
11792 
11793                    log_error(
11794                      pv_err_level              => GV_ERROR_TYPE_LINE,
11795                      pn_line_id                => ln_interface_line_id,
11796                      pn_source_line_id         => ln_interface_line_id,
11797                      pv_err_mess               => lv_process_message,
11798                      pv_invalid_value          => NULL
11799                    );
11800 
11801                    GOTO NEXT_LINE;
11802              END;
11803              -------------------------------------------------------------------------------
11804              --Calculate Taxes end
11805 
11806 
11807 
11808              --For AP Accounting
11809              --For AR Updating include the follow process
11810              --       1.calculate balance;
11811              --       2.update tax amount/totoal amount to jai_ar_trx_lines;
11812              --       3.insert tax lines to ra_customer_trx_lines_all;
11813              --       4.insert tax lines to ra_cust_trx_gl_dist_all;
11814              -------------------------------------------------------------------------------
11815              BEGIN
11816              IF lv_import_status = GV_IMPORT_SUCCESS THEN
11817 
11818                 ln_phase := 90;
11819 
11820                 IF (upper(GV_IMPORT_MODULE) = JAI_CONSTANTS.SOURCE_AP) THEN
11821 
11822                    lv_import_process := GV_PROCESS_ACCOUNTING;
11823                    process_ap_accounting_lines(ln_interface_line_id);
11824 
11825                 --update reference_key3 as 'OFI TAX IMPORT.STANDARD' or 'OFI TAX IMPORT.EXTERNAL'
11826                 --for all the Miscellaneous lines for each item line.
11827                  /*  UPDATE ap_invoice_lines_all aila
11828                       SET reference_key3 = 'OFI TAX IMPORT.' || upper(lv_taxable_event)
11829                     WHERE invoice_id = ln_invoice_id
11830                       AND line_number IN (SELECT source_doc_line_id
11831                                            FROM jai_cmn_document_taxes
11832                                           WHERE source_doc_id = ln_invoice_id
11833                                             AND source_doc_parent_line_no = ln_invoice_line_num);
11834                 */
11835 
11836                 ELSIF (upper(GV_IMPORT_MODULE) = JAI_CONSTANTS.SOURCE_AR) THEN
11837 
11838                    lv_import_process := GV_PROCESS_UPDATING;
11839                    process_ar_updating_lines(
11840                         pn_interface_line_id => ln_interface_line_id,
11841                         ov_return_code       => lv_return_code,
11842                         ov_return_message    => lv_return_message
11843                    );
11844 
11845 
11846                    IF(lv_return_code <> jai_constants.successful)THEN
11847 
11848                        ROLLBACK TO PROC_MAIN_SVP;
11849 
11850                        lv_import_status := GV_IMPORT_FAILURE;
11851                        update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
11852                        update_error_flag(ln_interface_line_id,'Y');
11853 
11854                        log_error(
11855                          pv_err_level              => GV_ERROR_TYPE_LINE,
11856                          pn_line_id                => ln_interface_line_id,
11857                          pn_source_line_id         => ln_interface_line_id,
11858                          pv_err_mess               => lv_return_message,
11859                          pv_invalid_value          => NULL
11860                        );
11861 
11862                        GOTO NEXT_LINE;
11863                    END IF;
11864 
11865                 ELSE
11866                    lv_err_mess := 'Module '|| GV_IMPORT_MODULE ||' is not expected';
11867                 END IF;
11868 
11869                 ln_phase := 100;
11870 
11871                 update_line_status(ln_interface_line_id, lv_import_status, lv_import_process );
11872 
11873              END IF;
11874              EXCEPTION
11875                WHEN OTHERS THEN
11876                IF ( ln_proc_level >= ln_dbg_level)
11877                THEN
11878                   FND_LOG.STRING ( ln_proc_level
11879                                  , GV_MODULE_PREFIX || '.' || lv_proc_name
11880                                    || '. Other_Exception '
11881                                  , SQLCODE || ':' || SQLERRM
11882                                    );
11883                END IF;
11884 
11885                ROLLBACK TO PROC_MAIN_SVP;
11886 
11887                lv_import_status := GV_IMPORT_FAILURE;
11888                update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
11889                update_error_flag(ln_interface_line_id,'Y');
11890 
11891                --Error message record
11892                lv_process_message := 'PROCESSING Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in '|| lv_import_process || ' With interface_line_id:'||ln_interface_line_id||',at POS:'||ln_phase;
11893                log_error(
11894                  pv_err_level              => GV_ERROR_TYPE_LINE,
11895                  pn_line_id                => ln_interface_line_id,
11896                  pn_source_line_id         => ln_interface_line_id,
11897                  pv_err_mess               => lv_process_message,
11898                  pv_invalid_value          => NULL
11899                );
11900 
11901                GOTO NEXT_LINE;
11902 
11903              END;
11904              -------------------------------------------------------------------------------
11905              --For AP Accounting  end
11906              --For AR Updating    end
11907 
11908 
11909          END LOOP;--loop for interface line for trx id = rec_trx_id.trx_id;
11910          ----------------------------------------------------------------------------------------------------
11911          ---Loop for process populate ,recalculate ,ap accounting , ar updating. end
11912 
11913 
11914 
11915          --Only for AR accounting begin
11916          --Note : On transaction level.
11917          -------------------------------------------------------------------------------
11918          BEGIN
11919          IF (lv_import_status = GV_IMPORT_SUCCESS) THEN
11920 
11921              IF (upper(GV_IMPORT_MODULE) = JAI_CONSTANTS.SOURCE_AR) THEN
11922 
11923                 lv_import_process := GV_PROCESS_ACCOUNTING;
11924 
11925                 ln_phase := 110;
11926 
11927                 process_ar_accounting_lines(
11928                         pn_trx_id            => rec_trx_id.trx_id,
11929                         ov_return_code       => lv_return_code,
11930                         ov_return_message    => lv_return_message
11931                 );
11932 
11933                 IF(lv_return_code <> jai_constants.successful)THEN
11934 
11935                     ROLLBACK TO PROC_MAIN_SVP;
11936 
11937                     lv_import_status := GV_IMPORT_FAILURE;
11938                     update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
11939                     update_trx_error_flag(rec_trx_id.trx_id,'Y');
11940                     --Error message record
11941                     FOR rec_interface_id IN get_interface_id_cur(rec_trx_id.trx_id)
11942                     LOOP
11943                         log_error(
11944                            pv_err_level              => GV_ERROR_TYPE_LINE,
11945                            pn_line_id                => rec_interface_id.interface_line_id,
11946                            pn_source_line_id         => rec_interface_id.interface_line_id,
11947                            pv_err_mess               => lv_return_message,
11948                            pv_invalid_value          => NULL
11949                         );
11950                     END LOOP;
11951 
11952                     GOTO NEXT_LINE;
11953                 END IF;
11954 
11955                 --Fired the trigger jai_ar_rcta_ariud_t1,jai_ar_rcta_trigger_pkg.aru_t4,aru_t7.inclusive_tax_accounting
11956                 /*
11957                 update ra_customer_trx_all
11958                 set complete_flag = 'Y'
11959                 where customer_trx_id = rec_trx_id.trx_id;
11960                 */
11961                 --Update all the lines status of the transaction.
11962 
11963                 ln_phase := 120;
11964 
11965                 update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
11966              ELSIF (upper(GV_IMPORT_MODULE) = JAI_CONSTANTS.SOURCE_AP) THEN
11967 
11968                SELECT SUM(amount)
11969                  INTO ln_total_amount
11970                  FROM ap_invoice_lines_all
11971                 WHERE invoice_id = rec_trx_id.trx_id;
11972 
11973                 --Invoice amount should be updated after all invoice lines are generated.
11974                 UPDATE ap_invoices_all
11975                    SET invoice_amount = ln_total_amount
11976                  WHERE invoice_id = rec_trx_id.trx_id;
11977 
11978                 --Ap_payment_schedules_all should be updated with correct amount.
11979                 --When pay the invoice, payment amount will be correct.
11980                 --inv_curr_gross_amount currency amount.
11981                 UPDATE ap_payment_schedules_all
11982                    SET gross_amount = ln_total_amount,
11983                        amount_remaining = ln_total_amount,
11984                        inv_curr_gross_amount = ln_total_amount
11985                  WHERE invoice_id = rec_trx_id.trx_id;
11986 
11987                 --Update columns in ap_invoice_distributions_all, then distribution lines
11988                 --can be pickep up be create accounting programs.
11989                 UPDATE ap_invoice_distributions_all
11990                    SET accounting_event_id = (SELECT accounting_event_id
11991                                                 FROM ap_invoice_distributions_all
11992                                                WHERE invoice_id = rec_trx_id.trx_id
11993                                                  AND line_type_lookup_code = 'ITEM'
11994                                                  AND rownum = 1),
11995                        total_dist_amount = amount,
11996                        total_dist_base_amount = 0
11997                  WHERE invoice_id = rec_trx_id.trx_id;
11998 
11999              END IF;
12000          END IF;
12001          EXCEPTION
12002 
12003                WHEN OTHERS THEN
12004                IF ( ln_proc_level >= ln_dbg_level)
12005                THEN
12006                   FND_LOG.STRING ( ln_proc_level
12007                                  , GV_MODULE_PREFIX || '.' || lv_proc_name
12008                                    || '. Other_Exception '
12009                                  , SQLCODE || ':' || SQLERRM
12010                                    );
12011                END IF;   --( ln_proc_level >= ln_dbg_level)  ;
12012 
12013                ROLLBACK TO PROC_MAIN_SVP;
12014 
12015                lv_import_status := GV_IMPORT_FAILURE;
12016                update_trx_lines_status(rec_trx_id.trx_id, lv_import_status, lv_import_process );
12017                update_trx_error_flag(rec_trx_id.trx_id,'Y');
12018                --Error message record
12019                lv_process_message := 'PROCESSING Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in ACCOUNTING With internal_trx_id:'||rec_trx_id.trx_id||', at POS:'||ln_phase;
12020                FOR rec_interface_id IN get_interface_id_cur(rec_trx_id.trx_id)
12021                LOOP
12022                    log_error(
12023                            pv_err_level              => GV_ERROR_TYPE_LINE,
12024                            pn_line_id                => rec_interface_id.interface_line_id,
12025                            pn_source_line_id         => rec_interface_id.interface_line_id,
12026                            pv_err_mess               => lv_process_message,
12027                            pv_invalid_value          => NULL
12028                         );
12029                END LOOP;
12030 
12031                GOTO NEXT_LINE;
12032          END;
12033          -------------------------------------------------------------------------------
12034          --Note : On transaction level
12035          --Only for AR accounting end
12036 
12037 
12038          <<NEXT_LINE>>
12039          NULL;
12040 
12041 
12042      END LOOP;--rec_trx_id
12043      ---------------------------------------------------------------------------------------------------------------------------------
12044      --Loop for trx id end
12045 
12046      ln_phase := 130;
12047 
12048      --generate output report for importing transactions.
12049      generate_output_report( pv_import_module
12050                            , pn_org_id
12051                            , pn_organization_id
12052                            , pn_location_id
12053                            , pn_party_id
12054                            , pn_party_site_id
12055                            , pv_transaction_num_from
12056                            , pv_transaction_num_to
12057       );
12058 
12059      --Update request id to null for the transaction marked at beginning.
12060      mark_request_id(
12061               pv_type => 'OFF'
12062             , pn_org_id               => null
12063             , pn_organization_id      => null
12064             , pn_location_id          => null
12065             , pn_party_id             => null
12066             , pn_party_site_id        => null
12067             , pv_transaction_num_from => null
12068             , pv_transaction_num_to   => null
12069      );
12070 
12071      ln_phase := 140;
12072 
12073 
12074 
12075      --Delete the successful lines.
12076      --del_success_lines; --Purge program will take care of deleting records.
12077 
12078      ln_phase := 150;
12079 
12080      COMMIT;
12081 
12082   EXCEPTION
12083   WHEN OTHERS THEN
12084 
12085     lv_process_message := 'PROCESSING Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in WHOLE PROCESSING at POS:'||ln_phase;
12086     log_error(
12087        pv_err_level              => GV_ERROR_TYPE_LINE,
12088        pn_line_id                => ln_interface_line_id,
12089        pn_source_line_id         => ln_interface_line_id,
12090        pv_err_mess               => lv_process_message,
12091        pv_invalid_value          => NULL
12092     );
12093     --
12094     mark_request_id(
12095               pv_type => 'OFF'
12096             , pn_org_id               => null
12097             , pn_organization_id      => null
12098             , pn_location_id          => null
12099             , pn_party_id             => null
12100             , pn_party_site_id        => null
12101             , pv_transaction_num_from => null
12102             , pv_transaction_num_to   => null
12103      );
12104     --
12105     IF ( ln_proc_level >= ln_dbg_level )THEN
12106       FND_LOG.STRING ( ln_proc_level
12107                      , GV_MODULE_PREFIX || '.' || lv_proc_name
12108                        || '. Other_Exception '
12109                      , SQLCODE || ':' || SQLERRM
12110                      );
12111 
12112     END IF;--debug level
12113 
12114   END populate_jai_interface_lines;
12115 
12116 
12117   /*
12118   || purge process block
12119   */
12120   PROCEDURE purge_jai_interface_lines(
12121         errbuf                   OUT NOCOPY VARCHAR2
12122       , retcode                  OUT NOCOPY VARCHAR2
12123       , pv_import_module         VARCHAR2
12124       , pn_org_id                NUMBER
12125       , pn_organization_id       NUMBER
12126       , pn_location_id           NUMBER
12127       , pn_party                 JAI_INTERFACE_LINES_ALL.PARTY_ID%TYPE
12128       , pn_party_site            JAI_INTERFACE_LINES_ALL.PARTY_SITE_ID%TYPE
12129       , pv_transaction_num_from  VARCHAR2
12130       , pv_transaction_num_to    VARCHAR2
12131       , pv_line_status           VARCHAR2
12132   )
12133   IS
12134   --Cursor define here
12135 
12136 
12137   --Variable define here
12138 
12139 
12140   ln_dbg_level          NUMBER         := FND_LOG.g_current_runtime_level;
12141   ln_proc_level         NUMBER         := FND_LOG.level_procedure;
12142   lv_proc_name          VARCHAR2 (100) := 'populate_jai_interface_lines';
12143 
12144   lv_import_status      VARCHAR2(30);
12145   lv_import_process     VARCHAR2(30);
12146   lv_err_mess           VARCHAR2(300);
12147   lv_process_message    VARCHAR2(2000);
12148   le_exception          EXCEPTION;
12149 
12150   lv_return_message     VARCHAR2(2000);
12151   lv_return_code        VARCHAR2(100) ;
12152   ln_phase              NUMBER;
12153 
12154   BEGIN
12155      IF(NVL(pv_line_status,GV_LINE_STATUS_ALL)=GV_LINE_STATUS_ALL)THEN
12156 
12157           delete from jai_interface_err_lines
12158           where 1=1
12159           and interface_line_id in
12160           (
12161                select interface_line_id
12162                from jai_interface_lines_all
12163                where 1=1
12164                AND   import_module   = nvl(pv_import_module,import_module)
12165                AND   organization_id = nvl(pn_organization_id, organization_id)
12166                AND   org_id          = nvl(pn_org_id, org_id)
12167                AND   location_id     = nvl(pn_location_id, location_id)
12168                AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12169                AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12170                AND   party_id      = nvl(pn_party,party_id)
12171                AND   party_site_id = nvl(pn_party_site,party_site_id)
12172                and   (request_id is null or request_id='')
12173           );
12174 
12175           delete from jai_interface_tax_lines_all
12176           where 1=1
12177           and interface_line_id in
12178           (
12179                select interface_line_id
12180                from jai_interface_lines_all
12181                where 1=1
12182                AND   import_module   = nvl(pv_import_module,import_module)
12183                AND   organization_id = nvl(pn_organization_id, organization_id)
12184                AND   org_id          = nvl(pn_org_id, org_id)
12185                AND   location_id     = nvl(pn_location_id, location_id)
12186                AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12187                AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12188                AND   party_id      = nvl(pn_party,party_id)
12189                AND   party_site_id = nvl(pn_party_site,party_site_id)
12190                and   (request_id is null or request_id='')
12191           );
12192 
12193           delete from jai_interface_lines_all
12194           where 1=1
12195                AND   import_module   = nvl(pv_import_module,import_module)
12196                AND   organization_id = nvl(pn_organization_id, organization_id)
12197                AND   org_id          = nvl(pn_org_id, org_id)
12198                AND   location_id     = nvl(pn_location_id, location_id)
12199                AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12200                AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12201                AND   party_id      = nvl(pn_party,party_id)
12202                AND   party_site_id = nvl(pn_party_site,party_site_id)
12203                and   (request_id is null or request_id='')
12204          ;
12205 
12206          if(pn_org_id is null)then
12207                delete from jai_interface_tax_lines_all
12208                 where 1=1
12209                      AND   import_module   = nvl(pv_import_module,import_module)
12210                      AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12211                      AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12212                      AND   party_id      = nvl(pn_party,party_id)
12213                      AND   party_site_id = nvl(pn_party_site,party_site_id);
12214          end if;
12215      ELSIF (NVL(pv_line_status,GV_LINE_STATUS_ALL)=GV_LINE_STATUS_ERROR)THEN
12216 
12217           delete from jai_interface_err_lines
12218           where 1=1
12219           and   interface_line_id in
12220           (
12221               SELECT interface_line_id
12222               FROM   JAI_INTERFACE_LINES_ALL
12223               WHERE  1=1
12224               and   import_status   = GV_IMPORT_FAILURE
12225               AND   nvl(error_flag,'N')= 'Y'
12226               AND   import_module    = nvl(pv_import_module, import_module)
12227               AND   organization_id = nvl(pn_organization_id, organization_id)
12228               AND   org_id          = nvl(pn_org_id, org_id)
12229               AND   location_id     = nvl(pn_location_id, location_id)
12230               AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12231               AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12232               AND   party_id      = nvl(pn_party,party_id)
12233               AND   party_site_id = nvl(pn_party_site,party_site_id)
12234               and   (request_id is null or request_id='')
12235           );
12236 
12237           delete from jai_interface_tax_lines_all
12238           where 1=1
12239           and   interface_line_id in
12240           (
12241               SELECT interface_line_id
12242               FROM   JAI_INTERFACE_LINES_ALL
12243               WHERE  1=1
12244               and   import_status   = GV_IMPORT_FAILURE
12245               AND   nvl(error_flag,'N')= 'Y'
12246               AND   import_module    = nvl(pv_import_module, import_module)
12247               AND   organization_id = nvl(pn_organization_id, organization_id)
12248               AND   org_id          = nvl(pn_org_id, org_id)
12249               AND   location_id     = nvl(pn_location_id, location_id)
12250               AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12251               AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12252               AND   party_id      = nvl(pn_party,party_id)
12253               AND   party_site_id = nvl(pn_party_site,party_site_id)
12254               and   (request_id is null or request_id='')
12255           );
12256 
12257           delete from jai_interface_lines_all
12258               WHERE  1=1
12259               and   import_status   = GV_IMPORT_FAILURE
12260               AND   nvl(error_flag,'N')= 'Y'
12261               AND   import_module    = nvl(pv_import_module, import_module)
12262               AND   organization_id = nvl(pn_organization_id, organization_id)
12263               AND   org_id          = nvl(pn_org_id, org_id)
12264               AND   location_id     = nvl(pn_location_id, location_id)
12265               AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12266               AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12267               AND   party_id      = nvl(pn_party,party_id)
12268               AND   party_site_id = nvl(pn_party_site,party_site_id)
12269               and   (request_id is null or request_id='');
12270 
12271      ELSIF (NVL(pv_line_status,GV_LINE_STATUS_SUCCESS)=GV_LINE_STATUS_SUCCESS)THEN
12272 
12273           delete from jai_interface_err_lines
12274           where 1=1
12275           and   interface_line_id in
12276           (
12277               SELECT interface_line_id
12278               FROM   JAI_INTERFACE_LINES_ALL
12279               WHERE  1=1
12280               AND   import_status   = GV_IMPORT_SUCCESS
12281               AND   import_module    = nvl(pv_import_module, import_module)
12282               AND   organization_id = nvl(pn_organization_id, organization_id)
12283               AND   org_id          = nvl(pn_org_id, org_id)
12284               AND   location_id     = nvl(pn_location_id, location_id)
12285               AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12286               AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12287               AND   party_id      = nvl(pn_party,party_id)
12288               AND   party_site_id = nvl(pn_party_site,party_site_id)
12289           );
12290 
12291           delete from jai_interface_tax_lines_all
12292           where 1=1
12293           and   interface_line_id in
12294           (
12295               SELECT interface_line_id
12296               FROM   JAI_INTERFACE_LINES_ALL
12297               WHERE  1=1
12298               AND   import_status   = GV_IMPORT_SUCCESS
12299               AND   import_module    = nvl(pv_import_module, import_module)
12300               AND   organization_id = nvl(pn_organization_id, organization_id)
12301               AND   org_id          = nvl(pn_org_id, org_id)
12302               AND   location_id     = nvl(pn_location_id, location_id)
12303               AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12304               AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12305               AND   party_id      = nvl(pn_party,party_id)
12306               AND   party_site_id = nvl(pn_party_site,party_site_id)
12307           );
12308 
12309           delete from jai_interface_lines_all
12310               WHERE  1=1
12311               AND   import_status   = GV_IMPORT_SUCCESS
12312               AND   import_module    = nvl(pv_import_module, import_module)
12313               AND   organization_id = nvl(pn_organization_id, organization_id)
12314               AND   org_id          = nvl(pn_org_id, org_id)
12315               AND   location_id     = nvl(pn_location_id, location_id)
12316               AND   transaction_num >= nvl(pv_transaction_num_from, transaction_num)
12317               AND   transaction_num <= nvl(pv_transaction_num_to, transaction_num)
12318               AND   party_id      = nvl(pn_party, party_id)
12319               AND   party_site_id = nvl(pn_party_site, party_site_id);
12320      END IF;
12321      COMMIT;
12322   EXCEPTION
12323   WHEN OTHERS THEN
12324 
12325     lv_process_message := 'Purge Exception with SQLERR '|| SUBSTR(SQLERRM,1,230) || ' in WHOLE PROCESSING';
12326 /*    log_error(
12327        pv_err_level              => GV_ERROR_TYPE_LINE,
12328        pn_line_id                => ln_interface_line_id,
12329        pn_source_line_id         => ln_interface_line_id,
12330        pv_err_mess               => lv_process_message,
12331        pv_invalid_value          => NULL
12332     ); */
12333 
12334     IF ( ln_proc_level >= ln_dbg_level )THEN
12335       FND_LOG.STRING ( ln_proc_level
12336                      , GV_MODULE_PREFIX || '.' || lv_proc_name
12337                        || '. Other_Exception '
12338                      , SQLCODE || ':' || SQLERRM
12339                      );
12340 
12341     END IF;--debug level
12342 
12343   END purge_jai_interface_lines;
12344 
12345 END JAI_OPEN_API_PKG;