DBA Data[Home] [Help]

PACKAGE BODY: APPS.GL_JOURNAL_IMPORT_TAX_PKG

Source


1 PACKAGE BODY GL_JOURNAL_IMPORT_TAX_PKG AS
2 /* $Header: glujitxb.pls 120.3 2006/01/17 21:43:20 xiwu noship $ */
3 --
4 -- Wrappers
5 --
6 PROCEDURE Update_taxes(errbuf	    OUT NOCOPY VARCHAR2,
7 		       retcode	    OUT NOCOPY VARCHAR2,
8 		       p_batch_name IN VARCHAR2) IS
9 l_batch_id NUMBER;
10 BEGIN
11   --
12   BEGIN
13     SELECT je_batch_id
14     INTO l_batch_id
15     FROM gl_je_batches
16     WHERE name = p_batch_name AND
17     ROWNUM = 1;
18     --
19     EXCEPTION
20         WHEN NO_DATA_FOUND
21         THEN
22           l_batch_id := -1;
23   END;
24   --
25   IF l_batch_id = -1
26   THEN
27     -- wrong p_batch_name
28     -- deliver a message to a log file
29     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
30                       token_num => 2,
31                       t1        =>'ROUTINE',
32                       v1        =>
33                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
34                       t2        =>'ACTION',
35                       v2        =>'Wrong batch name: '
36                                 || p_batch_name);
37     --RAISE move_taxes_err;
38     RETURN;
39   END IF;
40   --
41   GL_JOURNAL_IMPORT_TAX_PKG.move_taxes_srs(l_batch_id);
42   --
43   EXCEPTION
44     WHEN OTHERS THEN
45       errbuf := SQLERRM;
46       retcode := '2';
47       --app_exception.raise_exception;
48 END Update_taxes;
49 --
50 -- Regular procedures
51 --
52 PROCEDURE move_taxes_srs(p_batch_id IN NUMBER)
53 IS
54 -- batch level
55 l_org_id NUMBER(15) := 0;
56 l_org_name VARCHAR2(240);
57 l_budgetary_control_status VARCHAR2(1);
58 l_actual_flag VARCHAR2(1);
59 l_approval_status_code VARCHAR2(1);
60 l_status VARCHAR2(1);
61 l_name VARCHAR2(100);
62 l_batch_tax_required NUMBER(15);
63 -- header level
64 l_ledger_id NUMBER(15) := 0;
65 l_je_header_id NUMBER(15);
66 l_je_header_name VARCHAR2(100);
67 l_je_header_je_source VARCHAR2(25);
68 l_je_header_tax_status_code VARCHAR2(1);
69 l_je_header_tax_required NUMBER(15);
70 -- line level
71 l_je_line_period_name VARCHAR2(15);
72 l_je_line_effective_date DATE;
73 l_je_line_status VARCHAR2(1);
74 l_je_line_tax_code VARCHAR2(15);
75 l_je_line_tax_flag VARCHAR2(1);
76 l_je_line_tax_code_id NUMBER(15);
77 l_je_line_attribute9 VARCHAR2(150);
78 l_je_line_attribute10 VARCHAR2(150);
79 l_je_line_tax_type_code VARCHAR2(1);
80 l_je_line_found NUMBER(15);
81 le_id               NUMBER; -- legal entity id
82 x_return_status     VARCHAR2(30);
83 x_msg_out           VARCHAR2(2000);
84 --
85 CURSOR je_headers (batch_id_in NUMBER)
86 IS
87   SELECT je_header_id,name,je_source,tax_status_code,ledger_id
88   FROM gl_je_headers
89   WHERE je_batch_id = batch_id_in
90   FOR UPDATE;
91 --
92 CURSOR je_lines (header_id_in NUMBER)
93 IS
94   SELECT period_name,effective_date,status,
95     tax_code,amount_includes_tax_flag,tax_code_id,
96     attribute9,attribute10
97   FROM gl_je_lines
98   WHERE je_header_id = header_id_in
99   FOR UPDATE;
100 --
101 BEGIN
102   --
103   BEGIN
104     SELECT org_id,
105       budgetary_control_status, actual_flag,
106       approval_status_code, status, name
107     INTO l_org_id,
108       l_budgetary_control_status, l_actual_flag,
109       l_approval_status_code, l_status, l_name
110     FROM GL_JE_BATCHES
111     WHERE je_batch_id = p_batch_id;
112 
113     --
114     EXCEPTION
115         WHEN NO_DATA_FOUND
116         THEN
117           l_org_id := -1;
118   END;
119   --
120   IF l_org_id = -1
121   THEN
122     -- deliver a message to a log file
123     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
124                       token_num => 2,
125                       t1        =>'ROUTINE',
126                       v1        =>
127                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
128                       t2        =>'ACTION',
129                       v2        =>'Batch name:'
130                                 || l_name
131                                 ||' :SOB does not exist');
132     RETURN;
133   END IF;
134   --
135 
136   IF
137     (l_status <> 'U')
138   THEN
139     -- deliver a message to a log file
140     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
141                       token_num => 2,
142                       t1        =>'ROUTINE',
143                       v1        =>
144                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
145                       t2        =>'ACTION',
146                       v2        =>'Batch name: '
147                                 || l_name
148                                 || ':cannot be taxed because '
149                                 || 'status is not U');
150     RETURN;
151   END IF;
152   --
153   IF
154     (l_budgetary_control_status NOT IN ('R','N') )
155   THEN
156     -- deliver a message to a log file
157     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
158                       token_num => 2,
159                       t1        =>'ROUTINE',
160                       v1        =>
161                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
162                       t2        =>'ACTION',
163                       v2        =>'Batch name: '
164                                 || l_name
165                                 || ':cannot be taxed because '
166                                 || 'budgetary_control_status is not in R,N');
167     RETURN;
168   END IF;
169   --
170   IF
171     (l_actual_flag <> 'A' )
172   THEN
173     -- deliver a message to a log file
174     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
175                       token_num => 2,
176                       t1        =>'ROUTINE',
177                       v1        =>
178                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
179                       t2        =>'ACTION',
180                       v2        =>'Batch name: '
181                                 || l_name
182                                 || ':cannot be taxed because '
183                                 || 'actual_flag is not A');
184     RETURN;
185   END IF;
186   --
187   --IF
188   --  (l_approval_status_code <> 'I' )
189   --THEN
190     -- deliver a message to a log file
191   --  GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
192   --                    token_num => 2,
193   --                    t1        =>'ROUTINE',
194   --                    v1        =>
195   --                    'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
196   --                    t2        =>'ACTION',
197   --                    v2        =>'Batch name: '
198   --                              || l_name
199   --                              || ':cannot be taxed because '
200   --                              || 'approval_status_code is not I');
201     --RETURN;
202   --END IF;
203   --
204   l_batch_tax_required := 0;
205   --
206   -- we should figure out the value of org_id and put it into l_org_id
207   -- from profile ORG_ID (MO: Operating Unit)
208   --
209   l_org_id := FND_PROFILE.VALUE_WNPS('ORG_ID');
210   IF l_org_id IS NULL
211   THEN
212     l_org_id := -1;
213   END IF;
214   --
215   BEGIN
216     SELECT name
217     INTO l_org_name
218     FROM hr_operating_units
219     WHERE organization_id = l_org_id;
220     --
221     EXCEPTION
222         WHEN NO_DATA_FOUND
223         THEN
224           l_org_name := '';
225   END;
226   --
227   --GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
228   --                  token_num => 2,
229   --                  t1        =>'ROUTINE',
230   --                  v1        =>
231   --                  'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
232   --                  t2        =>'ACTION',
233   --                  v2        =>'Profile ORG_ID organization name:'
234   --                            || l_org_name
235   --                            || ':is used for further processing');
236   --
237   OPEN je_headers(p_batch_id);
238   LOOP
239     FETCH je_headers INTO
240       l_je_header_id,
241       l_je_header_name,
242       l_je_header_je_source,
243       l_je_header_tax_status_code,
244       l_ledger_id;
245     IF je_headers%NOTFOUND
246     THEN
247       EXIT;
248     END IF;
249     --
250     IF SUBSTR(l_je_header_je_source,1,11) <> 'Spreadsheet'
251     THEN
252       -- deliver a message to a log file
253       GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
254                       token_num => 2,
255                       t1        =>'ROUTINE',
256                       v1        =>
257                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
258                       t2        =>'ACTION',
259                       v2        =>'Batch :'
260                                 || l_name
261                                 ||':was not created by Spreadsheet');
262       RETURN;
263     END IF;
264    --
265     l_je_header_tax_required := 0;
266     --
267     OPEN je_lines(l_je_header_id);
268     LOOP
269       FETCH je_lines INTO
270         l_je_line_period_name,
271         l_je_line_effective_date,
272         l_je_line_status,
273         l_je_line_tax_code,
274         l_je_line_tax_flag,
275         l_je_line_tax_code_id,
276         l_je_line_attribute9,
277         l_je_line_attribute10;
278       IF je_lines%NOTFOUND
279       THEN
280         EXIT;
281       END IF;
282       --
283       -- process current je line
284       --
285       -- we suppose that l_je_line_attribute9 has a value of TAX_CODE
286       -- and l_je_line_attribute10 has a value of AMOUNT_INCLUDES_TAX_FLAG(Y,N)
287       --
288       IF (l_je_line_attribute9 IS NOT NULL) AND
289          (l_je_line_attribute10 IS NOT NULL)
290       THEN
291         --
292         -- use GL_TAX_CODES_V to get tax_code_id
293         --
294         BEGIN
295           --
296           l_je_line_tax_flag := substr(l_je_line_attribute10,1,1);
297           l_je_line_found := 1;
298           l_je_line_tax_type_code := ' ';
299           -- some questions about SELECT
300           le_id := XLE_UTILITIES_GRP.Get_DefaultLegalContext_OU(
301                    l_org_id);
302           zx_gl_tax_options_pkg.get_tax_rate_id (
303                1.0,
304                l_org_id,
305                le_id,
306                l_je_line_attribute9,
307                sysdate,
308                l_je_line_tax_type_code,
309                l_je_line_tax_code_id,
310                x_return_status,
311                x_msg_out);
312 
313 --          SELECT tax_code_id, tax_type_code
314 --          INTO l_je_line_tax_code_id, l_je_line_tax_type_code
315 --          FROM GL_TAX_CODES_V
316 --          WHERE org_id = l_org_id AND
317 --            ledger_id = l_ledger_id AND
318 --            tax_code = l_je_line_attribute9 AND
319 --            valid_flag = 'Y' AND
320 --            displayed_flag = 'Y' AND
321 --            enabled_flag = 'Y' AND
322 --            sysdate BETWEEN nvl(start_date,sysdate) AND
323 --            nvl(end_date,sysdate);
324           --
325           EXCEPTION
326             WHEN NO_DATA_FOUND
327             THEN
328               l_je_line_found := -1;
329         END;
330         --
331         IF l_je_line_found = 1
332         THEN
333           --
334           --  if tax details are present in current line,
335           --  then update gl_je_lines details
336           --
337 
338           UPDATE gl_je_lines
339           SET tax_code_id = l_je_line_tax_code_id,
340               amount_includes_tax_flag = l_je_line_tax_flag,
341               tax_type_code = l_je_line_tax_type_code,
342               tax_rounding_rule_code = 'N',
343               taxable_line_flag = 'Y'
344           WHERE CURRENT OF je_lines;
345           l_je_header_tax_required := 1;
346 
347         ELSE
348           -- deliver a message to a log file
349           GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
350                       token_num => 2,
351                       t1        =>'ROUTINE',
352                       v1        =>
353                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
354                       t2        =>'ACTION',
355                       v2        =>'Tax code:'
356                                 || l_je_line_attribute9
357                                 ||':cannot be found');
358         END IF;
359       END IF;
363     --
360       --
361     END LOOP;
362     CLOSE je_lines;
364     --  if any line has been updated for taxes in current header,
365     --  then update gl_je_headers details
366     --
367     IF l_je_header_tax_required = 1
368     THEN
369       UPDATE gl_je_headers
370       SET tax_status_code = 'R'
371       WHERE CURRENT OF je_headers;
372       l_batch_tax_required := 1;
373     END IF;
374     --
375   END LOOP;
376   CLOSE je_headers;
377   --
378   -- do not forget to update org_id at batch level
379   --
380   IF l_batch_tax_required = 1
381   THEN
382     UPDATE gl_je_batches
383     SET org_id = l_org_id
384     WHERE je_batch_id = p_batch_id;
385   END IF;
386   --
387   COMMIT;
388   --
389 END move_taxes_srs;
390 --
391 --
392 PROCEDURE move_taxes_hook(p_batch_id IN NUMBER)
393 IS
394 -- batch level
395 l_org_id NUMBER(15) := 0;
396 l_org_name VARCHAR2(240);
397 l_budgetary_control_status VARCHAR2(1);
398 l_actual_flag VARCHAR2(1);
399 l_approval_status_code VARCHAR2(1);
400 l_status VARCHAR2(1);
401 l_name VARCHAR2(100);
402 l_batch_tax_required NUMBER(15);
403 -- header level
404 l_ledger_id NUMBER(15) := 0;
405 l_je_header_id NUMBER(15);
406 l_je_header_name VARCHAR2(100);
407 l_je_header_je_source VARCHAR2(25);
408 l_je_header_tax_status_code VARCHAR2(1);
409 l_je_header_tax_required NUMBER(15);
410 -- line level
411 l_je_line_period_name VARCHAR2(15);
412 l_je_line_effective_date DATE;
413 l_je_line_status VARCHAR2(1);
414 l_je_line_tax_code VARCHAR2(15);
415 l_je_line_tax_flag VARCHAR2(1);
416 l_je_line_tax_code_id NUMBER(15);
417 l_je_line_attribute9 VARCHAR2(150);
418 l_je_line_attribute10 VARCHAR2(150);
419 l_je_line_tax_type_code VARCHAR2(1);
420 l_je_line_found NUMBER(15);
421 l_je_line_num NUMBER(15);
422 le_id               NUMBER; -- legal entity id
423 x_return_status     VARCHAR2(30);
424 x_msg_out           VARCHAR2(2000);
425 --
426 -- move_taxes_err EXCEPTION;
427 --
428 CURSOR je_headers (batch_id_in NUMBER)
429 IS
430   SELECT je_header_id,name,je_source,tax_status_code, ledger_id
431   FROM gl_je_headers
432   WHERE je_batch_id = batch_id_in
433   FOR UPDATE;
434 --
435 CURSOR je_lines (header_id_in NUMBER)
436 IS
437   SELECT je_line_num,period_name,effective_date,status,
438     tax_code,amount_includes_tax_flag,tax_code_id,
439     attribute9,attribute10
440   FROM gl_je_lines
441   WHERE je_header_id = header_id_in
442   FOR UPDATE;
443 --
444 BEGIN
445   --
446   BEGIN
447     SELECT org_id,
448       budgetary_control_status, actual_flag,
449       approval_status_code, status, name
450     INTO l_org_id,
451       l_budgetary_control_status, l_actual_flag,
452       l_approval_status_code, l_status, l_name
453     FROM GL_JE_BATCHES
454     WHERE je_batch_id = p_batch_id;
455     --
456     EXCEPTION
457         WHEN NO_DATA_FOUND
458         THEN
459           l_org_id := -1;
460   END;
461   --
462   IF l_org_id = -1
463   THEN
464     -- deliver a message to a log file
465     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
466                       token_num => 2,
467                       t1        =>'ROUTINE',
468                       v1        =>
469                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
470                       t2        =>'ACTION',
471                       v2        =>'Batch name:'
472                                 || l_name
473                                 ||' :SOB does not exist');
474     RETURN;
475   END IF;
476   --
477   IF
478     (l_status <> 'U')
479   THEN
480     -- deliver a message to a log file
481     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
482                       token_num => 2,
483                       t1        =>'ROUTINE',
484                       v1        =>
485                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
486                       t2        =>'ACTION',
487                       v2        =>'Batch name: '
488                                 || l_name
489                                 || ':cannot be taxed because '
490                                 || 'status is not U');
491     RETURN;
492   END IF;
493   --
494   IF
495     (l_budgetary_control_status NOT IN ('R','N') )
496   THEN
497     -- deliver a message to a log file
498     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
499                       token_num => 2,
500                       t1        =>'ROUTINE',
501                       v1        =>
502                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
503                       t2        =>'ACTION',
504                       v2        =>'Batch name: '
505                                 || l_name
506                                 || ':cannot be taxed because '
507                                 || 'budgetary_control_status is not in R,N');
508     RETURN;
509   END IF;
510   --
511   IF
512     (l_actual_flag <> 'A' )
513   THEN
514     -- deliver a message to a log file
515     GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
516                       token_num => 2,
517                       t1        =>'ROUTINE',
518                       v1        =>
519                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
520                       t2        =>'ACTION',
521                       v2        =>'Batch name: '
522                                 || l_name
523                                 || ':cannot be taxed because '
524                                 || 'actual_flag is not A');
525     RETURN;
529   --  (l_approval_status_code <> 'I' )
526   END IF;
527   --
528   --IF
530   --THEN
531     -- deliver a message to a log file
532   --  GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
533   --                    token_num => 2,
534   --                    t1        =>'ROUTINE',
535   --                    v1        =>
536   --                    'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
537   --                    t2        =>'ACTION',
538   --                    v2        =>'Batch name: '
539   --                              || l_name
540   --                              || ':cannot be taxed because '
541   --                              || 'approval_status_code is not I');
542     --RETURN;
543   --END IF;
544   --
545   l_batch_tax_required := 0;
546   --
547   -- we should figure out the value of org_id and put it into l_org_id
548   -- from profile ORG_ID (MO: Operating Unit)
549   --
550   l_org_id := FND_PROFILE.VALUE_WNPS('ORG_ID');
551   IF l_org_id IS NULL
552   THEN
553     l_org_id := -1;
554   END IF;
555   --
556   BEGIN
557     SELECT name
558     INTO l_org_name
559     FROM hr_operating_units
560     WHERE organization_id = l_org_id;
561     --
562     EXCEPTION
563         WHEN NO_DATA_FOUND
564         THEN
565           l_org_name := '';
566   END;
567   --
568   --GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
569   --                  token_num => 2,
570   --                  t1        =>'ROUTINE',
571   --                  v1        =>
572   --                  'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
573   --                  t2        =>'ACTION',
574   --                  v2        =>'Profile ORG_ID organization name:'
575   --                            || l_org_name
576   --                            || ':is used for further processing');
577   --
578   OPEN je_headers(p_batch_id);
579   LOOP
580     FETCH je_headers INTO
581       l_je_header_id,
582       l_je_header_name,
583       l_je_header_je_source,
584       l_je_header_tax_status_code,
585       l_ledger_id;
586     IF je_headers%NOTFOUND
587     THEN
588       EXIT;
589     END IF;
590     --
591     IF SUBSTR(l_je_header_je_source,1,11) <> 'Spreadsheet'
592     THEN
593       -- deliver a message to a log file
594       GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
595                       token_num => 2,
596                       t1        =>'ROUTINE',
597                       v1        =>
598                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
599                       t2        =>'ACTION',
600                       v2        =>'Batch name:'
601                                 || l_name
602                                 ||':was not created by Spreadsheet');
603       RETURN;
604     END IF;
605     --
606     l_je_header_tax_required := 0;
607     --
608     OPEN je_lines(l_je_header_id);
609     LOOP
610       FETCH je_lines INTO
611         l_je_line_num,
612         l_je_line_period_name,
613         l_je_line_effective_date,
614         l_je_line_status,
615         l_je_line_tax_code,
616         l_je_line_tax_flag,
617         l_je_line_tax_code_id,
618         l_je_line_attribute9,
619         l_je_line_attribute10;
620       IF je_lines%NOTFOUND
621       THEN
622         EXIT;
623       END IF;
624       --
625       -- process current je line
626       --
627       -- we suppose that l_je_line_attribute9 has a value of TAX_CODE
628       -- and l_je_line_attribute10 has a value of AMOUNT_INCLUDES_TAX_FLAG(Y,N)
629       --
630       IF (l_je_line_attribute9 IS NOT NULL) AND
631          (l_je_line_attribute10 IS NOT NULL)
632       THEN
633         --
634         -- use GL_TAX_CODES_V to get tax_code_id
635         --
636         BEGIN
637           --
638           l_je_line_tax_flag := substr(l_je_line_attribute10,1,1);
639           l_je_line_found := 1;
640           l_je_line_tax_type_code := ' ';
641           -- some questions about SELECT
642           le_id := XLE_UTILITIES_GRP.Get_DefaultLegalContext_OU(
643                    l_org_id);
644           zx_gl_tax_options_pkg.get_tax_rate_id (
645                1.0,
646                l_org_id,
647                le_id,
648                l_je_line_attribute9,
649                sysdate,
650                l_je_line_tax_type_code,
651                l_je_line_tax_code_id,
652                x_return_status,
653                x_msg_out);
654 
655 
656           SELECT tax_code_id, tax_type_code
657           INTO l_je_line_tax_code_id, l_je_line_tax_type_code
658           FROM GL_TAX_CODES_V
659           WHERE org_id = l_org_id AND
660             ledger_id = l_ledger_id AND
661             tax_code = l_je_line_attribute9 AND
662             valid_flag = 'Y' AND
663             displayed_flag = 'Y' AND
664             enabled_flag = 'Y' AND
665             sysdate BETWEEN nvl(start_date,sysdate) AND
666             nvl(end_date,sysdate);
667           --
668           EXCEPTION
669             WHEN NO_DATA_FOUND
670             THEN
671               l_je_line_found := -1;
672         END;
673         --
674         IF l_je_line_found = 1
675         THEN
676           --
677           --  if tax details are present in current line,
678           --  then update gl_je_lines details
679           --
680           UPDATE gl_je_lines
681           SET tax_code_id = l_je_line_tax_code_id,
682               amount_includes_tax_flag = l_je_line_tax_flag,
683               tax_type_code = l_je_line_tax_type_code,
684               tax_rounding_rule_code = 'N',
688           --  je_line_num = l_je_line_num;
685               taxable_line_flag = 'Y'
686           WHERE CURRENT OF je_lines;
687           --WHERE je_header_id = l_je_header_id AND
689           l_je_header_tax_required := 1;
690         ELSE
691           -- deliver a message to a log file
692           GL_MESSAGE.Write_Log(msg_name  =>'SHRD0180',
693                       token_num => 2,
694                       t1        =>'ROUTINE',
695                       v1        =>
696                       'GL_JOURNAL_IMPORT_TAX_PKG.move_taxes',
697                       t2        =>'ACTION',
698                       v2        =>'Tax code:'
699                                 || l_je_line_attribute9
700                                 ||':cannot be found');
701         END IF;
702       END IF;
703       --
704     END LOOP;
705     CLOSE je_lines;
706     --
707     --  if any line has been updated for taxes in current header,
708     --  then update gl_je_headers details
709     --
710     IF l_je_header_tax_required = 1
711     THEN
712       UPDATE gl_je_headers
713       SET tax_status_code = 'R'
714       WHERE CURRENT OF je_headers;
715       --WHERE je_header_id = l_je_header_id;
716       l_batch_tax_required := 1;
717     END IF;
718     --
719   END LOOP;
720   CLOSE je_headers;
721   --
722   -- do not forget to update org_id at batch level
723   --
724   IF l_batch_tax_required = 1
725   THEN
726     UPDATE gl_je_batches
727     SET org_id = l_org_id
728     WHERE je_batch_id = p_batch_id;
729   END IF;
730   --
731   --COMMIT;
732   --
733 END move_taxes_hook;
734 --
735 --
736 --
737 PROCEDURE process_batch_list(p_batch_ids  IN     VARCHAR2,
738                              p_separator  IN     VARCHAR2)
739 IS
740 l_last_sep_pos NUMBER(15);
741 l_new_sep_pos NUMBER(15);
742 l_cur_batch_id_str VARCHAR2(30);
743 l_cur_batch_id_num NUMBER(15);
744 --
745 BEGIN
746   --
747   l_last_sep_pos := 0;
748   LOOP
749     l_new_sep_pos := INSTR(p_batch_ids,p_separator,l_last_sep_pos+1,1);
750     --
751     IF l_new_sep_pos > 0
752     THEN
753       l_cur_batch_id_str :=
754         SUBSTR(p_batch_ids,l_last_sep_pos+1,l_new_sep_pos-l_last_sep_pos-1);
755       l_cur_batch_id_num := to_number(l_cur_batch_id_str,'9999999999');
756       GL_JOURNAL_IMPORT_TAX_PKG.move_taxes_hook(l_cur_batch_id_num);
757       --
758       IF (l_new_sep_pos = LENGTH(p_batch_ids))
759       THEN
760         EXIT;
761       END IF;
762       --
763       l_last_sep_pos := l_new_sep_pos;
764       --
765     END IF;
766     --
767   END LOOP;
768   --
769 END process_batch_list;
770 --
771 END GL_JOURNAL_IMPORT_TAX_PKG;