DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_PROCESS_SALES_TAX_PVT

Source


1 PACKAGE BODY OKL_PROCESS_SALES_TAX_PVT AS
2 /* $Header: OKLRPSTB.pls 120.65.12020000.3 2013/03/22 05:10:19 racheruv ship $ */
3 
4   ---------------------------------------------------------------------------
5   -- FUNCTION get_seq_id
6   ---------------------------------------------------------------------------
7   FUNCTION get_seq_id RETURN NUMBER IS
8   BEGIN
9     RETURN(okc_p_util.raw_to_number(sys_guid()));
10   END get_seq_id;
11 
12  /*========================================================================
13  | PRIVATE PROCEDURE get_ship_to_site_use_id
14  |
15  | DESCRIPTION
16  |    This procedure derives the ship To location for a customer
17  |
18  | CALLED FROM
19  |    Other procedures in this API
20  |
21  | CALLS PROCEDURES/FUNCTIONS
22  |
23  |
24  | PARAMETERS
25  |  Input Parameters
26  |      p_cust_acct_id                          -- cutomer a/c ID
27  |      p_fin_asset_id                          -- Financial Asset ID
28  |  Output Parameters
29  |      x_ship_to_site_use_id           -- ship to Location
30  |
31  | KNOWN ISSUES
32  |
33  | NOTES
34  |
35  |
36  | MODIFICATION HISTORY
37  | Date                  Author            Description of Changes
38  | 22-NOV-07            ASAWANKA           Created  for bug# 6612165
39  |
40  *=======================================================================*/
41 PROCEDURE get_ship_to_site_use_id(
42     p_api_version                   IN  NUMBER,
43     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
44     x_return_status                     OUT NOCOPY VARCHAR2,
45     x_msg_count                         OUT NOCOPY NUMBER,
46     x_msg_data                          OUT NOCOPY VARCHAR2,
47     p_cust_acct_id                  IN  NUMBER,
48     p_fin_asset_id                  IN  NUMBER,
49     x_ship_to_site_use_id                       OUT NOCOPY NUMBER) IS
50 
51     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
52 
53     --Cursor to get the  install_location_id of the asset
54     CURSOR l_get_instlocid(cp_fin_asset_id IN NUMBER) IS
55     SELECT  csi.install_location_id,
56                 -- csi.location_id
57             csi.install_location_type_code
58     FROM   csi_item_instances csi,
59            okc_k_items cim,
60            okc_k_lines_b   inst,
61            okc_k_lines_b   ib,
62            okc_line_styles_b lse
63     WHERE  csi.instance_id = TO_NUMBER(cim.object1_id1)
64     AND    cim.cle_id = ib.id
65     AND    ib.cle_id = inst.id
66     AND    inst.lse_id = lse.id
67     AND    lse.lty_code = 'FREE_FORM2'
68     AND    inst.cle_id = cp_fin_asset_id ;
69 
70     -- get the Install Base Line ID (INST_ITEM) for the financial asset
71     CURSOR  l_institem_csr(cp_fin_asset_id IN NUMBER) IS
72     SELECT  ib.id  inst_item_id
73     FROM    okc_k_lines_b   inst,
74             okc_k_lines_b   ib
75     WHERE   ib.cle_id = inst.id
76     AND     inst.lse_id = 43
77     AND     inst.cle_id = cp_fin_asset_id;
78 
79     -- get the party site use ID
80     CURSOR l_txlitminsts_csr(cp_kle_id IN NUMBER) IS
81     SELECT object_id1_new
82         FROM   okl_txl_itm_insts
83         WHERE  kle_id = cp_kle_id;
84 
85         -- get the party site id
86         CURSOR l_partysiteuses_csr(cp_party_site_use_id IN NUMBER) IS
87         SELECT party_site_id
88         FROM   hz_party_site_uses
89         WHERE  party_site_use_id = cp_party_site_use_id;
90 
91     --Cursor to get the corresponding hz_location id for the install location id
92     CURSOR l_get_location_id(cp_party_site_id  IN NUMBER) IS
93     SELECT hzp.location_id
94     FROM   HZ_PARTY_SITES HZP
95     WHERE  HZP.PARTY_SITE_ID = cp_party_site_id;
96 
97     --Cursor to get the corresponding party_site_id FOR  a location id
98     CURSOR l_get_party_site_id(cp_location_id IN NUMBER) IS
99     SELECT HZP.PARTY_SITE_ID
100     FROM   HZ_PARTY_SITES HZP,
101            HZ_PARTY_SITE_USES HZU
102     WHERE  HZP.LOCATION_ID = cp_location_id
103     AND    HZP.party_site_id  = HZU.PARTY_SITE_ID
104     AND    HZU.SITE_USE_TYPE = 'INSTALL_AT'   ;
105 
106     --Cursor to get the ship_to_site_use_id corresponding to the install_location_id of the asset
107     CURSOR l_get_shiptositeid(cp_cust_acct_id IN NUMBER, cp_inst_loc_id IN NUMBER,cp_loc_id IN NUMBER) IS
108     SELECT /*a.CUST_ACCT_SITE_ID */
109            b.site_use_id
110     FROM   hz_cust_acct_sites_all a,
111            hz_cust_site_uses_all  b,
112            hz_party_sites      c
113     WHERE  a.CUST_ACCT_SITE_ID = b.CUST_ACCT_SITE_ID
114     AND    b.site_use_code     = 'SHIP_TO'
115     AND    a.party_site_id     = c.party_site_id
116     AND    a.cust_account_id   = cp_cust_acct_id
117     AND    a.org_id            = MO_GLOBAL.get_current_org_id  --NVL(TO_NUMBER(SUBSTRB(USERENV('CLIENT_INFO'),1,10)),-99)   sechawla 09-mar-11 11717200
118     AND    c.party_site_id     = cp_inst_loc_id
119     AND    c.location_id       = cp_loc_id;
120 
121         l_inst_loc_id                   NUMBER;
122         l_inst_loc_type_code    VARCHAR2(30);
123         l_loc_id                                NUMBER;
124         l_ship_to_siteuseid     NUMBER;
125         l_inst_item_id                  NUMBER;
126         l_party_site_use_id             NUMBER;
127 
128 BEGIN
129 
130     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
131         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id','Begin(+)');
132     END IF;
133 
134     --Print Input Variables
135     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
136          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
137               'p_init_msg_list :'||p_init_msg_list);
138          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
139               'p_cust_acct_id :'||p_cust_acct_id);
140          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
141               'p_fin_asset_id :'||p_fin_asset_id);
142 
143     END IF;
144 
145     x_return_status :=  OKL_API.G_RET_STS_SUCCESS;
146 
147     OPEN  l_get_instlocid(p_fin_asset_id);
148     FETCH l_get_instlocid INTO l_inst_loc_id, l_inst_loc_type_code;
149 
150     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
151           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
152               'l_inst_loc_id'||l_inst_loc_id);
153           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
154               'l_inst_loc_type_code'||l_inst_loc_type_code);
155     END IF;
156 
157     IF l_get_instlocid%NOTFOUND  THEN
158        -- For non Booked contracts, Install Location is not available in IB
159        -- get the location from the asset on the contract.
160 
161        IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
162           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
163               'l_get_instlocid%NOTFOUND');
164 
165        END IF;
166 
167        -- get the INST_ITEM line ID for the financial asset
168        OPEN   l_institem_csr(p_fin_asset_id);
169        FETCH  l_institem_csr INTO l_inst_item_id;
170        CLOSE  l_institem_csr;
171 
172        -- get the party site use ID
173        OPEN  l_txlitminsts_csr(l_inst_item_id);
174            FETCH l_txlitminsts_csr INTO l_party_site_use_id;
175            CLOSE l_txlitminsts_csr;
176 
177            -- get the party site ID
178            OPEN  l_partysiteuses_csr(l_party_site_use_id);
179            FETCH l_partysiteuses_csr INTO l_inst_loc_id;  --party site ID
180            CLOSE l_partysiteuses_csr;
181 
182            -- get the location ID
183            OPEN  l_get_location_id(l_inst_loc_id);
184            FETCH l_get_location_id INTO l_loc_id;
185            CLOSE l_get_location_id;
186 
187            IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
188           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
189               'l_inst_item_id '||l_inst_item_id);
190           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
191               'l_party_site_use_id '||l_party_site_use_id);
192           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
193               'l_inst_loc_id '||l_inst_loc_id);
194           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
195               'l_loc_id '||l_loc_id);
196 
197        END IF;
198 
199        IF l_inst_loc_id IS NULL OR l_loc_id IS NULL THEN
200                 -- Install Location id is required
201                 OKL_API.set_message( p_app_name      => 'OKC',
202                             p_msg_name      => G_REQUIRED_VALUE,
203                             p_token1        => G_COL_NAME_TOKEN,
204                             p_token1_value  => 'INSTALL_LOCATION_ID');
205                 RAISE OKL_API.G_EXCEPTION_ERROR;
206        END IF;
207     ELSE
208        IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
209           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
210               'l_get_instlocid%FOUND');
211 
212        END IF;
213        --Check the source of the install location id
214        IF l_inst_loc_type_code = 'HZ_PARTY_SITES' THEN
215                 -- get hz location id
216                 OPEN  l_get_location_id(l_inst_loc_id);
217                 FETCH l_get_location_id INTO l_loc_id;
218                 CLOSE l_get_location_id;
219        ELSIF l_inst_loc_type_code = 'HZ_LOCATIONS' THEN
220                 l_loc_id := l_inst_loc_id;
221                 -- get party site id
222                 OPEN l_get_party_site_id(l_loc_id);
223                 FETCH l_get_party_site_id INTO l_inst_loc_id;
224                 CLOSE l_get_party_site_id;
225        END IF;
226 
227        IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
228           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
229               'l_loc_id '||l_loc_id);
230           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
231               'l_inst_loc_id '||l_inst_loc_id);
232 
233        END IF;
234 
235     END IF;
236     CLOSE l_get_instlocid;
237 
238     --get the ship to site use id of the asset
239     OPEN  l_get_shiptositeid(p_cust_acct_id,l_inst_loc_id,l_loc_id);
240     FETCH l_get_shiptositeid INTO l_ship_to_siteuseid;  -- l_ship_to_siteuseid  may be null
241     CLOSE l_get_shiptositeid;
242 
243 
244 
245     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
246           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id.',
247               'l_ship_to_siteuseid '||l_ship_to_siteuseid);
248 
249     END IF;
250 
251     x_ship_to_site_use_id := l_ship_to_siteuseid;
252 
253 
254 
255     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
256        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id ','End(-)');
257     END IF;
258 
259 EXCEPTION
260     WHEN OKL_API.G_EXCEPTION_ERROR THEN
261          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
262                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id ',
263                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
264          END IF;
265 
266          IF l_get_instlocid%ISOPEN THEN
267             CLOSE l_get_instlocid;
268          END IF;
269 
270                  IF l_institem_csr%ISOPEN THEN
271                     CLOSE l_institem_csr;
272                  END IF;
273 
274                  IF l_txlitminsts_csr%ISOPEN THEN
275                     CLOSE l_txlitminsts_csr;
276                  END IF;
277 
278                  IF l_partysiteuses_csr%ISOPEN THEN
279                     CLOSE l_partysiteuses_csr;
280                  END IF;
281 
282                  IF l_get_location_id%ISOPEN THEN
283                     CLOSE l_get_location_id;
284                  END IF;
285 
286                  IF l_get_party_site_id%ISOPEN THEN
287                     CLOSE l_get_party_site_id;
288                  END IF;
289 
290 
291              IF l_get_shiptositeid%ISOPEN THEN
292                 CLOSE l_get_shiptositeid;
293              END IF;
294 
295          x_return_status := OKL_API.G_RET_STS_ERROR;
296     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
297          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
298                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id ',
299                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
300          END IF;
301 
302          IF l_get_instlocid%ISOPEN THEN
303             CLOSE l_get_instlocid;
304          END IF;
305 
306                  IF l_institem_csr%ISOPEN THEN
307                     CLOSE l_institem_csr;
308                  END IF;
309 
310                  IF l_txlitminsts_csr%ISOPEN THEN
311                     CLOSE l_txlitminsts_csr;
312                  END IF;
313 
314                  IF l_partysiteuses_csr%ISOPEN THEN
315                     CLOSE l_partysiteuses_csr;
316                  END IF;
317 
318                  IF l_get_location_id%ISOPEN THEN
319                     CLOSE l_get_location_id;
320                  END IF;
321 
322                  IF l_get_party_site_id%ISOPEN THEN
323                     CLOSE l_get_party_site_id;
324                  END IF;
325 
326 
327              IF l_get_shiptositeid%ISOPEN THEN
328                 CLOSE l_get_shiptositeid;
329              END IF;
330          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
331     WHEN OTHERS THEN
332          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
333             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ship_to_site_use_id ',
334                   'EXCEPTION :'||sqlerrm);
335          END IF;
336 
337          IF l_get_instlocid%ISOPEN THEN
338             CLOSE l_get_instlocid;
339          END IF;
340 
341                  IF l_institem_csr%ISOPEN THEN
342                     CLOSE l_institem_csr;
343                  END IF;
344 
345                  IF l_txlitminsts_csr%ISOPEN THEN
346                     CLOSE l_txlitminsts_csr;
347                  END IF;
348 
349                  IF l_partysiteuses_csr%ISOPEN THEN
350                     CLOSE l_partysiteuses_csr;
351                  END IF;
352 
353                  IF l_get_location_id%ISOPEN THEN
354                     CLOSE l_get_location_id;
355                  END IF;
356 
357                  IF l_get_party_site_id%ISOPEN THEN
358                     CLOSE l_get_party_site_id;
359                  END IF;
360 
361 
362              IF l_get_shiptositeid%ISOPEN THEN
363                 CLOSE l_get_shiptositeid;
364              END IF;
365          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
366          -- unexpected error
367          OKL_API.set_message(p_app_name      => g_app_name,
368                          p_msg_name      => g_unexpected_error,
369                          p_token1        => g_sqlcode_token,
370                          p_token1_value  => sqlcode,
371                          p_token2        => g_sqlerrm_token,
372                          p_token2_value  => sqlerrm);
373 END get_ship_to_site_use_id;
374 
375 /*========================================================================
376  | PUBLIC FUNCTION is_serialized_and_alc
377  |
378  | DESCRIPTION
379  |    This function checks if any of the assets of the contract is serialized
380  |    and has gone through Asset Relocation Change transaction. If so, returns
381  |    'Y', else 'N'
382  |
383  | CALLED FROM                                  Authoring component
384  |
385  |
386  | CALLS PROCEDURES/FUNCTIONS
387  |
388  |
389  | PARAMETERS
390  |      p_contract_id            -- Contract Identifier
391  |
392  | KNOWN ISSUES
393  |
394  | NOTES
395  |
396  |
397  | MODIFICATION HISTORY
398  | Date          Author     Description of Changes
399  | 05-JUL-07    RRAVIKIR      Created
400  |
401  *=======================================================================*/
402   FUNCTION is_serialized_and_alc(p_contract_id   IN NUMBER)
403     RETURN VARCHAR2 IS
404 
405     -- Local variables
406     l_value                  VARCHAR2(1);
407 
408     -- Cursors
409     CURSOR l_k_serialized_and_alc(p_chr_id IN NUMBER) IS
410     SELECT '1'
411     FROM okl_tax_sources
412     WHERE khr_id = p_chr_id
413     AND entity_code = G_ASSETS_ENTITY_CODE
414     AND event_class_code = G_ALC_EVENT_CODE
415     AND alc_serialized_yn IN ('Y', 'L')
416     AND rownum = 1;
417   BEGIN
418     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
419         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.is_serialized_and_alc','Begin(+)');
420     END IF;
421 
422     --Print Input Variables
423     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
424          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.is_serialized_and_alc.',
425               'p_contract_id :'||p_contract_id);
426     END IF;
427 
428     OPEN l_k_serialized_and_alc(p_chr_id  =>  p_contract_id);
429     FETCH l_k_serialized_and_alc INTO l_value;
430     CLOSE l_k_serialized_and_alc;
431 
432     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
433       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.is_serialized_and_alc ','End(-)');
434     END IF;
435 
436     IF (l_value IS NULL) THEN
437       RETURN 'N';
438     ELSE
439       RETURN 'Y';
440     END IF;
441 
442   EXCEPTION
443     WHEN OKL_API.G_EXCEPTION_ERROR THEN
444 
445       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
446          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.is_serialized_and_alc ',
447                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
448       END IF;
449 
450       IF (l_k_serialized_and_alc%ISOPEN) THEN
451         CLOSE l_k_serialized_and_alc;
452       END IF;
453 
454     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
455       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
456          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.is_serialized_and_alc ',
457                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
458       END IF;
459 
460       IF (l_k_serialized_and_alc%ISOPEN) THEN
461         CLOSE l_k_serialized_and_alc;
462       END IF;
463 
464     WHEN OTHERS THEN
465 
466       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
467          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.is_serialized_and_alc ',
468                   'EXCEPTION :'||sqlerrm);
469       END IF;
470 
471       IF (l_k_serialized_and_alc%ISOPEN) THEN
472         CLOSE l_k_serialized_and_alc;
473       END IF;
474 
475   END is_serialized_and_alc;
476 
477   /*========================================================================
478    | PRIVATE PROCEDURE validate_tax_code
479    |
480    | DESCRIPTION
481    |    This procedure populates the asset location change serialized total tax
482    |
483    | CALLED FROM
484    |        process_tax_determ_override()
485    |        process_asset_loc_tax()
486    |
487    | CALLS PROCEDURES/FUNCTIONS
488    |        okl_tax_sources_pub.update_tax_sources()
489    |
490    | PARAMETERS
491    |      p_source_trx_id              -- Source Transaction Identifier
492    |
493    | KNOWN ISSUES
494    |
495    | NOTES
496    |
497    |
498    | MODIFICATION HISTORY
499    | Date          Author     Description of Changes
500    | 11-APR-07    RRAVIKIR      Created
501    |
502    *=======================================================================*/
503     PROCEDURE validate_tax_code(
504       p_api_version                   IN  NUMBER,
505       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
506       x_return_status                 OUT NOCOPY VARCHAR2,
507       x_msg_count                     OUT NOCOPY NUMBER,
508       x_msg_data                      OUT NOCOPY VARCHAR2,
509       p_trx_date                      IN  DATE,
510       p_tbc_code                      IN  VARCHAR2 DEFAULT NULL,
511       p_ufc_code                      IN  VARCHAR2 DEFAULT NULL,
512       p_pc_code                       IN  VARCHAR2 DEFAULT NULL,
513       x_valid_code                    OUT NOCOPY VARCHAR2) IS
514 
515       -- Local variables
516       l_api_name                      CONSTANT VARCHAR2(30) := 'validate_tax_code';
517       l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
518 
519       l_dummy                         VARCHAR2(1);
520 
521       -- Cursors
522       CURSOR l_tbc_csr(cp_trx_date IN DATE, cp_tbc_code IN VARCHAR2) IS
523       SELECT '1'
524       FROM      zx_fc_business_categories_v
525       WHERE classification_code = cp_tbc_code
526           AND   effective_from  <= cp_trx_date
527           AND  (effective_to >= cp_trx_date OR effective_to is NULL);
528 
529       CURSOR l_ufc_csr(cp_trx_date IN DATE, cp_ufc_code IN VARCHAR2) IS
530       SELECT '1'
531       FROM      zx_fc_user_defined_v
532           WHERE classification_code = cp_ufc_code
533       AND   effective_from  <= cp_trx_date
534           AND   (effective_to >= cp_trx_date OR effective_to is NULL);
535 
536       CURSOR l_pc_csr(cp_trx_date IN DATE, cp_pc_code IN VARCHAR2) IS
537       SELECT '1'
538       FROM      zx_fc_product_categories_v
539       WHERE classification_code = cp_pc_code
540           AND   effective_from  <= cp_trx_date
541           AND   (effective_to >= cp_trx_date OR effective_to is NULL);
542 
543     BEGIN
544       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
545           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code','Begin(+)');
546       END IF;
547 
548       --Print Input Variables
549       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
550         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code.',
551                 'p_init_msg_list :'||p_init_msg_list);
552         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code.',
553                 'p_trx_date :'||p_trx_date);
554         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code.',
555                 'p_tbc_code :'||p_tbc_code);
556         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code.',
557                 'p_ufc_code :'||p_ufc_code);
558         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code.',
559                 'p_pc_code :'||p_pc_code);
560       END IF;
561 
562       IF (p_tbc_code IS NOT NULL) THEN
563 
564         OPEN l_tbc_csr(p_trx_date, p_tbc_code);
565         FETCH l_tbc_csr INTO l_dummy;
566         CLOSE l_tbc_csr;
567 
568       ELSIF (p_ufc_code IS NOT NULL) THEN
569 
570         OPEN l_ufc_csr(p_trx_date, p_ufc_code);
571         FETCH l_ufc_csr INTO l_dummy;
572         CLOSE l_ufc_csr;
573 
574       ELSIF (p_pc_code IS NOT NULL) THEN
575 
576         OPEN l_pc_csr(p_trx_date, p_pc_code);
577         FETCH l_pc_csr INTO l_dummy;
578         CLOSE l_pc_csr;
579 
580       END IF;
581 
582       IF (l_dummy = '1') THEN
583         x_valid_code := 'S';
584       ELSE
585         x_valid_code := 'F';
586       END IF;
587 
588       x_return_status := l_return_status;
589 
590       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
591         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code ','End(-)');
592       END IF;
593 
594     EXCEPTION
595 
596       WHEN OKL_API.G_EXCEPTION_ERROR THEN
597 
598         IF (l_tbc_csr%ISOPEN) THEN
599           CLOSE l_tbc_csr;
600         END IF;
601 
602         IF (l_ufc_csr%ISOPEN) THEN
603           CLOSE l_ufc_csr;
604         END IF;
605 
606         IF (l_pc_csr%ISOPEN) THEN
607           CLOSE l_pc_csr;
608         END IF;
609 
610         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
611            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code ',
612                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
613         END IF;
614 
615         x_return_status := OKL_API.G_RET_STS_ERROR;
616 
617       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
618 
619         IF (l_tbc_csr%ISOPEN) THEN
620           CLOSE l_tbc_csr;
621         END IF;
622 
623         IF (l_ufc_csr%ISOPEN) THEN
624           CLOSE l_ufc_csr;
625         END IF;
626 
627         IF (l_pc_csr%ISOPEN) THEN
628           CLOSE l_pc_csr;
629         END IF;
630 
631         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
632            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code ',
633                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
634         END IF;
635 
636         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
637 
638       WHEN OTHERS THEN
639 
640         IF (l_tbc_csr%ISOPEN) THEN
641           CLOSE l_tbc_csr;
642         END IF;
643 
644         IF (l_ufc_csr%ISOPEN) THEN
645           CLOSE l_ufc_csr;
646         END IF;
647 
648         IF (l_pc_csr%ISOPEN) THEN
649           CLOSE l_pc_csr;
650         END IF;
651 
652         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
653            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.validate_tax_code ',
654                     'EXCEPTION :'||sqlerrm);
655         END IF;
656 
657         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
658         -- unexpected error
659         OKL_API.set_message(p_app_name      => g_app_name,
660                             p_msg_name      => g_unexpected_error,
661                             p_token1        => g_sqlcode_token,
662                             p_token1_value  => sqlcode,
663                             p_token2        => g_sqlerrm_token,
664                             p_token2_value  => sqlerrm);
665 
666     END validate_tax_code;
667 
668 /*========================================================================
669  | PRIVATE PROCEDURE copy_tax_trx_data
670  |
671  | DESCRIPTION
672  |    This procedure copies the quote objects tax data into OKL_TAX_TRX_DETAILS
673  |    table
674  |
675  | CALLED FROM
676  |        process_quote_tax()
677  |        process_quoting_upfront_tax()
678  |
679  | CALLS PROCEDURES/FUNCTIONS
680  |
681  |
682  | PARAMETERS
683  |      p_trx_id                     -- Transaction Identifier
684  |      p_entity_code                -- Entity code
685  |      p_event_class_code           -- Event class code
686  |
687  | KNOWN ISSUES
688  |
689  | NOTES
690  |
691  |
692  | MODIFICATION HISTORY
693  | Date          Author     Description of Changes
694  | 07-MAY-07    RRAVIKIR      Created
695  |
696  *=======================================================================*/
697   PROCEDURE copy_tax_trx_data (
698     p_api_version                   IN NUMBER,
699     p_init_msg_list                 IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
700     x_return_status                 OUT NOCOPY VARCHAR2,
701     x_msg_count                     OUT NOCOPY NUMBER,
702     x_msg_data                      OUT NOCOPY VARCHAR2,
703     p_trx_id                        IN  NUMBER,
704     p_entity_code                                   IN  VARCHAR2,
705     p_event_class_code              IN  VARCHAR2,
706     p_source_trx_name               IN  VARCHAR2) IS
707 
708     -- Local variables
709     l_api_version                   CONSTANT NUMBER := 1;
710     l_api_name                      CONSTANT VARCHAR2(30) := 'copy_tax_trx_data';
711 
712     l_tax_lines_tbl                 tax_lines_tbl_type;
713     i                               NUMBER := 0;
714     l_txs_id                        NUMBER;
715 
716     -- Cursor to retrieve tax data
717     CURSOR l_get_tax_data_csr(cp_trx_id            IN NUMBER,
718                               cp_entity_code       IN VARCHAR2,
719                               cp_event_class_code  IN VARCHAR2) IS
720     SELECT tax_rate_id,
721            tax_rate_code,
722            tax_exemption_id,
723            tax_rate,
724            tax_date,
725            line_amt,
726            internal_organization_id,
727            application_id,
728            entity_code,
729            event_class_code,
730            event_type_code,
731            trx_id,
732            trx_line_id,
733            trx_level_type,
734            trx_line_number,
735            tax_line_number,
736            tax_regime_id,
737            tax_regime_code,
738            tax_id,
739            tax,
740            tax_status_id,
741            tax_status_code,
742            tax_apportionment_line_number,
743            legal_entity_id,
744            trx_number,
745            trx_date,
746            tax_jurisdiction_id,
747            tax_jurisdiction_code,
748            tax_type_code,
749            tax_currency_code,
750            taxable_amt_tax_curr,
751            trx_currency_code,
752            minimum_accountable_unit,
753            precision,
754            currency_conversion_type,
755            currency_conversion_rate,
756            currency_conversion_date,
757            tax_determine_date,
758            taxable_amt,
759            tax_amt
760     FROM zx_detail_tax_lines_gt
761     WHERE trx_id = cp_trx_id
762     AND   application_id = G_OKL_APPLICATION_ID
763     AND   trx_level_type = G_TRX_LEVEL_TYPE
764     AND   entity_code = cp_entity_code
765     AND   event_class_code = cp_event_class_code;
766 
767     -- get the primary key of okl_tax_sources
768     CURSOR l_taxsourceid_csr(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
769     SELECT id
770     FROM   okl_tax_sources
771     WHERE  trx_id = cp_trx_id
772     AND    trx_line_id = cp_trx_line_id;
773 
774   BEGIN
775     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
776         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data','Begin(+)');
777     END IF;
778 
779     --Print Input Variables
780     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
781       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data.',
782              'p_init_msg_list :'||p_init_msg_list);
783       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data.',
784               'p_trx_id :'||p_trx_id);
785       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data.',
786              'p_entity_code :'||p_entity_code);
787       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data.',
788               'p_event_class_code :'||p_event_class_code);
789       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data.',
790               'p_source_trx_name :'||p_source_trx_name);
791     END IF;
792 
793     -- Populate the tax data into eBtax global session table
794     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
795          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data.',
796               'INSERT INTO OKL_TAX_TRX_DETAILS');
797     END IF;
798 
799     l_tax_lines_tbl.DELETE;
800     FOR l_get_tax_data_rec IN l_get_tax_data_csr(cp_trx_id           => p_trx_id,
801                                                  cp_entity_code      => p_entity_code,
802                                                  cp_event_class_code => p_event_class_code) LOOP
803       l_tax_lines_tbl(i).id  := get_seq_id;
804 
805       OPEN  l_taxsourceid_csr(l_get_tax_data_rec.trx_id, l_get_tax_data_rec.trx_line_id);
806       FETCH l_taxsourceid_csr INTO l_txs_id;
807       IF l_taxsourceid_csr%NOTFOUND THEN
808         OKL_API.set_message(p_app_name     => 'OKL',
809                             p_msg_name     => 'OKL_TX_SRC_TRX_ERR',
810                                                         p_token1       => 'LINE_NUM',
811                                                         p_token1_value => i);
812         RAISE OKL_API.G_EXCEPTION_ERROR;
813       END IF;
814       CLOSE l_taxsourceid_csr;
815 
816       l_tax_lines_tbl(i).txs_id                       := l_txs_id;
817           l_tax_lines_tbl(i).tax_determination_date       := l_get_tax_data_rec.tax_determine_date;
818           l_tax_lines_tbl(i).tax_rate_id                  := l_get_tax_data_rec.tax_rate_id;
819           l_tax_lines_tbl(i).tax_rate_code                := l_get_tax_data_rec.tax_rate_code;
820           l_tax_lines_tbl(i).taxable_amount               := l_get_tax_data_rec.taxable_amt;
821           l_tax_lines_tbl(i).tax_exemption_id             := l_get_tax_data_rec.tax_exemption_id;
822           l_tax_lines_tbl(i).tax_rate                     := l_get_tax_data_rec.tax_rate;
823           l_tax_lines_tbl(i).tax_amount                   := l_get_tax_data_rec.tax_amt;
824 
825       l_tax_lines_tbl(i).tax_date                     := l_get_tax_data_rec.tax_date;
826       l_tax_lines_tbl(i).line_amt                     := l_get_tax_data_rec.line_amt;
827       l_tax_lines_tbl(i).internal_organization_id     := l_get_tax_data_rec.internal_organization_id;
828       l_tax_lines_tbl(i).application_id               := l_get_tax_data_rec.application_id;
829       l_tax_lines_tbl(i).entity_code                  := l_get_tax_data_rec.entity_code;
830       l_tax_lines_tbl(i).event_class_code             := l_get_tax_data_rec.event_class_code;
831       l_tax_lines_tbl(i).event_type_code              := l_get_tax_data_rec.event_type_code;
832       l_tax_lines_tbl(i).trx_id                       := l_get_tax_data_rec.trx_id;
833       l_tax_lines_tbl(i).trx_line_id                  := l_get_tax_data_rec.trx_line_id;
834       l_tax_lines_tbl(i).trx_level_type               := l_get_tax_data_rec.trx_level_type;
835       l_tax_lines_tbl(i).trx_line_number              := l_get_tax_data_rec.trx_line_number;
836       l_tax_lines_tbl(i).tax_line_number              := l_get_tax_data_rec.tax_line_number;
837       l_tax_lines_tbl(i).tax_regime_id                := l_get_tax_data_rec.tax_regime_id;
838       l_tax_lines_tbl(i).tax_regime_code              := l_get_tax_data_rec.tax_regime_code;
839       l_tax_lines_tbl(i).tax_id                       := l_get_tax_data_rec.tax_id;
840       l_tax_lines_tbl(i).tax                          := l_get_tax_data_rec.tax;
841       l_tax_lines_tbl(i).tax_status_id                := l_get_tax_data_rec.tax_status_id;
842       l_tax_lines_tbl(i).tax_status_code              := l_get_tax_data_rec.tax_status_code;
843       l_tax_lines_tbl(i).tax_apportionment_line_number   := l_get_tax_data_rec.tax_apportionment_line_number;
844       l_tax_lines_tbl(i).legal_entity_id              := l_get_tax_data_rec.legal_entity_id;
845       l_tax_lines_tbl(i).trx_number                   := l_get_tax_data_rec.trx_number;
846       l_tax_lines_tbl(i).trx_date                     := l_get_tax_data_rec.trx_date;
847       l_tax_lines_tbl(i).tax_jurisdiction_id          := l_get_tax_data_rec.tax_jurisdiction_id;
848       l_tax_lines_tbl(i).tax_jurisdiction_code        := l_get_tax_data_rec.tax_jurisdiction_code;
849       l_tax_lines_tbl(i).tax_type_code                := l_get_tax_data_rec.tax_type_code;
850       l_tax_lines_tbl(i).tax_currency_code            := l_get_tax_data_rec.tax_currency_code;
851       l_tax_lines_tbl(i).taxable_amt_tax_curr         := l_get_tax_data_rec.taxable_amt_tax_curr;
852       l_tax_lines_tbl(i).trx_currency_code            := l_get_tax_data_rec.trx_currency_code;
853       l_tax_lines_tbl(i).minimum_accountable_unit     := l_get_tax_data_rec.minimum_accountable_unit;
854       l_tax_lines_tbl(i).precision                    := l_get_tax_data_rec.precision;
855       l_tax_lines_tbl(i).currency_conversion_type     := l_get_tax_data_rec.currency_conversion_type;
856       l_tax_lines_tbl(i).currency_conversion_rate     := l_get_tax_data_rec.currency_conversion_rate;
857       l_tax_lines_tbl(i).currency_conversion_date     := l_get_tax_data_rec.currency_conversion_date;
858       -- columns for backward compatibility
859       l_tax_lines_tbl(i).tax_determine_date           := l_get_tax_data_rec.tax_determine_date;
860       l_tax_lines_tbl(i).taxable_amt                  := l_get_tax_data_rec.taxable_amt;
861       l_tax_lines_tbl(i).tax_amt                      := l_get_tax_data_rec.tax_amt;
862 
863 
864           l_tax_lines_tbl(i).billed_yn                    := 'N'; -- tax lines calculated by tax engine are not billed
865 
866       IF (p_source_trx_name = 'Estimated Billing') THEN
867             l_tax_lines_tbl(i).tax_call_type_code           := G_INVOICE_TAX;
868       ELSIF (p_source_trx_name = 'Sales Quote') THEN
869         l_tax_lines_tbl(i).tax_call_type_code           := G_UPFRONT_TAX;
870       ELSIF (p_source_trx_name = 'Tax Schedule') THEN
871         l_tax_lines_tbl(i).tax_call_type_code           := G_TAX_SCHEDULE;
872       END IF;
873 
874           l_tax_lines_tbl(i).program_id                   := null;
875           l_tax_lines_tbl(i).request_id                   := null;
876           l_tax_lines_tbl(i).program_application_id       := null;
877           l_tax_lines_tbl(i).program_update_date          := null;
878           l_tax_lines_tbl(i).attribute_category           := null;
879           l_tax_lines_tbl(i).attribute1                   := null;
880           l_tax_lines_tbl(i).attribute2                   := null;
881           l_tax_lines_tbl(i).attribute3                   := null;
882           l_tax_lines_tbl(i).attribute4                   := null;
883           l_tax_lines_tbl(i).attribute5                   := null;
884           l_tax_lines_tbl(i).attribute6                   := null;
885           l_tax_lines_tbl(i).attribute7                   := null;
886           l_tax_lines_tbl(i).attribute8                   := null;
887           l_tax_lines_tbl(i).attribute9                   := null;
888           l_tax_lines_tbl(i).attribute10                  := null;
889           l_tax_lines_tbl(i).attribute11                  := null;
890           l_tax_lines_tbl(i).attribute12                  := null;
891           l_tax_lines_tbl(i).attribute13                  := null;
892           l_tax_lines_tbl(i).attribute14                  := null;
893           l_tax_lines_tbl(i).attribute15                  := null;
894           l_tax_lines_tbl(i).created_by                   := G_USER_ID;
895           l_tax_lines_tbl(i).creation_date                := SYSDATE;
896           l_tax_lines_tbl(i).last_updated_by              := G_USER_ID;
897           l_tax_lines_tbl(i).last_update_date             := SYSDATE;
898           l_tax_lines_tbl(i).last_update_login            := G_LOGIN_ID;
899           l_tax_lines_tbl(i).object_version_number        := null;
900 
901       i := i+1;
902     END LOOP;
903 
904     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
905           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_tax.',
906                           'l_tax_lines_tbl.COUNT '||l_tax_lines_tbl.COUNT);
907         END IF;
908 
909     ---- Insert into okl_tax_trx_details begin -----
910     BEGIN
911       IF l_tax_lines_tbl.COUNT > 0 THEN
912         FORALL indx in l_tax_lines_tbl.FIRST..l_tax_lines_tbl.LAST
913           -- SAVE EXCEPTIONS
914           INSERT INTO okl_tax_trx_details VALUES l_tax_lines_tbl(indx);
915       END IF;
916     EXCEPTION
917       WHEN OTHERS THEN
918         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
919                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
920                                                 OKL_API.set_message(
921                                                                      p_app_name      => 'OKL',
922                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
923                                      p_token1        => 'TABLE_NAME',
924                                      p_token1_value  => 'okl_tax_trx_details',
925                                      p_token2        => 'ERROR_CODE',
926                                                                          p_token2_value  => SQLERRM(SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
927                                                                          p_token3        => 'ITERATION',
928                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
929                   END LOOP;
930                   RAISE OKL_API.G_EXCEPTION_ERROR;
931                 END IF;
932         END;
933     ---- Insert into okl_tax_trx_details end -----
934 
935     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
936       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data ','End(-)');
937     END IF;
938 
939   EXCEPTION
940     WHEN OKL_API.G_EXCEPTION_ERROR THEN
941 
942       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
943          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data ',
944                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
945       END IF;
946 
947       x_return_status := OKL_API.G_RET_STS_ERROR;
948 
949     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
950       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
951          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data ',
952                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
953       END IF;
954 
955       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
956 
957     WHEN OTHERS THEN
958 
959       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
960          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_tax_trx_data ',
961                   'EXCEPTION :'||sqlerrm);
962       END IF;
963 
964       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
965       -- unexpected error
966       OKL_API.set_message(p_app_name      => g_app_name,
967                           p_msg_name      => g_unexpected_error,
968                           p_token1        => g_sqlcode_token,
969                           p_token1_value  => sqlcode,
970                           p_token2        => g_sqlerrm_token,
971                           p_token2_value  => sqlerrm);
972 
973   END copy_tax_trx_data;
974 
975   /*========================================================================
976    | PRIVATE PROCEDURE populate_ser_split_total_tax
977    |
978    | DESCRIPTION
979    |    This procedure populates the serialized total tax column after the split
980    |    asset process, provided that asset has gone through ALC prior to Split
981    |    transaction
982    |
983    | CALLED FROM
984    |        process_split_asset_tax()
985    |
986    | CALLS PROCEDURES/FUNCTIONS
987    |        okl_tax_sources_pub.update_tax_sources()
988    |
989    | PARAMETERS
990    |      p_asset_id              -- Asset Identifier
991    |
992    | KNOWN ISSUES
993    |
994    | NOTES
995    |
996    |
997    | MODIFICATION HISTORY
998    | Date          Author     Description of Changes
999    | 26-Jul-07    RRAVIKIR      Created
1000    |
1001    *=======================================================================*/
1002     PROCEDURE populate_ser_split_total_tax(
1003       p_api_version                   IN  NUMBER,
1004       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1005       x_return_status                 OUT NOCOPY VARCHAR2,
1006       x_msg_count                     OUT NOCOPY NUMBER,
1007       x_msg_data                      OUT NOCOPY VARCHAR2,
1008       p_asset_id                      IN  NUMBER,
1009       p_serialized_asset              IN  VARCHAR2) IS
1010 
1011       -- Local variables
1012       l_api_name                      CONSTANT VARCHAR2(30) := 'populate_ser_split_total_tax';
1013       l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1014       l_total_tax_amount              NUMBER;
1015       i                               NUMBER;
1016       j                               NUMBER;
1017       l_total_line_amount             NUMBER;
1018 
1019       -- Local data structure
1020       l_txsv_tbl                      txsv_tbl_type;
1021       lx_txsv_tbl                     txsv_tbl_type;
1022 
1023       -- Cursors
1024       CURSOR l_taxablelines_ser_csr(cp_kle_id IN NUMBER, cp_sty_id IN NUMBER) IS
1025       SELECT id
1026       FROM okl_tax_sources
1027       WHERE kle_id = cp_kle_id
1028       AND sty_id = cp_sty_id
1029       AND tax_call_type_code = G_UPFRONT_TAX
1030       AND tax_line_status_code = G_ACTIVE_STATUS
1031       AND entity_code = G_CONTRACTS_ENTITY_CODE
1032       AND event_class_code = G_BOOKING_EVENT_CLASS_CODE;
1033 
1034       CURSOR l_alc_total_tax_ser_csr(cp_kle_id IN NUMBER, cp_sty_id IN NUMBER) IS
1035       SELECT SUM(total_tax)
1036       FROM okl_tax_sources
1037       WHERE kle_id = cp_kle_id
1038       AND sty_id = cp_sty_id
1039       AND tax_call_type_code = G_UPFRONT_TAX
1040       AND tax_line_status_code = G_ACTIVE_STATUS
1041       AND entity_code = G_CONTRACTS_ENTITY_CODE
1042       AND event_class_code = G_BOOKING_EVENT_CLASS_CODE;
1043 
1044       CURSOR l_alc_total_line_amt_ser_csr(cp_kle_id IN NUMBER, cp_sty_id IN NUMBER) IS
1045       SELECT SUM(assessable_value)
1046       FROM okl_tax_sources
1047       WHERE kle_id = cp_kle_id
1048       AND sty_id = cp_sty_id
1049       AND tax_call_type_code = G_UPFRONT_TAX
1050       AND tax_line_status_code = G_ACTIVE_STATUS
1051       AND entity_code = G_CONTRACTS_ENTITY_CODE
1052       AND event_class_code = G_BOOKING_EVENT_CLASS_CODE;
1053 
1054       CURSOR l_fetch_stream_types_csr(cp_kle_id IN NUMBER) IS
1055       SELECT DISTINCT sty_id
1056       FROM okl_tax_sources
1057       WHERE kle_id = cp_kle_id
1058       AND tax_call_type_code = G_UPFRONT_TAX
1059       AND tax_line_status_code = G_ACTIVE_STATUS
1060       AND entity_code = G_CONTRACTS_ENTITY_CODE
1061       AND event_class_code = G_BOOKING_EVENT_CLASS_CODE;
1062 
1063     BEGIN
1064       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1065           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax','Begin(+)');
1066       END IF;
1067 
1068       --Print Input Variables
1069       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1070         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax.',
1071                 'p_init_msg_list :'||p_init_msg_list);
1072         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax.',
1073                 'p_asset_id :'||p_asset_id);
1074       END IF;
1075 
1076       -- Get the modified tax lines from tax sources, sum up the total tax amount
1077       -- and store in alc_serialized_total_tax column of okl_tax_sources
1078       i := 1;
1079 
1080       IF (p_serialized_asset = 'Y') THEN
1081         FOR l_fetch_stream_types_rec IN l_fetch_stream_types_csr(p_asset_id) LOOP
1082 
1083           j := 1;
1084           FOR l_taxablelines_ser_rec IN l_taxablelines_ser_csr(cp_kle_id     => p_asset_id,
1085                                                                cp_sty_id     => l_fetch_stream_types_rec.sty_id) LOOP
1086 
1087             IF (j = 1) THEN
1088               OPEN l_alc_total_tax_ser_csr(cp_kle_id      => p_asset_id,
1089                                            cp_sty_id      => l_fetch_stream_types_rec.sty_id);
1090               FETCH l_alc_total_tax_ser_csr INTO l_total_tax_amount;
1091               CLOSE l_alc_total_tax_ser_csr;
1092 
1093               OPEN l_alc_total_line_amt_ser_csr(cp_kle_id      => p_asset_id,
1094                                            cp_sty_id      => l_fetch_stream_types_rec.sty_id);
1095               FETCH l_alc_total_line_amt_ser_csr INTO l_total_line_amount;
1096               CLOSE l_alc_total_line_amt_ser_csr;
1097 
1098               j := j + 1;
1099             END IF;
1100 
1101             IF l_total_tax_amount IS NULL THEN
1102               l_total_tax_amount := 0;
1103             END IF;
1104             -- Populate Tax Sources data structure and update total tax
1105             l_txsv_tbl(i).id                             := l_taxablelines_ser_rec.id;
1106             l_txsv_tbl(i).alc_serialized_total_tax       := l_total_tax_amount;
1107             l_txsv_tbl(i).alc_serialized_total_line_amt  := l_total_line_amount;
1108 
1109             i := i + 1;
1110 
1111           END LOOP;
1112         END LOOP;
1113       END IF;
1114 
1115       IF (l_txsv_tbl.COUNT > 0) THEN
1116         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1117           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax',
1118               'Calling okl_tax_sources_pub.update_tax_sources for updating Total Tax for all Lines in Tax Sources');
1119         END IF;
1120 
1121         okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
1122                                               ,p_init_msg_list   => p_init_msg_list
1123                                               ,x_return_status   => l_return_status
1124                                               ,x_msg_count       => x_msg_count
1125                                               ,x_msg_data        => x_msg_data
1126                                               ,p_txsv_tbl        => l_txsv_tbl
1127                                               ,x_txsv_tbl        => lx_txsv_tbl);
1128 
1129         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1130           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax',
1131              'Return Status' || l_return_status);
1132         END IF;
1133 
1134         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1135           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1136         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1137           RAISE OKL_API.G_EXCEPTION_ERROR;
1138         END IF;
1139 
1140       END IF;
1141 
1142       x_return_status := l_return_status;
1143 
1144       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1145         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax ','End(-)');
1146       END IF;
1147 
1148     EXCEPTION
1149 
1150       WHEN OKL_API.G_EXCEPTION_ERROR THEN
1151 
1152         IF (l_alc_total_tax_ser_csr%ISOPEN) THEN
1153           CLOSE l_alc_total_tax_ser_csr;
1154         END IF;
1155 
1156         IF (l_taxablelines_ser_csr%ISOPEN) THEN
1157           CLOSE l_taxablelines_ser_csr;
1158         END IF;
1159 
1160         IF (l_fetch_stream_types_csr%ISOPEN) THEN
1161           CLOSE l_fetch_stream_types_csr;
1162         END IF;
1163 
1164         IF (l_alc_total_line_amt_ser_csr%ISOPEN) THEN
1165           CLOSE l_alc_total_line_amt_ser_csr;
1166         END IF;
1167 
1168         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1169            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax ',
1170                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
1171         END IF;
1172 
1173         x_return_status := OKL_API.G_RET_STS_ERROR;
1174 
1175       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1176 
1177         IF (l_alc_total_tax_ser_csr%ISOPEN) THEN
1178           CLOSE l_alc_total_tax_ser_csr;
1179         END IF;
1180 
1181         IF (l_taxablelines_ser_csr%ISOPEN) THEN
1182           CLOSE l_taxablelines_ser_csr;
1183         END IF;
1184 
1185         IF (l_fetch_stream_types_csr%ISOPEN) THEN
1186           CLOSE l_fetch_stream_types_csr;
1187         END IF;
1188 
1189         IF (l_alc_total_line_amt_ser_csr%ISOPEN) THEN
1190           CLOSE l_alc_total_line_amt_ser_csr;
1191         END IF;
1192 
1193         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1194            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax ',
1195                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
1196         END IF;
1197 
1198         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1199 
1200       WHEN OTHERS THEN
1201 
1202         IF (l_alc_total_tax_ser_csr%ISOPEN) THEN
1203           CLOSE l_alc_total_tax_ser_csr;
1204         END IF;
1205 
1206         IF (l_taxablelines_ser_csr%ISOPEN) THEN
1207           CLOSE l_taxablelines_ser_csr;
1208         END IF;
1209 
1210         IF (l_fetch_stream_types_csr%ISOPEN) THEN
1211           CLOSE l_fetch_stream_types_csr;
1212         END IF;
1213 
1214         IF (l_alc_total_line_amt_ser_csr%ISOPEN) THEN
1215           CLOSE l_alc_total_line_amt_ser_csr;
1216         END IF;
1217 
1218         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1219            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_ser_split_total_tax ',
1220                     'EXCEPTION :'||sqlerrm);
1221         END IF;
1222 
1223         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1224         -- unexpected error
1225         OKL_API.set_message(p_app_name      => g_app_name,
1226                             p_msg_name      => g_unexpected_error,
1227                             p_token1        => g_sqlcode_token,
1228                             p_token1_value  => sqlcode,
1229                             p_token2        => g_sqlerrm_token,
1230                             p_token2_value  => sqlerrm);
1231 
1232     END populate_ser_split_total_tax;
1233 
1234   /*========================================================================
1235    | PRIVATE PROCEDURE populate_alc_total_tax
1236    |
1237    | DESCRIPTION
1238    |    This procedure populates the asset location change serialized total tax
1239    |
1240    | CALLED FROM
1241    |        process_tax_determ_override()
1242    |        process_asset_loc_tax()
1243    |
1244    | CALLS PROCEDURES/FUNCTIONS
1245    |        okl_tax_sources_pub.update_tax_sources()
1246    |
1247    | PARAMETERS
1248    |      p_source_trx_id              -- Source Transaction Identifier
1249    |
1250    | KNOWN ISSUES
1251    |
1252    | NOTES
1253    |
1254    |
1255    | MODIFICATION HISTORY
1256    | Date          Author     Description of Changes
1257    | 11-APR-07    RRAVIKIR      Created
1258    |
1259    *=======================================================================*/
1260     PROCEDURE populate_alc_total_tax(
1261       p_api_version                   IN  NUMBER,
1262       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1263       x_return_status                 OUT NOCOPY VARCHAR2,
1264       x_msg_count                     OUT NOCOPY NUMBER,
1265       x_msg_data                      OUT NOCOPY VARCHAR2,
1266       p_asset_id                      IN  NUMBER,
1267       p_request_id                    IN  NUMBER,
1268       p_serialized_asset              IN  VARCHAR2 DEFAULT NULL) IS
1269 
1270       -- Local variables
1271       l_api_name                      CONSTANT VARCHAR2(30) := 'populate_alc_total_tax';
1272       l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1273       l_total_tax_amount              NUMBER;
1274       i                               NUMBER;
1275       j                               NUMBER;
1276 
1277       -- Local data structure
1278       l_txsv_tbl                      txsv_tbl_type;
1279       lx_txsv_tbl                     txsv_tbl_type;
1280 
1281       -- Cursors
1282       CURSOR l_taxablelines_csr(cp_kle_id IN NUMBER, cp_request_id IN NUMBER) IS
1283       SELECT id
1284       FROM okl_tax_sources
1285       WHERE trx_id IN (SELECT id
1286                        FROM okl_trx_assets
1287                        WHERE req_asset_id = cp_request_id)
1288       AND kle_id = cp_kle_id
1289       AND tax_call_type_code = G_UPFRONT_TAX
1290       AND tax_line_status_code = G_ACTIVE_STATUS
1291       AND entity_code = G_ASSETS_ENTITY_CODE
1292       AND event_class_code = G_ALC_EVENT_CODE;
1293 
1294       CURSOR l_taxablelines_ser_csr(cp_kle_id IN NUMBER, cp_request_id IN NUMBER, cp_sty_id IN NUMBER) IS
1295       SELECT id
1296       FROM okl_tax_sources
1297       WHERE trx_id IN (SELECT id
1298                        FROM okl_trx_assets
1299                        WHERE req_asset_id = cp_request_id)
1300       AND kle_id = cp_kle_id
1301       AND sty_id = cp_sty_id
1302       AND tax_call_type_code = G_UPFRONT_TAX
1303       AND tax_line_status_code = G_INACTIVE_STATUS
1304       AND entity_code = G_ASSETS_ENTITY_CODE
1305       AND event_class_code = G_ALC_EVENT_CODE;
1306 
1307       CURSOR l_alc_total_tax_ser_csr(cp_request_id IN NUMBER, cp_kle_id IN NUMBER, cp_sty_id IN NUMBER) IS
1308       SELECT SUM(total_tax)
1309       FROM okl_tax_sources
1310       WHERE trx_id IN (SELECT id
1311                        FROM okl_trx_assets
1312                        WHERE req_asset_id = cp_request_id)
1313       AND kle_id = cp_kle_id
1314       AND sty_id = cp_sty_id
1315       AND tax_call_type_code = G_UPFRONT_TAX
1316       AND tax_line_status_code = G_INACTIVE_STATUS
1317       AND entity_code = G_ASSETS_ENTITY_CODE
1318       AND event_class_code = G_ALC_EVENT_CODE;
1319 
1320       CURSOR l_alc_total_tax_csr(cp_request_id IN NUMBER) IS
1321       SELECT SUM(total_tax)
1322       FROM okl_tax_sources
1323       WHERE trx_id IN (SELECT id
1324                        FROM okl_trx_assets
1325                        WHERE req_asset_id = cp_request_id)
1326       AND tax_call_type_code = G_UPFRONT_TAX
1327       AND tax_line_status_code = G_ACTIVE_STATUS
1328       AND entity_code = G_ASSETS_ENTITY_CODE
1329       AND event_class_code = G_ALC_EVENT_CODE;
1330 
1331       CURSOR l_fetch_stream_types_csr(cp_kle_id IN NUMBER, cp_request_id IN NUMBER) IS
1332       SELECT DISTINCT sty_id
1333       FROM okl_tax_sources
1334       WHERE trx_id IN (SELECT id
1335                        FROM okl_trx_assets
1336                        WHERE req_asset_id = cp_request_id)
1337       AND kle_id = cp_kle_id
1338       AND tax_call_type_code = G_UPFRONT_TAX
1339       AND tax_line_status_code = G_INACTIVE_STATUS
1340       AND entity_code = G_ASSETS_ENTITY_CODE
1341       AND event_class_code = G_ALC_EVENT_CODE;
1342 
1343     BEGIN
1344       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1345           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax','Begin(+)');
1346       END IF;
1347 
1348       --Print Input Variables
1349       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1350         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax.',
1351                 'p_init_msg_list :'||p_init_msg_list);
1352         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax.',
1353                 'p_asset_id :'||p_asset_id);
1354         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax.',
1355                 'p_request_id :'||p_request_id);
1356       END IF;
1357 
1358       -- Get the modified tax lines from tax sources, sum up the total tax amount
1359       -- and store in alc_serialized_total_tax column of okl_tax_sources
1360       i := 1;
1361       IF (p_serialized_asset = 'Y') THEN
1362         FOR l_fetch_stream_types_rec IN l_fetch_stream_types_csr(cp_kle_id     => p_asset_id,
1363                                                                  cp_request_id => p_request_id) LOOP
1364           j := 1;
1365           FOR l_taxablelines_ser_rec IN l_taxablelines_ser_csr(cp_kle_id     => p_asset_id,
1366                                                                cp_request_id => p_request_id,
1367                                                                cp_sty_id     => l_fetch_stream_types_rec.sty_id) LOOP
1368 
1369             IF (j = 1) THEN
1370               OPEN l_alc_total_tax_ser_csr(cp_request_id  => p_request_id,
1371                                            cp_kle_id      => p_asset_id,
1372                                            cp_sty_id      => l_fetch_stream_types_rec.sty_id);
1373               FETCH l_alc_total_tax_ser_csr INTO l_total_tax_amount;
1374               CLOSE l_alc_total_tax_ser_csr;
1375 
1376               j := j + 1;
1377             END IF;
1378 
1379             IF l_total_tax_amount IS NULL THEN
1380               l_total_tax_amount := 0;
1381             END IF;
1382             -- Populate Tax Sources data structure and update total tax
1383             l_txsv_tbl(i).id                       := l_taxablelines_ser_rec.id;
1384             l_txsv_tbl(i).alc_serialized_total_tax := l_total_tax_amount;
1385             l_txsv_tbl(i).tax_line_status_code     := G_ACTIVE_STATUS;
1386 
1387             i := i + 1;
1388 
1389           END LOOP;
1390         END LOOP;
1391       ELSE
1392         FOR l_taxablelines_rec IN l_taxablelines_csr(cp_kle_id => p_asset_id, cp_request_id => p_request_id) LOOP
1393 
1394           IF (i = 1) THEN
1395             OPEN l_alc_total_tax_csr(cp_request_id  => p_request_id);
1396             FETCH l_alc_total_tax_csr INTO l_total_tax_amount;
1397             CLOSE l_alc_total_tax_csr;
1398           END IF;
1399 
1400           IF l_total_tax_amount IS NULL THEN
1401             l_total_tax_amount := 0;
1402           END IF;
1403           -- Populate Tax Sources data structure and update total tax
1404           l_txsv_tbl(i).id                       := l_taxablelines_rec.id;
1405           l_txsv_tbl(i).alc_serialized_total_tax := l_total_tax_amount;
1406 
1407           i := i+1;
1408 
1409         END LOOP;
1410       END IF;
1411 
1412       IF (l_txsv_tbl.COUNT > 0) THEN
1413         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1414           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax',
1415               'Calling okl_tax_sources_pub.update_tax_sources for updating Total Tax for all Lines in Tax Sources');
1416         END IF;
1417 
1418         okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
1419                                               ,p_init_msg_list   => p_init_msg_list
1420                                               ,x_return_status   => l_return_status
1421                                               ,x_msg_count       => x_msg_count
1422                                               ,x_msg_data        => x_msg_data
1423                                               ,p_txsv_tbl        => l_txsv_tbl
1424                                               ,x_txsv_tbl        => lx_txsv_tbl);
1425 
1426         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1427           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax',
1428              'Return Status' || l_return_status);
1429         END IF;
1430 
1431         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1432           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1433         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1434           RAISE OKL_API.G_EXCEPTION_ERROR;
1435         END IF;
1436 
1437       END IF;
1438 
1439       x_return_status := l_return_status;
1440 
1441       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1442         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax ','End(-)');
1443       END IF;
1444 
1445     EXCEPTION
1446 
1447       WHEN OKL_API.G_EXCEPTION_ERROR THEN
1448 
1449         IF (l_alc_total_tax_csr%ISOPEN) THEN
1450           CLOSE l_alc_total_tax_csr;
1451         END IF;
1452 
1453         IF (l_taxablelines_ser_csr%ISOPEN) THEN
1454           CLOSE l_taxablelines_ser_csr;
1455         END IF;
1456 
1457         IF (l_taxablelines_csr%ISOPEN) THEN
1458           CLOSE l_taxablelines_csr;
1459         END IF;
1460 
1461         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1462            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax ',
1463                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
1464         END IF;
1465 
1466         IF (l_fetch_stream_types_csr%ISOPEN) THEN
1467           CLOSE l_fetch_stream_types_csr;
1468         END IF;
1469 
1470         x_return_status := OKL_API.G_RET_STS_ERROR;
1471 
1472       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1473 
1474         IF (l_alc_total_tax_csr%ISOPEN) THEN
1475           CLOSE l_alc_total_tax_csr;
1476         END IF;
1477 
1478         IF (l_taxablelines_ser_csr%ISOPEN) THEN
1479           CLOSE l_taxablelines_ser_csr;
1480         END IF;
1481 
1482         IF (l_taxablelines_csr%ISOPEN) THEN
1483           CLOSE l_taxablelines_csr;
1484         END IF;
1485 
1486         IF (l_fetch_stream_types_csr%ISOPEN) THEN
1487           CLOSE l_fetch_stream_types_csr;
1488         END IF;
1489 
1490         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1491            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax ',
1492                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
1493         END IF;
1494 
1495         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1496 
1497       WHEN OTHERS THEN
1498 
1499         IF (l_alc_total_tax_csr%ISOPEN) THEN
1500           CLOSE l_alc_total_tax_csr;
1501         END IF;
1502 
1503         IF (l_taxablelines_ser_csr%ISOPEN) THEN
1504           CLOSE l_taxablelines_ser_csr;
1505         END IF;
1506 
1507         IF (l_taxablelines_csr%ISOPEN) THEN
1508           CLOSE l_taxablelines_csr;
1509         END IF;
1510 
1511         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1512            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_alc_total_tax ',
1513                     'EXCEPTION :'||sqlerrm);
1514         END IF;
1515 
1516         IF (l_fetch_stream_types_csr%ISOPEN) THEN
1517           CLOSE l_fetch_stream_types_csr;
1518         END IF;
1519 
1520         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1521         -- unexpected error
1522         OKL_API.set_message(p_app_name      => g_app_name,
1523                             p_msg_name      => g_unexpected_error,
1524                             p_token1        => g_sqlcode_token,
1525                             p_token1_value  => sqlcode,
1526                             p_token2        => g_sqlerrm_token,
1527                             p_token2_value  => sqlerrm);
1528 
1529     END populate_alc_total_tax;
1530 
1531   /*========================================================================
1532    | PRIVATE PROCEDURE update_tax_sources_total
1533    |
1534    | DESCRIPTION
1535    |    This procedure fetches the tax amount from ZX_LINES and updates
1536    |    the tax sources
1537    |
1538    | CALLED FROM
1539    |        process_contract_reversal_tax()
1540    |        process_quote_tax()
1541    |        process_asset_loc_tax()
1542    |        process_booking_upfront_tax()
1543    |        process_quoting_upfront_tax()
1544    |        process_tax_determ_override()
1545    |        process_tax_details_override()
1546    |        process_rebook_upfront_tax()
1547    |
1548    | CALLS PROCEDURES/FUNCTIONS
1549    |        okl_tax_sources_pub.update_tax_sources()
1550    |        populate_alc_total_tax()
1551    |
1552    | PARAMETERS
1553    |      p_source_trx_id              -- Source Transaction Identifier
1554    |
1555    | KNOWN ISSUES
1556    |
1557    | NOTES
1558    |
1559    |
1560    | MODIFICATION HISTORY
1561    | Date          Author     Description of Changes
1562    | 11-APR-07    RRAVIKIR      Created
1563    |
1564    *=======================================================================*/
1565     PROCEDURE update_tax_sources_total(
1566       p_api_version                   IN  NUMBER,
1567       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1568       x_return_status                 OUT NOCOPY VARCHAR2,
1569       x_msg_count                     OUT NOCOPY NUMBER,
1570       x_msg_data                      OUT NOCOPY VARCHAR2,
1571       p_source_trx_id                 IN  NUMBER,
1572       p_source_trx_name               IN  VARCHAR2 DEFAULT NULL,
1573       p_serialized_asset              IN  VARCHAR2 DEFAULT NULL) IS
1574 
1575       -- Local variables
1576       l_api_name                      CONSTANT VARCHAR2(30) := 'update_tax_sources_total';
1577       l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1578       l_total_tax_amount              NUMBER;
1579       i                               NUMBER;
1580 
1581       -- Local data structure
1582       l_txsv_tbl                      txsv_tbl_type;
1583       lx_txsv_tbl                     txsv_tbl_type;
1584 
1585       -- Cursors
1586       CURSOR l_taxablelines_rbk_csr(cp_trx_id IN NUMBER) IS
1587       SELECT id, trx_line_id,application_id, event_class_code, entity_code,
1588              trx_level_type
1589       FROM okl_tax_sources
1590       WHERE trx_id = cp_trx_id
1591       AND tax_call_type_code = G_UPFRONT_TAX
1592       AND tax_line_status_code = G_INACTIVE_STATUS
1593       AND adjusted_doc_trx_id IS NOT NULL;
1594 
1595       CURSOR l_taxablelines_csr(cp_trx_id IN NUMBER) IS
1596       SELECT id, trx_line_id,application_id, event_class_code, entity_code,
1597              trx_level_type
1598       FROM okl_tax_sources
1599       WHERE trx_id = cp_trx_id
1600       AND tax_call_type_code = G_UPFRONT_TAX
1601       AND tax_line_status_code = G_ACTIVE_STATUS;
1602 
1603       CURSOR l_taxablelines_txs_csr(cp_trx_id IN NUMBER) IS
1604       SELECT id, trx_line_id,application_id, event_class_code, entity_code,
1605              trx_level_type
1606       FROM okl_tax_sources
1607       WHERE trx_id = cp_trx_id
1608       AND tax_call_type_code = G_TAX_SCHEDULE
1609       AND tax_line_status_code = G_ACTIVE_STATUS;
1610 
1611       CURSOR l_taxablelines_bill_csr(cp_trx_id IN NUMBER) IS
1612       SELECT id, trx_line_id,application_id, event_class_code, entity_code,
1613              trx_level_type
1614       FROM okl_tax_sources
1615       WHERE trx_id = cp_trx_id
1616       AND tax_call_type_code = G_INVOICE_TAX
1617       AND tax_line_status_code = G_ACTIVE_STATUS;
1618 
1619       CURSOR l_zxlinestotaltax_csr(cp_trx_id  IN NUMBER, cp_trx_line_id   IN NUMBER,
1620                                    cp_application_id  IN NUMBER, cp_event_class_code IN VARCHAR2,
1621                                    cp_entity_code  IN VARCHAR2, cp_trx_level_type  IN VARCHAR2) IS
1622       SELECT  SUM(tax_amt) total_tax
1623       FROM    zx_lines
1624       WHERE   trx_id = cp_trx_id
1625       AND     trx_line_id = cp_trx_line_id
1626       AND     application_id = cp_application_id
1627       AND     event_class_code = cp_event_class_code
1628       AND     entity_code = cp_entity_code
1629       AND     trx_level_type = cp_trx_level_type
1630       AND     nvl(cancel_flag, 'N') <> 'Y';
1631 
1632       CURSOR l_totaltax_quote_csr(cp_trx_id  IN NUMBER, cp_trx_line_id   IN NUMBER,
1633                                    cp_application_id  IN NUMBER, cp_event_class_code IN VARCHAR2,
1634                                    cp_entity_code  IN VARCHAR2, cp_trx_level_type  IN VARCHAR2) IS
1635       SELECT  SUM(tax_amt) total_tax
1636       FROM    zx_detail_tax_lines_gt
1637       WHERE   trx_id = cp_trx_id
1638       AND     trx_line_id = cp_trx_line_id
1639       AND     application_id = cp_application_id
1640       AND     event_class_code = cp_event_class_code
1641       AND     entity_code = cp_entity_code
1642       AND     trx_level_type = cp_trx_level_type
1643       AND     nvl(cancel_flag, 'N') <> 'Y';
1644 
1645       CURSOR l_taxablelines_alc_ser_csr(cp_trx_id IN NUMBER) IS
1646       SELECT id, trx_line_id,application_id, event_class_code, entity_code,
1647              trx_level_type
1648       FROM okl_tax_sources
1649       WHERE trx_id = cp_trx_id
1650       AND tax_call_type_code = G_UPFRONT_TAX
1651       AND tax_line_status_code = G_INACTIVE_STATUS;
1652 
1653     BEGIN
1654       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1655           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total','Begin(+)');
1656       END IF;
1657 
1658       --Print Input Variables
1659       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1660         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total.',
1661                 'p_init_msg_list :'||p_init_msg_list);
1662         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total.',
1663                 'p_source_trx_id :'||p_source_trx_id);
1664         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total.',
1665                 'p_source_trx_name :'||p_source_trx_name);
1666         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total.',
1667                 'p_serialized_asset :'||p_serialized_asset);
1668       END IF;
1669 
1670       i := 1;
1671       IF p_source_trx_name = 'Estimated Billing' THEN
1672         FOR l_taxablelines_bill_rec IN l_taxablelines_bill_csr(cp_trx_id => p_source_trx_id) LOOP
1673 
1674           -- Get the modified tax lines from zx_detail_tax_lines_gt, sum up the total tax amount
1675           -- and store in total_tax column of okl_tax_sources
1676           OPEN l_totaltax_quote_csr(cp_trx_id           => p_source_trx_id,
1677                                     cp_trx_line_id      => l_taxablelines_bill_rec.trx_line_id,
1678                                     cp_application_id   => l_taxablelines_bill_rec.application_id,
1679                                     cp_event_class_code => l_taxablelines_bill_rec.event_class_code,
1680                                     cp_entity_code      => l_taxablelines_bill_rec.entity_code,
1681                                     cp_trx_level_type   => l_taxablelines_bill_rec.trx_level_type);
1682           FETCH l_totaltax_quote_csr INTO l_total_tax_amount;
1683           CLOSE l_totaltax_quote_csr;
1684 
1685           IF l_total_tax_amount IS NULL THEN
1686             l_total_tax_amount := 0;
1687           END IF;
1688 
1689           -- Populate Tax Sources data structure and update total tax
1690           l_txsv_tbl(i).id := l_taxablelines_bill_rec.id;
1691           l_txsv_tbl(i).total_tax := l_total_tax_amount;
1692 
1693           i := i+1;
1694 
1695         END LOOP;
1696 
1697       ELSIF p_source_trx_name = 'Rebook' THEN
1698 
1699         -- Get the modified tax lines from zx_lines, sum up the total tax amount
1700         -- and store in total_tax column of okl_tax_sources
1701         FOR l_taxablelines_rbk_rec IN l_taxablelines_rbk_csr(cp_trx_id => p_source_trx_id) LOOP
1702           OPEN l_zxlinestotaltax_csr(cp_trx_id           => p_source_trx_id,
1703                                      cp_trx_line_id      => l_taxablelines_rbk_rec.trx_line_id,
1704                                      cp_application_id   => l_taxablelines_rbk_rec.application_id,
1705                                      cp_event_class_code => l_taxablelines_rbk_rec.event_class_code,
1706                                      cp_entity_code      => l_taxablelines_rbk_rec.entity_code,
1707                                      cp_trx_level_type   => l_taxablelines_rbk_rec.trx_level_type);
1708           FETCH l_zxlinestotaltax_csr INTO l_total_tax_amount;
1709           CLOSE l_zxlinestotaltax_csr;
1710 
1711           IF l_total_tax_amount IS NULL THEN
1712             l_total_tax_amount := 0;
1713           END IF;
1714           -- Populate Tax Sources data structure and update total tax
1715           l_txsv_tbl(i).id := l_taxablelines_rbk_rec.id;
1716           l_txsv_tbl(i).total_tax := l_total_tax_amount;
1717 
1718           i := i+1;
1719 
1720         END LOOP;
1721 
1722       ELSIF (p_source_trx_name = 'Asset Relocation' AND p_serialized_asset = 'Y') THEN
1723 
1724         -- Get the modified tax lines from zx_lines, sum up the total tax amount
1725         -- and store in total_tax column of okl_tax_sources
1726         FOR l_taxablelines_alc_ser_rec IN l_taxablelines_alc_ser_csr(cp_trx_id => p_source_trx_id) LOOP
1727           OPEN l_zxlinestotaltax_csr(cp_trx_id           => p_source_trx_id,
1728                                      cp_trx_line_id      => l_taxablelines_alc_ser_rec.trx_line_id,
1729                                      cp_application_id   => l_taxablelines_alc_ser_rec.application_id,
1730                                      cp_event_class_code => l_taxablelines_alc_ser_rec.event_class_code,
1731                                      cp_entity_code      => l_taxablelines_alc_ser_rec.entity_code,
1732                                      cp_trx_level_type   => l_taxablelines_alc_ser_rec.trx_level_type);
1733           FETCH l_zxlinestotaltax_csr INTO l_total_tax_amount;
1734           CLOSE l_zxlinestotaltax_csr;
1735 
1736           IF l_total_tax_amount IS NULL THEN
1737             l_total_tax_amount := 0;
1738           END IF;
1739           -- Populate Tax Sources data structure and update total tax
1740           l_txsv_tbl(i).id := l_taxablelines_alc_ser_rec.id;
1741           l_txsv_tbl(i).total_tax := l_total_tax_amount;
1742 
1743           i := i+1;
1744         END LOOP;
1745 
1746       ELSIF (p_source_trx_name = 'Tax Schedule') THEN
1747 
1748         -- Get the modified tax lines from zx_lines_det_factors, sum up the total tax amount
1749         -- and store in total_tax column of okl_tax_sources
1750         FOR l_taxablelines_txs_rec IN l_taxablelines_txs_csr(cp_trx_id => p_source_trx_id) LOOP
1751           OPEN l_totaltax_quote_csr(cp_trx_id           => p_source_trx_id,
1752                                     cp_trx_line_id      => l_taxablelines_txs_rec.trx_line_id,
1753                                     cp_application_id   => l_taxablelines_txs_rec.application_id,
1754                                     cp_event_class_code => l_taxablelines_txs_rec.event_class_code,
1755                                     cp_entity_code      => l_taxablelines_txs_rec.entity_code,
1756                                     cp_trx_level_type   => l_taxablelines_txs_rec.trx_level_type);
1757           FETCH l_totaltax_quote_csr INTO l_total_tax_amount;
1758           CLOSE l_totaltax_quote_csr;
1759 
1760           IF l_total_tax_amount IS NOT NULL THEN
1761             -- Populate Tax Sources data structure and update total tax
1762             l_txsv_tbl(i).id := l_taxablelines_txs_rec.id;
1763             l_txsv_tbl(i).total_tax := l_total_tax_amount;
1764           END IF;
1765 
1766           i := i+1;
1767         END LOOP;
1768 
1769       ELSE
1770 
1771         -- Get the modified tax lines from zx_lines, sum up the total tax amount
1772         -- and store in total_tax column of okl_tax_sources
1773         FOR l_taxablelines_rec IN l_taxablelines_csr(cp_trx_id => p_source_trx_id) LOOP
1774 
1775           IF p_source_trx_name = 'Sales Quote' THEN
1776             OPEN l_totaltax_quote_csr(cp_trx_id           => p_source_trx_id,
1777                                       cp_trx_line_id      => l_taxablelines_rec.trx_line_id,
1778                                       cp_application_id   => l_taxablelines_rec.application_id,
1779                                       cp_event_class_code => l_taxablelines_rec.event_class_code,
1780                                       cp_entity_code      => l_taxablelines_rec.entity_code,
1781                                       cp_trx_level_type   => l_taxablelines_rec.trx_level_type);
1782             FETCH l_totaltax_quote_csr INTO l_total_tax_amount;
1783             CLOSE l_totaltax_quote_csr;
1784           ELSE
1785             OPEN l_zxlinestotaltax_csr(cp_trx_id           => p_source_trx_id,
1786                                        cp_trx_line_id      => l_taxablelines_rec.trx_line_id,
1787                                        cp_application_id   => l_taxablelines_rec.application_id,
1788                                        cp_event_class_code => l_taxablelines_rec.event_class_code,
1789                                        cp_entity_code      => l_taxablelines_rec.entity_code,
1790                                        cp_trx_level_type   => l_taxablelines_rec.trx_level_type);
1791             FETCH l_zxlinestotaltax_csr INTO l_total_tax_amount;
1792             CLOSE l_zxlinestotaltax_csr;
1793           END IF;
1794 
1795           IF l_total_tax_amount IS NULL THEN
1796             l_total_tax_amount := 0;
1797           END IF;
1798           -- Populate Tax Sources data structure and update total tax
1799           l_txsv_tbl(i).id        := l_taxablelines_rec.id;
1800           l_txsv_tbl(i).total_tax := l_total_tax_amount;
1801 
1802           IF (p_source_trx_name = 'Split Asset') THEN
1803             -- This is to make adjustable tax sources for previous active Upfront tax
1804             -- after reverse document call
1805             l_txsv_tbl(i).tax_line_status_code := G_INACTIVE_STATUS;
1806           END IF;
1807 
1808           i := i+1;
1809 
1810         END LOOP;
1811       END IF;
1812 
1813       IF (l_txsv_tbl.COUNT > 0) THEN
1814         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1815           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total',
1816               'Calling okl_tax_sources_pub.update_tax_sources for updating Total Tax for all Lines in Tax Sources');
1817         END IF;
1818 
1819         okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
1820                                               ,p_init_msg_list   => p_init_msg_list
1821                                               ,x_return_status   => l_return_status
1822                                               ,x_msg_count       => x_msg_count
1823                                               ,x_msg_data        => x_msg_data
1824                                               ,p_txsv_tbl        => l_txsv_tbl
1825                                               ,x_txsv_tbl        => lx_txsv_tbl);
1826 
1827         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1828           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total',
1829              'Return Status' || l_return_status);
1830         END IF;
1831 
1832         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1833           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1834         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1835           RAISE OKL_API.G_EXCEPTION_ERROR;
1836         END IF;
1837 
1838       END IF;
1839 
1840       x_return_status := l_return_status;
1841 
1842       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1843         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total ','End(-)');
1844       END IF;
1845 
1846     EXCEPTION
1847 
1848       WHEN OKL_API.G_EXCEPTION_ERROR THEN
1849 
1850         IF (l_taxablelines_csr%ISOPEN) THEN
1851           CLOSE l_taxablelines_csr;
1852         END IF;
1853 
1854         IF (l_taxablelines_bill_csr%ISOPEN) THEN
1855           CLOSE l_taxablelines_bill_csr;
1856         END IF;
1857 
1858         IF (l_zxlinestotaltax_csr%ISOPEN) THEN
1859           CLOSE l_zxlinestotaltax_csr;
1860         END IF;
1861 
1862         IF (l_totaltax_quote_csr%ISOPEN) THEN
1863           CLOSE l_totaltax_quote_csr;
1864         END IF;
1865 
1866         IF (l_taxablelines_rbk_csr%ISOPEN) THEN
1867           CLOSE l_taxablelines_rbk_csr;
1868         END IF;
1869 
1870         IF (l_taxablelines_alc_ser_csr%ISOPEN) THEN
1871           CLOSE l_taxablelines_alc_ser_csr;
1872         END IF;
1873 
1874         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1875            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total ',
1876                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
1877         END IF;
1878 
1879         x_return_status := OKL_API.G_RET_STS_ERROR;
1880 
1881       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1882 
1883         IF (l_taxablelines_csr%ISOPEN) THEN
1884           CLOSE l_taxablelines_csr;
1885         END IF;
1886 
1887         IF (l_taxablelines_bill_csr%ISOPEN) THEN
1888           CLOSE l_taxablelines_bill_csr;
1889         END IF;
1890 
1891         IF (l_zxlinestotaltax_csr%ISOPEN) THEN
1892           CLOSE l_zxlinestotaltax_csr;
1893         END IF;
1894 
1895         IF (l_totaltax_quote_csr%ISOPEN) THEN
1896           CLOSE l_totaltax_quote_csr;
1897         END IF;
1898 
1899         IF (l_taxablelines_rbk_csr%ISOPEN) THEN
1900           CLOSE l_taxablelines_rbk_csr;
1901         END IF;
1902 
1903         IF (l_taxablelines_alc_ser_csr%ISOPEN) THEN
1904           CLOSE l_taxablelines_alc_ser_csr;
1905         END IF;
1906 
1907         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1908            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total ',
1909                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
1910         END IF;
1911 
1912         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1913 
1914       WHEN OTHERS THEN
1915 
1916         IF (l_taxablelines_csr%ISOPEN) THEN
1917           CLOSE l_taxablelines_csr;
1918         END IF;
1919 
1920         IF (l_taxablelines_bill_csr%ISOPEN) THEN
1921           CLOSE l_taxablelines_bill_csr;
1922         END IF;
1923 
1924         IF (l_zxlinestotaltax_csr%ISOPEN) THEN
1925           CLOSE l_zxlinestotaltax_csr;
1926         END IF;
1927 
1928         IF (l_totaltax_quote_csr%ISOPEN) THEN
1929           CLOSE l_totaltax_quote_csr;
1930         END IF;
1931 
1932         IF (l_taxablelines_rbk_csr%ISOPEN) THEN
1933           CLOSE l_taxablelines_rbk_csr;
1934         END IF;
1935 
1936         IF (l_taxablelines_alc_ser_csr%ISOPEN) THEN
1937           CLOSE l_taxablelines_alc_ser_csr;
1938         END IF;
1939 
1940         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
1941            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.update_tax_sources_total ',
1942                     'EXCEPTION :'||sqlerrm);
1943         END IF;
1944 
1945         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1946         -- unexpected error
1947         OKL_API.set_message(p_app_name      => g_app_name,
1948                             p_msg_name      => g_unexpected_error,
1949                             p_token1        => g_sqlcode_token,
1950                             p_token1_value  => sqlcode,
1951                             p_token2        => g_sqlerrm_token,
1952                             p_token2_value  => sqlerrm);
1953 
1954     END update_tax_sources_total;
1955 
1956 /*========================================================================
1957  | PRIVATE PROCEDURE make_tax_sources_reportable
1958  |
1959  | DESCRIPTION
1960  |    This procedure makes the tax sources reportable
1961  |
1962  | CALLED FROM
1963  |        process_asset_loc_tax()
1964  |        process_booking_upfront_tax()
1965  |        process_rebook_upfront_tax()
1966  |
1967  | CALLS PROCEDURES/FUNCTIONS
1968  |
1969  |
1970  | PARAMETERS
1971  |      p_source_trx_id              -- Source Transaction Identifier
1972  |
1973  | KNOWN ISSUES
1974  |
1975  | NOTES
1976  |
1977  |
1978  | MODIFICATION HISTORY
1979  | Date          Author     Description of Changes
1980  | 16-MAY-07    RRAVIKIR      Created
1981  |
1982  *=======================================================================*/
1983   PROCEDURE make_tax_sources_reportable(
1984     p_api_version                       IN  NUMBER,
1985     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1986     x_return_status                     OUT NOCOPY VARCHAR2,
1987     x_msg_count                         OUT NOCOPY NUMBER,
1988     x_msg_data                          OUT NOCOPY VARCHAR2,
1989     p_source_trx_id                 IN  NUMBER) IS
1990 
1991     -- Local variables
1992     l_api_name                      CONSTANT VARCHAR2(30) := 'make_tax_sources_reportable';
1993     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1994     l_total_tax_amount              NUMBER;
1995 
1996     -- Local data structure
1997     l_txsv_tbl                      txsv_tbl_type;
1998     lx_txsv_tbl                     txsv_tbl_type;
1999 
2000     i                               NUMBER;
2001 
2002     -- Cursors
2003     CURSOR l_taxablelines_csr(cp_trx_id IN NUMBER) IS
2004     SELECT id, trx_line_id,application_id, event_class_code, entity_code,
2005            trx_level_type
2006     FROM okl_tax_sources
2007     WHERE trx_id = cp_trx_id
2008     AND tax_call_type_code = G_UPFRONT_TAX
2009     AND tax_line_status_code = G_ACTIVE_STATUS;
2010 
2011   BEGIN
2012     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2013         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable','Begin(+)');
2014     END IF;
2015 
2016     --Print Input Variables
2017     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2018          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable.',
2019               'p_init_msg_list :'||p_init_msg_list);
2020          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable.',
2021               'p_source_trx_id :'||p_source_trx_id);
2022     END IF;
2023 
2024     i := 1;
2025     FOR l_taxablelines_rec IN l_taxablelines_csr(cp_trx_id => p_source_trx_id) LOOP
2026 
2027       -- Populate Tax Sources data structure and update total tax
2028       l_txsv_tbl(i).id := l_taxablelines_rec.id;
2029       l_txsv_tbl(i).tax_reporting_flag := 'Y';
2030       l_txsv_tbl(i).reported_yn := 'Y';
2031 
2032       i := i + 1;
2033     END LOOP;
2034 
2035     IF (l_txsv_tbl.COUNT > 0) THEN
2036       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2037         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable',
2038             'Calling okl_tax_sources_pub.update_tax_sources for making Tax Sources Reportable');
2039       END IF;
2040 
2041       okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
2042                                             ,p_init_msg_list   => p_init_msg_list
2043                                             ,x_return_status   => l_return_status
2044                                             ,x_msg_count       => x_msg_count
2045                                             ,x_msg_data        => x_msg_data
2046                                             ,p_txsv_tbl        => l_txsv_tbl
2047                                             ,x_txsv_tbl        => lx_txsv_tbl);
2048 
2049       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2050         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable',
2051             'Return Status' || l_return_status);
2052       END IF;
2053 
2054       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2055         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2056       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2057         RAISE OKL_API.G_EXCEPTION_ERROR;
2058       END IF;
2059 
2060     END IF;
2061 
2062     x_return_status := l_return_status;
2063 
2064     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2065       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable ','End(-)');
2066     END IF;
2067 
2068   EXCEPTION
2069 
2070     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2071 
2072       IF (l_taxablelines_csr%ISOPEN) THEN
2073         CLOSE l_taxablelines_csr;
2074       END IF;
2075 
2076       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2077          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable ',
2078                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
2079       END IF;
2080 
2081       x_return_status := OKL_API.G_RET_STS_ERROR;
2082 
2083     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2084 
2085       IF (l_taxablelines_csr%ISOPEN) THEN
2086         CLOSE l_taxablelines_csr;
2087       END IF;
2088 
2089       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2090          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable ',
2091                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
2092       END IF;
2093 
2094       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2095 
2096     WHEN OTHERS THEN
2097 
2098       IF (l_taxablelines_csr%ISOPEN) THEN
2099         CLOSE l_taxablelines_csr;
2100       END IF;
2101 
2102       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2103          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.make_tax_sources_reportable ',
2104                   'EXCEPTION :'||sqlerrm);
2105       END IF;
2106 
2107       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2108       -- unexpected error
2109       OKL_API.set_message(p_app_name      => g_app_name,
2110                           p_msg_name      => g_unexpected_error,
2111                           p_token1        => g_sqlcode_token,
2112                           p_token1_value  => sqlcode,
2113                           p_token2        => g_sqlerrm_token,
2114                           p_token2_value  => sqlerrm);
2115 
2116   END make_tax_sources_reportable;
2117 
2118 /*========================================================================
2119  | PRIVATE PROCEDURE process_final_upfront_tax
2120  |
2121  | DESCRIPTION
2122  |    This procedure processes the final upfront tax for 'Booking', 'Asset
2123  |    Location change' and 'Rebook' transactions
2124  |
2125  | CALLED FROM
2126  |    Other procedures in this API
2127  |
2128  | CALLS PROCEDURES/FUNCTIONS
2129  |       OKL_TAX_INTERFACE_PVT.mark_reporting_flag
2130  |
2131  | PARAMETERS
2132  |  Input Parameters
2133  |      p_trx_id                        -- Transaction identifier
2134  |      p_application_id        -- Application identifier
2135  |      p_entity_code           -- Entity code
2136  |      p_event_class_code      -- Event class code
2137  |
2138  |  Output Parameters
2139  |
2140  | KNOWN ISSUES
2141  |
2142  | NOTES
2143  |
2144  |
2145  | MODIFICATION HISTORY
2146  | Date                  Author            Description of Changes
2147  | 22-MAR-07            RRAVIKIR           Created
2148  *=======================================================================*/
2149   PROCEDURE process_final_upfront_tax(
2150     p_api_version                       IN  NUMBER,
2151     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
2152     x_return_status                     OUT NOCOPY VARCHAR2,
2153     x_msg_count                         OUT NOCOPY NUMBER,
2154     x_msg_data                          OUT NOCOPY VARCHAR2,
2155     p_trx_id                        IN  NUMBER,
2156     p_application_id                IN  NUMBER,
2157     p_entity_code                   IN  VARCHAR2,
2158     p_event_class_code              IN  VARCHAR2) IS
2159 
2160     -- Local variables
2161     l_api_version                   CONSTANT NUMBER := 1;
2162     l_api_name                      CONSTANT VARCHAR2(30) := 'process_final_upfront_tax';
2163     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2164 
2165   BEGIN
2166 
2167     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2168         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax','Begin(+)');
2169     END IF;
2170 
2171     --Print Input Variables
2172     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2173          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2174               'p_init_msg_list :'||p_init_msg_list);
2175          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2176               'p_trx_id :'||p_trx_id);
2177          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2178               'p_application_id :'||p_application_id);
2179          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2180               'p_entity_code :'||p_entity_code);
2181          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2182               'p_event_class_code :'||p_event_class_code);
2183     END IF;
2184 
2185     -- Required Values
2186     IF p_trx_id IS NULL THEN
2187        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
2188                             p_token1        => G_COL_NAME_TOKEN,
2189                             p_token1_value  => 'TRX_ID');
2190        RAISE OKL_API.G_EXCEPTION_ERROR;
2191     END IF;
2192 
2193     IF p_application_id IS NULL THEN
2194        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
2195                             p_token1        => G_COL_NAME_TOKEN,
2196                             p_token1_value  => 'APPLICATION_ID');
2197        RAISE OKL_API.G_EXCEPTION_ERROR;
2198     END IF;
2199 
2200     IF p_entity_code IS NULL THEN
2201        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
2202                             p_token1        => G_COL_NAME_TOKEN,
2203                             p_token1_value  => 'ENTITY_CODE');
2204        RAISE OKL_API.G_EXCEPTION_ERROR;
2205     END IF;
2206 
2207     IF p_event_class_code IS NULL THEN
2208        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
2209                             p_token1        => G_COL_NAME_TOKEN,
2210                             p_token1_value  => 'EVENT_CLASS_CODE');
2211        RAISE OKL_API.G_EXCEPTION_ERROR;
2212     END IF;
2213     -- End required values
2214 
2215     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2216          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2217               'Calling OKL_TAX_INTERFACE_PVT.mark_reporting_flag');
2218     END IF;
2219 
2220     OKL_TAX_INTERFACE_PVT.mark_reporting_flag( p_api_version         => p_api_version,
2221                                                p_init_msg_list       => p_init_msg_list,
2222                                                x_return_status       => l_return_status,
2223                                                x_msg_count           => x_msg_count,
2224                                                x_msg_data            => x_msg_data,
2225                                                p_trx_id              => p_trx_id,
2226                                                p_application_id      => p_application_id,
2227                                                p_entity_code         => p_entity_code,
2228                                                p_event_class_code    => p_event_class_code);
2229 
2230     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2231          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax.',
2232               'Return Status' || l_return_status);
2233     END IF;
2234 
2235     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2236       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2237     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2238       RAISE OKL_API.G_EXCEPTION_ERROR;
2239     END IF;
2240 
2241     x_return_status := l_return_status;
2242 
2243     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2244       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax ','End(-)');
2245     END IF;
2246 
2247   EXCEPTION
2248     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2249 
2250       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2251          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax ',
2252                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
2253       END IF;
2254 
2255       x_return_status := OKL_API.G_RET_STS_ERROR;
2256 
2257     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2258       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2259          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax ',
2260                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
2261       END IF;
2262 
2263       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2264 
2265     WHEN OTHERS THEN
2266 
2267       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2268          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_final_upfront_tax ',
2269                   'EXCEPTION :'||sqlerrm);
2270       END IF;
2271 
2272       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2273       -- unexpected error
2274       OKL_API.set_message(p_app_name      => g_app_name,
2275                           p_msg_name      => g_unexpected_error,
2276                           p_token1        => g_sqlcode_token,
2277                           p_token1_value  => sqlcode,
2278                           p_token2        => g_sqlerrm_token,
2279                           p_token2_value  => sqlerrm);
2280 
2281   END process_final_upfront_tax;
2282 
2283 /*========================================================================
2284  | PRIVATE PROCEDURE populate_tax_trx_details
2285  |
2286  | DESCRIPTION
2287  |    This procedure is called by tax module to populate tax data into ZX global
2288  |    session table. eBtax uses this table to show the tax data for Quote
2289  |    objects (Sales Quote, Lease Application and Termination Quote)
2290  |
2291  | CALLED FROM                                  OLM Tax Module
2292  |
2293  |
2294  | CALLS PROCEDURES/FUNCTIONS
2295  |
2296  |
2297  | PARAMETERS
2298  |      p_trx_id                     -- Transaction Identifier
2299  |      p_trx_line_id                -- Transaction Line Identifier
2300  |      p_application_id             -- Application Identifier
2301  |      p_trx_level_type             -- Transaction level type
2302  |      p_entity_code                -- Entity code
2303  |      p_event_class_code           -- Event class code
2304  |
2305  | KNOWN ISSUES
2306  |
2307  | NOTES
2308  |
2309  |
2310  | MODIFICATION HISTORY
2311  | Date          Author     Description of Changes
2312  | 04-APR-07    RRAVIKIR      Created
2313  |
2314  *=======================================================================*/
2315   PROCEDURE populate_tax_trx_details (
2316     p_api_version                   IN NUMBER,
2317     p_init_msg_list                 IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2318     x_return_status                 OUT NOCOPY VARCHAR2,
2319     x_msg_count                     OUT NOCOPY NUMBER,
2320     x_msg_data                      OUT NOCOPY VARCHAR2,
2321     p_trx_id                        IN  NUMBER,
2322     p_trx_line_id                   IN  NUMBER,
2323     p_application_id                IN  NUMBER,
2324     p_trx_level_type                        IN  VARCHAR2,
2325     p_entity_code                                   IN  VARCHAR2,
2326     p_event_class_code              IN  VARCHAR2) IS
2327 
2328     -- Local variables
2329     l_api_version                   CONSTANT NUMBER := 1;
2330     l_api_name                      CONSTANT VARCHAR2(30) := 'populate_tax_trx_details';
2331     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2332 
2333     -- Cursor to retrieve tax data
2334     CURSOR l_get_tax_data_csr IS
2335     SELECT tax_determine_date,
2336            tax_rate_id,
2337            tax_rate_code,
2338            taxable_amt,
2339            tax_exemption_id,
2340            tax_rate,
2341            tax_amt,
2342            tax_date,
2343            line_amt,
2344            internal_organization_id,
2345            application_id,
2346            entity_code,
2347            event_class_code,
2348            event_type_code ,
2349            trx_id,
2350            trx_line_id,
2351            trx_level_type,
2352            trx_line_number,
2353            tax_line_number ,
2354            tax_regime_id ,
2355            tax_regime_code ,
2356            tax_id,
2357            tax,
2358            tax_status_id,
2359            tax_status_code,
2360            tax_apportionment_line_number,
2361            legal_entity_id,
2362            trx_number,
2363            trx_date,
2364            tax_jurisdiction_id,
2365            tax_jurisdiction_code,
2366            tax_type_code,
2367            tax_currency_code ,
2368            taxable_amt_tax_curr,
2369            trx_currency_code,
2370            minimum_accountable_unit,
2371            precision,
2372            currency_conversion_type,
2373            currency_conversion_rate,
2374            currency_conversion_date
2375     FROM okl_tax_trx_details
2376     WHERE trx_id = p_trx_id
2377     AND   trx_line_id = p_trx_line_id
2378     AND   application_id = p_application_id
2379     AND   trx_level_type = p_trx_level_type
2380     AND   entity_code = p_entity_code
2381     AND   event_class_code = p_event_class_code;
2382 
2383   BEGIN
2384     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2385         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details','Begin(+)');
2386     END IF;
2387 
2388     --Print Input Variables
2389     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2390          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2391               'p_init_msg_list :'||p_init_msg_list);
2392          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2393               'p_trx_id :'||p_trx_id);
2394          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2395               'p_trx_line_id :'||p_trx_line_id);
2396          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2397               'p_application_id :'||p_application_id);
2398          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2399               'p_trx_level_type :'||p_trx_level_type);
2400          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2401               'p_entity_code :'||p_entity_code);
2402          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2403               'p_event_class_code :'||p_event_class_code);
2404     END IF;
2405 
2406     -- Populate the tax data into eBtax global session table
2407     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2408          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2409               'INSERT INTO zx_detail_tax_lines_gt');
2410     END IF;
2411 
2412     FOR l_get_tax_data_rec IN l_get_tax_data_csr LOOP
2413       INSERT INTO zx_detail_tax_lines_gt(
2414            tax_line_id,
2415            tax_determine_date,
2416            tax_rate_id,
2417            tax_rate_code,
2418            taxable_amt,
2419            tax_exemption_id,
2420            tax_rate,
2421            tax_amt,
2422            tax_date,
2423            line_amt,
2424            internal_organization_id,
2425            application_id,
2426            entity_code,
2427            event_class_code,
2428            event_type_code ,
2429            trx_id,
2430            trx_line_id,
2431            trx_level_type,
2432            trx_line_number,
2433            tax_line_number ,
2434            tax_regime_id ,
2435            tax_regime_code ,
2436            tax_id,
2437            tax,
2438            tax_status_id,
2439            tax_status_code,
2440            tax_apportionment_line_number,
2441            legal_entity_id,
2442            trx_number,
2443            trx_date,
2444            tax_jurisdiction_id,
2445            tax_jurisdiction_code,
2446            tax_type_code,
2447            tax_currency_code ,
2448            taxable_amt_tax_curr,
2449            trx_currency_code,
2450            minimum_accountable_unit,
2451            precision,
2452            currency_conversion_type,
2453            currency_conversion_rate,
2454            currency_conversion_date,
2455            created_by,
2456            creation_date,
2457            last_updated_by,
2458            last_update_date,
2459            last_update_login,
2460            object_version_number) VALUES
2461            (
2462            zx_lines_s.nextval,
2463            l_get_tax_data_rec.tax_determine_date,
2464            l_get_tax_data_rec.tax_rate_id,
2465            l_get_tax_data_rec.tax_rate_code,
2466            l_get_tax_data_rec.taxable_amt,
2467            l_get_tax_data_rec.tax_exemption_id,
2468            l_get_tax_data_rec.tax_rate,
2469            l_get_tax_data_rec.tax_amt,
2470            l_get_tax_data_rec.tax_date,
2471            l_get_tax_data_rec.line_amt,
2472            l_get_tax_data_rec.internal_organization_id,
2473            l_get_tax_data_rec.application_id,
2474            l_get_tax_data_rec.entity_code,
2475            l_get_tax_data_rec.event_class_code,
2476            l_get_tax_data_rec.event_type_code ,
2477            l_get_tax_data_rec.trx_id,
2478            l_get_tax_data_rec.trx_line_id,
2479            l_get_tax_data_rec.trx_level_type,
2480            l_get_tax_data_rec.trx_line_number,
2481            l_get_tax_data_rec.tax_line_number ,
2482            l_get_tax_data_rec.tax_regime_id ,
2483            l_get_tax_data_rec.tax_regime_code ,
2484            l_get_tax_data_rec.tax_id,
2485            l_get_tax_data_rec.tax,
2486            l_get_tax_data_rec.tax_status_id,
2487            l_get_tax_data_rec.tax_status_code,
2488            l_get_tax_data_rec.tax_apportionment_line_number,
2489            l_get_tax_data_rec.legal_entity_id,
2490            l_get_tax_data_rec.trx_number,
2491            l_get_tax_data_rec.trx_date,
2492            l_get_tax_data_rec.tax_jurisdiction_id,
2493            l_get_tax_data_rec.tax_jurisdiction_code,
2494            l_get_tax_data_rec.tax_type_code,
2495            l_get_tax_data_rec.tax_currency_code,
2496            l_get_tax_data_rec.taxable_amt_tax_curr,
2497            l_get_tax_data_rec.trx_currency_code,
2498            l_get_tax_data_rec.minimum_accountable_unit,
2499            l_get_tax_data_rec.precision,
2500            l_get_tax_data_rec.currency_conversion_type,
2501            l_get_tax_data_rec.currency_conversion_rate,
2502            l_get_tax_data_rec.currency_conversion_date,
2503            G_USER_ID,
2504            SYSDATE,
2505            G_USER_ID,
2506            SYSDATE,
2507            G_LOGIN_ID,
2508            1);
2509     END LOOP;
2510 
2511     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2512          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details.',
2513               'Return Status' || l_return_status);
2514     END IF;
2515 
2516     x_return_status := l_return_status;
2517 
2518     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2519       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details ','End(-)');
2520     END IF;
2521 
2522   EXCEPTION
2523     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2524 
2525       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2526          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details ',
2527                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
2528       END IF;
2529 
2530       x_return_status := OKL_API.G_RET_STS_ERROR;
2531 
2532     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2533       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2534          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details ',
2535                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
2536       END IF;
2537 
2538       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2539 
2540     WHEN OTHERS THEN
2541 
2542       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2543          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_trx_details ',
2544                   'EXCEPTION :'||sqlerrm);
2545       END IF;
2546 
2547       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2548       -- unexpected error
2549       OKL_API.set_message(p_app_name      => g_app_name,
2550                           p_msg_name      => g_unexpected_error,
2551                           p_token1        => g_sqlcode_token,
2552                           p_token1_value  => sqlcode,
2553                           p_token2        => g_sqlerrm_token,
2554                           p_token2_value  => sqlerrm);
2555 
2556   END populate_tax_trx_details;
2557 
2558 /*========================================================================
2559  | PRIVATE PROCEDURE process_contract_reversal_tax
2560  |
2561  | DESCRIPTION
2562  |    This procedure is called from calculate_sales_tax procedure to reverse the
2563  |    tax entries during contract reversal
2564  |
2565  | CALLED FROM                                  calculate_sales_tax()
2566  |
2567  |
2568  | CALLS PROCEDURES/FUNCTIONS
2569  |     OKL_TAX_SOURCES_PUB.update_tax_sources()
2570  |
2571  |
2572  | PARAMETERS
2573  |      p_source_trx_id                 -- Source transaction ID
2574  |      p_source_trx_name       -- Source transaction Name
2575  |      p_source_table          -- Source table
2576  |
2577  | KNOWN ISSUES
2578  |
2579  | NOTES
2580  |
2581  |
2582  | MODIFICATION HISTORY
2583  | Date                  Author            Description of Changes
2584  | 11-APR-07            RRAVIKIR           Created
2585  |
2586  *=======================================================================*/
2587  PROCEDURE process_contract_reversal_tax(
2588         p_api_version                   IN  NUMBER,
2589     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
2590     x_return_status                     OUT NOCOPY VARCHAR2,
2591     x_msg_count                         OUT NOCOPY NUMBER,
2592     x_msg_data                          OUT NOCOPY VARCHAR2,
2593     p_source_trx_id                                     IN  NUMBER,
2594     p_source_trx_name               IN  VARCHAR2,
2595     p_source_table                  IN  VARCHAR2) IS
2596 
2597     ------------- Reverse contract -------------------------
2598     --p_source_trx_id           ---> okl_trx_assets.id
2599     --p_source_trx_name     ---> 'Reverse'
2600     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
2601     --------------------------------------------------
2602     -- Local variables
2603         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2604     l_rev_trx_type_id               NUMBER;
2605     l_khr_id                        NUMBER;
2606     l_legal_entity_id               NUMBER;
2607     l_trx_date                      DATE;
2608     l_trx_level_type                VARCHAR2(30);
2609     l_org_id                        NUMBER;
2610 
2611     i                               NUMBER;
2612     l_fetch_size                    NUMBER := 10000;
2613     l_reverse                       BOOLEAN := FALSE;
2614 
2615         TYPE tax_sources_tbl_type IS TABLE OF OKL_TAX_SOURCES%ROWTYPE INDEX BY BINARY_INTEGER;
2616     TYPE tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2617 
2618     l_newtaxsourcesrev_tbl          tax_sources_tbl_type;
2619     l_tax_src_tbl                   tax_src_tbl_type;
2620     lp_txsv_rec                     txsv_rec_type;
2621     lx_txsv_rec                     txsv_rec_type;
2622 
2623     -- Cursors
2624     -- Booking tax lines will be the only ACTIVE set of tax lines at the time K is being Reversed
2625         -- Contract can be reversed only if no other transactions have happened on the contract
2626         -- this cursor selects existing active upfront taxable lines for a contract that is being reversed
2627         CURSOR l_prevtaxsourcesbk_csr(cp_khr_id IN NUMBER) IS
2628         SELECT id, khr_id, kle_id, asset_number, trx_id, trx_line_id, entity_code,
2629                event_class_code, trx_level_type, tax_call_type_code, sty_id,
2630                trx_business_category, tax_line_status_code, sel_id, reported_yn,
2631                line_name, application_id, tax_reporting_flag, default_taxation_country,
2632                product_category, user_defined_fisc_class, line_intended_use,
2633                tax_classification_code, inventory_item_id, bill_to_cust_acct_id,
2634                org_id, legal_entity_id, line_amt, assessable_value, total_tax,
2635                product_type, product_fisc_classification, trx_date, provnl_tax_determination_date,
2636                try_id, ship_to_location_id, ship_to_party_site_id, ship_to_party_id,
2637                bill_to_party_site_id, bill_to_location_id, bill_to_party_id,
2638                ship_to_cust_acct_site_use_id, bill_to_cust_acct_site_use_id,
2639                trx_currency_code, currency_conversion_date, currency_conversion_rate,
2640                currency_conversion_type
2641         FROM   okl_tax_sources
2642         WHERE  khr_id = cp_khr_id
2643         AND    tax_call_type_code = G_UPFRONT_TAX
2644         AND    tax_line_status_code = G_ACTIVE_STATUS;
2645 
2646     CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
2647         SELECT a.try_id, a.khr_id, a.legal_entity_id, a.date_transaction_occurred
2648         FROM   okl_trx_contracts a, okl_trx_types_tl b
2649         WHERE  a.id = cp_trx_id
2650         AND    a.try_id = b.id
2651         AND    b.name = cp_trx_type_name
2652     AND    language = 'US';
2653 
2654     TYPE prevtaxsources_tbl_type IS TABLE OF l_prevtaxsourcesbk_csr%ROWTYPE  INDEX BY BINARY_INTEGER;
2655 
2656     l_prevtaxsourcesbk_tbl          prevtaxsources_tbl_type;
2657 
2658     rev_trx_lines_tbl               zx_trx_lines_tbl_type;
2659     rev_trx_hdr_rec                 line_params_rec_type;
2660 
2661   BEGIN
2662 
2663     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2664       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax','Begin(+)');
2665     END IF;
2666 
2667     --Print Input Variables
2668     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2669          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2670               'p_init_msg_list :'||p_init_msg_list);
2671          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2672               'p_source_trx_id :'||p_source_trx_id);
2673          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2674               'p_source_trx_name :'||p_source_trx_name);
2675          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2676               'p_source_table :'||p_source_table);
2677     END IF;
2678 
2679     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2680 
2681     -- validate the source trx id
2682     OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
2683     FETCH l_trxcontracts_csr INTO l_rev_trx_type_id, l_khr_id, l_legal_entity_id, l_trx_date;
2684     IF l_trxcontracts_csr%NOTFOUND THEN
2685        -- source trx id is invalid
2686        OKC_API.set_message( p_app_name      => 'OKC',
2687                             p_msg_name      => G_INVALID_VALUE,
2688                             p_token1        => G_COL_NAME_TOKEN,
2689                             p_token1_value  => 'SOURCE_TRX_ID');
2690        RAISE OKL_API.G_EXCEPTION_ERROR;
2691     END IF;
2692     CLOSE l_trxcontracts_csr;
2693 
2694     -- Logic starts
2695     i := 1;
2696         l_newtaxsourcesrev_tbl.DELETE;
2697         l_tax_src_tbl.DELETE;
2698 
2699     OPEN l_prevtaxsourcesbk_csr(cp_khr_id  => l_khr_id);
2700         LOOP
2701               l_prevtaxsourcesbk_tbl.delete;
2702               FETCH l_prevtaxsourcesbk_csr BULK COLLECT INTO l_prevtaxsourcesbk_tbl LIMIT l_fetch_size;
2703               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2704                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2705                                 'l_prevtaxsourcesbk_tbl.COUNT '||l_prevtaxsourcesbk_tbl.COUNT );
2706           END IF;
2707 
2708           IF l_prevtaxsourcesbk_tbl.COUNT > 0 THEN
2709           -- Create new tax sources for 'Reverse' transaction
2710               -- Number of new tax sources transactions is same as the number of
2711           -- previous Booking tax sources. Pick the previous tax sources for
2712           -- 'Booking' and create them again as new tax sources for trx type
2713           -- 'Reverse'.  Contract can be reversed only  if no other transaction
2714           -- has happned on the contract, after Booking. Hence contract structure
2715           -- remains the same between contract booking and contract reversal.
2716           -- Hence we can safely Pick the previous tax sources for 'Booking' and
2717           -- create them again as new tax sources for trx type 'Reverse'.
2718 
2719             l_reverse := TRUE; -- Check if the tax is created for the contract
2720 
2721             FOR k IN l_prevtaxsourcesbk_tbl.FIRST..l_prevtaxsourcesbk_tbl.LAST LOOP
2722               IF i = 1 THEN
2723                 l_org_id := l_prevtaxsourcesbk_tbl(k).org_id;
2724                 l_trx_level_type := l_prevtaxsourcesbk_tbl(k).trx_level_type;
2725               END IF;
2726 
2727               -- Build new table for reversal
2728               l_newtaxsourcesrev_tbl(i).id                               := get_seq_id;
2729               l_newtaxsourcesrev_tbl(i).kle_id                           := l_prevtaxsourcesbk_tbl(k).kle_id;
2730               l_newtaxsourcesrev_tbl(i).khr_id                           := l_prevtaxsourcesbk_tbl(k).khr_id;
2731               l_newtaxsourcesrev_tbl(i).asset_number                     := l_prevtaxsourcesbk_tbl(k).asset_number;
2732               l_newtaxsourcesrev_tbl(i).trx_id                           := p_source_trx_id;
2733               l_newtaxsourcesrev_tbl(i).trx_line_id                      := l_newtaxsourcesrev_tbl(i).id;
2734               l_newtaxsourcesrev_tbl(i).entity_code                      := G_CONTRACTS_ENTITY_CODE;
2735               l_newtaxsourcesrev_tbl(i).event_class_code                 := G_REBOOK_EVENT_CLASS_CODE;
2736               l_newtaxsourcesrev_tbl(i).trx_level_type                   := l_prevtaxsourcesbk_tbl(k).trx_level_type;
2737               l_newtaxsourcesrev_tbl(i).adjusted_doc_entity_code         := l_prevtaxsourcesbk_tbl(k).entity_code;
2738               l_newtaxsourcesrev_tbl(i).adjusted_doc_event_class_code    := l_prevtaxsourcesbk_tbl(k).event_class_code;
2739               l_newtaxsourcesrev_tbl(i).adjusted_doc_trx_id              := l_prevtaxsourcesbk_tbl(k).trx_id;
2740               l_newtaxsourcesrev_tbl(i).adjusted_doc_trx_line_id         := l_prevtaxsourcesbk_tbl(k).trx_line_id;
2741               l_newtaxsourcesrev_tbl(i).adjusted_doc_trx_level_type      := l_prevtaxsourcesbk_tbl(k).trx_level_type;
2742               l_newtaxsourcesrev_tbl(i).adjusted_doc_number              := null;
2743               l_newtaxsourcesrev_tbl(i).adjusted_doc_date                := null;
2744               l_newtaxsourcesrev_tbl(i).tax_call_type_code               := G_UPFRONT_TAX;
2745               l_newtaxsourcesrev_tbl(i).sty_id                           := l_prevtaxsourcesbk_tbl(k).sty_id;
2746               l_newtaxsourcesrev_tbl(i).trx_business_category            := l_prevtaxsourcesbk_tbl(k).trx_business_category;
2747               l_newtaxsourcesrev_tbl(i).tax_line_status_code             := G_ACTIVE_STATUS;
2748               l_newtaxsourcesrev_tbl(i).sel_id                           := l_prevtaxsourcesbk_tbl(k).sel_id;
2749               l_newtaxsourcesrev_tbl(i).reported_yn                      := l_prevtaxsourcesbk_tbl(k).reported_yn;
2750                           l_newtaxsourcesrev_tbl(i).program_id                       := null;
2751                           l_newtaxsourcesrev_tbl(i).request_id                       := null;
2752                           l_newtaxsourcesrev_tbl(i).program_application_id           := null;
2753                           l_newtaxsourcesrev_tbl(i).program_update_date              := null;
2754                           l_newtaxsourcesrev_tbl(i).attribute_category               := null;
2755 
2756                       l_newtaxsourcesrev_tbl(i).attribute1                    := null;
2757                           l_newtaxsourcesrev_tbl(i).attribute2                    := null;
2758                           l_newtaxsourcesrev_tbl(i).attribute3                    := null;
2759                           l_newtaxsourcesrev_tbl(i).attribute4                    := null;
2760                           l_newtaxsourcesrev_tbl(i).attribute5                    := null;
2761                           l_newtaxsourcesrev_tbl(i).attribute6                    := null;
2762                           l_newtaxsourcesrev_tbl(i).attribute7                    := null;
2763                           l_newtaxsourcesrev_tbl(i).attribute8                    := null;
2764                           l_newtaxsourcesrev_tbl(i).attribute9                    := null;
2765                           l_newtaxsourcesrev_tbl(i).attribute10                   := null;
2766                           l_newtaxsourcesrev_tbl(i).attribute11                   := null;
2767                           l_newtaxsourcesrev_tbl(i).attribute12                   := null;
2768                           l_newtaxsourcesrev_tbl(i).attribute13                   := null;
2769                           l_newtaxsourcesrev_tbl(i).attribute14                   := null;
2770                           l_newtaxsourcesrev_tbl(i).attribute15                   := null;
2771                           l_newtaxsourcesrev_tbl(i).created_by                    := G_USER_ID;
2772                           l_newtaxsourcesrev_tbl(i).creation_date                 := SYSDATE;
2773                           l_newtaxsourcesrev_tbl(i).last_updated_by               := G_USER_ID;
2774                           l_newtaxsourcesrev_tbl(i).last_update_date              := SYSDATE;
2775                           l_newtaxsourcesrev_tbl(i).last_update_login             := G_LOGIN_ID;
2776                           l_newtaxsourcesrev_tbl(i).object_version_number         := null;
2777 
2778               l_newtaxsourcesrev_tbl(i).line_name                 := l_prevtaxsourcesbk_tbl(k).line_name;
2779               l_newtaxsourcesrev_tbl(i).application_id            := l_prevtaxsourcesbk_tbl(k).application_id;
2780               l_newtaxsourcesrev_tbl(i).tax_reporting_flag        := l_prevtaxsourcesbk_tbl(k).tax_reporting_flag;
2781               l_newtaxsourcesrev_tbl(i).default_taxation_country  := l_prevtaxsourcesbk_tbl(k).default_taxation_country;
2782               l_newtaxsourcesrev_tbl(i).product_category          := l_prevtaxsourcesbk_tbl(k).product_category;
2783               l_newtaxsourcesrev_tbl(i).user_defined_fisc_class   := l_prevtaxsourcesbk_tbl(k).user_defined_fisc_class;
2784               l_newtaxsourcesrev_tbl(i).line_intended_use         := l_prevtaxsourcesbk_tbl(k).line_intended_use;
2785               l_newtaxsourcesrev_tbl(i).tax_classification_code   := l_prevtaxsourcesbk_tbl(k).tax_classification_code;
2786               l_newtaxsourcesrev_tbl(i).inventory_item_id         := l_prevtaxsourcesbk_tbl(k).inventory_item_id;
2787               l_newtaxsourcesrev_tbl(i).bill_to_cust_acct_id      := l_prevtaxsourcesbk_tbl(k).bill_to_cust_acct_id;
2788               l_newtaxsourcesrev_tbl(i).org_id                    := l_prevtaxsourcesbk_tbl(k).org_id;
2789               l_newtaxsourcesrev_tbl(i).legal_entity_id           := l_prevtaxsourcesbk_tbl(k).legal_entity_id;
2790               l_newtaxsourcesrev_tbl(i).line_amt                  := -l_prevtaxsourcesbk_tbl(k).line_amt;
2791               l_newtaxsourcesrev_tbl(i).assessable_value          := -l_prevtaxsourcesbk_tbl(k).assessable_value;
2792 
2793               l_newtaxsourcesrev_tbl(i).total_tax                 := null;  -- this col will be populated after reverse doc API is called
2794               l_newtaxsourcesrev_tbl(i).trx_date                  := l_trx_date;
2795               l_newtaxsourcesrev_tbl(i).try_id                    := l_rev_trx_type_id;
2796 
2797               l_newtaxsourcesrev_tbl(i).product_type                    := l_prevtaxsourcesbk_tbl(k).product_type;
2798               l_newtaxsourcesrev_tbl(i).product_fisc_classification     := l_prevtaxsourcesbk_tbl(k).product_fisc_classification;
2799               l_newtaxsourcesrev_tbl(i).provnl_tax_determination_date   := null;
2800               l_newtaxsourcesrev_tbl(i).ship_to_location_id             := l_prevtaxsourcesbk_tbl(k).ship_to_location_id;
2801               l_newtaxsourcesrev_tbl(i).ship_to_party_site_id           := l_prevtaxsourcesbk_tbl(k).ship_to_party_site_id;
2802               l_newtaxsourcesrev_tbl(i).ship_to_party_id                := l_prevtaxsourcesbk_tbl(k).ship_to_party_id;
2803               l_newtaxsourcesrev_tbl(i).bill_to_party_site_id           := l_prevtaxsourcesbk_tbl(k).bill_to_party_site_id;
2804               l_newtaxsourcesrev_tbl(i).bill_to_location_id             := l_prevtaxsourcesbk_tbl(k).bill_to_location_id;
2805               l_newtaxsourcesrev_tbl(i).bill_to_party_id                := l_prevtaxsourcesbk_tbl(k).bill_to_party_id;
2806               l_newtaxsourcesrev_tbl(i).ship_to_cust_acct_site_use_id   := l_prevtaxsourcesbk_tbl(k).ship_to_cust_acct_site_use_id;
2807               l_newtaxsourcesrev_tbl(i).bill_to_cust_acct_site_use_id   := l_prevtaxsourcesbk_tbl(k).bill_to_cust_acct_site_use_id;
2808               l_newtaxsourcesrev_tbl(i).trx_currency_code               := l_prevtaxsourcesbk_tbl(k).trx_currency_code;
2809               l_newtaxsourcesrev_tbl(i).currency_conversion_type        := l_prevtaxsourcesbk_tbl(k).currency_conversion_type;
2810               l_newtaxsourcesrev_tbl(i).currency_conversion_rate        := l_prevtaxsourcesbk_tbl(k).currency_conversion_rate;
2811               l_newtaxsourcesrev_tbl(i).currency_conversion_date        := l_prevtaxsourcesbk_tbl(k).currency_conversion_date;
2812 
2813               -- Store the prev booking tax source IDs in a table. This table will be used inactivate the Booking sources
2814               l_tax_src_tbl(i) :=  l_prevtaxsourcesbk_tbl(k).id;
2815 
2816               -- Populate the ZX reverse transaction lines table for tax call
2817               rev_trx_lines_tbl(i).internal_organization_id := l_org_id;
2818               rev_trx_lines_tbl(i).reversing_appln_id := G_OKL_APPLICATION_ID;
2819               rev_trx_lines_tbl(i).reversing_entity_code := G_CONTRACTS_ENTITY_CODE;
2820               rev_trx_lines_tbl(i).reversing_evnt_cls_code := G_REBOOK_EVENT_CLASS_CODE;
2821               rev_trx_lines_tbl(i).reversing_trx_id := p_source_trx_id;
2822               rev_trx_lines_tbl(i).reversing_trx_level_type := l_trx_level_type;
2823               rev_trx_lines_tbl(i).reversing_trx_line_id := l_newtaxsourcesrev_tbl(i).id;
2824 
2825               rev_trx_lines_tbl(i).reversed_appln_id := G_OKL_APPLICATION_ID;
2826               rev_trx_lines_tbl(i).reversed_entity_code := G_CONTRACTS_ENTITY_CODE;
2827               rev_trx_lines_tbl(i).reversed_evnt_cls_code:= G_BOOKING_EVENT_CLASS_CODE;
2828               rev_trx_lines_tbl(i).reversed_trx_id := l_newtaxsourcesrev_tbl(i).adjusted_doc_trx_id;
2829               rev_trx_lines_tbl(i).reversed_trx_level_type := l_trx_level_type;
2830               rev_trx_lines_tbl(i).reversed_trx_line_id := l_newtaxsourcesrev_tbl(i).adjusted_doc_trx_line_id;
2831 
2832                   i := i + 1;
2833             END LOOP;
2834           END IF;
2835           EXIT WHEN l_prevtaxsourcesbk_csr%NOTFOUND;
2836     END LOOP;
2837     CLOSE l_prevtaxsourcesbk_csr;
2838 
2839     -- Inactivate the previous ACTIVE tax lines - begin
2840     -- Inactivate previous Booking tax sources
2841         -- No Change needed for previous booking tax lines in eBTax
2842     IF l_tax_src_tbl.COUNT > 0 THEN
2843       BEGIN
2844         FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
2845           UPDATE okl_tax_sources SET tax_line_status_code = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
2846       EXCEPTION
2847         WHEN OTHERS THEN
2848           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
2849                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
2850                                                                 OKL_API.set_message(
2851                                                                      p_app_name      => 'OKL',
2852                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
2853                                      p_token1        => 'TABLE_NAME',
2854                                      p_token1_value  => 'OKL_TAX_SOURCES',
2855                                      p_token2        => 'ERROR_CODE',
2856                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
2857                                                                          p_token3        => 'ITERATION',
2858                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
2859                         END LOOP;
2860                         RAISE OKL_API.G_EXCEPTION_ERROR;
2861                   END IF;
2862       END;
2863     END IF;
2864 
2865     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2866                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2867                         'Inactivated the previous active upfront tax lines ' );
2868     END IF;
2869     -- Inactivate the previous ACTIVE tax lines - end
2870 
2871     -- bulk insert into okl_tax_sources -- start
2872     BEGIN
2873       IF l_newtaxsourcesrev_tbl.COUNT > 0 THEN
2874         FORALL indx in l_newtaxsourcesrev_tbl.FIRST..l_newtaxsourcesrev_tbl.LAST
2875           -- SAVE EXCEPTIONS
2876           INSERT INTO okl_tax_sources VALUES l_newtaxsourcesrev_tbl(indx);
2877       END IF;
2878     EXCEPTION
2879       WHEN OTHERS THEN
2880         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
2881                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
2882                         OKL_API.set_message(p_app_name      => 'OKL',
2883                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
2884                                 p_token1        => 'TABLE_NAME',
2885                                 p_token1_value  => 'OKL_TAX_SOURCES',
2886                                 p_token2        => 'ERROR_CODE',
2887                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
2888                                                                 p_token3        => 'ITERATION',
2889                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
2890           END LOOP;
2891                   RAISE OKL_API.G_EXCEPTION_ERROR;
2892                 END IF;
2893     END;
2894     -- bulk insert into okl_tax_sources -- end
2895 
2896     -- At this point, the latest active upfront tax sources are the ones
2897         -- corresponding to 'Reverse' transaction. If user queries the booking tax
2898         -- (contract booking page) at this point, UI will display the tax corresponding
2899         -- to 'Reverse' trx type. At any point, there can be only 1 set of active
2900     -- upfront tax lines for a contract. Hence the old Booking tax sources are
2901     -- inactivated and new tax sources are created for 'Reverse' trx type.
2902     -- No changes are needed to the tax lines that exist in eBTax for the 'Booking'
2903     -- event
2904 
2905         -- Populate ZX reverse transaction tables
2906     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2907          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2908               'Calling OKL_TAX_INTERFACE_PVT.reverse_document');
2909     END IF;
2910 
2911     IF (l_reverse) THEN  -- Process Reversal only if the tax is created for the contract
2912 
2913       rev_trx_hdr_rec.internal_organization_id := l_org_id;
2914       rev_trx_hdr_rec.application_id           := G_OKL_APPLICATION_ID;
2915       rev_trx_hdr_rec.trx_id                   := p_source_trx_id;
2916       rev_trx_hdr_rec.legal_entity_id          := l_legal_entity_id;
2917       rev_trx_hdr_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
2918       rev_trx_hdr_rec.event_class_code         := G_REBOOK_EVENT_CLASS_CODE;
2919 
2920       OKL_TAX_INTERFACE_PVT.reverse_document (
2921                               p_api_version       => p_api_version,
2922                               p_init_msg_list     => p_init_msg_list,
2923                               x_return_status     => l_return_status,
2924                               x_msg_count         => x_msg_count,
2925                               x_msg_data          => x_msg_data,
2926                               p_rev_trx_hdr_rec   => rev_trx_hdr_rec,
2927                               p_rev_trx_lines_tbl => rev_trx_lines_tbl);
2928 
2929       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2930         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2931               'Return Status' || l_return_status);
2932       END IF;
2933 
2934       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2935         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2936       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2937         RAISE OKL_API.G_EXCEPTION_ERROR;
2938       END IF;
2939 
2940       -- Get the total tax amount corresponding to 'Reverse' transaction from
2941       -- zx_lines and update total_tax on okl_tax_sources
2942       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2943         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2944           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
2945       END IF;
2946 
2947       update_tax_sources_total(p_api_version    => p_api_version,
2948                                p_init_msg_list  => p_init_msg_list,
2949                                x_return_status  => l_return_status,
2950                                x_msg_count      => x_msg_count,
2951                                x_msg_data       => x_msg_data,
2952                                p_source_trx_id  => p_source_trx_id);
2953 
2954       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2955         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax.',
2956           'Return Status' || l_return_status);
2957       END IF;
2958 
2959       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2960         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2961       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2962         RAISE OKL_API.G_EXCEPTION_ERROR;
2963       END IF;
2964 
2965     END IF;
2966 
2967     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2968        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax ','End(-)');
2969     END IF;
2970 
2971   EXCEPTION
2972     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2973          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2974                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax ',
2975                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
2976          END IF;
2977 
2978          IF l_prevtaxsourcesbk_csr%ISOPEN THEN
2979             CLOSE l_prevtaxsourcesbk_csr;
2980          END IF;
2981 
2982          IF l_trxcontracts_csr%ISOPEN THEN
2983             CLOSE l_trxcontracts_csr;
2984          END IF;
2985 
2986          x_return_status := OKL_API.G_RET_STS_ERROR;
2987     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2988          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
2989                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax ',
2990                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
2991          END IF;
2992 
2993          IF l_prevtaxsourcesbk_csr%ISOPEN THEN
2994             CLOSE l_prevtaxsourcesbk_csr;
2995          END IF;
2996 
2997          IF l_trxcontracts_csr%ISOPEN THEN
2998             CLOSE l_trxcontracts_csr;
2999          END IF;
3000 
3001          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3002 
3003     WHEN OTHERS THEN
3004          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3005             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_contract_reversal_tax ',
3006                   'EXCEPTION :'||sqlerrm);
3007          END IF;
3008 
3009          IF l_prevtaxsourcesbk_csr%ISOPEN THEN
3010             CLOSE l_prevtaxsourcesbk_csr;
3011          END IF;
3012 
3013          IF l_trxcontracts_csr%ISOPEN THEN
3014             CLOSE l_trxcontracts_csr;
3015          END IF;
3016 
3017          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3018          -- unexpected error
3019          OKL_API.set_message(p_app_name      => g_app_name,
3020                          p_msg_name      => g_unexpected_error,
3021                          p_token1        => g_sqlcode_token,
3022                          p_token1_value  => sqlcode,
3023                          p_token2        => g_sqlerrm_token,
3024                          p_token2_value  => sqlerrm);
3025 
3026   END process_contract_reversal_tax;
3027 
3028 /*========================================================================
3029  | PUBLIC PROCEDURE get_location_party_ids
3030  |
3031  | DESCRIPTION
3032  |    This procedure derives the Location and Party Identifiers from the
3033  |    customer account and financial asset
3034  |
3035  | CALLED FROM
3036  |    Other procedures in this API
3037  |
3038  | CALLS PROCEDURES/FUNCTIONS
3039  |
3040  |
3041  | PARAMETERS
3042  |  Input Parameters
3043  |      p_cust_acct_id                          -- Customer a/c identifier
3044  |      p_fin_asset_id                          -- Financial Asset identifier
3045  |      p_khr_id                    -- Contract identifier
3046  |
3047  |      Either p_khr_id or p_fin_asset_id is mandatory
3048  |
3049  |  Output Parameters
3050  |   x_ship_to_site_use_id              -- Ship to site use identifier
3051  |   x_bill_to_party_site_id        -- Bill to party site identifier
3052  |   x_bill_to_location_id          -- Bill to location identifier
3053  |   x_bill_to_party_id             -- Bill to party identifier
3054  |   x_ship_to_party_site_id        -- Ship to party site identifier
3055  |   x_ship_to_location_id          -- Ship to location identifier
3056  |   x_ship_to_party_id             -- Ship to party identifier
3057  |
3058  | KNOWN ISSUES
3059  |
3060  | NOTES
3061  |
3062  |
3063  | MODIFICATION HISTORY
3064  | Date                  Author            Description of Changes
3065  | 08-APR-05            SECHAWLA           Created
3066  | 22-Feb-07            RRAVIKIR           Retrieve the following values as out
3067  |                                         params - x_bill_to_party_site_id
3068  |                                                  x_bill_to_location_id
3069  |                                                  x_bill_to_party_id
3070  |                                                  x_ship_to_party_site_id
3071  |                                                  x_ship_to_location_id
3072  |                                                  x_ship_to_party_id
3073  | 06-nov-2007          sechawla           6602476  Modified l_get_ship_to_ids to
3074  |                                                  pick the first supplier invoice incase of multiple invoices
3075  |                                                  Modified the inner query of l_get_ship_to_ids
3076  *=======================================================================*/
3077   PROCEDURE get_location_party_ids(
3078         p_api_version                   IN  NUMBER,
3079     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3080     x_return_status                     OUT NOCOPY VARCHAR2,
3081     x_msg_count                         OUT NOCOPY NUMBER,
3082     x_msg_data                          OUT NOCOPY VARCHAR2,
3083     p_cust_acct_id                  IN  NUMBER,
3084     p_fin_asset_id                  IN  NUMBER,
3085     p_khr_id                        IN  NUMBER,
3086     x_bill_to_party_site_id         OUT NOCOPY NUMBER,
3087     x_bill_to_location_id           OUT NOCOPY NUMBER,
3088     x_bill_to_party_id              OUT NOCOPY NUMBER,
3089     x_bill_to_site_use_id                       OUT NOCOPY NUMBER,
3090     x_ship_to_party_site_id         OUT NOCOPY NUMBER,
3091     x_ship_to_location_id           OUT NOCOPY NUMBER,
3092     x_ship_to_party_id              OUT NOCOPY NUMBER,
3093     x_ship_to_site_use_id                       OUT NOCOPY NUMBER) IS
3094 
3095     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3096 
3097     --Cursor to get the 'SHIP_TO' identifiers corresponding to the install_location_id of the asset
3098     CURSOR l_get_ship_to_ids(cp_site_use_id IN NUMBER) IS -- asaanka changed for bug # 6612165
3099     SELECT
3100            b.site_use_id,
3101            c.party_site_id,
3102            c.party_id,
3103            c.location_id
3104     FROM   hz_cust_acct_sites_all a,
3105            hz_cust_site_uses_all  b,
3106            hz_party_sites      c
3107     WHERE
3108            a.cust_acct_site_id = b.cust_acct_site_id
3109     AND    b.site_use_code     = 'SHIP_TO'
3110     AND    b.site_use_id       =  cp_site_use_id -- asaanka changed for bug # 6612165
3111     AND    a.party_site_id     = c.party_site_id
3112     AND    a.cust_account_id   = p_cust_acct_id;
3113 
3114     -- Cursor to get the 'BILL_TO' identifiers of the asset
3115     CURSOR l_get_line_bill_to_ids IS
3116     SELECT
3117            c.party_site_id,
3118            c.party_id,
3119            c.location_id,
3120            b.site_use_id
3121     FROM   hz_cust_acct_sites_all a,
3122            hz_cust_site_uses_all  b,
3123            hz_party_sites      c
3124     WHERE
3125            a.cust_acct_site_id = b.cust_acct_site_id
3126     AND    b.site_use_code     = 'BILL_TO'
3127     AND    b.site_use_id       = (SELECT DECODE(okcl.bill_to_site_use_id, null, okch.bill_to_site_use_id, okcl.bill_to_site_use_id)
3128                                   FROM okc_k_headers_all_b okch, okc_k_lines_v okcl
3129                                   WHERE okcl.dnz_chr_id = okch.id
3130                                   AND okcl.id = p_fin_asset_id)
3131     AND    a.party_site_id     = c.party_site_id
3132     AND    a.cust_account_id   = p_cust_acct_id;
3133 
3134     -- Cursor to get the 'BILL_TO' identifiers of the contract
3135     CURSOR l_get_chr_bill_to_ids IS
3136     SELECT
3137            c.party_site_id,
3138            c.party_id,
3139            c.location_id,
3140            b.site_use_id
3141     FROM   hz_cust_acct_sites_all a,
3142            hz_cust_site_uses_all  b,
3143            hz_party_sites      c
3144     WHERE
3145            a.cust_acct_site_id = b.cust_acct_site_id
3146     AND    b.site_use_code     = 'BILL_TO'
3147     AND    b.site_use_id       = (SELECT bill_to_site_use_id
3148                                   FROM okc_k_headers_all_b
3149                                   WHERE id = p_khr_id)
3150     AND    a.party_site_id     = c.party_site_id
3151     AND    a.cust_account_id   = p_cust_acct_id;
3152 
3153     l_bill_to_party_site_id        NUMBER;
3154     l_bill_to_location_id          NUMBER;
3155     l_bill_to_party_id             NUMBER;
3156     l_bill_to_site_use_id                  NUMBER;
3157     l_ship_to_party_site_id        NUMBER;
3158     l_ship_to_location_id          NUMBER;
3159     l_ship_to_party_id             NUMBER;
3160     l_ship_to_site_use_id                  NUMBER;
3161 
3162   BEGIN
3163 
3164     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3165         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids','Begin(+)');
3166     END IF;
3167 
3168     --Print Input Variables
3169     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3170          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3171               'p_init_msg_list :'||p_init_msg_list);
3172          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3173               'p_cust_acct_id :'||p_cust_acct_id);
3174          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3175               'p_fin_asset_id :'||p_fin_asset_id);
3176          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3177               'p_khr_id :'||p_khr_id);
3178     END IF;
3179 
3180     -- Required Values
3181     IF p_fin_asset_id IS NULL AND p_khr_id IS NULL THEN
3182        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
3183                             p_token1        => G_COL_NAME_TOKEN,
3184                             p_token1_value  => 'CONTRACT_ID');
3185        RAISE OKL_API.G_EXCEPTION_ERROR;
3186     END IF;
3187     IF (p_fin_asset_id IS NOT NULL) THEN
3188           get_ship_to_site_use_id(
3189               p_api_version                  => p_api_version,
3190               p_init_msg_list                => OKC_API.G_FALSE,
3191               x_return_status                => x_return_status,
3192               x_msg_count                    => x_msg_count,
3193               x_msg_data                     => x_msg_data,
3194               p_cust_acct_id                 => p_cust_acct_id,
3195               p_fin_asset_id                 => p_fin_asset_id,
3196               x_ship_to_site_use_id          => l_ship_to_site_use_id);
3197 
3198                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN  -- will never be setting this to unexpecetd inside get_tbc ?
3199                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3200                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3201                     RAISE OKL_API.G_EXCEPTION_ERROR;
3202                END IF;
3203         -- Get the 'SHIP_TO' indetifiers of the asset
3204           IF l_ship_to_site_use_id IS NOT NULL THEN
3205               OPEN  l_get_ship_to_ids(l_ship_to_site_use_id);
3206               FETCH l_get_ship_to_ids INTO l_ship_to_site_use_id, l_ship_to_party_site_id,
3207                                            l_ship_to_party_id, l_ship_to_location_id;  -- these values may be null
3208               CLOSE l_get_ship_to_ids;
3209           END IF;
3210     END IF;
3211 
3212     -- Get the 'BILL_TO' indetifiers of the contract
3213     IF (p_fin_asset_id IS NULL) THEN
3214       OPEN  l_get_chr_bill_to_ids;
3215       FETCH l_get_chr_bill_to_ids INTO l_bill_to_party_site_id, l_bill_to_party_id,
3216                                        l_bill_to_location_id, l_bill_to_site_use_id;
3217       CLOSE l_get_chr_bill_to_ids;
3218     ELSE    -- Get the 'BILL_TO' indetifiers of the asset
3219       OPEN  l_get_line_bill_to_ids;
3220       FETCH l_get_line_bill_to_ids INTO l_bill_to_party_site_id, l_bill_to_party_id,
3221                                         l_bill_to_location_id, l_bill_to_site_use_id;
3222       CLOSE l_get_line_bill_to_ids;
3223     END IF;
3224 
3225     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3226           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3227               'l_ship_to_party_site_id '||l_ship_to_party_site_id);
3228           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3229               'l_ship_to_location_id '||l_ship_to_location_id);
3230           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3231               'l_ship_to_party_id '||l_ship_to_party_id);
3232           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3233               'l_ship_to_site_use_id '||l_ship_to_site_use_id);
3234 
3235           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3236               'l_bill_to_party_site_id '||l_bill_to_party_site_id);
3237           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3238               'l_bill_to_location_id '||l_bill_to_location_id);
3239           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3240               'l_bill_to_party_id '||l_bill_to_party_id);
3241           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids.',
3242               'l_bill_to_site_use_id '||l_bill_to_site_use_id);
3243     END IF;
3244 
3245     x_ship_to_site_use_id          := l_ship_to_site_use_id;
3246     x_ship_to_party_site_id        := l_ship_to_party_site_id;
3247     x_ship_to_location_id          := l_ship_to_location_id;
3248     x_ship_to_party_id             := l_ship_to_party_id;
3249     x_bill_to_party_site_id        := l_bill_to_party_site_id;
3250     x_bill_to_location_id          := l_bill_to_location_id;
3251     x_bill_to_party_id             := l_bill_to_party_id;
3252     x_bill_to_site_use_id          := l_bill_to_site_use_id;
3253 
3254     x_return_status                :=  OKL_API.G_RET_STS_SUCCESS;
3255 
3256     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3257        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids ','End(-)');
3258     END IF;
3259 
3260   EXCEPTION
3261     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3262          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3263                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids ',
3264                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
3265          END IF;
3266 
3267              IF l_get_ship_to_ids%ISOPEN THEN
3268                 CLOSE l_get_ship_to_ids;
3269              END IF;
3270 
3271              IF l_get_line_bill_to_ids%ISOPEN THEN
3272                 CLOSE l_get_line_bill_to_ids;
3273              END IF;
3274 
3275              IF l_get_chr_bill_to_ids%ISOPEN THEN
3276                 CLOSE l_get_chr_bill_to_ids;
3277              END IF;
3278 
3279          x_return_status := OKL_API.G_RET_STS_ERROR;
3280     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3281          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3282                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids ',
3283                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
3284          END IF;
3285 
3286              IF l_get_ship_to_ids%ISOPEN THEN
3287                 CLOSE l_get_ship_to_ids;
3288              END IF;
3289 
3290              IF l_get_line_bill_to_ids%ISOPEN THEN
3291                 CLOSE l_get_line_bill_to_ids;
3292              END IF;
3293 
3294              IF l_get_chr_bill_to_ids%ISOPEN THEN
3295                 CLOSE l_get_chr_bill_to_ids;
3296              END IF;
3297 
3298          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3299 
3300     WHEN OTHERS THEN
3301          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3302             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_location_party_ids ',
3303                   'EXCEPTION :'||sqlerrm);
3304          END IF;
3305 
3306              IF l_get_ship_to_ids%ISOPEN THEN
3307                 CLOSE l_get_ship_to_ids;
3308              END IF;
3309 
3310              IF l_get_line_bill_to_ids%ISOPEN THEN
3311                 CLOSE l_get_line_bill_to_ids;
3312              END IF;
3313 
3314              IF l_get_chr_bill_to_ids%ISOPEN THEN
3315                 CLOSE l_get_chr_bill_to_ids;
3316              END IF;
3317 
3318          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3319          -- unexpected error
3320          OKL_API.set_message(p_app_name      => g_app_name,
3321                          p_msg_name      => g_unexpected_error,
3322                          p_token1        => g_sqlcode_token,
3323                          p_token1_value  => sqlcode,
3324                          p_token2        => g_sqlerrm_token,
3325                          p_token2_value  => sqlerrm);
3326 
3327   END get_location_party_ids;
3328 
3329 /*========================================================================
3330  | PRIVATE PROCEDURE get_tbc_code
3331  |
3332  | DESCRIPTION
3333  |    This retrieves TBC (Transaction Business Category) for tax call, based upon
3334  |    the contract and line level tax determinats
3335  |
3336  | CALLED FROM
3337  |
3338  |
3339  | CALLS PROCEDURES/FUNCTIONS
3340  |
3341  |
3342  | PARAMETERS
3343  |   Input Parameters
3344  |      p_sty_id                                   -- Stream Type ID
3345  |      p_try_id                                   -- Transaction Type ID
3346  |      p_book_class_code              -- Book class code
3347  |      p_tax_country_code             -- Tax country code
3348  |  Output Parameters
3349  |      x_tbc_code                                 -- TBC Code
3350  |
3351  | KNOWN ISSUES
3352  |
3353  | NOTES
3354  |
3355  |
3356  | MODIFICATION HISTORY
3357  | Date                  Author    Description of Changes
3358  | 17-APR-07            RRAVIKIR   Created
3359  |
3360  *=======================================================================*/
3361   PROCEDURE get_tbc_code(
3362     p_api_version            IN  NUMBER,
3363     p_init_msg_list          IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
3364     x_return_status          OUT NOCOPY VARCHAR2,
3365     x_msg_count              OUT NOCOPY NUMBER,
3366     x_msg_data               OUT NOCOPY VARCHAR2,
3367     p_try_id                             IN  NUMBER,
3368     p_sty_id                 IN  NUMBER,
3369     p_book_class_code        IN VARCHAR2,
3370     p_tax_country_code       IN VARCHAR2,
3371     x_tbc_code               OUT NOCOPY VARCHAR2) IS
3372 
3373     -- Get all the TBC definitions applicable to a transaction type
3374     CURSOR  l_tbcdef_csr(cp_try_id IN NUMBER) IS
3375     SELECT      result_code tbc_code,
3376             try_id,
3377             sty_id ,
3378             book_class_code,
3379             tax_country_code,
3380                         'Y' select_yn      -- All TBCs returned by this cursor are selected initially
3381     FROM    okl_tax_attr_definitions
3382     WHERE   (try_id = cp_try_id OR try_id IS NULL)
3383     AND     RESULT_TYPE_CODE = 'TBC_CODE'
3384     AND     NVL(expire_flag, 'N') = 'N';
3385 
3386     TYPE tbcdefs_tbl_type IS TABLE OF l_tbcdef_csr%ROWTYPE INDEX BY BINARY_INTEGER;
3387     TYPE tbcdefs_selected_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3388     TYPE det_null_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3389 
3390     l_tbcdefs_tbl                       tbcdefs_tbl_type;
3391     l_det_null_tbl                      det_null_tbl_type;
3392     l_tbcdefs_selected_tbl      tbcdefs_selected_tbl_type;
3393 
3394     i                                           NUMBER;
3395     j                                           NUMBER;
3396     k                                           NUMBER;
3397     tbc_set_count                       NUMBER;
3398     l_tbc_code okl_tax_attr_definitions.RESULT_CODE%TYPE;
3399    -- l_tbc_code                          VARCHAR2(30);
3400     selected_count                      NUMBER;
3401     det_match_cnt                       NUMBER;
3402     l_selected_tbc_pos          NUMBER;
3403 
3404   BEGIN
3405 
3406     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3407       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code','Begin(+)');
3408     END IF;
3409 
3410     --Print Input Variables
3411     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3412       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3413            'p_init_msg_list :'||p_init_msg_list);
3414       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3415            'p_sty_id :'||p_sty_id);
3416       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3417            'p_try_id :'||p_try_id);
3418       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3419            'p_book_class_code :'||p_book_class_code);
3420       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3421            'p_tax_country_code :'||p_tax_country_code);
3422     END IF;
3423 
3424 
3425     OPEN  l_tbcdef_csr(p_try_id);
3426     FETCH l_tbcdef_csr BULK COLLECT INTO l_tbcdefs_tbl;
3427     CLOSE l_tbcdef_csr;
3428 
3429     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3430       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3431       'l_tbcdefs_tbl.COUNT '||l_tbcdefs_tbl.COUNT);
3432     END IF;
3433 
3434     IF l_tbcdefs_tbl.COUNT > 0 THEN                -- MAIN END IF
3435       k := 1;
3436       FOR i IN 1 .. 3 LOOP -- determinant loop
3437         tbc_set_count := 0;
3438 
3439         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3440               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.', 'i '||i);
3441         END IF;
3442 
3443         FOR j IN  l_tbcdefs_tbl.FIRST .. l_tbcdefs_tbl.LAST LOOP
3444               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3445                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3446                    'j '||j||' l_tbcdefs_tbl(j).select_yn '||l_tbcdefs_tbl(j).select_yn );
3447               END IF;
3448 
3449                   IF l_tbcdefs_tbl(j).select_yn = 'Y' THEN
3450             IF i = 1 THEN   -- stream type
3451                           IF p_sty_id IS NULL THEN
3452                                 IF l_tbcdefs_tbl(j).sty_id IS NULL THEN
3453                                    tbc_set_count := tbc_set_count + 1;
3454                                 ELSE
3455                                    l_tbcdefs_tbl(j).select_yn := 'N';
3456                                 END IF;
3457                           ELSE
3458                                 IF l_tbcdefs_tbl(j).sty_id IS NULL OR l_tbcdefs_tbl(j).sty_id = p_sty_id THEN
3459                                   tbc_set_count := tbc_set_count + 1;
3460                                 ELSE
3461                                   l_tbcdefs_tbl(j).select_yn := 'N';
3462                                 END IF;
3463                           END IF
3464      ;
3465                     ELSIF i = 2 THEN -- book class code
3466                       IF p_book_class_code IS NULL THEN
3467                             IF l_tbcdefs_tbl(j).book_class_code IS NULL THEN
3468                                   tbc_set_count := tbc_set_count + 1;
3469                                 ELSE
3470                                   l_tbcdefs_tbl(j).select_yn := 'N';
3471                                 END IF;
3472                           ELSE
3473                                 IF l_tbcdefs_tbl(j).book_class_code IS NULL OR l_tbcdefs_tbl(j).book_class_code = p_book_class_code THEN
3474                                   tbc_set_count := tbc_set_count + 1;
3475                                 ELSE
3476                                   l_tbcdefs_tbl(j).select_yn := 'N';
3477                                 END IF;
3478                           END IF;
3479 
3480                     ELSIF i = 3 THEN -- tax country (last determinant)
3481                       IF p_tax_country_code IS NULL THEN
3482                             IF l_tbcdefs_tbl(j).tax_country_code IS NULL THEN
3483                                   tbc_set_count := tbc_set_count + 1;
3484                   l_tbcdefs_selected_tbl(k) := j;
3485                                 ELSE
3486                                   l_tbcdefs_tbl(j).select_yn := 'N';
3487                                 END IF;
3488                           ELSE
3489                                 IF l_tbcdefs_tbl(j).tax_country_code IS NULL OR l_tbcdefs_tbl(j).tax_country_code = p_tax_country_code THEN
3490                                   tbc_set_count := tbc_set_count + 1;
3491                   l_tbcdefs_selected_tbl(k) := j;
3492                                 ELSE
3493                                   l_tbcdefs_tbl(j).select_yn := 'N';
3494                                 END IF;
3495                           END IF;
3496 
3497               k := k + 1;
3498                         END IF;
3499 
3500                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3501                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3502                          'tbc_set_count '||tbc_set_count);
3503                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3504                          'l_tbcdefs_tbl(j).select_yn '||l_tbcdefs_tbl(j).select_yn);
3505                 END IF;
3506               END IF;
3507         END LOOP;
3508 
3509         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3510                FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3511                   'tbc_set_count '||tbc_set_count);
3512         END IF;
3513 
3514         IF tbc_set_count = 0 THEN
3515               EXIT;
3516         END IF;
3517       END LOOP;  -- determinant loop
3518 
3519       -- At this point l_tbcdefs_tbl has been scanned for all the determinants.
3520       -- select_yn flag in this table is set to 'Y' for TBCs that have either Null
3521       -- determinant value or value matching with the transaction. Table l_tbcdefs_selected_tbl
3522           -- holds those indexes of original table l_tbcdefs_tbl, that have seleted TBCs.
3523           -- At this point this table may contain more than 1 TBCs. If so, we need to further filter
3524           -- out TBCs from this table based upon the priority of the determinants.
3525           -- Following priority order is used :
3526       -- 1.  Transaction Type
3527       -- 2.  Stream Type
3528       -- 3.  Book Class
3529       -- 4.  Tax Country
3530 
3531       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3532             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3533                   'tbc_set_count outside first loop'||tbc_set_count);
3534       END IF;
3535 
3536       IF tbc_set_count = 1 THEN
3537         l_tbc_code := l_tbcdefs_tbl(l_tbcdefs_selected_tbl(1)).tbc_code;
3538       ELSIF tbc_set_count > 1 THEN
3539             -- There can be more than one selected TBCs at this point
3540             -- apply determinant priority logic to select 1 TBC
3541             selected_count := tbc_set_count;
3542 
3543             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3544               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3545                      'l_tbcdefs_selected_tbl.count '||l_tbcdefs_selected_tbl.count );
3546             END IF;
3547 
3548             FOR i IN 1 .. 4 LOOP  -- determinant loop
3549 
3550                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3551                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3552                       'i '||i||' selected_count '||selected_count );
3553               END IF;
3554 
3555                   j := 1;
3556                   det_match_cnt := 0;
3557                   l_det_null_tbl.DELETE;
3558 
3559                   IF selected_count > 1 THEN
3560                     FOR k IN l_tbcdefs_selected_tbl.FIRST .. l_tbcdefs_selected_tbl.LAST LOOP  -- finally selected indexes
3561                           -- At this point all the selecetd TBCs will either have Null determinant
3562               -- value or determinant value matching with the calling transaction
3563                       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3564                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',   'k '||k);
3565                           END IF;
3566 
3567                           IF i = 1 THEN -- transaction type
3568                             IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).try_id IS NULL THEN
3569                                   l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3570                                   j := j + 1;
3571                             ELSE
3572                                   det_match_cnt := det_match_cnt + 1;
3573                                   l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3574                                   -- l_selected_tbc_pos will be used as the index of the selected TBC,
3575                                   -- when only one TBC is left
3576                             END IF;
3577 
3578                             IF k = tbc_set_count THEN  -- last record
3579                                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3580                                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3581                                                 'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3582                                   END IF;
3583 
3584                                   IF det_match_cnt = selected_count THEN --k THEN
3585                                     NULL; -- all records have matching values, do nothing
3586                                   ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3587                                     NULL; -- keep all records selected. Don't exclude yet.
3588                                   ELSIF det_match_cnt = 1 THEN
3589                                     selected_count := 1;
3590                                   ELSE -- more than one but less than total selected  records have matching values
3591                                     FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3592                                           l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3593                                           selected_count := selected_count - 1;
3594                                     END LOOP;
3595                                   END IF;
3596                             END IF;
3597 
3598                           ELSIF i = 2 THEN -- stream type
3599                             IF p_sty_id IS NOT NULL THEN
3600                   -- IF p_sty_id is null then l_tbcdefs_tbl will have more than 1 TBCs with
3601                                   -- only NULL values for sty_id. So no need to filter further, move on to next determinant
3602                                   -- When system is processing a determinant, there will always be more than one selected TBCS
3603                                   -- This is because, at the end of processing each determinant, we check the selected count
3604                                   -- If selected count = 1 then we do not process next determinant and exit
3605                                   IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
3606                                     IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).sty_id IS NULL THEN
3607                                       l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3608                                           j := j + 1;
3609                                     ELSE
3610                                           det_match_cnt := det_match_cnt + 1;
3611                                           l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3612                                           -- l_selected_tbc_pos will be used as the index of the selected TBC,
3613                                           -- when only one TBC is left
3614                                     END IF;
3615                                   END IF;
3616 
3617                                   IF k = tbc_set_count THEN  -- last record
3618                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3619                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3620                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3621                                     END IF;
3622 
3623                                     IF det_match_cnt = selected_count THEN --k THEN
3624                                           NULL; -- all records have matching values, do nothing
3625                                     ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3626                                           NULL; -- keep all records selected. Don't exclude yet.
3627                                     ELSIF det_match_cnt = 1 THEN
3628                                           selected_count := 1;
3629                                     ELSE -- more than one but less than total selected  records have matching values
3630                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3631                                             l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3632                                             selected_count := selected_count - 1;
3633                                           END LOOP;
3634                                 END IF;
3635                                   END IF;
3636                             END IF;
3637 
3638                           ELSIF i = 3 THEN -- book class
3639                             IF p_book_class_code IS NOT NULL THEN
3640                                   -- IF p_book_class_code is null then l_tbcdefs_tbl will have more than 1 TBCs with
3641                                   -- only NULL values for book_class_code. So no need to filter further, move on to next determinant
3642                                   -- When system is processing a determinant, there will always be more than one selected TBCS
3643                                   -- This is because, at the end of processing each determinant, we check the selected count
3644                                   -- If selected count = 1 then we do not process next determinant and exit
3645                                   IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
3646                                     IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).book_class_code IS NULL THEN
3647                                       l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3648                                           j := j + 1;
3649                                     ELSE
3650                                       det_match_cnt := det_match_cnt + 1;
3651                                           l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3652                                           -- l_selected_tbc_pos will be used as the index of the selected TBC,
3653                                           -- when only one TBC is left
3654                                     END IF;
3655                                   END IF;
3656 
3657                                   IF k = tbc_set_count THEN  -- last record
3658                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3659                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3660                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3661                                     END IF;
3662 
3663                                     IF det_match_cnt = selected_count THEN --k THEN
3664                                           NULL; -- all records have matching values, do nothing
3665                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3666                                           NULL; -- keep all records selected. Don't exclude yet.
3667                                     ELSIF det_match_cnt = 1 THEN
3668                                           selected_count := 1;
3669                                     ELSE -- more than one but less than total selected  records have matching values
3670                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3671                                             l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3672                                             selected_count := selected_count - 1;
3673                                           END LOOP;
3674                                     END IF;
3675                                   END IF;
3676                             END IF;
3677 
3678                           ELSIF i = 4 THEN -- tax country
3679                             IF p_tax_country_code IS NOT NULL THEN
3680                                   -- IF p_tax_country_code is null then l_tbcdefs_tbl will have more than 1 TBCs with
3681                                   -- only NULL values for tax_country_code. So no need to filter further, move on to next determinant
3682                                   -- When system is processing a determinant, there will always be more than one selected TBCS
3683                                   -- This is because, at the end of processing each determinant, we check the selected count
3684                                   -- If selected count = 1 then we do not process next determinant and exit
3685                                   IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
3686                                     IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).tax_country_code IS NULL THEN
3687                                       l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3688                                           j := j + 1;
3689                                     ELSE
3690                                       det_match_cnt := det_match_cnt + 1;
3691                                           l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3692                                           -- l_selected_tbc_pos will be used as the index of the selected TBC,
3693                                           -- when only one TBC is left
3694                                     END IF;
3695                                   END IF;
3696 
3697                                   IF k = tbc_set_count THEN  -- last record
3698                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3699                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3700                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3701                                     END IF;
3702 
3703                                     IF det_match_cnt = selected_count THEN --k THEN
3704                                           NULL; -- all records have matching values, do nothing
3705                                     ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3706                                           NULL; -- keep all records selected. Don't exclude yet.
3707                                     ELSIF det_match_cnt = 1 THEN
3708                                           selected_count := 1;
3709                                     ELSE -- more than one but less than total selected  records have matching values
3710                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3711                                             l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3712                                             selected_count := selected_count - 1;
3713                                           END LOOP;
3714                                     END IF;
3715                                   END IF;
3716                             END IF;
3717                           END IF;
3718                     END LOOP;
3719                   ELSIF selected_count = 1 THEN
3720                     EXIT;
3721                   END IF;
3722             END LOOP; -- determinant loop
3723 
3724             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3725                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3726                                 'selected_count outside 2nd loop '||selected_count);
3727             END IF;
3728 
3729         IF selected_count = 1 THEN
3730                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3731                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3732                                 'l_selected_tbc_pos '||l_selected_tbc_pos);
3733                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3734                                 'l_selected_tbc_pos tbc_code '||l_tbcdefs_tbl(l_selected_tbc_pos).tbc_code);
3735                   END IF;
3736                   l_tbc_code := l_tbcdefs_tbl(l_selected_tbc_pos).tbc_code;
3737                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3738                      FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3739                                 'l_tbc_code '||l_tbc_code);
3740                   end if;
3741             ELSIF selected_count > 1 THEN  -- still more than one TBCs are selected
3742                   l_tbc_code := NULL;
3743             END IF;
3744 
3745       ELSIF tbc_set_count = 0 THEN
3746             l_tbc_code := NULL;
3747       END IF;
3748 
3749     END IF;  -- MAIN END IF ends
3750 
3751     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3752           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3753                   'l_tbc_code '||l_tbc_code);
3754     END IF;
3755 
3756     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3757 
3758     -- TBC can be NULL
3759     x_tbc_code := l_tbc_code;
3760 
3761   EXCEPTION
3762     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3763 
3764       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3765         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code ',
3766                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
3767       END IF;
3768 
3769       IF l_tbcdef_csr%ISOPEN THEN
3770         CLOSE l_tbcdef_csr;
3771       END IF;
3772 
3773       x_return_status := OKL_API.G_RET_STS_ERROR;
3774     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3775 
3776       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3777         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code ',
3778                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
3779       END IF;
3780 
3781       IF l_tbcdef_csr%ISOPEN THEN
3782         CLOSE l_tbcdef_csr;
3783       END IF;
3784 
3785       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3786 
3787     WHEN OTHERS THEN
3788       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3789         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code ',
3790                   'EXCEPTION :'||sqlerrm);
3791       END IF;
3792 
3793       IF l_tbcdef_csr%ISOPEN THEN
3794         CLOSE l_tbcdef_csr;
3795       END IF;
3796 
3797       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3798       -- unexpected error
3799       OKL_API.set_message(p_app_name      => g_app_name,
3800                          p_msg_name          => g_unexpected_error,
3801                          p_token1            => g_sqlcode_token,
3802                          p_token1_value      => sqlcode,
3803                          p_token2            => g_sqlerrm_token,
3804                          p_token2_value      => sqlerrm);
3805 
3806   END get_tbc_code;
3807 
3808 /*========================================================================
3809  | PRIVATE PROCEDURE get_pc_code
3810  |
3811  | DESCRIPTION
3812  |    This procedure retrieves PC (Product Category) for tax call, based upon the
3813  |    contract and line level tax determinats
3814  |
3815  | CALLED FROM
3816  |
3817  |
3818  | CALLS PROCEDURES/FUNCTIONS
3819  |
3820  |
3821  | PARAMETERS
3822  |   Input Parameters
3823  |      p_sty_id                                   -- Stream Type ID
3824  |      p_purchase_option_code     -- Purchase option code
3825  |      p_int_disclosed_code       -- Interest disclosed code
3826  |      p_title_trnsfr_code                -- Transfer Of Title
3827  |      p_sale_lease_back_code     -- Sale and Lease Back
3828  |      p_lease_purchased_code     -- Purchase of Lease
3829  |      p_tax_country_code             -- Tax country code
3830  |  Output Parameters
3831  |      x_pc_code                                  -- PC Code
3832  |
3833  | KNOWN ISSUES
3834  |
3835  | NOTES
3836  |
3837  |
3838  | MODIFICATION HISTORY
3839  | Date                  Author    Description of Changes
3840  | 17-APR-07            RRAVIKIR   Created
3841  |
3842  *=======================================================================*/
3843   PROCEDURE get_pc_code(
3844     p_api_version            IN  NUMBER,
3845     p_init_msg_list          IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
3846     x_return_status          OUT NOCOPY VARCHAR2,
3847     x_msg_count              OUT NOCOPY NUMBER,
3848     x_msg_data               OUT NOCOPY VARCHAR2,
3849     p_sty_id                 IN  NUMBER,
3850     p_purchase_option_code   IN VARCHAR2,
3851     p_int_disclosed_code     IN VARCHAR2,
3852     p_title_trnsfr_code      IN VARCHAR2,
3853     p_sale_lease_back_code   IN VARCHAR2,
3854     p_lease_purchased_code   in varchar2,
3855     p_tax_country_code       IN VARCHAR2,
3856     x_pc_code                OUT NOCOPY VARCHAR2) IS
3857 
3858     -- Get all the PC definitions
3859     CURSOR  l_pcdef_csr IS
3860     SELECT      result_code pc_code,
3861             sty_id,
3862             purchase_option_code,
3863             int_disclosed_code,
3864             title_trnsfr_code,
3865             sale_lease_back_code,
3866             lease_purchased_code,
3867             tax_country_code,
3868                         'Y' select_yn      -- All PCs returned by this cursor are selected initially
3869     FROM    okl_tax_attr_definitions
3870     WHERE   (sty_id = p_sty_id OR sty_id IS NULL)
3871     AND     result_type_code = 'PC_CODE'
3872     AND     NVL(expire_flag, 'N') = 'N';
3873 
3874     TYPE pcdefs_tbl_type IS TABLE OF l_pcdef_csr%ROWTYPE INDEX BY BINARY_INTEGER;
3875     TYPE pcdefs_selected_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3876     TYPE det_null_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3877 
3878     l_pcdefs_tbl                        pcdefs_tbl_type;
3879     l_det_null_tbl                      det_null_tbl_type;
3880     l_pcdefs_selected_tbl       pcdefs_selected_tbl_type;
3881 
3882     i                                           NUMBER;
3883     j                                           NUMBER;
3884     k                                           NUMBER;
3885     pc_set_count                        NUMBER;
3886     l_pc_code                           VARCHAR2(30);
3887     selected_count                      NUMBER;
3888     det_match_cnt                       NUMBER;
3889     l_selected_pc_pos           NUMBER;
3890 
3891   BEGIN
3892 
3893     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3894       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code','Begin(+)');
3895     END IF;
3896 
3897     --Print Input Variables
3898     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3899       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3900            'p_init_msg_list :'||p_init_msg_list);
3901       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3902            'p_sty_id :'||p_sty_id);
3903       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3904            'p_purchase_option_code :'||p_purchase_option_code);
3905       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3906            'p_int_disclosed_code :'||p_int_disclosed_code);
3907       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3908            'p_title_trnsfr_code :'||p_title_trnsfr_code);
3909       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3910            'p_sale_lease_back_code :'||p_sale_lease_back_code);
3911       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3912            'p_lease_purchased_code :'||p_lease_purchased_code);
3913       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3914            'p_tax_country_code :'||p_tax_country_code);
3915     END IF;
3916 
3917     OPEN  l_pcdef_csr;
3918     FETCH l_pcdef_csr BULK COLLECT INTO l_pcdefs_tbl;
3919     CLOSE l_pcdef_csr;
3920 
3921     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3922       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3923       'l_pcdefs_tbl.COUNT '||l_pcdefs_tbl.COUNT);
3924     END IF;
3925 
3926     IF l_pcdefs_tbl.COUNT > 0 THEN               -- MAIN IF
3927       k := 1;
3928       FOR i IN 1 .. 6 LOOP -- determinant loop
3929         pc_set_count := 0;
3930 
3931         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3932               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',  'i '||i);
3933         END IF;
3934 
3935         FOR j IN  l_pcdefs_tbl.FIRST .. l_pcdefs_tbl.LAST LOOP
3936               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3937                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3938                    'j '||j||' l_pcdefs_tbl(j).select_yn '||l_pcdefs_tbl(j).select_yn );
3939               END IF;
3940 
3941                   IF l_pcdefs_tbl(j).select_yn = 'Y' THEN
3942                     IF i = 1 THEN -- purchase option
3943                       IF p_purchase_option_code IS NULL THEN
3944                             IF l_pcdefs_tbl(j).purchase_option_code IS NULL THEN
3945                                   pc_set_count := pc_set_count + 1;
3946                                 ELSE
3947                                   l_pcdefs_tbl(j).select_yn := 'N';
3948                                 END IF;
3949                           ELSE
3950                                 IF l_pcdefs_tbl(j).purchase_option_code IS NULL OR l_pcdefs_tbl(j).purchase_option_code = p_purchase_option_code THEN
3951                                   pc_set_count := pc_set_count + 1;
3952                                 ELSE
3953                                   l_pcdefs_tbl(j).select_yn := 'N';
3954                                 END IF;
3955                           END IF;
3956 
3957                     ELSIF i = 2 THEN -- Interest disclosed code
3958                       IF p_int_disclosed_code IS NULL OR p_int_disclosed_code = 'N' THEN
3959                 IF l_pcdefs_tbl(j).int_disclosed_code = 'N' THEN -- INT_DISCLOSED_CODE can not be null on DB
3960                                   pc_set_count := pc_set_count + 1;
3961                                 ELSE
3962                                   l_pcdefs_tbl(j).select_yn := 'N';
3963                                 END IF;
3964                           ELSE
3965                 pc_set_count := pc_set_count + 1;
3966                           END IF;
3967 
3968                     ELSIF i = 3 THEN -- Title transfer code
3969                       IF p_title_trnsfr_code IS NULL OR p_title_trnsfr_code = 'N' THEN
3970                 IF l_pcdefs_tbl(j).title_trnsfr_code = 'N' THEN -- TITLE_TRNSFR_CODE can not be null on DB
3971                                   pc_set_count := pc_set_count + 1;
3972                                 ELSE
3973                                   l_pcdefs_tbl(j).select_yn := 'N';
3974                                 END IF;
3975                           ELSE
3976                 pc_set_count := pc_set_count + 1;
3977                           END IF;
3978 
3979                     ELSIF i = 4 THEN -- Sale lease back code
3980                       IF p_sale_lease_back_code IS NULL OR p_sale_lease_back_code = 'N' THEN
3981                 IF l_pcdefs_tbl(j).sale_lease_back_code = 'N' THEN --SALE_LEASE_BACK_CODE can not be null on DB
3982                                   pc_set_count := pc_set_count + 1;
3983                                 ELSE
3984                                   l_pcdefs_tbl(j).select_yn := 'N';
3985                                 END IF;
3986                           ELSE
3987                 pc_set_count := pc_set_count + 1;
3988                           END IF;
3989 
3990                     ELSIF i = 5 THEN -- Lease purchased code
3991                       IF p_lease_purchased_code IS NULL OR p_lease_purchased_code = 'N' THEN
3992                 IF l_pcdefs_tbl(j).lease_purchased_code = 'N' THEN --LEASE_PURCHASED_CODE can not be null on DB
3993                                   pc_set_count := pc_set_count + 1;
3994                                 ELSE
3995                                   l_pcdefs_tbl(j).select_yn := 'N';
3996                                 END IF;
3997                           ELSE
3998                 pc_set_count := pc_set_count + 1;
3999                           END IF;
4000 
4001                     ELSIF i = 6 THEN -- tax country (last determinant)
4002                       IF p_tax_country_code IS NULL THEN
4003                             IF l_pcdefs_tbl(j).tax_country_code IS NULL THEN
4004                                   pc_set_count := pc_set_count + 1;
4005                   l_pcdefs_selected_tbl(k) := j;
4006                                 ELSE
4007                                   l_pcdefs_tbl(j).select_yn := 'N';
4008                                 END IF;
4009                           ELSE
4010                                 IF l_pcdefs_tbl(j).tax_country_code IS NULL OR l_pcdefs_tbl(j).tax_country_code = p_tax_country_code THEN
4011                                   pc_set_count := pc_set_count + 1;
4012                   l_pcdefs_selected_tbl(k) := j;
4013                                 ELSE
4014                                   l_pcdefs_tbl(j).select_yn := 'N';
4015                                 END IF;
4016                           END IF;
4017 
4018               k := k + 1;
4019                         END IF;
4020 
4021                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4022                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4023                          'pc_set_count '||pc_set_count);
4024                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4025                          'l_pcdefs_tbl(j).select_yn '||l_pcdefs_tbl(j).select_yn);
4026                 END IF;
4027               END IF;
4028         END LOOP;
4029 
4030         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4031                FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4032                   'pc_set_count '||pc_set_count);
4033         END IF;
4034 
4035         IF pc_set_count = 0 THEN
4036               EXIT;
4037         END IF;
4038       END LOOP;  -- determinant loop
4039 
4040       -- At this point l_pcdefs_tbl has been scanned for all the determinants.
4041       -- select_yn flag in this table is set to 'Y' for PCs that have either Null
4042       -- determinnt value or value matching with the transaction. Table l_pcdefs_selected_tbl
4043           -- holds those indexes of original table l_pcdefs_tbl, that have seleted PCs.
4044           -- At this point this table may contain more than 1 PCs. If so, we need to further filter
4045           -- out PCs from this table based upon the priority of the determinants.
4046           -- Following priority order is used :
4047       -- 1.  Stream Type
4048       -- 2.  Purchase option
4049       -- 3.  Interest disclosed code
4050       -- 4.  Title transfer code
4051       -- 5.  Sale Lease back code
4052       -- 6.  Lease purchased code
4053       -- 7.  Tax Country
4054 
4055       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4056             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4057                   'pc_set_count outside first loop'||pc_set_count);
4058       END IF;
4059 
4060       IF pc_set_count = 1 THEN
4061         l_pc_code := l_pcdefs_tbl(l_pcdefs_selected_tbl(1)).pc_code;
4062       ELSIF pc_set_count > 1 THEN
4063             -- There can be more than one selected PCs at this point
4064             -- apply determinant priority logic to select 1 PC
4065             selected_count := pc_set_count;
4066 
4067             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4068               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4069                      'l_pcdefs_selected_tbl.count '||l_pcdefs_selected_tbl.count );
4070             END IF;
4071 
4072             FOR i IN 1 .. 7 LOOP  -- determinant loop
4073 
4074                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4075                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4076                       'i '||i||' selected_count '||selected_count );
4077               END IF;
4078 
4079                   j := 1;
4080                   det_match_cnt := 0;
4081                   l_det_null_tbl.DELETE;
4082 
4083                   IF selected_count > 1 THEN
4084                     FOR k IN l_pcdefs_selected_tbl.FIRST .. l_pcdefs_selected_tbl.LAST LOOP  -- finally selected indexes
4085                                         -- At this point all the selecetd PCs will either have Null determinant value or determinant value matching with the calling transaction
4086                       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4087                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',    'k '||k);
4088                           END IF;
4089 
4090                           IF i = 1 THEN -- Stream Type
4091                             IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).sty_id IS NULL THEN
4092                               l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4093                                   j := j + 1;
4094                             ELSE
4095                                   det_match_cnt := det_match_cnt + 1;
4096                                   l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4097                                   -- l_selected_pc_pos will be used as the index of the selected PC,
4098                                   -- when only one PC is left
4099                             END IF;
4100 
4101                             IF k = pc_set_count THEN  -- last record
4102                               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4103                                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4104                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4105                               END IF;
4106 
4107                               IF det_match_cnt = selected_count THEN --k THEN
4108                                     NULL; -- all records have matching values, do nothing
4109                               ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4110                                     NULL; -- keep all records selected. Don't exclude yet.
4111                               ELSIF det_match_cnt = 1 THEN
4112                                     selected_count := 1;
4113                               ELSE -- more than one but less than total selected  records have matching values
4114                                     FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4115                                       l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4116                                       selected_count := selected_count - 1;
4117                                     END LOOP;
4118                               END IF;
4119                             END IF;
4120 
4121                           ELSIF i = 2 THEN -- Purchase option
4122                             IF p_purchase_option_code IS NOT NULL THEN
4123                                   -- IF p_purchase_option_code is null then l_pcdefs_tbl will have more than 1 PCs with
4124                                   -- only NULL values for purchase_option_code. So no need to filter further, move on to next determinant
4125                                   -- When system is processing a determinant, there will always be more than one selected PCS
4126                                   -- This is because, at the end of processing each determinant, we check the selected count
4127                                   -- If selected count = 1 then we do not process next determinant and exit
4128                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4129                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).purchase_option_code IS NULL THEN
4130                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4131                                           j := j + 1;
4132                                     ELSE
4133                                           det_match_cnt := det_match_cnt + 1;
4134                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4135                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4136                                           -- when only one PC is left
4137                                     END IF;
4138                                   END IF;
4139 
4140                                   IF k = pc_set_count THEN  -- last record
4141                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4142                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4143                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4144                                         END IF;
4145 
4146                                         IF det_match_cnt = selected_count THEN --k THEN
4147                                           NULL; -- all records have matching values, do nothing
4148                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4149                                           NULL; -- keep all records selected. Don't exclude yet.
4150                                         ELSIF det_match_cnt = 1 THEN
4151                                           selected_count := 1;
4152                                         ELSE -- more than one but less than total selected  records have matching values
4153                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4154                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4155                                                 selected_count := selected_count - 1;
4156                                           END LOOP;
4157                                         END IF;
4158                                   END IF;
4159                                 END IF;
4160 
4161                           ELSIF i = 3 THEN -- Interest disclosed code
4162                 IF p_int_disclosed_code = 'Y' THEN
4163                   -- IF p_int_disclosed_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4164                                   -- INT_DISCLOSED_CODE. So no need to filter further
4165                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4166                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).int_disclosed_code = 'N' THEN
4167                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4168                                           j := j + 1;
4169                                     ELSE
4170                                           det_match_cnt := det_match_cnt + 1;
4171                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4172                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4173                                           -- when only one PC is left
4174                                     END IF;
4175                                   END IF;
4176 
4177                                   IF k = pc_set_count THEN  -- last record
4178                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4179                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4180                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4181                                         END IF;
4182 
4183                                         IF det_match_cnt = selected_count THEN --k THEN
4184                                           NULL; -- all records have matching values, do nothing
4185                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4186                                           NULL; -- keep all records selected. Don't exclude yet.
4187                                         ELSIF det_match_cnt = 1 THEN
4188                                           selected_count := 1;
4189                                         ELSE -- more than one but less than total selected  records have matching values
4190                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4191                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4192                                                 selected_count := selected_count - 1;
4193                                           END LOOP;
4194                                         END IF;
4195                                   END IF;
4196                                 END IF;
4197 
4198                           ELSIF i = 4 THEN -- Title transfer code
4199                             IF p_title_trnsfr_code = 'Y' THEN
4200                   -- IF p_title_trnsfr_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4201                                   -- title_trnsfr_code. So no need to filter further
4202                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4203                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).title_trnsfr_code = 'N' THEN
4204                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4205                                           j := j + 1;
4206                                     ELSE
4207                                           det_match_cnt := det_match_cnt + 1;
4208                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4209                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4210                                           -- when only one PC is left
4211                                     END IF;
4212                                   END IF;
4213 
4214                                   IF k = pc_set_count THEN  -- last record
4215                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4216                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4217                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4218                                     END IF;
4219 
4220                                     IF det_match_cnt = selected_count THEN --k THEN
4221                                           NULL; -- all records have matching values, do nothing
4222                                     ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4223                                           NULL; -- keep all records selected. Don't exclude yet.
4224                                     ELSIF det_match_cnt = 1 THEN
4225                                           selected_count := 1;
4226                                     ELSE -- more than one but less than total selected  records have matching values
4227                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4228                                             l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4229                                             selected_count := selected_count - 1;
4230                                           END LOOP;
4231                                     END IF;
4232                                   END IF;
4233                             END IF;
4234 
4235                           ELSIF i = 5 THEN -- Sale Lease back code
4236                             IF p_sale_lease_back_code = 'Y' THEN
4237                   -- IF p_sale_lease_back_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4238                                   -- sale_lease_back_code. So no need to filter further
4239                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4240                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).sale_lease_back_code = 'N' THEN
4241                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4242                                           j := j + 1;
4243                                     ELSE
4244                                           det_match_cnt := det_match_cnt + 1;
4245                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4246                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4247                                           -- when only one PC is left
4248                                     END IF;
4249                                   END IF;
4250 
4251                                   IF k = pc_set_count THEN  -- last record
4252                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4253                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4254                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4255                                         END IF;
4256 
4257                                         IF det_match_cnt = selected_count THEN --k THEN
4258                                           NULL; -- all records have matching values, do nothing
4259                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4260                                           NULL; -- keep all records selected. Don't exclude yet.
4261                                         ELSIF det_match_cnt = 1 THEN
4262                                           selected_count := 1;
4263                                         ELSE -- more than one but less than total selected  records have matching values
4264                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4265                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4266                                                 selected_count := selected_count - 1;
4267                                           END LOOP;
4268                                         END IF;
4269                                   END IF;
4270                                 END IF;
4271 
4272                           ELSIF i = 6 THEN -- Lease purchased code
4273                             IF p_lease_purchased_code = 'Y' THEN
4274                   -- IF p_lease_purchased_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4275                                   -- lease_purchased_code. So no need to filter further
4276                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4277                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).lease_purchased_code = 'N' THEN
4278                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4279                                           j := j + 1;
4280                                     ELSE
4281                                           det_match_cnt := det_match_cnt + 1;
4282                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4283                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4284                                           -- when only one PC is left
4285                                     END IF;
4286                                   END IF;
4287 
4288                                   IF k = pc_set_count THEN  -- last record
4289                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4290                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4291                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4292                                         END IF;
4293 
4294                                         IF det_match_cnt = selected_count THEN --k THEN
4295                                           NULL; -- all records have matching values, do nothing
4296                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4297                                           NULL; -- keep all records selected. Don't exclude yet.
4298                                         ELSIF det_match_cnt = 1 THEN
4299                                           selected_count := 1;
4300                                         ELSE -- more than one but less than total selected  records have matching values
4301                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4302                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4303                                                 selected_count := selected_count - 1;
4304                                           END LOOP;
4305                                         END IF;
4306                                   END IF;
4307                                 END IF;
4308 
4309                           ELSIF i = 7 THEN -- Tax Country
4310                             IF p_tax_country_code IS NOT NULL THEN
4311                                   -- IF p_tax_country_code is null then l_pcdefs_tbl will have more than 1 PCs with
4312                                   -- only NULL values for tax_country_code. So no need to filter further, move on to next determinant
4313                                   -- When system is processing a determinant, there will always be more than one selected PCS
4314                                   -- This is because, at the end of processing each determinant, we check the selected count
4315                                   -- If selected count = 1 then we do not process next determinant and exit
4316                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4317                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).tax_country_code IS NULL THEN
4318                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4319                                           j := j + 1;
4320                                     ELSE
4321                                           det_match_cnt := det_match_cnt + 1;
4322                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4323                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4324                                           -- when only one PC is left
4325                                     END IF;
4326                                   END IF;
4327 
4328                                   IF k = pc_set_count THEN  -- last record
4329                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4330                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4331                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4332                                         END IF;
4333 
4334                                         IF det_match_cnt = selected_count THEN --k THEN
4335                                           NULL; -- all records have matching values, do nothing
4336                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4337                                           NULL; -- keep all records selected. Don't exclude yet.
4338                                         ELSIF det_match_cnt = 1 THEN
4339                                           selected_count := 1;
4340                                         ELSE -- more than one but less than total selected  records have matching values
4341                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4342                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4343                                                 selected_count := selected_count - 1;
4344                                           END LOOP;
4345                                         END IF;
4346                                   END IF;
4347 
4348                                 END IF;
4349                           END IF;
4350                     END LOOP;
4351                   ELSIF selected_count = 1 THEN
4352                     EXIT;
4353                   END IF;
4354             END LOOP; -- determinant loop
4355 
4356             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4357                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4358                                 'selected_count outside 2nd loop '||selected_count);
4359             END IF;
4360 
4361             IF selected_count = 1 THEN
4362                   l_pc_code := l_pcdefs_tbl(l_selected_pc_pos).pc_code;
4363             ELSIF selected_count > 1 THEN  -- still more than one PCs are selected
4364                   l_pc_code := NULL;
4365             END IF;
4366       ELSIF pc_set_count = 0 THEN
4367             l_pc_code := NULL;
4368       END IF;
4369 
4370     END IF;  -- MAIN IF ends
4371 
4372     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4373           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4374                   'l_pc_code '||l_pc_code);
4375     END IF;
4376 
4377     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4378 
4379     -- PC can be null
4380     x_pc_code := l_pc_code;
4381 
4382   EXCEPTION
4383     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4384 
4385       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4386         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code ',
4387                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
4388       END IF;
4389 
4390       IF l_pcdef_csr%ISOPEN THEN
4391         CLOSE l_pcdef_csr;
4392       END IF;
4393 
4394       x_return_status := OKL_API.G_RET_STS_ERROR;
4395     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4396 
4397       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4398         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code ',
4399                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
4400       END IF;
4401 
4402       IF l_pcdef_csr%ISOPEN THEN
4403         CLOSE l_pcdef_csr;
4404       END IF;
4405 
4406       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4407 
4408     WHEN OTHERS THEN
4409       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4410         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code ',
4411                   'EXCEPTION :'||sqlerrm);
4412       END IF;
4413 
4414       IF l_pcdef_csr%ISOPEN THEN
4415         CLOSE l_pcdef_csr;
4416       END IF;
4417 
4418       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4419       -- unexpected error
4420       OKL_API.set_message(p_app_name      => g_app_name,
4421                          p_msg_name          => g_unexpected_error,
4422                          p_token1            => g_sqlcode_token,
4423                          p_token1_value      => sqlcode,
4424                          p_token2            => g_sqlerrm_token,
4425                          p_token2_value      => sqlerrm);
4426 
4427   END get_pc_code;
4428 
4429 /*========================================================================
4430  | PRIVATE PROCEDURE get_ufc_code
4431  |
4432  | DESCRIPTION
4433  |    This procedure retrieves UFC (User Fiscal Classification) for tax call,
4434  |    based upon the contract and line level tax determinats
4435  |
4436  | CALLED FROM
4437  |
4438  |
4439  | CALLS PROCEDURES/FUNCTIONS
4440  |
4441  |
4442  | PARAMETERS
4443  |   Input Parameters
4444  |      p_purchase_option          -- Purchase option
4445  |      p_fin_product_id                   -- Financial Product
4446  |      p_try_id                                   -- Transaction Type ID
4447  |      p_sty_id                                   -- Stream Type ID
4448  |      p_int_disclosed_code       -- Interest Disclosed
4449  |      p_title_trnsfr_code                -- Transfer Of Title
4450  |      p_sale_lease_back_code     -- Sale and Lease Back
4451  |      p_lease_purchased_code     -- Purchase of Lease
4452  |      p_equip_usage_code                 -- Usage of Equipment
4453  |      p_vendor_site_id                   -- Vendor Site ID
4454  |      p_age_of_equip                     -- Age of Equipment
4455  |      p_term_quote_type_code     -- Termination quote type code
4456  |      p_term_quote_reason_code   -- Termination quote reason code
4457  |      p_tax_country_code         -- Tax country code
4458  |  Output Parameters
4459  |      x_ufc_code                                 -- UFC Code
4460  |
4461  | KNOWN ISSUES
4462  |
4463  | NOTES
4464  |
4465  |
4466  | MODIFICATION HISTORY
4467  | Date                  Author    Description of Changes
4468  | 08-APR-05            SECHAWLA   Created
4469  | 20-APR-07            RRAVIKIR   Modified
4470  |
4471  *=======================================================================*/
4472 
4473   PROCEDURE get_ufc_code(
4474         p_api_version                   IN  NUMBER,
4475     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
4476     x_return_status                     OUT NOCOPY VARCHAR2,
4477     x_msg_count                         OUT NOCOPY NUMBER,
4478     x_msg_data                          OUT NOCOPY VARCHAR2,
4479     p_purchase_option               IN  VARCHAR2,
4480     p_fin_product_id                            IN  VARCHAR2,
4481     p_try_id                                            IN  NUMBER,
4482     p_sty_id                                            IN  NUMBER,
4483     p_int_disclosed_code                        IN  VARCHAR2,
4484     p_title_trnsfr_code                         IN  VARCHAR2,
4485     p_sale_lease_back_code                      IN  VARCHAR2,
4486     p_lease_purchased_code                      IN  VARCHAR2,
4487     p_equip_usage_code                          IN  VARCHAR2,
4488     p_vendor_site_id                            IN  NUMBER,
4489     p_age_of_equip                                      IN  NUMBER,
4490     p_term_quote_type_code          IN  VARCHAR2 DEFAULT NULL,
4491     p_term_quote_reason_code        IN  VARCHAR2 DEFAULT NULL,
4492     p_tax_country_code              IN  VARCHAR2,
4493         x_ufc_code                      OUT NOCOPY VARCHAR2) IS
4494 
4495     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4496 
4497     -- Get all the UFC definitions applicable to a transaction type
4498     CURSOR  l_ufcdef_csr(cp_try_id IN NUMBER) IS
4499     SELECT      result_code ufc_code,
4500             try_id,
4501             sty_id ,
4502                         purchase_option_code,
4503                         equip_usage_code,
4504                         vendor_site_id,
4505                         age_of_equip_from,
4506                         age_of_equip_to,
4507                         pdt_id,
4508                         int_disclosed_code ,
4509                         title_trnsfr_code,
4510                         sale_lease_back_code,
4511                         lease_purchased_code,
4512             term_quote_type_code,
4513             term_quote_reason_code,
4514             tax_country_code,
4515                         'Y' select_yn      -- all ufcs returned by this cursor are selected initially
4516     FROM    okl_tax_attr_definitions
4517     WHERE   (try_id = cp_try_id OR try_id IS NULL)
4518     AND     RESULT_TYPE_CODE = 'UFC_CODE'
4519     AND     NVL(expire_flag, 'N') = 'N';
4520 
4521 
4522     TYPE ufcdefs_tbl_type IS TABLE OF l_ufcdef_csr%ROWTYPE INDEX BY BINARY_INTEGER;
4523     TYPE ufcdefs_selected_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4524     TYPE det_null_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4525 
4526     l_ufcdefs_tbl                       ufcdefs_tbl_type;
4527     l_det_null_tbl                      det_null_tbl_type;
4528     l_ufcdefs_selected_tbl      ufcdefs_selected_tbl_type;
4529 
4530     i                                           NUMBER;
4531     j                                           NUMBER;
4532     k                                           NUMBER;
4533     ufc_set_count                       NUMBER;
4534     l_ufc_code                          VARCHAR2(30);
4535     selected_count                      NUMBER;
4536     det_match_cnt                       NUMBER;
4537     l_selected_ufc_pos          NUMBER;
4538   BEGIN
4539 
4540     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4541       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code','Begin(+)');
4542     END IF;
4543 
4544     -- Print Input Variables
4545     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4546       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4547               'p_init_msg_list :'||p_init_msg_list);
4548       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4549               'p_purchase_option :'||p_purchase_option);
4550       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4551               'p_fin_product_id :'||p_fin_product_id);
4552       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4553               'p_try_id :'||p_try_id);
4554       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4555               'p_sty_id :'||p_sty_id);
4556       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4557               'p_int_disclosed_code :'||p_int_disclosed_code);
4558       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4559               'p_title_trnsfr_code :'||p_title_trnsfr_code);
4560       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4561               'p_sale_lease_back_code :'||p_sale_lease_back_code);
4562       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4563               'p_lease_purchased_code :'||p_lease_purchased_code);
4564       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4565               'p_equip_usage_code :'||p_equip_usage_code);
4566       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4567               'p_vendor_site_id :'||p_vendor_site_id);
4568       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4569               'p_age_of_equip :'||p_age_of_equip);
4570       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4571               'term_quote_type_code :'|| p_term_quote_type_code);
4572       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4573               'term_quote_reason_code :'|| p_term_quote_reason_code);
4574       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4575               'p_tax_country_code :'|| p_tax_country_code);
4576     END IF;
4577 
4578     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4579 
4580     OPEN  l_ufcdef_csr(p_try_id);
4581     FETCH l_ufcdef_csr BULK COLLECT INTO l_ufcdefs_tbl;
4582     CLOSE l_ufcdef_csr;
4583 
4584     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4585       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4586               'l_ufcdefs_tbl.COUNT '||l_ufcdefs_tbl.COUNT);
4587     END IF;
4588 
4589     IF l_ufcdefs_tbl.COUNT > 0 THEN  -- MAIN IF
4590       k := 1;
4591       FOR i IN 1 .. 13 LOOP -- determinant loop
4592         ufc_set_count := 0;
4593 
4594         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4595           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4596                      'i '||i);
4597         END IF;
4598 
4599         FOR j IN  l_ufcdefs_tbl.FIRST .. l_ufcdefs_tbl.LAST LOOP
4600 
4601           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4602             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4603                        'j '||j||' l_ufcdefs_tbl(j).select_yn '||l_ufcdefs_tbl(j).select_yn );
4604           END IF;
4605 
4606                   IF l_ufcdefs_tbl(j).select_yn = 'Y' THEN
4607                         IF i = 1 THEN   -- stream type
4608                           IF p_sty_id IS NULL THEN
4609                 IF l_ufcdefs_tbl(j).sty_id IS NULL THEN
4610                   ufc_set_count := ufc_set_count + 1;
4611                 ELSE
4612                   l_ufcdefs_tbl(j).select_yn := 'N';
4613                 END IF;
4614               ELSE
4615                                 IF l_ufcdefs_tbl(j).sty_id IS NULL OR l_ufcdefs_tbl(j).sty_id = p_sty_id THEN
4616                           ufc_set_count := ufc_set_count + 1;
4617                         ELSE
4618                           l_ufcdefs_tbl(j).select_yn := 'N';
4619                 END IF;
4620               END IF;
4621 
4622                         ELSIF i = 2 THEN   -- term quote type
4623                           IF p_term_quote_type_code IS NULL THEN
4624                 IF l_ufcdefs_tbl(j).term_quote_type_code IS NULL THEN
4625                   ufc_set_count := ufc_set_count + 1;
4626                 ELSE
4627                   l_ufcdefs_tbl(j).select_yn := 'N';
4628                 END IF;
4629               ELSE
4630                                 IF l_ufcdefs_tbl(j).term_quote_type_code IS NULL OR
4631                   l_ufcdefs_tbl(j).term_quote_type_code = p_term_quote_type_code THEN
4632                           ufc_set_count := ufc_set_count + 1;
4633                         ELSE
4634                           l_ufcdefs_tbl(j).select_yn := 'N';
4635                 END IF;
4636               END IF;
4637 
4638                         ELSIF i = 3 THEN   -- term quote reason
4639                           IF p_term_quote_reason_code IS NULL THEN
4640                 IF l_ufcdefs_tbl(j).term_quote_reason_code IS NULL THEN
4641                   ufc_set_count := ufc_set_count + 1;
4642                 ELSE
4643                   l_ufcdefs_tbl(j).select_yn := 'N';
4644                 END IF;
4645               ELSE
4646                                 IF l_ufcdefs_tbl(j).term_quote_reason_code IS NULL OR
4647                   l_ufcdefs_tbl(j).term_quote_reason_code = p_term_quote_reason_code THEN
4648                           ufc_set_count := ufc_set_count + 1;
4649                         ELSE
4650                           l_ufcdefs_tbl(j).select_yn := 'N';
4651                 END IF;
4652               END IF;
4653 
4654             ELSIF i = 4 THEN -- purchase option
4655               IF p_purchase_option IS NULL THEN
4656                 IF l_ufcdefs_tbl(j).purchase_option_code IS NULL THEN
4657                   ufc_set_count := ufc_set_count + 1;
4658                 ELSE
4659                   l_ufcdefs_tbl(j).select_yn := 'N';
4660                 END IF;
4661               ELSE
4662                                 IF l_ufcdefs_tbl(j).purchase_option_code IS NULL OR l_ufcdefs_tbl(j).purchase_option_code = p_purchase_option THEN
4663                           ufc_set_count := ufc_set_count + 1;
4664                         ELSE
4665                           l_ufcdefs_tbl(j).select_yn := 'N';
4666                 END IF;
4667               END IF;
4668 
4669                         ELSIF i = 5 THEN -- usage of equipment
4670                           IF p_equip_usage_code IS NULL THEN
4671                 IF l_ufcdefs_tbl(j).equip_usage_code IS NULL THEN
4672                   ufc_set_count := ufc_set_count + 1;
4673                 ELSE
4674                   l_ufcdefs_tbl(j).select_yn := 'N';
4675                 END IF;
4676               ELSE  -- 22-NOV-05 SECHAWLA 4742539 : fixed the parameter name in the following comparison
4677                                 IF l_ufcdefs_tbl(j).equip_usage_code IS NULL OR l_ufcdefs_tbl(j).equip_usage_code = p_equip_usage_code THEN
4678                           ufc_set_count := ufc_set_count + 1;
4679                         ELSE
4680                           l_ufcdefs_tbl(j).select_yn := 'N';
4681                 END IF;
4682               END IF;
4683 
4684                         ELSIF i = 6 THEN -- vendor location
4685                           IF p_VENDOR_SITE_ID IS NULL THEN
4686                 IF l_ufcdefs_tbl(j).VENDOR_SITE_ID IS NULL THEN
4687                   ufc_set_count := ufc_set_count + 1;
4688                 ELSE
4689                   l_ufcdefs_tbl(j).select_yn := 'N';
4690                 END IF;
4691               ELSE  -- 22-NOV-05 SECHAWLA 4742539 : fixed the parameter name in the following comparison
4692                                 IF l_ufcdefs_tbl(j).VENDOR_SITE_ID IS NULL OR l_ufcdefs_tbl(j).VENDOR_SITE_ID = p_VENDOR_SITE_ID THEN
4693                           ufc_set_count := ufc_set_count + 1;
4694                         ELSE
4695                           l_ufcdefs_tbl(j).select_yn := 'N';
4696                 END IF;
4697               END IF;
4698 
4699             ELSIF i = 7 THEN -- age of equipment
4700                           IF p_age_of_equip IS NULL THEN
4701                 IF l_ufcdefs_tbl(j).age_of_equip_from IS NULL AND l_ufcdefs_tbl(j).age_of_equip_to IS NULL THEN
4702                   ufc_set_count := ufc_set_count + 1;
4703                 ELSE
4704                   l_ufcdefs_tbl(j).select_yn := 'N';
4705                 END IF;
4706               ELSE
4707                                 IF ( (l_ufcdefs_tbl(j).age_of_equip_from IS NULL AND l_ufcdefs_tbl(j).age_of_equip_to IS NULL) OR
4708                                          ( (l_ufcdefs_tbl(j).age_of_equip_to IS NOT NULL) AND (p_age_of_equip BETWEEN nvl(l_ufcdefs_tbl(j).age_of_equip_from,0) AND  l_ufcdefs_tbl(j).age_of_equip_to) )OR
4709                                          ( l_ufcdefs_tbl(j).age_of_equip_to IS NULL AND l_ufcdefs_tbl(j).age_of_equip_from <= p_age_of_equip)
4710                                ) THEN
4711                                   ufc_set_count := ufc_set_count + 1;
4712                         ELSE
4713                           l_ufcdefs_tbl(j).select_yn := 'N';
4714                 END IF;
4715               END IF;
4716 
4717             ELSIF i = 8 THEN -- financial product
4718                           IF p_fin_product_id IS NULL THEN
4719                 IF l_ufcdefs_tbl(j).pdt_id IS NULL THEN
4720                   ufc_set_count := ufc_set_count + 1;
4721                 ELSE
4722                   l_ufcdefs_tbl(j).select_yn := 'N';
4723                 END IF;
4724               ELSE
4725                             IF l_ufcdefs_tbl(j).pdt_id IS NULL OR l_ufcdefs_tbl(j).pdt_id = p_fin_product_id THEN
4726                           ufc_set_count := ufc_set_count + 1;
4727                         ELSE
4728                           l_ufcdefs_tbl(j).select_yn := 'N';
4729                 END IF;
4730               END IF;
4731 
4732                         ELSIF i = 9 THEN -- interest disclosed
4733                           IF p_int_disclosed_code IS NULL OR p_int_disclosed_code = 'N' THEN
4734                 IF l_ufcdefs_tbl(j).int_disclosed_code = 'N' THEN -- INT_DISCLOSED_CODE can not be null on DB
4735                   ufc_set_count := ufc_set_count + 1;
4736                 ELSE
4737                   l_ufcdefs_tbl(j).select_yn := 'N';
4738                 END IF;
4739               ELSE
4740                                 ufc_set_count := ufc_set_count + 1;
4741               END IF;
4742 
4743             ELSIF i = 10 THEN -- transfer of Title
4744                           IF p_title_trnsfr_code IS NULL OR p_title_trnsfr_code = 'N' THEN
4745                 IF l_ufcdefs_tbl(j).title_trnsfr_code = 'N' THEN -- TITLE_TRNSFR_CODE can not be null on DB
4746                   ufc_set_count := ufc_set_count + 1;
4747                 ELSE
4748                   l_ufcdefs_tbl(j).select_yn := 'N';
4749                 END IF;
4750               ELSE
4751                                 ufc_set_count := ufc_set_count + 1;
4752               END IF;
4753 
4754             ELSIF i = 11 THEN -- sale and lease back
4755                           IF p_sale_lease_back_code IS NULL OR p_sale_lease_back_code = 'N' THEN
4756                 IF l_ufcdefs_tbl(j).sale_lease_back_code = 'N' THEN --SALE_LEASE_BACK_CODE can not be null on DB
4757                   ufc_set_count := ufc_set_count + 1;
4758                 ELSE
4759                   l_ufcdefs_tbl(j).select_yn := 'N';
4760                 END IF;
4761               ELSE
4762                                 ufc_set_count := ufc_set_count + 1;
4763               END IF;
4764 
4765             ELSIF i = 12 THEN -- purchase of lease
4766                           IF p_lease_purchased_code IS NULL OR p_lease_purchased_code = 'N' THEN
4767                 IF l_ufcdefs_tbl(j).lease_purchased_code = 'N' THEN --LEASE_PURCHASED_CODE can not be null on DB
4768                   ufc_set_count := ufc_set_count + 1;
4769                 ELSE
4770                   l_ufcdefs_tbl(j).select_yn := 'N';
4771                 END IF;
4772               ELSE
4773                                 ufc_set_count := ufc_set_count + 1;
4774               END IF;
4775 
4776             ELSIF i = 13 THEN --taxation country (last determinant)
4777                           IF p_tax_country_code IS NULL THEN
4778                 IF l_ufcdefs_tbl(j).tax_country_code IS NULL THEN
4779                   ufc_set_count := ufc_set_count + 1;
4780                   l_ufcdefs_selected_tbl(k) := j;
4781                   k := k + 1; --Added by bkatraga for bug 9483019
4782                 ELSE
4783                   l_ufcdefs_tbl(j).select_yn := 'N';
4784                 END IF;
4785               ELSE
4786                 IF l_ufcdefs_tbl(j).tax_country_code IS NULL OR
4787                   l_ufcdefs_tbl(j).tax_country_code = p_tax_country_code THEN
4788                                   ufc_set_count := ufc_set_count + 1;
4789                                   l_ufcdefs_selected_tbl(k) := j;
4790                                   k := k + 1; --Added by bkatraga for bug 9483019
4791                 ELSE
4792                   l_ufcdefs_tbl(j).select_yn := 'N';
4793                 END IF;
4794               END IF;
4795 
4796               /*IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4797                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4798                                'k '||k||' l_ufcdefs_selected_tbl(k) '||l_ufcdefs_selected_tbl(k));
4799               END IF;*/
4800               --k := k + 1; Commented by bkatraga for bug 9483019
4801                         END IF;
4802 
4803                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4804               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4805                           'ufc_set_count '||ufc_set_count);
4806               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4807                           'l_ufcdefs_tbl(j).select_yn '||l_ufcdefs_tbl(j).select_yn);
4808             END IF;
4809           END IF;
4810         END LOOP;
4811 
4812         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4813           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4814                           'ufc_set_count '||ufc_set_count);
4815         END IF;
4816 
4817         IF ufc_set_count = 0 THEN
4818           EXIT;
4819         END IF;
4820       END LOOP;
4821 
4822       -- At this point l_ufcdefs_tbl has been scanned for all the determinants.
4823       -- select_yn flag in this table is set to 'Y' for ufcs that have either Null
4824       -- determinnt value or value matching with the transaction. Table l_ufcdefs_selected_tbl
4825           -- holds those indexes of original table l_ufcdefs_tbl, that have seleted ufcs.
4826           -- At this point this table may contain more than 1 ufcs. If so, we need to further filter
4827           -- out ufcs from this table based upon the priority of the determinants.
4828           -- Following priority order is used :
4829       -- 1.  Transaction Type
4830       -- 2.  Stream Type
4831       -- 3.  Purchase Option
4832       -- 4.  Usage Of Equipment
4833       -- 5.  Vendor Location
4834       -- 6.  Age of Equipment
4835       -- 7.  Financial Product
4836       -- 8.  Interest Disclosed
4837       -- 9.  Transfer Of Title
4838       -- 10. Sale and Lease back
4839       -- 11. Purchase of Lease
4840 
4841       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4842         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4843                           'ufc_set_count outside first loop'||ufc_set_count);
4844       END IF;
4845 
4846       IF ufc_set_count = 1 THEN
4847         l_ufc_code := l_ufcdefs_tbl(l_ufcdefs_selected_tbl(1)).ufc_code;
4848 
4849       ELSIF ufc_set_count > 1 THEN
4850         -- There can be more than one selected ufcs at this point
4851         -- apply determinant priority logic to select 1 ufc
4852 
4853         selected_count := ufc_set_count;
4854 
4855         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4856           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4857                           'l_ufcdefs_selected_tbl.count '||l_ufcdefs_selected_tbl.count );
4858         END IF;
4859 
4860         FOR i IN 1..14 LOOP  -- determinant loop
4861 
4862           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4863             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4864                           'i '||i||' selected_count '||selected_count );
4865           END IF;
4866 
4867           j := 1;
4868           det_match_cnt := 0;
4869           l_det_null_tbl.DELETE;
4870 
4871           IF selected_count > 1 THEN
4872                 FOR k IN l_ufcdefs_selected_tbl.FIRST .. l_ufcdefs_selected_tbl.LAST LOOP  -- finally selected indexes
4873                   -- At this point all the selecetd ufcs will either have Null determinant value or determinant value matching with the calling transaction
4874               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4875                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.','k '||k);
4876                           END IF;
4877 
4878                   IF i = 1 THEN -- transaction type
4879                             IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).try_id IS NULL THEN
4880 
4881                           l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4882                           j := j + 1;
4883                         ELSE
4884                           det_match_cnt := det_match_cnt + 1;
4885                           l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4886                                 -- l_selected_ufc_pos will be used as the index of the selected ufc,
4887                                         -- when only one UFC is left
4888                         END IF;
4889 
4890                         IF k = ufc_set_count THEN  -- last record
4891                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4892                                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4893                                                         'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4894                           END IF;
4895 
4896                           IF det_match_cnt = selected_count THEN --k THEN
4897                                 NULL; -- all records have matching values, do nothing
4898                           ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4899                                 NULL; -- keep all records selected. Don't exclude yet.
4900                           ELSIF det_match_cnt = 1 THEN
4901                                 selected_count := 1;
4902                           ELSE -- more than one but less than total selected  records have matching values
4903                                 FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4904                                   l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4905                                   selected_count := selected_count - 1;
4906                                 END LOOP;
4907                           END IF;
4908                         END IF;
4909 
4910               ELSIF i = 2 THEN -- stream type
4911                 IF p_sty_id IS NOT NULL THEN
4912                   -- IF p_sty_id is null then l_ufcdefs_tbl will have more than 1 ufcs with
4913                                   -- only NULL values for sty_id. So no need to filter further, move on to next determinant
4914                                   -- When system is processing a determinant, there will always be more than one selected ufcS
4915                                   -- This is because, at the end of processing each determinant, we check the selected count
4916                                   -- If selected count = 1 then we do not process next determinant and exit
4917                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4918                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).sty_id IS NULL THEN
4919                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4920                                   j := j + 1;
4921                                 ELSE
4922                                   det_match_cnt := det_match_cnt + 1;
4923                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4924                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
4925                                       -- when only one UFC is left
4926                                 END IF;
4927                       END IF;
4928 
4929                           IF k = ufc_set_count THEN  -- last record
4930                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4931                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4932                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4933                                 END IF;
4934 
4935                                 IF det_match_cnt = selected_count THEN --k THEN
4936                                   NULL; -- all records have matching values, do nothing
4937                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4938                                   NULL; -- keep all records selected. Don't exclude yet.
4939                                 ELSIF det_match_cnt = 1 THEN
4940                                   selected_count := 1;
4941                                 ELSE -- more than one but less than total selected  records have matching values
4942                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4943                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4944                                     selected_count := selected_count - 1;
4945                                   END LOOP;
4946                                 END IF;
4947                           END IF;
4948                         END IF;
4949 
4950               ELSIF i = 3 THEN -- termination quote type
4951                 IF p_term_quote_type_code IS NOT NULL THEN
4952                   -- IF p_term_quote_type_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
4953                                   -- only NULL values for term_quote_type_code. So no need to filter further, move on to next determinant
4954                                   -- When system is processing a determinant, there will always be more than one selected ufcS
4955                                   -- This is because, at the end of processing each determinant, we check the selected count
4956                                   -- If selected count = 1 then we do not process next determinant and exit
4957                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4958                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).term_quote_type_code IS NULL THEN
4959                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4960                                   j := j + 1;
4961                                 ELSE
4962                                   det_match_cnt := det_match_cnt + 1;
4963                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4964                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
4965                                       -- when only one UFC is left
4966                                 END IF;
4967                       END IF;
4968 
4969                           IF k = ufc_set_count THEN  -- last record
4970                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4971                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4972                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4973                                 END IF;
4974 
4975                                 IF det_match_cnt = selected_count THEN --k THEN
4976                                   NULL; -- all records have matching values, do nothing
4977                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4978                                   NULL; -- keep all records selected. Don't exclude yet.
4979                                 ELSIF det_match_cnt = 1 THEN
4980                                   selected_count := 1;
4981                                 ELSE -- more than one but less than total selected  records have matching values
4982                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4983                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4984                                     selected_count := selected_count - 1;
4985                                   END LOOP;
4986                                 END IF;
4987                           END IF;
4988                         END IF;
4989 
4990               ELSIF i = 4 THEN -- termination quote reason
4991                 IF p_term_quote_reason_code IS NOT NULL THEN
4992                   -- IF p_term_quote_reason_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
4993                                   -- only NULL values for term_quote_reason_code. So no need to filter further, move on to next determinant
4994                                   -- When system is processing a determinant, there will always be more than one selected ufcS
4995                                   -- This is because, at the end of processing each determinant, we check the selected count
4996                                   -- If selected count = 1 then we do not process next determinant and exit
4997                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4998                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).term_quote_reason_code IS NULL THEN
4999                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5000                                   j := j + 1;
5001                                 ELSE
5002                                   det_match_cnt := det_match_cnt + 1;
5003                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5004                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5005                                       -- when only one UFC is left
5006                                 END IF;
5007                       END IF;
5008 
5009                           IF k = ufc_set_count THEN  -- last record
5010                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5011                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5012                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5013                                 END IF;
5014 
5015                                 IF det_match_cnt = selected_count THEN --k THEN
5016                                   NULL; -- all records have matching values, do nothing
5017                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5018                                   NULL; -- keep all records selected. Don't exclude yet.
5019                                 ELSIF det_match_cnt = 1 THEN
5020                                   selected_count := 1;
5021                                 ELSE -- more than one but less than total selected  records have matching values
5022                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5023                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5024                                     selected_count := selected_count - 1;
5025                                   END LOOP;
5026                                 END IF;
5027                           END IF;
5028                         END IF;
5029 
5030               ELSIF i = 5 THEN -- purchase option
5031                 IF p_purchase_option IS NOT NULL THEN
5032                   -- IF p_purchase_option is null then l_ufcdefs_tbl will have more than 1 ufcs with
5033                                   -- only NULL values for purchase_option. So no need to filter further, move on to next determinant
5034                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5035                                   -- This is because, at the end of processing each determinant, we check the selected count
5036                                   -- If selected count = 1 then we do not process next determinant and exit
5037                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5038                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).purchase_option_code IS NULL THEN
5039                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5040                                   j := j + 1;
5041                                 ELSE
5042                                   det_match_cnt := det_match_cnt + 1;
5043                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5044                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5045                                       -- when only one UFC is left
5046                                 END IF;
5047                       END IF;
5048 
5049                           IF k = ufc_set_count THEN  -- last record
5050                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5051                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5052                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5053                                 END IF;
5054 
5055                                 IF det_match_cnt = selected_count THEN --k THEN
5056                                   NULL; -- all records have matching values, do nothing
5057                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5058                                   NULL; -- keep all records selected. Don't exclude yet.
5059                                 ELSIF det_match_cnt = 1 THEN
5060                                   selected_count := 1;
5061                                 ELSE -- more than one but less than total selected  records have matching values
5062                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5063                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5064                                     selected_count := selected_count - 1;
5065                                   END LOOP;
5066                                 END IF;
5067                           END IF;
5068                         END IF;
5069 
5070               ELSIF i = 6 THEN --  usage of equipment
5071                 IF p_equip_usage_code IS NOT NULL THEN
5072                   -- IF p_equip_usage_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
5073                                   -- only NULL values for equip_usage_code. So no need to filter further, move on to next determinant
5074                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5075                                   -- This is because, at the end of processing each determinant, we check the selected count
5076                                   -- If selected count = 1 then we do not process next determinant and exit
5077                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5078                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).equip_usage_code IS NULL THEN
5079                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5080                                   j := j + 1;
5081                                 ELSE
5082                                   det_match_cnt := det_match_cnt + 1;
5083                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5084                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5085                                       -- when only one UFC is left
5086                                 END IF;
5087                       END IF;
5088 
5089                           IF k = ufc_set_count THEN  -- last record
5090                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5091                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5092                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5093                                 END IF;
5094 
5095                                 IF det_match_cnt = selected_count THEN --k THEN
5096                                   NULL; -- all records have matching values, do nothing
5097                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5098                                   NULL; -- keep all records selected. Don't exclude yet.
5099                                 ELSIF det_match_cnt = 1 THEN
5100                                   selected_count := 1;
5101                                 ELSE -- more than one but less than total selected  records have matching values
5102                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5103                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5104                                     selected_count := selected_count - 1;
5105                                   END LOOP;
5106                                 END IF;
5107                           END IF;
5108                         END IF;
5109 
5110               ELSIF i = 7 THEN -- vendor location
5111                 IF p_vendor_site_id IS NOT NULL THEN
5112                   -- IF p_vendor_site_id is null then l_ufcdefs_tbl will have more than 1 ufcs with
5113                                   -- only NULL values for vendor_site_id. So no need to filter further, move on to next determinant
5114                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5115                                   -- This is because, at the end of processing each determinant, we check the selected count
5116                                   -- If selected count = 1 then we do not process next determinant and exit
5117                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5118                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).vendor_site_id IS NULL THEN
5119                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5120                                   j := j + 1;
5121                                 ELSE
5122                                   det_match_cnt := det_match_cnt + 1;
5123                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5124                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5125                                       -- when only one UFC is left
5126                                 END IF;
5127                       END IF;
5128 
5129                           IF k = ufc_set_count THEN  -- last record
5130                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5131                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5132                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5133                                 END IF;
5134 
5135                                 IF det_match_cnt = selected_count THEN --k THEN
5136                                   NULL; -- all records have matching values, do nothing
5137                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5138                                   NULL; -- keep all records selected. Don't exclude yet.
5139                                 ELSIF det_match_cnt = 1 THEN
5140                                   selected_count := 1;
5141                                 ELSE -- more than one but less than total selected  records have matching values
5142                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5143                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5144                                     selected_count := selected_count - 1;
5145                                   END LOOP;
5146                                 END IF;
5147                           END IF;
5148                         END IF;
5149 
5150               ELSIF i = 8 THEN -- age of equipment
5151                 IF p_age_of_equip IS NOT NULL THEN
5152                   -- IF p_age_of_equip is null then l_ufcdefs_tbl will have more than 1 ufcs with
5153                                   -- only NULL values for age_of_equip. So no need to filter further, move on to next determinant
5154                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5155                                   -- This is because, at the end of processing each determinant, we check the selected count
5156                                   -- If selected count = 1 then we do not process next determinant and exit
5157                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5158                         IF  (l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).age_of_equip_from IS NULL AND
5159                                                  l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).age_of_equip_to IS NULL)  THEN
5160                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5161                                   j := j + 1;
5162                                 ELSE
5163                                   det_match_cnt := det_match_cnt + 1;
5164                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5165                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5166                                       -- when only one UFC is left
5167                                 END IF;
5168                       END IF;
5169 
5170                           IF k = ufc_set_count THEN  -- last record
5171                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5172                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5173                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5174                                 END IF;
5175 
5176                                 IF det_match_cnt = selected_count THEN --k THEN
5177                                   NULL; -- all records have matching values, do nothing
5178                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5179                                   NULL; -- keep all records selected. Don't exclude yet.
5180                                 ELSIF det_match_cnt = 1 THEN
5181                                   selected_count := 1;
5182                                 ELSE -- more than one but less than total selected  records have matching values
5183                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5184                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5185                                     selected_count := selected_count - 1;
5186                                   END LOOP;
5187                                 END IF;
5188                           END IF;
5189                         END IF;
5190 
5191               ELSIF i = 9 THEN -- financial product
5192                 IF p_fin_product_id IS NOT NULL THEN
5193                   -- IF p_fin_product_id is null then l_ufcdefs_tbl will have more than 1 ufcs with
5194                                   -- only NULL values for fin_product_id. So no need to filter further, move on to next determinant
5195                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5196                                   -- This is because, at the end of processing each determinant, we check the selected count
5197                                   -- If selected count = 1 then we do not process next determinant and exit
5198                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5199                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).pdt_id IS NULL THEN
5200                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5201                                   j := j + 1;
5202                                 ELSE
5203                                   det_match_cnt := det_match_cnt + 1;
5204                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5205                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5206                                       -- when only one UFC is left
5207                                 END IF;
5208                       END IF;
5209 
5210                           IF k = ufc_set_count THEN  -- last record
5211                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5212                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5213                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5214                                 END IF;
5215 
5216                                 IF det_match_cnt = selected_count THEN --k THEN
5217                                   NULL; -- all records have matching values, do nothing
5218                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5219                                   NULL; -- keep all records selected. Don't exclude yet.
5220                                 ELSIF det_match_cnt = 1 THEN
5221                                   selected_count := 1;
5222                                 ELSE -- more than one but less than total selected  records have matching values
5223                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5224                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5225                                     selected_count := selected_count - 1;
5226                                   END LOOP;
5227                                 END IF;
5228                           END IF;
5229                         END IF;
5230 
5231               ELSIF i = 10 THEN -- interest disclosed
5232                 IF p_int_disclosed_code = 'Y' THEN
5233                   -- IF p_int_disclosed_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5234                                   -- only NULL values for int_disclosed_code. So no need to filter further, move on to next determinant
5235                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5236                                   -- This is because, at the end of processing each determinant, we check the selected count
5237                                   -- If selected count = 1 then we do not process next determinant and exit
5238                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5239                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).int_disclosed_code = 'N' THEN
5240                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5241                                   j := j + 1;
5242                                 ELSE
5243                                   det_match_cnt := det_match_cnt + 1;
5244                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5245                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5246                                       -- when only one UFC is left
5247                                 END IF;
5248                       END IF;
5249 
5250                           IF k = ufc_set_count THEN  -- last record
5251                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5252                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5253                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5254                                 END IF;
5255 
5256                                 IF det_match_cnt = selected_count THEN --k THEN
5257                                   NULL; -- all records have matching values, do nothing
5258                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5259                                   NULL; -- keep all records selected. Don't exclude yet.
5260                                 ELSIF det_match_cnt = 1 THEN
5261                                   selected_count := 1;
5262                                 ELSE -- more than one but less than total selected  records have matching values
5263                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5264                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5265                                     selected_count := selected_count - 1;
5266                                   END LOOP;
5267                                 END IF;
5268                           END IF;
5269                         END IF;
5270 
5271               ELSIF i = 11 THEN -- transfer of title
5272                 IF p_title_trnsfr_code = 'Y' THEN
5273                   -- IF p_title_trnsfr_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5274                                   -- only NULL values for title_trnsfr_code. So no need to filter further, move on to next determinant
5275                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5276                                   -- This is because, at the end of processing each determinant, we check the selected count
5277                                   -- If selected count = 1 then we do not process next determinant and exit
5278                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5279                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).title_trnsfr_code = 'N' THEN
5280                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5281                                   j := j + 1;
5282                                 ELSE
5283                                   det_match_cnt := det_match_cnt + 1;
5284                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5285                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5286                                       -- when only one UFC is left
5287                                 END IF;
5288                       END IF;
5289 
5290                           IF k = ufc_set_count THEN  -- last record
5291                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5292                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5293                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5294                                 END IF;
5295 
5296                                 IF det_match_cnt = selected_count THEN --k THEN
5297                                   NULL; -- all records have matching values, do nothing
5298                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5299                                   NULL; -- keep all records selected. Don't exclude yet.
5300                                 ELSIF det_match_cnt = 1 THEN
5301                                   selected_count := 1;
5302                                 ELSE -- more than one but less than total selected  records have matching values
5303                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5304                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5305                                     selected_count := selected_count - 1;
5306                                   END LOOP;
5307                                 END IF;
5308                           END IF;
5309                         END IF;
5310 
5311               ELSIF i = 12 THEN -- sale and lease back
5312                 IF p_sale_lease_back_code = 'Y' THEN
5313                   -- IF p_sale_lease_back_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5314                                   -- only NULL values for sale_lease_back_code. So no need to filter further, move on to next determinant
5315                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5316                                   -- This is because, at the end of processing each determinant, we check the selected count
5317                                   -- If selected count = 1 then we do not process next determinant and exit
5318                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5319                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).sale_lease_back_code = 'N' THEN
5320                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5321                                   j := j + 1;
5322                                 ELSE
5323                                   det_match_cnt := det_match_cnt + 1;
5324                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5325                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5326                                       -- when only one UFC is left
5327                                 END IF;
5328                       END IF;
5329 
5330                           IF k = ufc_set_count THEN  -- last record
5331                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5332                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5333                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5334                                 END IF;
5335 
5336                                 IF det_match_cnt = selected_count THEN --k THEN
5337                                   NULL; -- all records have matching values, do nothing
5338                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5339                                   NULL; -- keep all records selected. Don't exclude yet.
5340                                 ELSIF det_match_cnt = 1 THEN
5341                                   selected_count := 1;
5342                                 ELSE -- more than one but less than total selected  records have matching values
5343                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5344                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5345                                     selected_count := selected_count - 1;
5346                                   END LOOP;
5347                                 END IF;
5348                           END IF;
5349                         END IF;
5350 
5351               ELSIF i = 13 THEN -- purchase of lease
5352                 IF p_lease_purchased_code = 'Y' THEN
5353                   -- IF p_lease_purchased_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5354                                   -- only NULL values for lease_purchased_code. So no need to filter further, move on to next determinant
5355                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5356                                   -- This is because, at the end of processing each determinant, we check the selected count
5357                                   -- If selected count = 1 then we do not process next determinant and exit
5358                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5359                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).lease_purchased_code = 'N' THEN
5360                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5361                                   j := j + 1;
5362                                 ELSE
5363                                   det_match_cnt := det_match_cnt + 1;
5364                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5365                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5366                                       -- when only one UFC is left
5367                                 END IF;
5368                       END IF;
5369 
5370                           IF k = ufc_set_count THEN  -- last record
5371                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5372                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5373                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5374                                 END IF;
5375 
5376                                 IF det_match_cnt = selected_count THEN --k THEN
5377                                   NULL; -- all records have matching values, do nothing
5378                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5379                                   NULL; -- keep all records selected. Don't exclude yet.
5380                                 ELSIF det_match_cnt = 1 THEN
5381                                   selected_count := 1;
5382                                 ELSE -- more than one but less than total selected  records have matching values
5383                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5384                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5385                                     selected_count := selected_count - 1;
5386                                   END LOOP;
5387                                 END IF;
5388                           END IF;
5389                         END IF;
5390 
5391               ELSIF i = 14 THEN -- tax country
5392                 IF p_tax_country_code IS NOT NULL THEN
5393                   -- IF p_tax_country_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
5394                                   -- only NULL values for tax_country_code. So no need to filter further, move on to next determinant
5395                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5396                                   -- This is because, at the end of processing each determinant, we check the selected count
5397                                   -- If selected count = 1 then we do not process next determinant and exit
5398                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5399                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).tax_country_code IS NULL THEN
5400                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5401                                   j := j + 1;
5402                                 ELSE
5403                                   det_match_cnt := det_match_cnt + 1;
5404                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5405                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5406                                       -- when only one UFC is left
5407                                 END IF;
5408                       END IF;
5409 
5410                           IF k = ufc_set_count THEN  -- last record
5411                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5412                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5413                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5414                                 END IF;
5415 
5416                                 IF det_match_cnt = selected_count THEN --k THEN
5417                                   NULL; -- all records have matching values, do nothing
5418                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5419                                   NULL; -- keep all records selected. Don't exclude yet.
5420                                 ELSIF det_match_cnt = 1 THEN
5421                                   selected_count := 1;
5422                                 ELSE -- more than one but less than total selected  records have matching values
5423                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5424                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5425                                     selected_count := selected_count - 1;
5426                                   END LOOP;
5427                                 END IF;
5428                           END IF;
5429                         END IF;
5430               END IF;
5431                 END LOOP;
5432           ELSIF selected_count = 1 THEN
5433                 EXIT;
5434           END IF;
5435         END LOOP; -- determinant loop
5436 
5437         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5438           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5439                                                     'selected_count outside 2nd loop '||selected_count);
5440         END IF;
5441 
5442         IF selected_count = 1 THEN
5443                   l_ufc_code := l_ufcdefs_tbl(l_selected_ufc_pos).ufc_code;
5444                 ELSIF selected_count > 1 THEN  -- still more than one ufcs are selected
5445           l_ufc_code := NULL;
5446         END IF;
5447 
5448       ELSIF ufc_set_count = 0 THEN
5449         l_ufc_code := NULL;
5450       END IF;
5451     END IF;  -- MAIN IF Ends
5452 
5453     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5454       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5455                           'l_ufc_code '||l_ufc_code);
5456     END IF;
5457 
5458     -- UFC can be NULL
5459     x_ufc_code := l_ufc_code;
5460 
5461   EXCEPTION
5462     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5463 
5464       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5465         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code ',
5466                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
5467       END IF;
5468 
5469       IF l_ufcdef_csr%ISOPEN THEN
5470         CLOSE l_ufcdef_csr;
5471       END IF;
5472 
5473       x_return_status := OKL_API.G_RET_STS_ERROR;
5474     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5475 
5476       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5477         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code ',
5478                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
5479       END IF;
5480 
5481       IF l_ufcdef_csr%ISOPEN THEN
5482         CLOSE l_ufcdef_csr;
5483       END IF;
5484 
5485       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5486 
5487     WHEN OTHERS THEN
5488       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5489         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code ',
5490                   'EXCEPTION :'||sqlerrm);
5491       END IF;
5492 
5493           IF l_ufcdef_csr%ISOPEN THEN
5494         CLOSE l_ufcdef_csr;
5495       END IF;
5496 
5497 
5498       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5499       -- unexpected error
5500       OKL_API.set_message(p_app_name      => g_app_name,
5501                          p_msg_name      => g_unexpected_error,
5502                          p_token1        => g_sqlcode_token,
5503                          p_token1_value  => sqlcode,
5504                          p_token2        => g_sqlerrm_token,
5505                          p_token2_value  => sqlerrm);
5506 
5507   END get_ufc_code;
5508 
5509 /*========================================================================
5510  | PRIVATE PROCEDURE populate_tax_info
5511  |
5512  | DESCRIPTION
5513  |    This procedure derives the tax sources and tax details to populate ZX tables
5514  |
5515  | CALLED FROM
5516  |     process_booking_upfront_tax
5517  |     process_quote_tax
5518  |     process_asset_loc_tax
5519  |     process_quoting_upfront_tax
5520  |
5521  |
5522  | CALLS PROCEDURES/FUNCTIONS
5523  |     get_ufc_code()
5524  |     okl_am_util_pvt.get_formula_value()
5525  |
5526  | PARAMETERS
5527  |      p_prch_opt_det                  -- Purchase Option
5528  |      p_fin_prod_id_det               -- Financial product
5529  |      p_int_disclosed_det             -- Interest Disclosed
5530  |      -- asset level begin
5531  |      p_TITLE_TRNSFR_CODE             -- Transfer of Title
5532  |      p_SALE_LEASE_BACK_CODE  -- Sale and Lease Back
5533  |      p_LEASE_PURCHASED_CODE  -- Purchase of Lease
5534  |      p_EQUIP_USAGE_CODE              -- Usage Of Equipment
5535  |      p_VENDOR_SITE_ID                -- Vendor Site ID
5536  |      p_AGE_OF_EQUIP                  -- Age of Equipment
5537  |      p_kle_id                                -- Kle ID
5538  |      p_asset_number                  -- Asset Number
5539  |      p_ship_to_site_use_id   -- Ship to Site Use ID
5540  |      p_inventory_item_id             -- Inventory Item ID
5541  |     --asset level end
5542  |      p_sty_id                                -- Stream Type ID
5543  |      p_taxable_basis                 -- Taxable Basis Amount
5544  |      p_tax_call_cnt                  -- counter
5545  |      px_tax_sources_tbl              -- table used to store tax source transactions
5546  |      p_khr_id                                -- contract ID
5547  |      p_source_trx_id                 -- Source Trx ID
5548  |      p_source_table                  -- Source Table
5549  |      p_reported_yn                   -- reportable y/n
5550  |      p_fma_id                                -- formula ID
5551  |      p_formula_name                  -- formula name
5552  |      p_bill_to_siteuseid             -- Bill to site use id
5553  |      lx_trx_rec_tbl                  -- table used to store input data for the TAx Engine call
5554  |      p_k_start_date                  -- contract start date
5555  |      p_currency_code                 -- Currency Code
5556  |      p_cust_trx_type_id              -- AR customer trx type
5557  |      p_minimum_accountable_unit      -- Minimum accountable unit for currency
5558  |      p_precision                             -- currency precision
5559  |
5560  | KNOWN ISSUES
5561  |
5562  | NOTES
5563  |
5564  |
5565  | MODIFICATION HISTORY
5566  | Date           Author        Description of Changes
5567  | 08-APR-05      SECHAWLA      Created
5568  | 05-DEC-05      SECHAWLA      Use a different index p_trx_rec_tbl_cnt
5569  |                              to populate p_trx_rec_tbl. This happens
5570  |                              only for the 'Rebook' transaction
5571  | 04-Jan-08      SECHAWLA      6651621 Added 3 additional parameters to taxable basis override formula -
5572  |                              'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
5573  | 15-Nov-09      sechawla      9121244 wrong variable was being used to send tax classification code to ebtax
5574  |                              because of which fresh tax call, right after the upgrade, using migrated AR setups
5575  |                              was not calculating any tax.
5576  *=======================================================================*/
5577 
5578   PROCEDURE populate_tax_info(
5579     p_api_version                       IN  NUMBER,
5580     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
5581     x_return_status                     OUT NOCOPY VARCHAR2,
5582     x_msg_count                         OUT NOCOPY NUMBER,
5583     x_msg_data                          OUT NOCOPY VARCHAR2,
5584     p_prch_opt_det                                      IN  VARCHAR2,
5585     p_fin_prod_id_det                           IN  NUMBER,
5586     p_int_disclosed_det                         IN  VARCHAR2,
5587     p_title_trnsfr_code                     IN  VARCHAR2,
5588     p_sale_lease_back_code                  IN  VARCHAR2,
5589     p_lease_purchased_code                  IN  VARCHAR2,
5590     p_equip_usage_code                      IN  VARCHAR2,
5591     p_vendor_site_id                        IN  NUMBER,
5592     p_age_of_equip                                      IN  NUMBER,
5593     p_source_trx_name               IN  VARCHAR2,
5594     p_cust_trx_type_id              IN  NUMBER,
5595     p_book_class_code               IN  VARCHAR2,
5596     p_tax_call_cnt                                      IN NUMBER,
5597     p_line_params_tbl_cnt           IN NUMBER DEFAULT NULL,
5598     p_fma_id                                            IN NUMBER,
5599     p_formula_name                                      IN VARCHAR2,
5600     p_minimum_accountable_unit          IN NUMBER,
5601     p_precision                                         IN NUMBER,
5602     p_sales_quote_id                IN NUMBER, -- Used only for Sales Quote tax call
5603     p_event_type_code               IN VARCHAR2,
5604     p_ledger_id                     IN NUMBER,
5605     p_line_level_action             IN VARCHAR2,
5606     p_tax_src_params_rec                    IN tax_src_params_rec_type,
5607     p_quote_flag                    IN VARCHAR2,
5608     p_rounding_ship_to_party_id     IN NUMBER,
5609     p_rounding_bill_to_party_id     IN NUMBER,
5610     p_line_amt_includes_tax_flag    IN VARCHAR2,
5611     p_term_quote_type_code          IN VARCHAR2,
5612     p_term_quote_reason_code        IN VARCHAR2,
5613     p_alc_ser_def_code              IN VARCHAR2 DEFAULT NULL,
5614     px_tax_sources_tbl                  IN OUT NOCOPY tax_sources_tbl_type,
5615     px_line_params_tbl                  IN OUT NOCOPY line_params_tbl_type) IS
5616 
5617     lx_tbc_code                                         VARCHAR2(30);
5618     lx_ufc_code                     VARCHAR2(30);
5619     lx_pc_code                      VARCHAR2(30);
5620     lx_tax_classification_code      VARCHAR2(50);
5621     l_assessable_value                          NUMBER;
5622     l_line_amt                                          NUMBER;
5623     l_add_params                                        okl_execute_formula_pub.ctxt_val_tbl_type;
5624     l_set_of_books_id               NUMBER;
5625     l_alc_fetch_code                BOOLEAN := FALSE;
5626 
5627     lx_tax_valid_code               VARCHAR2(1);
5628 
5629     CURSOR c_get_set_of_books_id(cp_org_id IN NUMBER) IS
5630     SELECT set_of_books_id
5631     FROM   ar_system_parameters_all
5632     WHERE  org_id = cp_org_id;
5633 
5634     l_next_index                    NUMBER;
5635 
5636   BEGIN
5637 
5638     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5639         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info','Begin(+)');
5640     END IF;
5641 
5642     --Print Input Variables
5643     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5644         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5645               'p_init_msg_list :'||p_init_msg_list);
5646         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5647               'p_prch_opt_det :'||p_prch_opt_det);
5648         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5649               'p_prch_opt_det :'||p_prch_opt_det);
5650         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5651               'p_fin_prod_id_det :'||p_fin_prod_id_det);
5652         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5653               'p_int_disclosed_det :'||p_int_disclosed_det);
5654         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5655               'p_title_trnsfr_code :'||p_title_trnsfr_code);
5656         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5657               'p_sale_lease_back_code :'||p_sale_lease_back_code);
5658         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5659               'p_lease_purchased_code :'||p_lease_purchased_code);
5660                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5661               'p_equip_usage_code :'||p_equip_usage_code);
5662                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5663               'p_vendor_site_id :'||p_vendor_site_id);
5664         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5665               'p_age_of_equip :'||p_age_of_equip);
5666                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5667               'p_tax_call_cnt :'||p_tax_call_cnt);
5668                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5669               'px_tax_sources_tbl.count :'||px_tax_sources_tbl.count);
5670                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5671               'p_fma_id :'||p_fma_id);
5672                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5673               'p_formula_name :'||p_formula_name);
5674                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5675               'p_cust_trx_type_id :'||p_cust_trx_type_id);
5676                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5677               'p_minimum_accountable_unit :'||p_minimum_accountable_unit);
5678                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5679               'p_precision :'||p_precision);
5680                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5681               'p_sales_quote_id :'||p_sales_quote_id);
5682                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5683               'p_event_type_code :'||p_event_type_code);
5684                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5685               'p_ledger_id :'||p_ledger_id);
5686                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5687               'p_quote_flag :'||p_quote_flag);
5688                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5689               'p_line_level_action :'||p_line_level_action);
5690                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5691               'p_rounding_ship_to_party_id :'||p_rounding_ship_to_party_id);
5692                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5693               'p_rounding_bill_to_party_id :'||p_rounding_bill_to_party_id);
5694                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5695               'p_line_amt_includes_tax_flag :'||p_line_amt_includes_tax_flag);
5696                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5697               'p_line_amt_includes_tax_flag :'||p_line_amt_includes_tax_flag);
5698                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5699               'p_line_amt_includes_tax_flag :'||p_line_amt_includes_tax_flag);
5700     END IF;
5701 
5702     IF (p_source_trx_name = 'Asset Relocation' AND
5703         p_tax_src_params_rec.alc_serialized_yn IN ('Y', 'L') AND
5704         p_alc_ser_def_code IN ('A', 'F')) THEN
5705       l_alc_fetch_code := TRUE;
5706     ELSIF (p_source_trx_name = 'Asset Relocation' AND
5707           (p_tax_src_params_rec.alc_serialized_yn IS NULL OR
5708            p_tax_src_params_rec.alc_serialized_yn = 'N')) THEN
5709       l_alc_fetch_code := TRUE;
5710     END IF;
5711 
5712     IF (l_alc_fetch_code OR p_source_trx_name <> 'Asset Relocation') THEN
5713     -- This processing will be done only once for Asset Relocation transaction for
5714     -- the Serialized/Non-Serialized asset. It will be processed as needed for
5715     -- other transactions
5716       -- Get TBC code
5717           get_tbc_code(p_api_version                 => p_api_version,
5718                            p_init_msg_list               => OKC_API.G_FALSE,
5719                            x_return_status               => x_return_status,
5720                            x_msg_count                   => x_msg_count,
5721                    x_msg_data                    => x_msg_data,
5722                    p_sty_id                                          => p_tax_src_params_rec.sty_id,  -- used if pymnts exist
5723                            p_try_id                                          => p_tax_src_params_rec.try_id,
5724                    p_book_class_code             => p_book_class_code,
5725                    p_tax_country_code            => p_tax_src_params_rec.default_taxation_country,
5726                    x_tbc_code                    => lx_tbc_code);
5727 
5728       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5729         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5730       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5731         RAISE OKL_API.G_EXCEPTION_ERROR;
5732       END IF;
5733 
5734       -- Validate TBC Code
5735       IF lx_tbc_code IS NOT NULL THEN
5736         validate_tax_code(
5737           p_api_version     => p_api_version,
5738           p_init_msg_list   => p_init_msg_list,
5739           x_return_status   => x_return_status,
5740           x_msg_count       => x_msg_count,
5741           x_msg_data        => x_msg_data,
5742           p_trx_date        => p_tax_src_params_rec.trx_date,
5743           p_tbc_code        => lx_tbc_code,
5744           x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
5745 
5746         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5747           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5748         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5749           RAISE OKL_API.G_EXCEPTION_ERROR;
5750         END IF;
5751       END IF;
5752 
5753       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5754         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5755                   'lx_tbc_code'||lx_tbc_code);
5756       END IF;
5757 
5758       -- Get the first level determinant for TBC basing on transaction, if the value is null
5759       IF lx_tbc_code IS NULL OR lx_tax_valid_code = 'F' THEN
5760         IF p_source_trx_name IN ('Tax Schedule', 'Estimated Billing') THEN
5761           lx_tbc_code := 'SALES_TRANSACTION';
5762         ELSE
5763           lx_tbc_code := 'BOOKING';
5764         END IF;
5765       END IF;
5766 
5767       IF (p_source_trx_name = 'Asset Relocation' AND
5768           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
5769           p_alc_ser_def_code = 'F') THEN
5770         G_TBC_CODE := lx_tbc_code;
5771       END IF;
5772 
5773       -- Get PC code
5774       get_pc_code(p_api_version                 => p_api_version,
5775                           p_init_msg_list               => OKC_API.G_FALSE,
5776                           x_return_status               => x_return_status,
5777                           x_msg_count                   => x_msg_count,
5778                   x_msg_data                    => x_msg_data,
5779                   p_sty_id                                          => p_tax_src_params_rec.sty_id,  -- used if pymnts exist
5780                   p_purchase_option_code        => p_prch_opt_det,
5781                   p_int_disclosed_code          => p_int_disclosed_det,
5782                   p_title_trnsfr_code           => p_title_trnsfr_code,
5783                   p_sale_lease_back_code        => p_sale_lease_back_code,
5784                   p_lease_purchased_code        => p_lease_purchased_code,
5785                   p_tax_country_code            => p_tax_src_params_rec.default_taxation_country,
5786                   x_pc_code                     => lx_pc_code);
5787 
5788       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5789         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5790       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5791         RAISE OKL_API.G_EXCEPTION_ERROR;
5792       END IF;
5793 
5794       -- Validate PC Code
5795       IF lx_pc_code IS NOT NULL THEN
5796         validate_tax_code(
5797             p_api_version     => p_api_version,
5798             p_init_msg_list   => p_init_msg_list,
5799             x_return_status   => x_return_status,
5800             x_msg_count       => x_msg_count,
5801             x_msg_data        => x_msg_data,
5802             p_trx_date        => p_tax_src_params_rec.trx_date,
5803             p_pc_code         => lx_pc_code,
5804             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
5805 
5806         IF (lx_tax_valid_code = 'F') THEN
5807           lx_pc_code := null;
5808         END IF;
5809 
5810         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5811           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5812         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5813           RAISE OKL_API.G_EXCEPTION_ERROR;
5814         END IF;
5815       END IF;
5816 
5817       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5818         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5819                   'lx_pc_code'||lx_pc_code);
5820       END IF;
5821 
5822       IF (p_source_trx_name = 'Asset Relocation' AND
5823           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
5824           p_alc_ser_def_code = 'F') THEN
5825         G_PC_CODE := lx_pc_code;
5826       END IF;
5827 
5828       -- contract level call begin
5829       -- Get UFC code
5830           get_ufc_code(p_api_version                 => p_api_version,
5831                            p_init_msg_list               => OKC_API.G_FALSE,
5832                            x_return_status               => x_return_status,
5833                            x_msg_count                   => x_msg_count,
5834                    x_msg_data                    => x_msg_data,
5835                            p_purchase_option             => p_prch_opt_det,
5836                                    p_fin_product_id                          => p_fin_prod_id_det,
5837                            p_try_id                                          => p_tax_src_params_rec.try_id,
5838                            p_sty_id                                          => p_tax_src_params_rec.sty_id,  -- used if pymnts exist
5839                            p_int_disclosed_code              => p_int_disclosed_det,
5840                            p_title_trnsfr_code               => p_title_trnsfr_code, -- asset level
5841                            p_sale_lease_back_code                => p_sale_lease_back_code, -- asset level
5842                            p_lease_purchased_code                => p_lease_purchased_code, -- asset level
5843                            p_equip_usage_code                    => p_equip_usage_code ,-- asset level
5844                            p_vendor_site_id                          => p_vendor_site_id, -- asset level
5845                            p_age_of_equip                                => p_age_of_equip, -- asset level
5846                    p_term_quote_type_code        => p_term_quote_type_code,
5847                    p_term_quote_reason_code      => p_term_quote_reason_code,
5848                    p_tax_country_code            => p_tax_src_params_rec.default_taxation_country,
5849                            x_ufc_code                    => lx_ufc_code);
5850 
5851       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5852         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5853       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5854         RAISE OKL_API.G_EXCEPTION_ERROR;
5855       END IF;
5856 
5857       -- Validate UFC Code
5858       IF lx_ufc_code IS NOT NULL THEN
5859         validate_tax_code(
5860             p_api_version     => p_api_version,
5861             p_init_msg_list   => p_init_msg_list,
5862             x_return_status   => x_return_status,
5863             x_msg_count       => x_msg_count,
5864             x_msg_data        => x_msg_data,
5865             p_trx_date        => p_tax_src_params_rec.trx_date,
5866             p_ufc_code        => lx_ufc_code,
5867             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
5868 
5869         IF (lx_tax_valid_code = 'F') THEN
5870           lx_ufc_code := null;
5871         END IF;
5872 
5873         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5874           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5875         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5876           RAISE OKL_API.G_EXCEPTION_ERROR;
5877         END IF;
5878       END IF;
5879 
5880       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5881         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5882                   'lx_ufc_code'||lx_ufc_code);
5883       END IF;
5884 
5885       IF (p_source_trx_name = 'Asset Relocation' AND
5886           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
5887           p_alc_ser_def_code = 'F') THEN
5888         G_UFC_CODE := lx_ufc_code;
5889       END IF;
5890 
5891     END IF;
5892 
5893         -- Check if taxable basis override applies
5894         IF p_fma_id IS NOT NULL THEN
5895           -- execute tax basis override formula, pass tax determinants
5896           l_add_params(1).name  := 'PURCHASE_OPTION';
5897           l_add_params(1).value := p_prch_opt_det;
5898 
5899           l_add_params(2).name      := 'FINANCIAL_PRODUCT_ID';
5900           l_add_params(2).value := p_fin_prod_id_det;
5901 
5902           l_add_params(3).name  := 'TRX_TYPE_ID';
5903           l_add_params(3).value := p_tax_src_params_rec.try_id;
5904 
5905           l_add_params(4).name  := 'STREAM_TYPE_ID';
5906           l_add_params(4).value := p_tax_src_params_rec.sty_id;
5907 
5908           l_add_params(5).name  := 'INTEREST_DISCLOSED';
5909           l_add_params(5).value := p_int_disclosed_det;
5910 
5911           l_add_params(6).name  := 'TRANSFER_OF_TITLE';
5912           l_add_params(6).value := p_title_trnsfr_code;
5913 
5914           l_add_params(7).name  := 'SALE_LEASE_BACK';
5915           l_add_params(7).value := p_sale_lease_back_code;
5916 
5917           l_add_params(8).name  := 'PURCHASE_OF_LEASE';
5918           l_add_params(8).value := p_lease_purchased_code;
5919 
5920           l_add_params(9).name  := 'USAGE_OF_EQUIPMENT';
5921           l_add_params(9).value := p_equip_usage_code;
5922 
5923           l_add_params(10).name := 'VENDOR_SITE_ID';
5924           l_add_params(10).value := p_vendor_site_id;
5925 
5926           l_add_params(11).name := 'AGE_OF_EQUIPMENT';
5927           l_add_params(11).value        := p_age_of_equip;
5928 
5929           l_add_params(12).name := 'BOOK_CLASS';
5930           l_add_params(12).value        := p_book_class_code;
5931 
5932           l_add_params(13).name := 'BILL_TO_PARTY_SITE_ID';
5933           l_add_params(13).value        := p_tax_src_params_rec.bill_to_party_site_id;
5934 
5935           l_add_params(14).name := 'BILL_TO_LOCATION_ID';
5936           l_add_params(14).value        := p_tax_src_params_rec.bill_to_location_id;
5937 
5938           l_add_params(15).name := 'BILL_TO_PARTY_ID';
5939           l_add_params(15).value        := p_tax_src_params_rec.bill_to_party_id;
5940 
5941           l_add_params(16).name := 'SHIP_TO_PARTY_SITE_ID';
5942           l_add_params(16).value        :=  p_tax_src_params_rec.ship_to_party_site_id;
5943 
5944           l_add_params(17).name := 'SHIP_TO_LOCATION_ID';
5945           l_add_params(17).value        :=  p_tax_src_params_rec.ship_to_location_id;
5946 
5947           l_add_params(18).name := 'SHIP_TO_PARTY_ID';
5948           l_add_params(18).value        :=  p_tax_src_params_rec.ship_to_party_id;
5949 
5950           -- Directly Mapped
5951           l_add_params(19).name := 'BILL_TO_SITE_USE_ID';
5952           l_add_params(19).value        :=  p_tax_src_params_rec.bill_to_cust_acct_site_use_id;
5953 
5954           l_add_params(20).name := 'INVENTORY_ITEM_ID';
5955           l_add_params(20).value        := p_tax_src_params_rec.inventory_item_id;
5956 
5957           l_add_params(21).name := 'SHIP_TO_SITE_USE_ID';
5958           l_add_params(21).value        := p_tax_src_params_rec.ship_to_cust_acct_site_use_id;
5959 
5960           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - begin
5961           --'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
5962           l_add_params(22).name := 'LINE_NAME';
5963           l_add_params(22).value  := p_tax_src_params_rec.line_name;
5964 
5965           l_add_params(23).name := 'SOURCE_TRX_NAME';
5966           l_add_params(23).value  := p_source_trx_name;
5967 
5968           l_add_params(24).name := 'DEFAULT_TAXABLE_BASIS';
5969           l_add_params(24).value  := p_tax_src_params_rec.line_amt;
5970           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - end
5971 
5972           l_next_index := 25;  --SECHAWLA 04-Jan-08 6651621 - Added
5973 
5974           IF p_sales_quote_id IS NOT NULL THEN
5975             l_add_params(l_next_index).name   := 'SALES_QUOTE_ID'; --SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5976             l_add_params(l_next_index).value      := p_sales_quote_id;--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5977             l_next_index := l_next_index + 1;
5978           END IF;
5979 
5980           IF (p_source_trx_name = 'Estimated Billing') THEN
5981             l_add_params(l_next_index).name   := 'TERM_QUOTE_TYPE_CODE';--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5982             l_add_params(l_next_index).value      := p_term_quote_type_code;--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5983 
5984             l_next_index := l_next_index + 1; --SECHAWLA 04-Jan-08 6651621 - Added
5985 
5986             l_add_params(l_next_index).name   := 'TERM_QUOTE_REASON_CODE';--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5987             l_add_params(l_next_index).value      := p_term_quote_reason_code;--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5988           END IF;
5989 
5990       okl_am_util_pvt.get_formula_value(
5991                             p_formula_name           => p_formula_name,
5992                             p_chr_id                 => p_tax_src_params_rec.khr_id,  -- will be NULL for sales Quote tax call
5993                             p_cle_id                 => p_tax_src_params_rec.kle_id,  -- will be NULL for sales Quote tax call
5994                             p_additional_parameters  => l_add_params,
5995                             x_formula_value          => l_assessable_value,  --OVERRIDEN TAXABLE BASIS
5996                             x_return_status          => x_return_status);
5997 
5998       IF (x_return_status IN (OKL_API.G_RET_STS_UNEXP_ERROR, OKL_API.G_RET_STS_ERROR)) THEN
5999         OKL_API.init_msg_list('T');
6000         OKL_API.set_message(p_app_name      => 'OKL',
6001                             p_msg_name      => 'OKL_TX_FRM_TXN_ERR',
6002                             p_token1        => 'FMA_NAME',
6003                             p_token1_value  => p_formula_name,
6004                             p_token2        => 'TRX_NAME ',
6005                                                         p_token2_value  => p_source_trx_name);
6006          RAISE OKL_API.G_EXCEPTION_ERROR;
6007       END IF;
6008 
6009       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6010         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6011                   'calculated l_assessable_value '||l_assessable_value);
6012       END IF;
6013         END IF;
6014 
6015     -- Populate the line_amt in l_assessable_value if null
6016     IF l_assessable_value IS NULL THEN
6017       l_assessable_value  := p_tax_src_params_rec.line_amt;
6018       l_line_amt                  := p_tax_src_params_rec.line_amt;
6019     ELSE
6020       l_line_amt                  := l_assessable_value;
6021     END IF;
6022 
6023     -- Get Set of Books ID
6024     OPEN c_get_set_of_books_id(cp_org_id  =>  p_tax_src_params_rec.org_id);
6025     FETCH c_get_set_of_books_id INTO l_set_of_books_id;
6026     CLOSE c_get_set_of_books_id;
6027 
6028     -- Get the tax classification code
6029     IF (l_alc_fetch_code OR p_source_trx_name <> 'Asset Relocation') THEN
6030           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6031         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6032                   'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
6033       END IF;
6034 
6035       OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
6036                       x_return_status                 =>  x_return_status,
6037                       p_ship_to_site_use_id           =>  p_tax_src_params_rec.ship_to_cust_acct_site_use_id,
6038                       p_bill_to_site_use_id           =>  p_tax_src_params_rec.bill_to_cust_acct_site_use_id,
6039                       p_inventory_item_id             =>  p_tax_src_params_rec.inventory_item_id,
6040                       p_organization_id               =>  p_tax_src_params_rec.org_id,
6041                       p_set_of_books_id               =>  l_set_of_books_id,
6042                       p_trx_date                      =>  p_tax_src_params_rec.trx_date,
6043                       p_trx_type_id                   =>  null,
6044                       p_entity_code                   =>  G_AR_ENTITY_CODE,
6045                       p_event_class_code              =>  G_INVOICE_EVENT_CLASS_CODE,
6046                       p_application_id                =>  G_AR_APPLICATION_ID,
6047                       p_internal_organization_id      =>  p_tax_src_params_rec.org_id,
6048                       x_tax_classification_code       =>  lx_tax_classification_code );
6049 
6050       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6051         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6052                   'Return Status '|| x_return_status);
6053         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6054                   'lx_tax_classification_code = '|| lx_tax_classification_code);
6055       END IF;
6056 
6057       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6058         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6059       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6060         RAISE OKL_API.G_EXCEPTION_ERROR;
6061       END IF;
6062 
6063       IF (p_source_trx_name = 'Asset Relocation' AND
6064           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
6065           p_alc_ser_def_code = 'F') THEN
6066         G_TAX_CLASS_CODE := lx_tax_classification_code;
6067       END IF;
6068 
6069     END IF;
6070 
6071     IF (p_source_trx_name = 'Asset Relocation' AND
6072         p_tax_src_params_rec.alc_serialized_yn IN ('Y', 'L') AND
6073         p_alc_ser_def_code = 'N') THEN
6074       lx_ufc_code                := G_UFC_CODE;
6075       lx_tbc_code                := G_TBC_CODE;
6076       lx_pc_code                 := G_PC_CODE;
6077       lx_tax_classification_code := G_TAX_CLASS_CODE;
6078     END IF;
6079 
6080     -- populate okl_tax_sources pl/sql table
6081     px_tax_sources_tbl(p_tax_call_cnt).id                                  := get_seq_id;
6082     px_tax_sources_tbl(p_tax_call_cnt).khr_id                              := p_tax_src_params_rec.khr_id;
6083     px_tax_sources_tbl(p_tax_call_cnt).kle_id                              := p_tax_src_params_rec.kle_id;
6084         px_tax_sources_tbl(p_tax_call_cnt).sty_id                              := p_tax_src_params_rec.sty_id;
6085     px_tax_sources_tbl(p_tax_call_cnt).inventory_item_id                   := p_tax_src_params_rec.inventory_item_id;
6086     px_tax_sources_tbl(p_tax_call_cnt).legal_entity_id                     := p_tax_src_params_rec.legal_entity_id;
6087     px_tax_sources_tbl(p_tax_call_cnt).line_amt                            := l_line_amt;
6088     px_tax_sources_tbl(p_tax_call_cnt).line_name                           := p_tax_src_params_rec.line_name;
6089     px_tax_sources_tbl(p_tax_call_cnt).line_intended_use                   := p_tax_src_params_rec.line_intended_use;
6090     px_tax_sources_tbl(p_tax_call_cnt).org_id                              := p_tax_src_params_rec.org_id;
6091     px_tax_sources_tbl(p_tax_call_cnt).product_type                        := G_DEFAULT_PRODUCT_TYPE;
6092     px_tax_sources_tbl(p_tax_call_cnt).assessable_value                    := l_assessable_value;
6093     px_tax_sources_tbl(p_tax_call_cnt).asset_number                        := p_tax_src_params_rec.asset_number;
6094     px_tax_sources_tbl(p_tax_call_cnt).reported_yn                         := p_tax_src_params_rec.reported_yn;
6095 
6096     px_tax_sources_tbl(p_tax_call_cnt).trx_id                              := p_tax_src_params_rec.trx_id;
6097 
6098     IF (p_source_trx_name = 'Estimated Billing') THEN
6099       px_tax_sources_tbl(p_tax_call_cnt).trx_line_id                       := p_tax_src_params_rec.trx_line_id;
6100     ELSE
6101       px_tax_sources_tbl(p_tax_call_cnt).trx_line_id                       := px_tax_sources_tbl(p_tax_call_cnt).id;
6102     END IF;
6103 
6104     px_tax_sources_tbl(p_tax_call_cnt).trx_level_type                      := G_TRX_LEVEL_TYPE;
6105     px_tax_sources_tbl(p_tax_call_cnt).trx_currency_code                   := p_tax_src_params_rec.trx_currency_code;
6106     px_tax_sources_tbl(p_tax_call_cnt).trx_date                            := p_tax_src_params_rec.trx_date;
6107     px_tax_sources_tbl(p_tax_call_cnt).try_id                              := p_tax_src_params_rec.try_id;
6108 
6109     px_tax_sources_tbl(p_tax_call_cnt).entity_code      := p_tax_src_params_rec.entity_code;
6110     px_tax_sources_tbl(p_tax_call_cnt).event_class_code := p_tax_src_params_rec.event_class_code;
6111     px_tax_sources_tbl(p_tax_call_cnt).application_id   := G_OKL_APPLICATION_ID;
6112         px_tax_sources_tbl(p_tax_call_cnt).request_id       := null;
6113 
6114         px_tax_sources_tbl(p_tax_call_cnt).program_id             := null;
6115         px_tax_sources_tbl(p_tax_call_cnt).program_application_id := null;
6116         px_tax_sources_tbl(p_tax_call_cnt).program_update_date    := null;
6117 
6118         px_tax_sources_tbl(p_tax_call_cnt).attribute_category    := null;
6119         px_tax_sources_tbl(p_tax_call_cnt).attribute1            := null;
6120         px_tax_sources_tbl(p_tax_call_cnt).attribute2            := null;
6121         px_tax_sources_tbl(p_tax_call_cnt).attribute3            := null;
6122         px_tax_sources_tbl(p_tax_call_cnt).attribute4            := null;
6123         px_tax_sources_tbl(p_tax_call_cnt).attribute5            := null;
6124         px_tax_sources_tbl(p_tax_call_cnt).attribute6            := null;
6125         px_tax_sources_tbl(p_tax_call_cnt).attribute7            := null;
6126         px_tax_sources_tbl(p_tax_call_cnt).attribute8            := null;
6127         px_tax_sources_tbl(p_tax_call_cnt).attribute9            := null;
6128         px_tax_sources_tbl(p_tax_call_cnt).attribute10           := null;
6129         px_tax_sources_tbl(p_tax_call_cnt).attribute11           := null;
6130         px_tax_sources_tbl(p_tax_call_cnt).attribute12           := null;
6131         px_tax_sources_tbl(p_tax_call_cnt).attribute13           := null;
6132         px_tax_sources_tbl(p_tax_call_cnt).attribute14           := null;
6133         px_tax_sources_tbl(p_tax_call_cnt).attribute15           := null;
6134         px_tax_sources_tbl(p_tax_call_cnt).created_by            := G_USER_ID;
6135         px_tax_sources_tbl(p_tax_call_cnt).creation_date         := SYSDATE;
6136         px_tax_sources_tbl(p_tax_call_cnt).last_updated_by       := G_USER_ID;
6137         px_tax_sources_tbl(p_tax_call_cnt).last_update_date      := SYSDATE;
6138         px_tax_sources_tbl(p_tax_call_cnt).last_update_login     := G_LOGIN_ID;
6139         px_tax_sources_tbl(p_tax_call_cnt).object_version_number := null;
6140 
6141     px_tax_sources_tbl(p_tax_call_cnt).currency_conversion_date            := p_tax_src_params_rec.currency_conversion_date;
6142     px_tax_sources_tbl(p_tax_call_cnt).currency_conversion_rate            := p_tax_src_params_rec.currency_conversion_rate;
6143     px_tax_sources_tbl(p_tax_call_cnt).currency_conversion_type            := p_tax_src_params_rec.currency_conversion_type;
6144 
6145     px_tax_sources_tbl(p_tax_call_cnt).product_fisc_classification         := null;
6146     px_tax_sources_tbl(p_tax_call_cnt).product_category                    := lx_pc_code;
6147     px_tax_sources_tbl(p_tax_call_cnt).user_defined_fisc_class             := lx_ufc_code;
6148     px_tax_sources_tbl(p_tax_call_cnt).tax_classification_code             := lx_tax_classification_code;
6149     px_tax_sources_tbl(p_tax_call_cnt).tax_reporting_flag                  := p_tax_src_params_rec.tax_reporting_flag;
6150     px_tax_sources_tbl(p_tax_call_cnt).provnl_tax_determination_date       := null;
6151     px_tax_sources_tbl(p_tax_call_cnt).default_taxation_country            := p_tax_src_params_rec.default_taxation_country;
6152     px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_entity_code            := p_tax_src_params_rec.adjusted_doc_entity_code;
6153     px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_event_class_code       := p_tax_src_params_rec.adjusted_doc_event_class_code;
6154     px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_trx_id                 := p_tax_src_params_rec.adjusted_doc_trx_id;
6155         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_trx_line_id            := p_tax_src_params_rec.adjusted_doc_trx_line_id;
6156         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_trx_level_type         := p_tax_src_params_rec.adjusted_doc_trx_level_type;
6157         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_number                 := p_tax_src_params_rec.adjusted_doc_number;
6158         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_date                   := p_tax_src_params_rec.adjusted_doc_date;
6159         px_tax_sources_tbl(p_tax_call_cnt).tax_call_type_code                  := p_tax_src_params_rec.tax_call_type_code;
6160         px_tax_sources_tbl(p_tax_call_cnt).trx_business_category               := lx_tbc_code;
6161         px_tax_sources_tbl(p_tax_call_cnt).tax_line_status_code                := p_tax_src_params_rec.tax_line_status_code;
6162 
6163     px_tax_sources_tbl(p_tax_call_cnt).ship_to_location_id                 := p_tax_src_params_rec.ship_to_location_id;
6164     px_tax_sources_tbl(p_tax_call_cnt).ship_to_party_site_id               := p_tax_src_params_rec.ship_to_party_site_id;
6165     px_tax_sources_tbl(p_tax_call_cnt).ship_to_party_id                    := p_tax_src_params_rec.ship_to_party_id;
6166     px_tax_sources_tbl(p_tax_call_cnt).ship_to_cust_acct_site_use_id       := p_tax_src_params_rec.ship_to_cust_acct_site_use_id;
6167     px_tax_sources_tbl(p_tax_call_cnt).bill_to_cust_acct_id                := p_tax_src_params_rec.bill_to_cust_acct_id;
6168     px_tax_sources_tbl(p_tax_call_cnt).bill_to_party_site_id               := p_tax_src_params_rec.bill_to_party_site_id;
6169     px_tax_sources_tbl(p_tax_call_cnt).bill_to_location_id                 := p_tax_src_params_rec.bill_to_location_id;
6170     px_tax_sources_tbl(p_tax_call_cnt).bill_to_party_id                    := p_tax_src_params_rec.bill_to_party_id;
6171     px_tax_sources_tbl(p_tax_call_cnt).bill_to_cust_acct_site_use_id       := p_tax_src_params_rec.bill_to_cust_acct_site_use_id;
6172 
6173     -- Populate ALC_SERIALIZED_YN for ALC transaction
6174     IF (p_source_trx_name = 'Asset Relocation') THEN
6175       IF (p_tax_src_params_rec.alc_serialized_yn IN ('Y', 'L')) THEN
6176         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_yn                 := p_tax_src_params_rec.alc_serialized_yn;
6177         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_total_line_amt     := p_tax_src_params_rec.alc_serialized_total_line_amt;
6178       ELSE
6179         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_yn                 := 'N';
6180         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_total_line_amt     := p_tax_src_params_rec.alc_serialized_total_line_amt;
6181       END IF;
6182     END IF;
6183 
6184         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6185          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6186                   'POPULATED px_tax_sources_tbl ');
6187     END IF;
6188 
6189     IF (p_line_params_tbl_cnt IS NULL) THEN
6190       px_line_params_tbl(p_tax_call_cnt).application_id                     := G_OKL_APPLICATION_ID;
6191       px_line_params_tbl(p_tax_call_cnt).trx_id                             := p_tax_src_params_rec.trx_id;
6192       px_line_params_tbl(p_tax_call_cnt).internal_organization_id           := p_tax_src_params_rec.org_id;
6193       px_line_params_tbl(p_tax_call_cnt).entity_code                        := p_tax_src_params_rec.entity_code;
6194       px_line_params_tbl(p_tax_call_cnt).event_class_code                   := p_tax_src_params_rec.event_class_code;
6195       px_line_params_tbl(p_tax_call_cnt).event_type_code                    := p_event_type_code;
6196       px_line_params_tbl(p_tax_call_cnt).trx_date                           := p_tax_src_params_rec.trx_date;
6197       px_line_params_tbl(p_tax_call_cnt).ledger_id                          := p_ledger_id;
6198       px_line_params_tbl(p_tax_call_cnt).legal_entity_id                    := p_tax_src_params_rec.legal_entity_id;
6199       px_line_params_tbl(p_tax_call_cnt).trx_level_type                     := p_tax_src_params_rec.trx_level_type;
6200       px_line_params_tbl(p_tax_call_cnt).line_level_action                  := p_line_level_action;
6201 
6202       IF (p_source_trx_name = 'Estimated Billing') THEN
6203         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := p_tax_src_params_rec.trx_line_id;
6204       ELSE
6205         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := px_tax_sources_tbl(p_tax_call_cnt).id;
6206       END IF;
6207 
6208       px_line_params_tbl(p_tax_call_cnt).line_amt                           := l_line_amt;
6209       px_line_params_tbl(p_tax_call_cnt).tax_reporting_flag                 := p_tax_src_params_rec.tax_reporting_flag;
6210       px_line_params_tbl(p_tax_call_cnt).default_taxation_country           := p_tax_src_params_rec.default_taxation_country;
6211       px_line_params_tbl(p_tax_call_cnt).product_type                       := p_tax_src_params_rec.product_type;
6212 
6213       --sechawla 9121244  : p_tax_src_params_rec.tax_classification_code does not have tax classification code populated
6214       --correct variable to use is lx_tax_classification_code
6215       --px_line_params_tbl(p_tax_call_cnt).output_tax_classification_code     := p_tax_src_params_rec.tax_classification_code;
6216       px_line_params_tbl(p_tax_call_cnt).output_tax_classification_code     := lx_tax_classification_code;
6217       --sechawla 9121244  : end
6218 
6219       px_line_params_tbl(p_tax_call_cnt).assessable_value                   := l_assessable_value;
6220       px_line_params_tbl(p_tax_call_cnt).receivables_trx_type_id            := p_cust_trx_type_id;
6221       px_line_params_tbl(p_tax_call_cnt).product_id                         := p_tax_src_params_rec.inventory_item_id;
6222       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_entity_code           := p_tax_src_params_rec.adjusted_doc_entity_code;
6223       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_event_class_code      := p_tax_src_params_rec.adjusted_doc_event_class_code;
6224       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_trx_id                := p_tax_src_params_rec.adjusted_doc_trx_id;
6225       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_line_id               := p_tax_src_params_rec.adjusted_doc_trx_line_id;
6226       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_trx_level_type        := p_tax_src_params_rec.adjusted_doc_trx_level_type;
6227       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_number                := p_tax_src_params_rec.adjusted_doc_number;
6228       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_date                  := p_tax_src_params_rec.adjusted_doc_date;
6229       px_line_params_tbl(p_tax_call_cnt).line_amt_includes_tax_flag         := p_line_amt_includes_tax_flag;
6230 
6231       px_line_params_tbl(p_tax_call_cnt).trx_business_category              := lx_tbc_code;
6232       px_line_params_tbl(p_tax_call_cnt).product_category                   := lx_pc_code;
6233       px_line_params_tbl(p_tax_call_cnt).user_defined_fisc_class            := lx_ufc_code;
6234       px_line_params_tbl(p_tax_call_cnt).line_intended_use                  := p_tax_src_params_rec.line_intended_use;
6235       px_line_params_tbl(p_tax_call_cnt).ship_to_cust_acct_site_use_id      := p_tax_src_params_rec.ship_to_cust_acct_site_use_id;
6236       px_line_params_tbl(p_tax_call_cnt).bill_to_cust_acct_site_use_id      := p_tax_src_params_rec.bill_to_cust_acct_site_use_id;
6237       px_line_params_tbl(p_tax_call_cnt).bill_to_party_site_id              := p_tax_src_params_rec.bill_to_party_site_id;
6238       px_line_params_tbl(p_tax_call_cnt).bill_to_location_id                := p_tax_src_params_rec.bill_to_location_id;
6239       px_line_params_tbl(p_tax_call_cnt).bill_to_party_id                   := p_tax_src_params_rec.bill_to_party_id;
6240       px_line_params_tbl(p_tax_call_cnt).ship_to_party_site_id              := p_tax_src_params_rec.ship_to_party_site_id;
6241       px_line_params_tbl(p_tax_call_cnt).ship_to_location_id                := p_tax_src_params_rec.ship_to_location_id;
6242       px_line_params_tbl(p_tax_call_cnt).ship_to_party_id                   := p_tax_src_params_rec.ship_to_party_id;
6243       px_line_params_tbl(p_tax_call_cnt).rounding_ship_to_party_id          := p_rounding_ship_to_party_id;
6244       px_line_params_tbl(p_tax_call_cnt).rounding_bill_to_party_id          := p_rounding_bill_to_party_id;
6245       px_line_params_tbl(p_tax_call_cnt).trx_currency_code                  := p_tax_src_params_rec.trx_currency_code;
6246       px_line_params_tbl(p_tax_call_cnt).precision                          := p_precision;
6247       px_line_params_tbl(p_tax_call_cnt).minimum_accountable_unit           := p_minimum_accountable_unit;
6248       px_line_params_tbl(p_tax_call_cnt).currency_conversion_date           := p_tax_src_params_rec.currency_conversion_date;
6249       px_line_params_tbl(p_tax_call_cnt).currency_conversion_rate           := p_tax_src_params_rec.currency_conversion_rate;
6250       px_line_params_tbl(p_tax_call_cnt).currency_conversion_type               := p_tax_src_params_rec.currency_conversion_type;
6251     ELSE -- Applicable for 'Rebook' transaction only
6252       px_line_params_tbl(p_line_params_tbl_cnt).application_id              := G_OKL_APPLICATION_ID;
6253       px_line_params_tbl(p_line_params_tbl_cnt).trx_id                      := p_tax_src_params_rec.trx_id;
6254       px_line_params_tbl(p_line_params_tbl_cnt).internal_organization_id    := p_tax_src_params_rec.org_id;
6255       px_line_params_tbl(p_line_params_tbl_cnt).entity_code                 := p_tax_src_params_rec.entity_code;
6256       px_line_params_tbl(p_line_params_tbl_cnt).event_class_code            := p_tax_src_params_rec.event_class_code;
6257       px_line_params_tbl(p_line_params_tbl_cnt).event_type_code             := p_event_type_code;
6258       px_line_params_tbl(p_line_params_tbl_cnt).trx_date                    := p_tax_src_params_rec.trx_date;
6259       px_line_params_tbl(p_line_params_tbl_cnt).ledger_id                   := p_ledger_id;
6260       px_line_params_tbl(p_line_params_tbl_cnt).legal_entity_id             := p_tax_src_params_rec.legal_entity_id;
6261       px_line_params_tbl(p_line_params_tbl_cnt).trx_level_type              := p_tax_src_params_rec.trx_level_type;
6262       px_line_params_tbl(p_line_params_tbl_cnt).line_level_action           := p_line_level_action;
6263 
6264       IF (p_source_trx_name = 'Estimated Billing') THEN
6265         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := p_tax_src_params_rec.trx_line_id;
6266       ELSE
6267         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := px_tax_sources_tbl(p_tax_call_cnt).id;
6268       END IF;
6269 
6270       px_line_params_tbl(p_line_params_tbl_cnt).line_amt                    := l_line_amt;
6271       px_line_params_tbl(p_line_params_tbl_cnt).tax_reporting_flag          := p_tax_src_params_rec.tax_reporting_flag;
6272       px_line_params_tbl(p_line_params_tbl_cnt).default_taxation_country    := p_tax_src_params_rec.default_taxation_country;
6273       px_line_params_tbl(p_line_params_tbl_cnt).product_type                := p_tax_src_params_rec.product_type;
6274 
6275       --sechawla 9121244  : p_tax_src_params_rec.tax_classification_code does not have tax classification code populated
6276       --correct variable to use is lx_tax_classification_code
6277       --px_line_params_tbl(p_line_params_tbl_cnt).output_tax_classification_code := p_tax_src_params_rec.tax_classification_code;
6278       px_line_params_tbl(p_line_params_tbl_cnt).output_tax_classification_code     := lx_tax_classification_code;
6279       --sechawla 9121244  : end
6280 
6281       px_line_params_tbl(p_line_params_tbl_cnt).assessable_value            := l_assessable_value;
6282       px_line_params_tbl(p_line_params_tbl_cnt).receivables_trx_type_id     := p_cust_trx_type_id;
6283       px_line_params_tbl(p_line_params_tbl_cnt).product_id                  := p_tax_src_params_rec.inventory_item_id;
6284       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_entity_code    := p_tax_src_params_rec.adjusted_doc_entity_code;
6285       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_event_class_code  := p_tax_src_params_rec.adjusted_doc_event_class_code;
6286       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_trx_id         := p_tax_src_params_rec.adjusted_doc_trx_id;
6287       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_line_id        := p_tax_src_params_rec.adjusted_doc_trx_line_id;
6288       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_trx_level_type := p_tax_src_params_rec.adjusted_doc_trx_level_type;
6289       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_number         := p_tax_src_params_rec.adjusted_doc_number;
6290       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_date           := p_tax_src_params_rec.adjusted_doc_date;
6291       px_line_params_tbl(p_line_params_tbl_cnt).line_amt_includes_tax_flag  := p_line_amt_includes_tax_flag;
6292 
6293       px_line_params_tbl(p_line_params_tbl_cnt).trx_business_category       := lx_tbc_code;
6294       px_line_params_tbl(p_line_params_tbl_cnt).product_category            := lx_pc_code;
6295       px_line_params_tbl(p_line_params_tbl_cnt).user_defined_fisc_class     := lx_ufc_code;
6296       px_line_params_tbl(p_line_params_tbl_cnt).line_intended_use           := p_tax_src_params_rec.line_intended_use;
6297       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_cust_acct_site_use_id  := p_tax_src_params_rec.ship_to_cust_acct_site_use_id;
6298       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_cust_acct_site_use_id  := p_tax_src_params_rec.bill_to_cust_acct_site_use_id;
6299       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_party_site_id       := p_tax_src_params_rec.bill_to_party_site_id;
6300       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_location_id         := p_tax_src_params_rec.bill_to_location_id;
6301       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_party_id            := p_tax_src_params_rec.bill_to_party_id;
6302       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_party_site_id       := p_tax_src_params_rec.ship_to_party_site_id;
6303       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_location_id         := p_tax_src_params_rec.ship_to_location_id;
6304       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_party_id            := p_tax_src_params_rec.ship_to_party_id;
6305       px_line_params_tbl(p_line_params_tbl_cnt).rounding_ship_to_party_id   := p_rounding_ship_to_party_id;
6306       px_line_params_tbl(p_line_params_tbl_cnt).rounding_bill_to_party_id   := p_rounding_bill_to_party_id;
6307       px_line_params_tbl(p_line_params_tbl_cnt).trx_currency_code           := p_tax_src_params_rec.trx_currency_code;
6308       px_line_params_tbl(p_line_params_tbl_cnt).precision                   := p_precision;
6309       px_line_params_tbl(p_line_params_tbl_cnt).minimum_accountable_unit    := p_minimum_accountable_unit;
6310       px_line_params_tbl(p_line_params_tbl_cnt).currency_conversion_date    := p_tax_src_params_rec.currency_conversion_date;
6311       px_line_params_tbl(p_line_params_tbl_cnt).currency_conversion_rate    := p_tax_src_params_rec.currency_conversion_rate;
6312       px_line_params_tbl(p_line_params_tbl_cnt).currency_conversion_type        := p_tax_src_params_rec.currency_conversion_type;
6313     END IF;
6314 
6315         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6316        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ','End(-)');
6317     END IF;
6318 
6319   EXCEPTION
6320     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6321          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6322                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ',
6323                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6324          END IF;
6325 
6326          IF (c_get_set_of_books_id%ISOPEN) THEN
6327            CLOSE c_get_set_of_books_id;
6328          END IF;
6329 
6330          x_return_status := OKL_API.G_RET_STS_ERROR;
6331     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6332          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6333                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ',
6334                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6335          END IF;
6336 
6337          IF (c_get_set_of_books_id%ISOPEN) THEN
6338            CLOSE c_get_set_of_books_id;
6339          END IF;
6340 
6341          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6342 
6343     WHEN OTHERS THEN
6344          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6345             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ',
6346                   'EXCEPTION :'||sqlerrm);
6347          END IF;
6348 
6349          IF (c_get_set_of_books_id%ISOPEN) THEN
6350            CLOSE c_get_set_of_books_id;
6351          END IF;
6352 
6353          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6354          -- unexpected error
6355          OKL_API.set_message(p_app_name  => g_app_name,
6356                          p_msg_name      => g_unexpected_error,
6357                          p_token1        => g_sqlcode_token,
6358                          p_token1_value  => sqlcode,
6359                          p_token2        => g_sqlerrm_token,
6360                          p_token2_value  => sqlerrm);
6361 
6362   END populate_tax_info;
6363 
6364 /*========================================================================
6365  | PRIVATE PROCEDURE populate_tax_codes
6366  |
6367  | DESCRIPTION
6368  |    This procedure derives the tax codes
6369  |
6370  | CALLED FROM
6371  |     process_tax_schedule_tax
6372  |
6373  |
6374  | CALLS PROCEDURES/FUNCTIONS
6375  |     get_ufc_code()
6376  |
6377  | PARAMETERS
6378  |
6379  | KNOWN ISSUES
6380  |
6381  | NOTES
6382  |
6383  |
6384  | MODIFICATION HISTORY
6385  | Date           Author        Description of Changes
6386  | 22-AUG-07      RRAVIKIR      Created
6387  *=======================================================================*/
6388  PROCEDURE populate_tax_codes(
6389     p_api_version                       IN  NUMBER,
6390     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6391     x_return_status                     OUT NOCOPY VARCHAR2,
6392     x_msg_count                         OUT NOCOPY NUMBER,
6393     x_msg_data                          OUT NOCOPY VARCHAR2,
6394     p_prch_opt_det                                      IN  VARCHAR2,
6395     p_fin_prod_id_det                           IN  NUMBER,
6396     p_int_disclosed_det                         IN  VARCHAR2,
6397     p_title_trnsfr_code                     IN  VARCHAR2,
6398     p_sale_lease_back_code                  IN  VARCHAR2,
6399     p_lease_purchased_code                  IN  VARCHAR2,
6400     p_equip_usage_code                      IN  VARCHAR2,
6401     p_vendor_site_id                        IN  NUMBER,
6402     p_age_of_equip                                      IN  NUMBER,
6403     p_source_trx_name               IN  VARCHAR2,
6404     p_book_class_code               IN  VARCHAR2,
6405     p_tax_code_cnt                  IN  NUMBER,
6406     p_sty_id                        IN  NUMBER,
6407     p_try_id                        IN  NUMBER,
6408     p_tax_country_code              IN  VARCHAR2,
6409     p_khr_id                        IN  NUMBER,
6410     p_kle_id                        IN  NUMBER,
6411     p_bill_to_party_site_id         IN  NUMBER,
6412     p_bill_to_location_id           IN  NUMBER,
6413     p_bill_to_party_id              IN  NUMBER,
6414     p_bill_to_cust_acct_site_id     IN  NUMBER,
6415     p_ship_to_party_site_id         IN  NUMBER DEFAULT NULL,
6416     p_ship_to_location_id           IN  NUMBER DEFAULT NULL,
6417     p_ship_to_party_id              IN  NUMBER DEFAULT NULL,
6418     p_ship_to_cust_acct_site_id     IN  NUMBER DEFAULT NULL,
6419     p_inventory_item_id             IN  NUMBER DEFAULT NULL,
6420     p_org_id                        IN  NUMBER,
6421     p_trx_date                      IN  DATE,
6422     px_tax_codes_tbl                IN  OUT NOCOPY tax_codes_tbl_type) IS
6423 
6424     lx_tbc_code                                         VARCHAR2(30);
6425     lx_ufc_code                     VARCHAR2(30);
6426     lx_pc_code                      VARCHAR2(30);
6427     lx_tax_classification_code      VARCHAR2(50);
6428     l_set_of_books_id               NUMBER;
6429     lx_tax_valid_code               VARCHAR2(1);
6430 
6431     CURSOR c_get_set_of_books_id(cp_org_id IN NUMBER) IS
6432     SELECT set_of_books_id
6433     FROM   ar_system_parameters_all
6434     WHERE  org_id = cp_org_id;
6435 
6436   BEGIN
6437 
6438     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6439         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes','Begin(+)');
6440     END IF;
6441 
6442     --Print Input Variables
6443     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6444         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6445               'p_init_msg_list :'||p_init_msg_list);
6446         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6447               'p_prch_opt_det :'||p_prch_opt_det);
6448         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6449               'p_prch_opt_det :'||p_prch_opt_det);
6450         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6451               'p_fin_prod_id_det :'||p_fin_prod_id_det);
6452         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6453               'p_int_disclosed_det :'||p_int_disclosed_det);
6454         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6455               'p_title_trnsfr_code :'||p_title_trnsfr_code);
6456         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6457               'p_sale_lease_back_code :'||p_sale_lease_back_code);
6458         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6459               'p_lease_purchased_code :'||p_lease_purchased_code);
6460                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6461               'p_equip_usage_code :'||p_equip_usage_code);
6462                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6463               'p_vendor_site_id :'||p_vendor_site_id);
6464         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6465               'p_age_of_equip :'||p_age_of_equip);
6466     END IF;
6467 
6468     -- Get TBC code
6469     get_tbc_code(p_api_version                   => p_api_version,
6470                            p_init_msg_list               => OKC_API.G_FALSE,
6471                            x_return_status               => x_return_status,
6472                            x_msg_count                   => x_msg_count,
6473                    x_msg_data                    => x_msg_data,
6474                    p_sty_id                                          => p_sty_id,  -- used if pymnts exist
6475                            p_try_id                                          => p_try_id,
6476                    p_book_class_code             => p_book_class_code,
6477                    p_tax_country_code            => p_tax_country_code,
6478                    x_tbc_code                    => lx_tbc_code);
6479 
6480     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6481       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6482     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6483       RAISE OKL_API.G_EXCEPTION_ERROR;
6484     END IF;
6485 
6486     -- Validate TBC Code
6487     IF lx_tbc_code IS NOT NULL THEN
6488       validate_tax_code(
6489           p_api_version     => p_api_version,
6490           p_init_msg_list   => p_init_msg_list,
6491           x_return_status   => x_return_status,
6492           x_msg_count       => x_msg_count,
6493           x_msg_data        => x_msg_data,
6494           p_trx_date        => p_trx_date,
6495           p_tbc_code        => lx_tbc_code,
6496           x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
6497 
6498       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6499         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6500       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6501         RAISE OKL_API.G_EXCEPTION_ERROR;
6502       END IF;
6503     END IF;
6504 
6505     -- Get the first level determinant for TBC basing on transaction, if the value is null
6506     IF ((lx_tbc_code IS NULL OR lx_tax_valid_code = 'F')AND p_source_trx_name = 'Tax Schedule') THEN
6507       lx_tbc_code := 'SALES_TRANSACTION';
6508     END IF;
6509 
6510     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6511       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6512                   'lx_tbc_code'||lx_tbc_code);
6513     END IF;
6514 
6515     -- Get PC code
6516     get_pc_code(p_api_version                   => p_api_version,
6517                           p_init_msg_list               => OKC_API.G_FALSE,
6518                           x_return_status               => x_return_status,
6519                           x_msg_count                   => x_msg_count,
6520                   x_msg_data                    => x_msg_data,
6521                   p_sty_id                                          => p_sty_id,
6522                   p_purchase_option_code        => p_prch_opt_det,
6523                   p_int_disclosed_code          => p_int_disclosed_det,
6524                   p_title_trnsfr_code           => p_title_trnsfr_code,
6525                   p_sale_lease_back_code        => p_sale_lease_back_code,
6526                   p_lease_purchased_code        => p_lease_purchased_code,
6527                   p_tax_country_code            => p_tax_country_code,
6528                   x_pc_code                     => lx_pc_code);
6529 
6530     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6531       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6532     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6533       RAISE OKL_API.G_EXCEPTION_ERROR;
6534     END IF;
6535 
6536     -- Validate PC Code
6537     IF lx_pc_code IS NOT NULL THEN
6538       validate_tax_code(
6539             p_api_version     => p_api_version,
6540             p_init_msg_list   => p_init_msg_list,
6541             x_return_status   => x_return_status,
6542             x_msg_count       => x_msg_count,
6543             x_msg_data        => x_msg_data,
6544             p_trx_date        => p_trx_date,
6545             p_pc_code         => lx_pc_code,
6546             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
6547 
6548       IF (lx_tax_valid_code = 'F') THEN
6549         lx_pc_code := null;
6550       END IF;
6551 
6552       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6553         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6554       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6555         RAISE OKL_API.G_EXCEPTION_ERROR;
6556       END IF;
6557     END IF;
6558 
6559     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6560       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6561                   'lx_pc_code'||lx_pc_code);
6562     END IF;
6563 
6564     -- Get UFC code
6565     get_ufc_code(p_api_version                   => p_api_version,
6566                            p_init_msg_list               => OKC_API.G_FALSE,
6567                            x_return_status               => x_return_status,
6568                            x_msg_count                   => x_msg_count,
6569                    x_msg_data                    => x_msg_data,
6570                            p_purchase_option             => p_prch_opt_det,
6571                                    p_fin_product_id                          => p_fin_prod_id_det,
6572                            p_try_id                                          => p_try_id,
6573                            p_sty_id                                          => p_sty_id,  -- used if pymnts exist
6574                            p_int_disclosed_code              => p_int_disclosed_det,
6575                            p_title_trnsfr_code               => p_title_trnsfr_code, -- asset level
6576                            p_sale_lease_back_code                => p_sale_lease_back_code, -- asset level
6577                            p_lease_purchased_code                => p_lease_purchased_code, -- asset level
6578                            p_equip_usage_code                    => p_equip_usage_code ,-- asset level
6579                            p_vendor_site_id                          => p_vendor_site_id, -- asset level
6580                            p_age_of_equip                                => p_age_of_equip, -- asset level
6581                    p_term_quote_type_code        => null,
6582                    p_term_quote_reason_code      => null,
6583                    p_tax_country_code            => p_tax_country_code,
6584                            x_ufc_code                    => lx_ufc_code);
6585 
6586     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6587       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6588     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6589       RAISE OKL_API.G_EXCEPTION_ERROR;
6590     END IF;
6591 
6592     -- Validate UFC Code
6593     IF lx_ufc_code IS NOT NULL THEN
6594       validate_tax_code(
6595             p_api_version     => p_api_version,
6596             p_init_msg_list   => p_init_msg_list,
6597             x_return_status   => x_return_status,
6598             x_msg_count       => x_msg_count,
6599             x_msg_data        => x_msg_data,
6600             p_trx_date        => p_trx_date,
6601             p_ufc_code        => lx_ufc_code,
6602             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
6603 
6604       IF (lx_tax_valid_code = 'F') THEN
6605         lx_ufc_code := null;
6606       END IF;
6607 
6608       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6609         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6610       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6611         RAISE OKL_API.G_EXCEPTION_ERROR;
6612       END IF;
6613     END IF;
6614 
6615     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6616       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6617                   'lx_ufc_code'||lx_ufc_code);
6618     END IF;
6619 
6620     -- Get Set of Books ID
6621     OPEN c_get_set_of_books_id(cp_org_id  =>  p_org_id);
6622     FETCH c_get_set_of_books_id INTO l_set_of_books_id;
6623     CLOSE c_get_set_of_books_id;
6624 
6625     -- Get the tax classification code
6626     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6627       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6628                   'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
6629     END IF;
6630 
6631     OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
6632                       x_return_status                 =>  x_return_status,
6633                       p_ship_to_site_use_id           =>  p_ship_to_cust_acct_site_id,
6634                       p_bill_to_site_use_id           =>  p_bill_to_cust_acct_site_id,
6635                       p_inventory_item_id             =>  p_inventory_item_id,
6636                       p_organization_id               =>  p_org_id,
6637                       p_set_of_books_id               =>  l_set_of_books_id,
6638                       p_trx_date                      =>  p_trx_date,
6639                       p_trx_type_id                   =>  null,
6640                       p_entity_code                   =>  G_AR_ENTITY_CODE,
6641                       p_event_class_code              =>  G_INVOICE_EVENT_CLASS_CODE,
6642                       p_application_id                =>  G_AR_APPLICATION_ID,
6643                       p_internal_organization_id      =>  p_org_id,
6644                       x_tax_classification_code       =>  lx_tax_classification_code );
6645 
6646     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6647       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6648                   'Return Status '|| x_return_status);
6649       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6650                   'lx_tax_classification_code = '|| lx_tax_classification_code);
6651     END IF;
6652 
6653     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6654       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6655     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6656       RAISE OKL_API.G_EXCEPTION_ERROR;
6657     END IF;
6658 
6659     px_tax_codes_tbl(p_tax_code_cnt).khr_id          := p_khr_id;
6660     px_tax_codes_tbl(p_tax_code_cnt).kle_id          := p_kle_id;
6661     px_tax_codes_tbl(p_tax_code_cnt).sty_id          := p_sty_id;
6662     px_tax_codes_tbl(p_tax_code_cnt).tbc_code        := lx_tbc_code;
6663     px_tax_codes_tbl(p_tax_code_cnt).pc_code         := lx_pc_code;
6664     px_tax_codes_tbl(p_tax_code_cnt).ufc_code        := lx_ufc_code;
6665     px_tax_codes_tbl(p_tax_code_cnt).tax_class_code  := lx_tax_classification_code;
6666 
6667         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6668        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ','End(-)');
6669     END IF;
6670 
6671   EXCEPTION
6672     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6673       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6674         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ',
6675                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6676       END IF;
6677 
6678       IF (c_get_set_of_books_id%ISOPEN) THEN
6679         CLOSE c_get_set_of_books_id;
6680       END IF;
6681 
6682       x_return_status := OKL_API.G_RET_STS_ERROR;
6683 
6684     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6685       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6686         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ',
6687                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6688       END IF;
6689 
6690       IF (c_get_set_of_books_id%ISOPEN) THEN
6691         CLOSE c_get_set_of_books_id;
6692       END IF;
6693 
6694       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6695 
6696     WHEN OTHERS THEN
6697 
6698       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6699         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ',
6700                   'EXCEPTION :'||sqlerrm);
6701       END IF;
6702 
6703       IF (c_get_set_of_books_id%ISOPEN) THEN
6704         CLOSE c_get_set_of_books_id;
6705       END IF;
6706 
6707       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6708 
6709       OKL_API.set_message(p_app_name  => g_app_name,
6710                          p_msg_name      => g_unexpected_error,
6711                          p_token1        => g_sqlcode_token,
6712                          p_token1_value  => sqlcode,
6713                          p_token2        => g_sqlerrm_token,
6714                          p_token2_value  => sqlerrm);
6715 
6716   END populate_tax_codes;
6717 
6718 /*========================================================================
6719  | PUBLIC PROCEDURE get_billing_stream_types
6720  |
6721  | DESCRIPTION
6722  |    This procedure is called by the Tax Calculation Setup Screen to derive
6723  |    List of Values for the screen LOV field "Stream Type For Billing"
6724  |
6725  | CALLED FROM
6726  |    Tax Calculation Setup Screen
6727  |
6728  | CALLS PROCEDURES/FUNCTIONS
6729  |
6730  |
6731  | PARAMETERS
6732  |  Input Parameters
6733  |      p_org_id                        -- org ID
6734  |      p_sty_code              -- Stream Type Code
6735  |  Output Parameters
6736  |      x_sty_id_tbl        -- Table of Billing Stream Types
6737  |
6738  | KNOWN ISSUES
6739  |
6740  | NOTES
6741  |
6742  |
6743  | MODIFICATION HISTORY
6744  | Date                  Author            Description of Changes
6745  | 08-APR-05            SECHAWLA           Created
6746  |
6747  *=======================================================================*/
6748 
6749 
6750   PROCEDURE get_billing_stream_types(
6751     p_api_version                       IN  NUMBER,
6752     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6753     x_return_status                     OUT NOCOPY VARCHAR2,
6754     x_msg_count                         OUT NOCOPY NUMBER,
6755     x_msg_data                          OUT NOCOPY VARCHAR2,
6756     p_org_id                                            IN  NUMBER,
6757     p_sty_code                                          IN  VARCHAR2,
6758         x_sty_id_tbl                                    OUT NOCOPY sty_id_tbl_type) IS
6759 
6760   -- get all the Billable, enabled streams of purpose FEE_PAYMENT
6761   CURSOR l_strmtype_csr(cp_sty_code IN VARCHAR2) IS
6762   SELECT a.id, a.code, a.stream_type_purpose, b.meaning
6763   FROM   okl_strm_type_b a, fnd_lookups b
6764   WHERE  a.stream_type_purpose = 'FEE_PAYMENT'
6765   AND    a.billable_yn = 'Y'
6766   AND    a.stream_type_purpose = b.lookup_code
6767   AND    b.lookup_type = 'OKL_STREAM_TYPE_PURPOSE'
6768   AND    b.enabled_flag = 'Y'
6769   AND    upper(a.code) like decode(cp_sty_code, NULL, a.code, '%', a.code, upper(cp_sty_code)||'%');
6770 
6771   -- get all the SGT sets for a given OU
6772   CURSOR l_stgentmptsets_csr(cp_org_id IN NUMBER) IS
6773   SELECT id
6774   FROM   okl_st_gen_tmpt_sets
6775   WHERE  org_id = cp_org_id
6776   --asawanka bug fix 4659674 start
6777   AND    product_type = 'FINANCIAL';
6778   --asawanka bug fix 4659674 end
6779 
6780   -- Get all SGTs for a given SGT Set
6781   CURSOR l_stgentemplates_csr(cp_gts_id IN NUMBER) IS
6782   SELECT id
6783   FROM   okl_st_gen_templates
6784   WHERE  gts_id = cp_gts_id
6785   AND    tmpt_status = G_ACTIVE_STATUS;
6786 
6787   -- Get all the SGT Lines for a given SGT
6788   CURSOR l_stgentmptlns_csr(cp_gtt_id IN NUMBER) IS
6789   SELECT primary_sty_id
6790   FROM   okl_st_gen_tmpt_lns
6791   WHERE  gtt_id = cp_gtt_id
6792   AND    primary_yn = 'Y';
6793 
6794   l_sty_id_tbl                          sty_id_tbl_type;
6795 
6796   l_stream_type_found           VARCHAR2(1);
6797   sty_id_tbl_cnt                        NUMBER := 0;
6798   l_sgt_set_found                       VARCHAR2(1) := 'N';
6799   l_strm_type_cnt                       NUMBER := 0;
6800   l_any_active_sgt_found        VARCHAR2(1);
6801   l_active_sgt_found        VARCHAR2(1);
6802   l_id                                          NUMBER;
6803 
6804   BEGIN
6805 
6806    IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6807         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types','Begin(+)');
6808    END IF;
6809 
6810    --Print Input Variables
6811    IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6812          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6813               'p_init_msg_list :'||p_init_msg_list);
6814          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6815               'p_org_id :'||p_org_id);
6816          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6817               'p_sty_code :'||p_sty_code);
6818    END IF;
6819 
6820    x_return_status := OKL_API.G_RET_STS_SUCCESS;
6821 
6822    -- Check if any stream generation template set exists for this OU
6823    OPEN  l_stgentmptsets_csr(p_org_id);
6824    FETCH l_stgentmptsets_csr INTO l_id;
6825    IF l_stgentmptsets_csr%FOUND THEN
6826                 l_sgt_set_found := 'Y';
6827    END IF;
6828    CLOSE l_stgentmptsets_csr;
6829 
6830    IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6831           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6832               'l_sgt_set_found'||l_sgt_set_found);
6833    END IF;
6834 
6835    l_any_active_sgt_found := 'N'; -- Flag to indicate if any ACTIVE SGT exists across all SGT Sets
6836 
6837    FOR l_strmtype_rec IN l_strmtype_csr(p_sty_code) LOOP -- All/User selected billable stream types of purpose 'FEE_PAYMENT'
6838         l_strm_type_cnt := l_strm_type_cnt + 1;
6839 
6840         IF l_sgt_set_found = 'Y' THEN -- If there are any SGT sets for this OU
6841 
6842                 l_stream_type_found := 'N';
6843 
6844                 IF l_strm_type_cnt = 1 OR l_any_active_sgt_found = 'Y' THEN
6845 
6846 
6847 
6848                     -- When the following piece of code is executed for the first stream type, it sets the flag
6849                                 -- l_any_active_sgt_found (along with other processing logic) to 'Y' if any ACTIVE SGT
6850                                 -- is found across all SGT sets. If there are no ACTIVE SGTs across all the SGT sets, then
6851                                 -- this piece of code is not executed for the remaining stream types
6852                                 FOR l_stgentmptsets_rec IN l_stgentmptsets_csr(p_org_id) LOOP -- all SGT sets for a given org
6853 
6854 
6855                                 l_active_sgt_found := 'N';
6856                                 FOR l_stgentemplates_rec IN l_stgentemplates_csr(l_stgentmptsets_rec.id) LOOP -- all ACTIVE versions of a given SGT
6857                                         l_active_sgt_found := 'Y';
6858                                         l_any_active_sgt_found := 'Y';
6859                                         FOR l_stgentmptlns_rec IN l_stgentmptlns_csr(l_stgentemplates_rec.id) LOOP -- all lines (stream types) in a given version
6860                                         IF l_stgentmptlns_rec.primary_sty_id = l_strmtype_rec.id THEN
6861                                                 l_stream_type_found := 'Y';
6862                                                 EXIT;
6863                                         ELSE
6864                                                 l_stream_type_found := 'N';
6865                                         END IF;
6866                                         END LOOP;
6867                                         --IF l_stream_type_found = 'N' THEN
6868 					--dcshanmu bug 6667098 start
6869 					IF l_stream_type_found = 'Y' THEN
6870 					--dcshanmu bug 6667098 end
6871                                                 EXIT;
6872                                         END IF;
6873                                 END LOOP;
6874                                 --IF l_active_sgt_found = 'Y' AND l_stream_type_found = 'N' THEN
6875 				--dcshanmu bug 6667098 start
6876 				IF l_active_sgt_found = 'Y' AND l_stream_type_found = 'Y' THEN
6877 				--dcshanmu bug 6667098 end
6878                                         EXIT;
6879                                 END IF;
6880                                 END LOOP;
6881 
6882                 END IF; -- IF l_strm_type_cnt = 1 OR l_any_active_sgt_found = 'Y' THEN
6883 
6884 
6885             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6886                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6887                   'l_any_active_sgt_found'||l_any_active_sgt_found);
6888                     END IF;
6889 
6890                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6891                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6892                   'l_stream_type_found'||l_stream_type_found);
6893                     END IF;
6894 
6895                 -- If there are no ACTIVE SGTs across all SGT sets OR stream type found under ACTIVE SGTs,
6896                 -- then consider stream type for the LOV
6897                 IF l_any_active_sgt_found = 'N' OR l_stream_type_found = 'Y' THEN
6898                         sty_id_tbl_cnt := sty_id_tbl_cnt + 1;
6899 
6900                                 l_sty_id_tbl(sty_id_tbl_cnt).sty_id  := l_strmtype_rec.id;
6901                                 l_sty_id_tbl(sty_id_tbl_cnt).sty_code := l_strmtype_rec.code;
6902                                 l_sty_id_tbl(sty_id_tbl_cnt).sty_purpose := l_strmtype_rec.meaning;
6903 
6904                         END IF;
6905 
6906 
6907                 ELSE -- there are no SGT sets existing for this OU, so consider stream type for the LOV
6908 
6909             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6910                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6911                   'There are no SGT sets existing for this OU');
6912                     END IF;
6913 
6914                 sty_id_tbl_cnt := sty_id_tbl_cnt + 1;
6915 
6916                         l_sty_id_tbl(sty_id_tbl_cnt).sty_id  := l_strmtype_rec.id;
6917                         l_sty_id_tbl(sty_id_tbl_cnt).sty_code := l_strmtype_rec.code;
6918                         l_sty_id_tbl(sty_id_tbl_cnt).sty_purpose := l_strmtype_rec.meaning;
6919 
6920                 END IF;
6921         END LOOP;
6922 
6923         x_sty_id_tbl := l_sty_id_tbl;
6924 
6925 
6926     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6927        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ','End(-)');
6928     END IF;
6929 
6930 
6931   EXCEPTION
6932     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6933          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6934                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ',
6935                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6936          END IF;
6937 
6938 
6939                  IF l_strmtype_csr%ISOPEN THEN
6940                     CLOSE l_strmtype_csr;
6941                  END IF;
6942 
6943                  IF l_stgentmptsets_csr%ISOPEN THEN
6944                     CLOSE l_stgentmptsets_csr;
6945                  END IF;
6946 
6947                  IF l_stgentemplates_csr%ISOPEN THEN
6948                     CLOSE l_stgentemplates_csr;
6949                  END IF;
6950 
6951                  IF l_stgentmptlns_csr%ISOPEN THEN
6952                     CLOSE l_stgentmptlns_csr;
6953                  END IF;
6954 
6955          x_return_status := OKL_API.G_RET_STS_ERROR;
6956     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6957          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6958                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ',
6959                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6960          END IF;
6961 
6962          IF l_strmtype_csr%ISOPEN THEN
6963                     CLOSE l_strmtype_csr;
6964                  END IF;
6965 
6966                  IF l_stgentmptsets_csr%ISOPEN THEN
6967                     CLOSE l_stgentmptsets_csr;
6968                  END IF;
6969 
6970                  IF l_stgentemplates_csr%ISOPEN THEN
6971                     CLOSE l_stgentemplates_csr;
6972                  END IF;
6973 
6974                  IF l_stgentmptlns_csr%ISOPEN THEN
6975                     CLOSE l_stgentmptlns_csr;
6976                  END IF;
6977 
6978          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6979 
6980     WHEN OTHERS THEN
6981          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6982             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ',
6983                   'EXCEPTION :'||sqlerrm);
6984          END IF;
6985 
6986          IF l_strmtype_csr%ISOPEN THEN
6987                     CLOSE l_strmtype_csr;
6988                  END IF;
6989 
6990                  IF l_stgentmptsets_csr%ISOPEN THEN
6991                     CLOSE l_stgentmptsets_csr;
6992                  END IF;
6993 
6994                  IF l_stgentemplates_csr%ISOPEN THEN
6995                     CLOSE l_stgentemplates_csr;
6996                  END IF;
6997 
6998                  IF l_stgentmptlns_csr%ISOPEN THEN
6999                     CLOSE l_stgentmptlns_csr;
7000                  END IF;
7001 
7002          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
7003          -- unexpected error
7004          OKL_API.set_message(p_app_name      => g_app_name,
7005                          p_msg_name      => g_unexpected_error,
7006                          p_token1        => g_sqlcode_token,
7007                          p_token1_value  => sqlcode,
7008                          p_token2        => g_sqlerrm_token,
7009                          p_token2_value  => sqlerrm);
7010 
7011   END get_billing_stream_types;
7012 
7013 /*========================================================================
7014  | PRIVATE PROCEDURE get_k_hdr_tax_params
7015  |
7016  | DESCRIPTION
7017  |    This procedure is called by other procedures in this API to derive
7018  |    contract level tax determinats
7019  |
7020  | CALLED FROM
7021  |
7022  |
7023  | CALLS PROCEDURES/FUNCTIONS
7024  |     okl_am_util_pvt.get_rule_record
7025  |
7026  |
7027  | PARAMETERS
7028  |  Input parameters
7029  |      p_khr_id                                -- Contract ID
7030  |      p_source_trx_name           -- Source Transaction
7031  |      p_source_table                          -- Source Trx Table
7032  |      p_qtp_code                  -- Quote Type (Termination / Repurchase)
7033  |      p_early_term_yn                         -- Early termination yn
7034  |      p_purpose_code              -- Stream Type purpose
7035  |  Output Parameters
7036  |      x_cust_acct_id                          -- Customer A/c ID
7037  |      x_bill_to_siteuseid             -- Bill To Site Use ID
7038  |      x_currency_code                         -- Curency Code
7039  |      x_cust_trx_type_id              -- Customer Trx Type ID
7040  |      x_precision                                     -- Currency Precision
7041  |      x_minimum_accountable_unit  -- Currncy Min accountable unit
7042  |              x_prch_opt_det                          -- Purchase Option
7043  |              x_fin_prod_id_det                       -- Financial Product ID
7044  |              x_int_disclosed_det                     -- Interest Disclosed
7045  |
7046  | KNOWN ISSUES
7047  |
7048  | NOTES
7049  |
7050  |
7051  | MODIFICATION HISTORY
7052  | Date            Author         Description of Changes
7053  | 08-APR-05       SECHAWLA        Created
7054  | 23-NOV-05       SECHAWLA        4742539 System picking wrong TBC
7055  |
7056  *=======================================================================*/
7057 
7058   PROCEDURE get_k_hdr_tax_params(
7059         p_api_version                   IN  NUMBER,
7060     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7061     x_return_status                     OUT NOCOPY VARCHAR2,
7062     x_msg_count                         OUT NOCOPY NUMBER,
7063     x_msg_data                          OUT NOCOPY VARCHAR2,
7064     p_khr_id                        IN  NUMBER,
7065     p_source_trx_name               IN  VARCHAR2,
7066     p_source_table                                      IN  VARCHAR2,
7067     p_qtp_code                      IN  VARCHAR2 DEFAULT NULL, -- Used only for termination/repurchase quote
7068     p_early_term_yn                                 IN  VARCHAR2 DEFAULT NULL, -- Used only for termination/repurchase quote
7069     p_purpose_code                  IN  VARCHAR2 DEFAULT NULL, -- Used only in process_invoice_tax to identify remk,asset repair,vendor cure invoices
7070     x_cust_acct_id                                      OUT NOCOPY  NUMBER,
7071         x_bill_to_siteuseid             OUT NOCOPY  NUMBER,
7072         x_currency_code                                 OUT NOCOPY  VARCHAR2,
7073     x_cust_trx_type_id              OUT NOCOPY  NUMBER,
7074     x_precision                                     OUT NOCOPY  NUMBER,
7075         x_minimum_accountable_unit      OUT NOCOPY  NUMBER,
7076         x_prch_opt_det                              OUT NOCOPY  VARCHAR2,
7077         x_fin_prod_id_det                           OUT NOCOPY  NUMBER,
7078         x_int_disclosed_det                             OUT NOCOPY  VARCHAR2,
7079     x_org_id                        OUT NOCOPY  NUMBER,
7080     x_book_class_code               OUT NOCOPY  VARCHAR2,
7081     x_bill_to_party_site_id         OUT NOCOPY  NUMBER,
7082     x_bill_to_party_id              OUT NOCOPY  NUMBER,
7083     x_bill_to_location_id           OUT NOCOPY  NUMBER,
7084     x_currency_conversion_type      OUT NOCOPY  VARCHAR2,
7085     x_currency_conversion_rate      OUT NOCOPY  NUMBER,
7086     x_currency_conversion_date      OUT NOCOPY  DATE,
7087     x_contract_start_date           OUT NOCOPY  DATE ) IS
7088 
7089     --Cursor to get the customer_account_id for the customer
7090     CURSOR c_get_contractinfo_csr(cp_khr_id IN NUMBER) IS
7091     SELECT cust_acct_id, bill_to_site_use_id, currency_code, org_id,
7092            conversion_type, conversion_rate, conversion_rate_date, start_date
7093     FROM   okc_k_headers_b
7094     WHERE  id = cp_khr_id;
7095 
7096     --get currency attributes
7097     CURSOR l_fndcurrency_csr(cp_currency_code IN VARCHAR2) IS
7098     SELECT precision, minimum_accountable_unit
7099     FROM   fnd_currencies
7100     WHERE  currency_code = cp_currency_code
7101         AND    enabled_flag = 'Y'
7102     AND    NVL(start_date_active, sysdate) <= sysdate
7103     AND    NVL(end_date_active, sysdate) >= sysdate;
7104 
7105     --Get the AR customer transaction type used by OKL
7106     CURSOR l_racusttrxtypes_csr IS
7107     SELECT cust_trx_type_id
7108         FROM   ra_cust_trx_types_all
7109         WHERE  name = 'Invoice-OKL';
7110 
7111         -- get the financial product
7112     CURSOR l_oklkheaders_csr(cp_khr_id IN NUMBER) IS
7113     SELECT pdt_id, deal_type
7114     FROM   okl_k_headers
7115     WHERE  id = cp_khr_id;
7116 
7117     l_cust_trx_type_id                          NUMBER;
7118 
7119     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7120         l_precision                             NUMBER;
7121         l_minimum_accountable_unit              NUMBER;
7122 
7123         l_rulv_rec                      okl_rule_pub.rulv_rec_type;
7124         l_rulv_empty_rec                                okl_rule_pub.rulv_rec_type;
7125 
7126         l_prch_opt_det                              VARCHAR2(450);
7127         l_fin_prod_id_det                           NUMBER;
7128         l_int_disclosed_det                         VARCHAR2(30);
7129         l_purpose_code                                  VARCHAR2(30);
7130     l_book_class_code               VARCHAR2(30);
7131 
7132     lx_bill_to_party_site_id        NUMBER;
7133     lx_bill_to_location_id          NUMBER;
7134     lx_bill_to_party_id             NUMBER;
7135     lx_bill_to_siteuseid            NUMBER;
7136     lx_ship_to_party_site_id        NUMBER;
7137     lx_ship_to_location_id          NUMBER;
7138     lx_ship_to_party_id             NUMBER;
7139     lx_ship_to_siteuseid                NUMBER;
7140 
7141     l_get_contractinfo_rec            c_get_contractinfo_csr%ROWTYPE;
7142 
7143   BEGIN
7144 
7145     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7146         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params','Begin(+)');
7147     END IF;
7148 
7149     --Print Input Variables
7150     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7151          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7152               'p_init_msg_list :'||p_init_msg_list);
7153          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7154               'p_khr_id :'||p_khr_id);
7155          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7156               'p_source_trx_name :'||p_source_trx_name);
7157          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7158               'p_source_table :'||p_source_table);
7159          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7160               'p_qtp_code :'||p_qtp_code);
7161          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7162               'p_early_term_yn :'||p_early_term_yn);
7163          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7164               'p_purpose_code :'||p_purpose_code);
7165     END IF;
7166 
7167     OPEN  c_get_contractinfo_csr(p_khr_id);
7168     FETCH c_get_contractinfo_csr INTO l_get_contractinfo_rec;
7169     IF c_get_contractinfo_csr%NOTFOUND THEN
7170         -- KHR ID is invalid
7171         OKC_API.set_message( p_app_name      => 'OKC',
7172                              p_msg_name      => G_INVALID_VALUE,
7173                              p_token1        => G_COL_NAME_TOKEN,
7174                              p_token1_value  => 'KHR_ID');
7175         RAISE OKL_API.G_EXCEPTION_ERROR;
7176         END IF;
7177         CLOSE c_get_contractinfo_csr;
7178 
7179         IF l_get_contractinfo_rec.currency_code IS NULL THEN
7180            OKC_API.set_message( p_app_name      => 'OKC',
7181                              p_msg_name      => G_REQUIRED_VALUE,
7182                              p_token1        => G_COL_NAME_TOKEN,
7183                              p_token1_value  => 'CURRENCY_CODE');
7184 
7185         RAISE OKL_API.G_EXCEPTION_ERROR;
7186         END IF;
7187 
7188         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7189                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7190                   'l_get_custacctid_rec.cust_acct_id'||l_get_contractinfo_rec.cust_acct_id);
7191 
7192               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7193                   'l_get_custacctid_rec.bill_to_site_use_id'||l_get_contractinfo_rec.bill_to_site_use_id);
7194 
7195               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7196                   'l_get_custacctid_rec.currency_code'||l_get_contractinfo_rec.currency_code);
7197     END IF;
7198 
7199 
7200         OPEN  l_fndcurrency_csr(l_get_contractinfo_rec.currency_code);
7201     FETCH l_fndcurrency_csr INTO l_precision, l_minimum_accountable_unit;  -- l_minimum_accountable_unit is optional in fnd_currencies
7202                                                                                                                                                                    -- but mandatory for tax team
7203                                                                                                                                                                    -- check with Nilesh
7204     IF l_fndcurrency_csr%NOTFOUND THEN
7205        -- currency code is invalid
7206        OKC_API.set_message( p_app_name      => 'OKC',
7207                             p_msg_name      => G_INVALID_VALUE,
7208                             p_token1        => G_COL_NAME_TOKEN,
7209                             p_token1_value  => 'CURRENCY_CODE');
7210 
7211        RAISE OKL_API.G_EXCEPTION_ERROR;
7212     END IF;
7213     CLOSE l_fndcurrency_csr;
7214 
7215     -- get the AR cust trx type ID
7216     OPEN  l_racusttrxtypes_csr;
7217     FETCH l_racusttrxtypes_csr INTO l_cust_trx_type_id;
7218     IF l_racusttrxtypes_csr%NOTFOUND THEN
7219        -- cust trx tyep id is required
7220        OKC_API.set_message( p_app_name      => 'OKC',
7221                             p_msg_name      => G_REQUIRED_VALUE,
7222                             p_token1        => G_COL_NAME_TOKEN,
7223                             p_token1_value  => 'CUST_TRX_TYPE_ID');
7224 
7225        RAISE OKL_API.G_EXCEPTION_ERROR;
7226     END IF;
7227     CLOSE l_racusttrxtypes_csr;
7228 
7229 
7230 
7231     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7232         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7233                   'l_precision'||l_precision);
7234 
7235         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7236                   'l_minimum_accountable_unit'||l_minimum_accountable_unit);
7237 
7238         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7239                   'l_cust_trx_type_id'||l_cust_trx_type_id);
7240 
7241 
7242     END IF;
7243      ----------- Identify the determinants : TBC and directly mapped  START ---------------------
7244 
7245      -- Financial Product - K level
7246          OPEN  l_oklkheaders_csr(p_khr_id);
7247      FETCH l_oklkheaders_csr INTO l_fin_prod_id_det, l_book_class_code;
7248      CLOSE l_oklkheaders_csr;
7249 
7250      IF l_fin_prod_id_det IS NULL THEN -- financial product is mandatory on the contract
7251        OKC_API.set_message( p_app_name      => 'OKC',
7252                             p_msg_name      => G_REQUIRED_VALUE,
7253                             p_token1        => G_COL_NAME_TOKEN,
7254                             p_token1_value  => 'Financial Product');
7255        RAISE OKL_API.G_EXCEPTION_ERROR;
7256      END IF;
7257 
7258          IF p_source_trx_name = 'Estimated Billing' AND p_source_table = 'OKL_TRX_QUOTES_B' THEN -- Termination/Repurchase quote creation/updation
7259             IF p_qtp_code LIKE 'TER%' THEN
7260                IF p_early_term_yn = 'Y' THEN
7261                     -- get Early term purchase option - K level
7262 
7263                         l_rulv_rec := l_rulv_empty_rec ;
7264                         okl_am_util_pvt.get_rule_record(
7265                                                       p_rgd_code         => 'AMTEOC'
7266                                      ,p_rdf_code         => 'AMBPOC'
7267                                      ,p_chr_id           => p_khr_id
7268                                      ,p_cle_id           => NULL
7269                                      ,p_message_yn       => FALSE
7270                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7271                                      ,x_return_status    => x_return_status
7272                                      ,x_msg_count        => x_msg_count
7273                                      ,x_msg_data         => x_msg_data);
7274 
7275                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7276                                 -- Rule instance is found
7277                                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7278 
7279                                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7280 
7281                                 END IF;
7282 
7283 
7284                         END IF;
7285                         ---
7286                ELSE
7287                         -- EOT Purchase Option - K level
7288                         l_rulv_rec := l_rulv_empty_rec ;
7289                         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTFOC'
7290                                      ,p_rdf_code         => 'AMBPOC'
7291                                      ,p_chr_id           => p_khr_id
7292                                      ,p_cle_id           => NULL
7293                                      ,p_message_yn       => FALSE
7294                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7295                                      ,x_return_status    => x_return_status
7296                                      ,x_msg_count        => x_msg_count
7297                                      ,x_msg_data         => x_msg_data);
7298 
7299                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7300                                 -- Rule instance is found
7301                                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7302 
7303                                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7304 
7305                                 END IF;
7306 
7307                         END IF;
7308 
7309         -----
7310                END IF;
7311 
7312            -- Interest Disclosed - K Level
7313            l_rulv_rec := l_rulv_empty_rec ;
7314            okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7315                                      ,p_rdf_code         => 'LASTCL'
7316                                      ,p_chr_id           => p_khr_id
7317                                      ,p_cle_id           => NULL
7318                                      ,p_message_yn       => FALSE
7319                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7320                                      ,x_return_status    => x_return_status
7321                                      ,x_msg_count        => x_msg_count
7322                                      ,x_msg_data         => x_msg_data);
7323 
7324            IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7325                         -- Rule instance is found
7326                         IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7327 
7328                                 l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7329                         ELSE -- interest diclosed is optional on the contract
7330 
7331                                 l_int_disclosed_det  := 'N';
7332                         END IF;
7333 
7334                    ELSE -- interest diclosed is optional on the contract
7335 
7336                         l_int_disclosed_det  := 'N';
7337                         x_return_status := OKL_API.G_RET_STS_SUCCESS;
7338                    END IF;
7339                         ----
7340 
7341             ELSE -- repurchase quote creation / updation
7342                l_prch_opt_det := NULL; -- Purchase option is not applicable for Repurcsae Quote creation, updation
7343                l_fin_prod_id_det := NULL; -- financial product is NA for repurchase quote creation, updation
7344                l_int_disclosed_det  := 'N';
7345             END IF;
7346          ELSIF (  (p_source_trx_name = 'Billing' OR p_source_trx_name = 'Credit Memo')
7347                    AND p_source_table = 'OKL_TXD_AR_LN_DTLS_B'
7348                ) THEN -- Billing from other transactions (not stream biling)
7349                IF p_qtp_code LIKE 'TER%' THEN  -- termination quote billing
7350                         IF p_early_term_yn = 'Y' THEN
7351                                 -- get Early term purchase option
7352                                 l_rulv_rec := l_rulv_empty_rec ;
7353                                 okl_am_util_pvt.get_rule_record(
7354                                                       p_rgd_code         => 'AMTEOC'
7355                                      ,p_rdf_code         => 'AMBPOC'
7356                                      ,p_chr_id           => p_khr_id
7357                                      ,p_cle_id           => NULL
7358                                      ,p_message_yn       => FALSE
7359                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7360                                      ,x_return_status    => x_return_status
7361                                      ,x_msg_count        => x_msg_count
7362                                      ,x_msg_data         => x_msg_data);
7363 
7364                                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7365                                         -- Rule instance is found
7366                                         IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7367 
7368                                         l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7369 
7370                                         END IF;
7371 
7372                                 END IF;
7373                                 ---
7374                         ELSE
7375                                 -- get EOT purchase option
7376                                 l_rulv_rec := l_rulv_empty_rec ;
7377                                 okl_am_util_pvt.get_rule_record(
7378                                                       p_rgd_code         => 'AMTFOC'
7379                                      ,p_rdf_code         => 'AMBPOC'
7380                                      ,p_chr_id           => p_khr_id
7381                                      ,p_cle_id           => NULL
7382                                      ,p_message_yn       => FALSE
7383                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7384                                      ,x_return_status    => x_return_status
7385                                      ,x_msg_count        => x_msg_count
7386                                      ,x_msg_data         => x_msg_data);
7387 
7388                                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7389                                         -- Rule instance is found
7390                                         IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7391 
7392                                         l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7393 
7394                                         END IF;
7395 
7396                                 END IF;
7397                                 ---
7398                         END IF;
7399 
7400                         -- Interest Disclosed - K Level
7401                         l_rulv_rec := l_rulv_empty_rec ;
7402                         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7403                                      ,p_rdf_code         => 'LASTCL'
7404                                      ,p_chr_id           => p_khr_id
7405                                      ,p_cle_id           => NULL
7406                                      ,p_message_yn       => FALSE
7407                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7408                                      ,x_return_status    => x_return_status
7409                                      ,x_msg_count        => x_msg_count
7410                                      ,x_msg_data         => x_msg_data);
7411 
7412                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7413                                 -- Rule instance is found
7414                                 IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7415 
7416                                         l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7417                                 ELSE -- interest diclosed is optional on the contract
7418 
7419                                         l_int_disclosed_det  := 'N';
7420                                 END IF;
7421 
7422                                 ELSE -- interest diclosed is optional on the contract
7423 
7424                                 l_int_disclosed_det  := 'N';
7425                                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7426                                 END IF;
7427                                 ----
7428                ELSIF p_qtp_code LIKE 'REP%' OR p_purpose_code IN ('AMBSPR','CURE','REPAIR_CHARGE') THEN
7429                          -- Repurchase quote billing  OR  Remk,asset repair or vendor cure billing
7430 
7431                          l_prch_opt_det := NULL; -- Purchase option is not applicable for Repurcsae Quote billing
7432                          l_fin_prod_id_det := NULL; -- Fin product is NA for repurchase quote billing
7433                          l_int_disclosed_det  := 'N';
7434 
7435                -- SECHAWLA 23-NOV-05 4742539 : added the following piece of code : begin
7436                ELSE
7437                      -- EOT Purchase Option - K level
7438                          l_rulv_rec := l_rulv_empty_rec ;
7439                          okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTFOC'
7440                                      ,p_rdf_code         => 'AMBPOC'
7441                                      ,p_chr_id           => p_khr_id
7442                                      ,p_cle_id           => NULL
7443                                      ,p_message_yn       => FALSE
7444                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7445                                      ,x_return_status    => x_return_status
7446                                      ,x_msg_count        => x_msg_count
7447                                      ,x_msg_data         => x_msg_data);
7448 
7449                          IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7450                                 -- Rule instance is found
7451                                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7452 
7453                                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7454 
7455                                 END IF;
7456 
7457                         END IF;
7458 
7459                         -- Interest Disclosed - K Level
7460                         l_rulv_rec := l_rulv_empty_rec ;
7461                         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7462                                      ,p_rdf_code         => 'LASTCL'
7463                                      ,p_chr_id           => p_khr_id
7464                                      ,p_cle_id           => NULL
7465                                      ,p_message_yn       => FALSE
7466                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7467                                      ,x_return_status    => x_return_status
7468                                      ,x_msg_count        => x_msg_count
7469                                      ,x_msg_data         => x_msg_data);
7470 
7471                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7472                                 -- Rule instance is found
7473                                 IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7474 
7475                                         l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7476                                 ELSE -- interest diclosed is optional on the contract
7477 
7478                                         l_int_disclosed_det  := 'N';
7479                                 END IF;
7480 
7481                                 ELSE -- interest diclosed is optional on the contract
7482 
7483                                 l_int_disclosed_det  := 'N';
7484                                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7485                                 END IF;
7486                         -- SECHAWLA 23-NOV-05 4742539 : end
7487 
7488                END IF;
7489 
7490 
7491          ELSE  -- for all other cases, use EOT purchase option
7492 
7493         -- EOT Purchase Option - K level
7494         l_rulv_rec := l_rulv_empty_rec ;
7495         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTFOC'
7496                                      ,p_rdf_code         => 'AMBPOC'
7497                                      ,p_chr_id           => p_khr_id
7498                                      ,p_cle_id           => NULL
7499                                      ,p_message_yn       => FALSE
7500                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7501                                      ,x_return_status    => x_return_status
7502                                      ,x_msg_count        => x_msg_count
7503                                      ,x_msg_data         => x_msg_data);
7504 
7505         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7506                 -- Rule instance is found
7507                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7508 
7509                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7510 
7511                 END IF;
7512 
7513         END IF;
7514 
7515         -- Interest Disclosed - K Level
7516         l_rulv_rec := l_rulv_empty_rec ;
7517         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7518                                      ,p_rdf_code         => 'LASTCL'
7519                                      ,p_chr_id           => p_khr_id
7520                                      ,p_cle_id           => NULL
7521                                      ,p_message_yn       => FALSE
7522                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7523                                      ,x_return_status    => x_return_status
7524                                      ,x_msg_count        => x_msg_count
7525                                      ,x_msg_data         => x_msg_data);
7526 
7527         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7528                 -- Rule instance is found
7529                 IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7530 
7531                         l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7532                 ELSE -- interest diclosed is optional on the contract
7533 
7534                         l_int_disclosed_det  := 'N';
7535                 END IF;
7536 
7537                 ELSE -- interest diclosed is optional on the contract
7538 
7539                 l_int_disclosed_det  := 'N';
7540                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7541                 END IF;
7542     END IF;
7543 
7544 
7545         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7546                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7547                   'l_prch_opt_det'||l_prch_opt_det);
7548     END IF;
7549 
7550 
7551     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7552                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7553                   'l_int_disclosed_det'||l_int_disclosed_det);
7554     END IF;
7555 
7556     -- get the 'bill_to' identifiers -- start
7557     IF p_source_trx_name NOT IN ('Funding', 'Disbursement', 'Debit Memo') THEN
7558       get_location_party_ids( p_api_version                  => p_api_version,
7559                                                   p_init_msg_list                => p_init_msg_list,
7560                                                   x_return_status                => x_return_status,
7561                                                   x_msg_count                    => x_msg_count,
7562                                                   x_msg_data                     => x_msg_data,
7563                                                   p_cust_acct_id                 => l_get_contractinfo_rec.cust_acct_id,
7564                                                   p_fin_asset_id                 => null,
7565                               p_khr_id                       => p_khr_id,
7566                               x_bill_to_party_site_id        => lx_bill_to_party_site_id,
7567                               x_bill_to_location_id          => lx_bill_to_location_id,
7568                               x_bill_to_party_id                 => lx_bill_to_party_id,
7569                               x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
7570                               x_ship_to_party_site_id        => lx_ship_to_party_site_id,
7571                               x_ship_to_location_id          => lx_ship_to_location_id,
7572                               x_ship_to_party_id             => lx_ship_to_party_id,
7573                               x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
7574     END IF;
7575 
7576     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7577       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7578     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7579       RAISE OKL_API.G_EXCEPTION_ERROR;
7580     END IF;
7581 
7582         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7583                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7584                   'lx_bill_to_party_site_id'||lx_bill_to_party_site_id);
7585     END IF;
7586 
7587         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7588                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7589                   'lx_bill_to_location_id'||lx_bill_to_location_id);
7590     END IF;
7591 
7592         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7593                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7594                   'lx_bill_to_party_id'||lx_bill_to_party_id);
7595     END IF;
7596      -- get the 'bill_to' identifiers -- end
7597 
7598     x_cust_acct_id                                      := l_get_contractinfo_rec.cust_acct_id;
7599     x_bill_to_siteuseid             := l_get_contractinfo_rec.bill_to_site_use_id;
7600         x_currency_code                                 := l_get_contractinfo_rec.currency_code;
7601     x_org_id                        := l_get_contractinfo_rec.org_id;
7602     x_currency_conversion_type      := l_get_contractinfo_rec.conversion_type;
7603     x_currency_conversion_rate      := l_get_contractinfo_rec.conversion_rate;
7604     x_currency_conversion_date      := l_get_contractinfo_rec.conversion_rate_date;
7605     x_contract_start_date           := l_get_contractinfo_rec.start_date;
7606 
7607     x_bill_to_party_site_id         := lx_bill_to_party_site_id;
7608     x_bill_to_party_id              := lx_bill_to_party_id;
7609     x_bill_to_location_id           := lx_bill_to_location_id;
7610 
7611     x_book_class_code               := l_book_class_code;
7612     x_cust_trx_type_id              := l_cust_trx_type_id;
7613     x_precision                                     := l_precision;
7614         x_minimum_accountable_unit      := l_minimum_accountable_unit;
7615         x_prch_opt_det                              := l_prch_opt_det;
7616         x_fin_prod_id_det                           := l_fin_prod_id_det;
7617         x_int_disclosed_det             := l_int_disclosed_det;
7618 
7619 
7620     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7621        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ','End(-)');
7622     END IF;
7623 
7624   EXCEPTION
7625     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7626          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7627                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ',
7628                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
7629          END IF;
7630 
7631          IF c_get_contractinfo_csr%ISOPEN THEN
7632             CLOSE c_get_contractinfo_csr;
7633          END IF;
7634 
7635                  IF l_fndcurrency_csr%ISOPEN THEN
7636                     CLOSE l_fndcurrency_csr;
7637                  END IF;
7638 
7639                  IF l_racusttrxtypes_csr%ISOPEN THEN
7640                     CLOSE l_racusttrxtypes_csr;
7641                  END IF;
7642 
7643                  IF l_oklkheaders_csr%ISOPEN THEN
7644                     CLOSE l_oklkheaders_csr;
7645                  END IF;
7646 
7647          x_return_status := OKL_API.G_RET_STS_ERROR;
7648     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7649          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7650                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ',
7651                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
7652          END IF;
7653 
7654          IF c_get_contractinfo_csr%ISOPEN THEN
7655             CLOSE c_get_contractinfo_csr;
7656          END IF;
7657 
7658                  IF l_fndcurrency_csr%ISOPEN THEN
7659                     CLOSE l_fndcurrency_csr;
7660                  END IF;
7661 
7662                  IF l_racusttrxtypes_csr%ISOPEN THEN
7663                     CLOSE l_racusttrxtypes_csr;
7664                  END IF;
7665 
7666                  IF l_oklkheaders_csr%ISOPEN THEN
7667                     CLOSE l_oklkheaders_csr;
7668                  END IF;
7669 
7670          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
7671 
7672     WHEN OTHERS THEN
7673          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7674             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ',
7675                   'EXCEPTION :'||sqlerrm);
7676          END IF;
7677 
7678          IF c_get_contractinfo_csr%ISOPEN THEN
7679             CLOSE c_get_contractinfo_csr;
7680          END IF;
7681 
7682                  IF l_fndcurrency_csr%ISOPEN THEN
7683                     CLOSE l_fndcurrency_csr;
7684                  END IF;
7685 
7686                  IF l_racusttrxtypes_csr%ISOPEN THEN
7687                     CLOSE l_racusttrxtypes_csr;
7688                  END IF;
7689 
7690                  IF l_oklkheaders_csr%ISOPEN THEN
7691                     CLOSE l_oklkheaders_csr;
7692                  END IF;
7693 
7694          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
7695          -- unexpected error
7696          OKL_API.set_message(p_app_name      => g_app_name,
7697                          p_msg_name      => g_unexpected_error,
7698                          p_token1        => g_sqlcode_token,
7699                          p_token1_value  => sqlcode,
7700                          p_token2        => g_sqlerrm_token,
7701                          p_token2_value  => sqlerrm);
7702 
7703   END get_k_hdr_tax_params;
7704 
7705 /*========================================================================
7706  | PRIVATE PROCEDURE get_asset_tax_params
7707  |
7708  | DESCRIPTION
7709  |    This procedure is called by other procedures in this API to derive
7710  |    asset level tax determinats
7711  |
7712  | CALLED FROM
7713  |
7714  |
7715  | CALLS PROCEDURES/FUNCTIONS
7716  |     okl_am_util_pvt.get_rule_record
7717  |
7718  |
7719  | PARAMETERS
7720  |  Input parameters
7721  |      p_khr_id                        -- Contract ID
7722  |      p_kle_id                        -- Financial Asset ID
7723  |      p_source_trx_name       -- Source Transaction Name
7724  |      p_source_table              -- Source Transaction Table
7725  |      p_qtp_code              -- Quote Type
7726  |      p_purpose_code          -- Stream Type Purpose
7727  |  Output Parameters
7728  |      x_transfer_of_title             -- Transfer of Title
7729  |      x_sale_lease_back               -- Sale and Lease Back
7730  |              x_purchase_of_lease             -- Purchase of Lease
7731  |          x_usage_of_equipment        -- Usage of Equipment
7732  |              x_age_of_equipment              -- Age of Equipment
7733  |              x_vendor_site_id                -- Vendor Site ID
7734  |
7735  | KNOWN ISSUES
7736  |
7737  | NOTES
7738  |
7739  |
7740  | MODIFICATION HISTORY
7741  | Date                  Author            Description of Changes
7742  | 08-APR-05            SECHAWLA           Created
7743  |
7744  *=======================================================================*/
7745 
7746   PROCEDURE get_asset_tax_params(
7747         p_api_version                   IN  NUMBER,
7748     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7749     x_return_status                     OUT NOCOPY VARCHAR2,
7750     x_msg_count                         OUT NOCOPY NUMBER,
7751     x_msg_data                          OUT NOCOPY VARCHAR2,
7752     p_khr_id                        IN  NUMBER,
7753     p_kle_id                        IN  NUMBER,  -- financial asset id
7754     p_source_trx_name               IN  VARCHAR2,
7755     p_source_table                                      IN  VARCHAR2,
7756     p_qtp_code                      IN  VARCHAR2 DEFAULT NULL, -- Used only for term / repurchase quote
7757     p_purpose_code                  IN  VARCHAR2 DEFAULT NULL, -- Used only in process_invoice_tax to identify remk,asset repair,vendor cure invoices
7758     x_transfer_of_title                         OUT NOCOPY VARCHAR2,
7759     x_sale_lease_back                           OUT NOCOPY VARCHAR2,
7760     x_purchase_of_lease                         OUT NOCOPY VARCHAR2,
7761     x_usage_of_equipment                        OUT NOCOPY VARCHAR2,
7762         x_age_of_equipment                              OUT NOCOPY NUMBER,
7763         x_vendor_site_id                                OUT NOCOPY NUMBER
7764         ) IS
7765 
7766     --get the asset number
7767     CURSOR l_okclines_csr(cp_fin_asset_id IN NUMBER) IS
7768     SELECT name
7769     FROM   OKC_K_LINES_v
7770     WHERE  id = cp_fin_asset_id;
7771 
7772     -- get the model line id (ITEM) for a financial asset id
7773     CURSOR l_modelline_csr(cp_fin_asset_id IN NUMBER) IS
7774     SELECT id
7775     FROM   okc_k_lines_b
7776     WHERE  cle_id   = cp_fin_asset_id
7777     AND    lse_id = 34 ; -- model line LSE ID
7778 
7779     -- Get the vendor for asset/service/fee line
7780     CURSOR l_partyroles_csr(cp_line_id IN NUMBER) IS
7781     SELECT object1_id1  --is fk to po_vendors.vendor_id
7782         FROM   okc_k_party_roles_b
7783     WHERE  cle_id = cp_line_id  --fee/service top line id for fee and service, model line id for asset line
7784     AND    rle_code = 'OKL_VENDOR';
7785 
7786     -- get the primary pay vendor location for the vendor
7787     CURSOR l_povendorsites_csr(cp_vendor_id IN NUMBER) IS
7788     SELECT vendor_site_id
7789     FROM   po_vendor_sites
7790     WHERE  vendor_id = cp_vendor_id
7791     AND    primary_pay_site_flag = 'Y';
7792 
7793 
7794     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7795 
7796         l_rulv_rec                      okl_rule_pub.rulv_rec_type;
7797         l_rulv_empty_rec                                okl_rule_pub.rulv_rec_type;
7798         l_name                                                  VARCHAR2(150);
7799 
7800         l_transfer_of_title                             VARCHAR2(30);
7801         l_sale_lease_back                               VARCHAR2(30);
7802         l_purchase_of_lease                             VARCHAR2(30);
7803         l_usage_of_equipment                    VARCHAR2(450);
7804         l_age_of_equipment                              NUMBER;
7805         l_vendor_site_id                NUMBER;
7806         l_model_line_id                                 NUMBER;
7807     l_vendor_id                                         NUMBER;
7808     l_vndr_cnt                                          NUMBER;
7809     l_purpose_code                                      VARCHAR2(30);
7810 
7811   BEGIN
7812 
7813     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7814         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params','Begin(+)');
7815     END IF;
7816 
7817     --Print Input Variables
7818     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7819          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7820               'p_init_msg_list :'||p_init_msg_list);
7821          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7822               'p_khr_id :'||to_char(p_khr_id));
7823          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7824               'p_kle_id :'||to_char(p_kle_id));
7825          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7826               'p_source_trx_name :'||p_source_trx_name);
7827          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7828               'p_source_table :'||p_source_table);
7829          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7830               'p_qtp_code :'||p_qtp_code);
7831          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7832               'p_purpose_code :'||p_purpose_code);
7833 
7834     END IF;
7835 
7836 
7837     IF ( (p_source_trx_name IS NULL AND p_source_table = 'OKL_TRX_QUOTES_B' AND p_qtp_code LIKE 'REP%')-- Repurchase quote creation/updation
7838              OR
7839                  (      (    p_source_trx_name = 'Billing' OR p_source_trx_name = 'Credit Memo' )
7840                AND (    p_source_table = 'OKL_TXD_AR_LN_DTLS_B' )
7841                AND (    p_qtp_code LIKE 'REP%' OR p_purpose_code IN ('AMBSPR','CURE','REPAIR_CHARGE')  )
7842          ) -- Repurchase quote billing OR  Remk,asset repair or vendor cure  billing
7843            ) THEN
7844 
7845            l_transfer_of_title  := 'N';
7846            l_sale_lease_back := 'N';
7847            l_purchase_of_lease := 'N';
7848            l_usage_of_equipment  := NULL;
7849            l_age_of_equipment := NULL;
7850            l_vendor_site_id := NULL;
7851 
7852         ELSE
7853         -- get transfer of title  -- financial Asset level
7854         l_rulv_rec := l_rulv_empty_rec ;
7855         okl_am_util_pvt.get_rule_record(  p_rgd_code         => 'LAASTX'
7856                                      ,p_rdf_code         => 'LAASTX'
7857                                      ,p_chr_id           => p_khr_id
7858                                      ,p_cle_id           => p_kle_id
7859                                      ,p_message_yn       => FALSE
7860                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7861                                      ,x_return_status    => x_return_status
7862                                      ,x_msg_count        => x_msg_count
7863                                      ,x_msg_data         => x_msg_data);
7864 
7865         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7866                 -- Rule instance is found
7867                 IF (l_rulv_rec.rule_information6 IS NOT NULL) AND (l_rulv_rec.rule_information6 <> OKL_API.G_MISS_CHAR) THEN
7868 
7869                         l_transfer_of_title  :=  l_rulv_rec.rule_information6;
7870                 ELSE -- transfer of title is optional on the contract
7871 
7872                         l_transfer_of_title  := 'N';
7873                 END IF;
7874                 ELSE -- transfer of title is optional on the contract
7875 
7876                 l_transfer_of_title  := 'N';
7877                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7878                 END IF;
7879                 -- get transfer of title : end
7880 
7881                 -- get sale_lease_back -- financial Asset level
7882                 l_rulv_rec := l_rulv_empty_rec ;
7883                 okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7884                                      ,p_rdf_code         => 'LAASTX'
7885                                      ,p_chr_id           => p_khr_id
7886                                      ,p_cle_id           => p_kle_id
7887                                      ,p_message_yn       => FALSE
7888                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7889                                      ,x_return_status    => x_return_status
7890                                      ,x_msg_count        => x_msg_count
7891                                      ,x_msg_data         => x_msg_data);
7892 
7893                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7894                 -- Rule instance is found
7895                 IF (l_rulv_rec.rule_information7 IS NOT NULL) AND (l_rulv_rec.rule_information7 <> OKL_API.G_MISS_CHAR) THEN
7896 
7897                         l_sale_lease_back  :=  l_rulv_rec.rule_information7;
7898                 ELSE -- sale and lease back is optional on the contract
7899 
7900                         l_sale_lease_back := 'N';
7901                 END IF;
7902                 ELSE -- sale and lease back is optional on the contract
7903 
7904                 l_sale_lease_back := 'N';
7905                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7906                 END IF;
7907                 -- get sale_lease_back : end
7908 
7909 
7910                 -- get purchase_of_lease -- financial Asset level
7911                 l_rulv_rec := l_rulv_empty_rec ;
7912                 okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7913                                      ,p_rdf_code         => 'LAASTX'
7914                                      ,p_chr_id           => p_khr_id
7915                                      ,p_cle_id           => p_kle_id
7916                                      ,p_message_yn       => FALSE
7917                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7918                                      ,x_return_status    => x_return_status
7919                                      ,x_msg_count        => x_msg_count
7920                                      ,x_msg_data         => x_msg_data);
7921 
7922         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7923                 -- Rule instance is found
7924                 IF (l_rulv_rec.rule_information8 IS NOT NULL) AND (l_rulv_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
7925 
7926                         l_purchase_of_lease  :=  l_rulv_rec.rule_information8;
7927                 ELSE -- purchase of lease is optional on the contract
7928 
7929                         l_purchase_of_lease := 'N';
7930                 END IF;
7931         ELSE -- purchase of lease is optional on the contract
7932 
7933                 l_purchase_of_lease := 'N';
7934                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7935         END IF;
7936         -- get purchase_of_lease : end
7937 
7938 
7939         -- get usage_of_equipment -- financial Asset level
7940         l_rulv_rec := l_rulv_empty_rec ;
7941         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7942                                      ,p_rdf_code         => 'LAASTX'
7943                                      ,p_chr_id           => p_khr_id
7944                                      ,p_cle_id           => p_kle_id
7945                                      ,p_message_yn       => FALSE
7946                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7947                                      ,x_return_status    => x_return_status
7948                                      ,x_msg_count        => x_msg_count
7949                                      ,x_msg_data         => x_msg_data);
7950 
7951         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7952                 -- Rule instance is found
7953                 IF (l_rulv_rec.rule_information9 IS NOT NULL) AND (l_rulv_rec.rule_information9 <> OKL_API.G_MISS_CHAR) THEN
7954 
7955                         l_usage_of_equipment  :=  l_rulv_rec.rule_information9;
7956 
7957                 END IF;
7958                 ELSE
7959                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7960                 END IF;
7961                 -- get usage_of_equipment : end
7962 
7963 
7964                 -- get age_of_equipment  -- financial Asset level
7965                 l_rulv_rec := l_rulv_empty_rec ;
7966                 okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7967                                      ,p_rdf_code         => 'LAASTX'
7968                                      ,p_chr_id           => p_khr_id
7969                                      ,p_cle_id           => p_kle_id
7970                                      ,p_message_yn       => FALSE
7971                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7972                                      ,x_return_status    => x_return_status
7973                                      ,x_msg_count        => x_msg_count
7974                                      ,x_msg_data         => x_msg_data);
7975 
7976                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7977                 -- Rule instance is found
7978                 IF (l_rulv_rec.rule_information10 IS NOT NULL) AND (l_rulv_rec.rule_information10 <> OKL_API.G_MISS_CHAR) THEN
7979 
7980                         l_age_of_equipment  :=  to_number(l_rulv_rec.rule_information10);
7981 
7982                 END IF;
7983                 ELSE
7984                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7985                 END IF;
7986                 -- get age_of_equipment : end
7987 
7988 
7989                 -- get Vendor site
7990 
7991                 -- Get the Model line for the financial asset line
7992                 OPEN  l_modelline_csr(p_kle_id);
7993                 FETCH l_modelline_csr INTO l_model_line_id;
7994                 CLOSE l_modelline_csr;
7995 
7996                 -- get the asset line Vendor
7997                 -- Check if multiple vendors exist.  If so, vendor location is not a determinant
7998                 l_vndr_cnt := 0;
7999                 FOR l_partyroles_rec in l_partyroles_csr(l_model_line_id) LOOP
8000                 l_vndr_cnt := l_vndr_cnt + 1;
8001                 l_vendor_id := l_partyroles_rec.object1_id1;  -- vendor is optional
8002                 END LOOP;
8003 
8004 
8005                 IF l_vndr_cnt =  1 AND l_vendor_id IS NOT NULL THEN
8006                 -- get the primary vendor site (if defined) from AP
8007                 -- vendor site is applicable for fin asset / service / fee lines / sublines
8008                 OPEN   l_povendorsites_csr(l_vendor_id);
8009                 FETCH  l_povendorsites_csr INTO l_vendor_site_id; -- will be null if none of the sites are checked as primary
8010                 CLOSE  l_povendorsites_csr;
8011 
8012                 END IF;
8013                 -- get Vendor site  : end
8014         END IF;
8015 
8016     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8017           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
8018               'l_transfer_of_title'||l_transfer_of_title);
8019           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
8020               'l_sale_lease_back'||l_sale_lease_back);
8021           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
8022               'l_purchase_of_lease'||l_purchase_of_lease);
8023           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
8024               'l_usage_of_equipment'||l_usage_of_equipment);
8025           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
8026               'l_age_of_equipment'||l_age_of_equipment);
8027           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
8028               'l_vendor_site_id'||l_vendor_site_id);
8029     END IF;
8030 
8031     x_transfer_of_title  := l_transfer_of_title;
8032     x_sale_lease_back    := l_sale_lease_back;
8033     x_purchase_of_lease  := l_purchase_of_lease;
8034     x_usage_of_equipment := l_usage_of_equipment;
8035         x_age_of_equipment       := l_age_of_equipment;
8036         x_vendor_site_id         := l_vendor_site_id;
8037 
8038     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8039        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ','End(-)');
8040     END IF;
8041 
8042   EXCEPTION
8043     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8044 
8045       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8046          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ',
8047                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
8048       END IF;
8049 
8050       IF l_okclines_csr%ISOPEN THEN
8051          CLOSE l_okclines_csr;
8052       END IF;
8053 
8054           IF l_modelline_csr%ISOPEN THEN
8055              CLOSE l_modelline_csr;
8056           END IF;
8057 
8058           IF l_partyroles_csr%ISOPEN THEN
8059              CLOSE l_partyroles_csr;
8060           END IF;
8061 
8062           IF l_povendorsites_csr%ISOPEN THEN
8063              CLOSE l_povendorsites_csr;
8064           END IF;
8065 
8066           x_return_status := OKL_API.G_RET_STS_ERROR;
8067     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8068       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8069          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ',
8070                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
8071       END IF;
8072 
8073       IF l_okclines_csr%ISOPEN THEN
8074          CLOSE l_okclines_csr;
8075       END IF;
8076 
8077           IF l_modelline_csr%ISOPEN THEN
8078              CLOSE l_modelline_csr;
8079           END IF;
8080 
8081           IF l_partyroles_csr%ISOPEN THEN
8082              CLOSE l_partyroles_csr;
8083           END IF;
8084 
8085           IF l_povendorsites_csr%ISOPEN THEN
8086              CLOSE l_povendorsites_csr;
8087           END IF;
8088 
8089 
8090       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8091 
8092     WHEN OTHERS THEN
8093       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8094          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ',
8095                   'EXCEPTION :'||sqlerrm);
8096       END IF;
8097 
8098           IF l_okclines_csr%ISOPEN THEN
8099          CLOSE l_okclines_csr;
8100       END IF;
8101 
8102           IF l_modelline_csr%ISOPEN THEN
8103              CLOSE l_modelline_csr;
8104           END IF;
8105 
8106           IF l_partyroles_csr%ISOPEN THEN
8107              CLOSE l_partyroles_csr;
8108           END IF;
8109 
8110           IF l_povendorsites_csr%ISOPEN THEN
8111              CLOSE l_povendorsites_csr;
8112           END IF;
8113 
8114 
8115       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8116          -- unexpected error
8117       OKL_API.set_message(p_app_name      => g_app_name,
8118                          p_msg_name      => g_unexpected_error,
8119                          p_token1        => g_sqlcode_token,
8120                          p_token1_value  => sqlcode,
8121                          p_token2        => g_sqlerrm_token,
8122                          p_token2_value  => sqlerrm);
8123 
8124   END get_asset_tax_params;
8125 
8126 /*========================================================================
8127  | PRIVATE PROCEDURE process_tax_schedule_tax
8128  |
8129  | DESCRIPTION
8130  |    This procedure is called from calculate_sales_tax procedure to calculate
8131  |    tax schedule for customer requests, booking and rebooking
8132  |
8133  | CALLED FROM                                  calculate_sales_tax()
8134  |
8135  |
8136  | CALLS PROCEDURES/FUNCTIONS
8137  |     get_k_hdr_tax_params()
8138  |     get_asset_tax_params()
8139  |     get_location_party_ids()
8140  |     get_ufc_code()
8141  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
8142  |
8143  |
8144  | PARAMETERS
8145  |      p_source_trx_id                 -- Source transaction ID
8146  |      p_source_trx_name       -- Source transaction Name
8147  |      p_source_table          -- Source table
8148  |
8149  | KNOWN ISSUES
8150  |
8151  | NOTES
8152  |
8153  |
8154  | MODIFICATION HISTORY
8155  | Date                  Author            Description of Changes
8156  | 08-APR-05            SECHAWLA           Created
8157  | 22-APR-08            SECHAWLA 6975983   Do not error out if there is no tax in eBTax for
8158  |                                         the Billed stream elements. Create taxable line
8159  |                                         in okl_tax_sources. There won't be aby tax lines
8160  |                                         in okl_tax_trx_details.
8161  |
8162  *=======================================================================*/
8163   PROCEDURE process_tax_schedule_tax(
8164         p_api_version                   IN  NUMBER,
8165     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
8166     x_return_status                     OUT NOCOPY VARCHAR2,
8167     x_msg_count                         OUT NOCOPY NUMBER,
8168     x_msg_data                          OUT NOCOPY VARCHAR2,
8169     p_source_trx_id                                     IN  NUMBER,
8170     p_source_trx_name               IN  VARCHAR2,
8171     p_source_table                  IN  VARCHAR2) IS
8172 
8173         l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8174         i                                                        NUMBER;
8175 
8176         -- get the tax schedule request details
8177    CURSOR  l_trxrequests_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
8178    SELECT  a.dnz_khr_id, a.start_date, a.end_date, a.try_id, a.legal_entity_id, a.org_id
8179    FROM    okl_trx_requests a, okl_trx_types_tl b
8180    WHERE   a.id = cp_trx_id
8181    AND     a.try_id = b.id
8182    AND     b.name = cp_trx_type_name
8183    AND     language = 'US';
8184 
8185    --Cursor to get all the streams / stream elements associated with the contract
8186    -- This cursor picks up the K, asset, service, fee , service subline, fee subline level payments
8187    -- We are excluding Insurance streams. Usage lines do not have payments / streams
8188    CURSOR c_k_unbilled_streams_csr(cp_contract_id IN NUMBER,
8189                                    cp_date_from   IN DATE,
8190                                    cp_date_to     IN DATE) IS
8191    SELECT strm.khr_id,
8192           strm.kle_id, -- can be null for K level streams
8193           lse.lty_code,
8194           NULL asset_number,
8195           NULL trx_id,
8196           NULL trx_line_id,
8197           NULL entity_code,
8198           NULL event_class_code,
8199           NULL trx_level_type,
8200           NULL adjusted_doc_entity_code,
8201           NULL adjusted_doc_event_class_code,
8202           NULL adjusted_doc_trx_id,
8203           NULL adjusted_doc_trx_line_id,
8204           NULL adjusted_doc_trx_level_type,
8205           NULL adjusted_doc_number,
8206           NULL adjusted_doc_date,
8207           G_TAX_SCHEDULE tax_call_type_code,
8208           strm.sty_id stream_type_id,
8209           NULL trx_business_category,
8210           'ACTIVE' tax_line_status_code,
8211           selm.id sel_id,
8212           'N' reported_yn,
8213           typ.code Stream_Type,
8214           typ.billable_yn Billable,
8215           strm.id stream_id,
8216           strm.transaction_number,
8217           selm.amount,
8218           selm.stream_element_date stream_element_date,
8219           NULL tax_sources_id,
8220           NULL asset_line_id,
8221           NULL ship_to_siteuseid,
8222           NULL inventory_item_id
8223     FROM  okl_strm_type_b typ,
8224           okl_streams strm,
8225           okl_strm_elements selm,
8226           okc_k_lines_b lines,
8227           okc_line_styles_b lse
8228     WHERE  strm.sty_id = typ.id
8229     AND    strm.id = selm.stm_id
8230     AND    typ.billable_yn = 'Y'
8231     AND    strm.say_code ='CURR'
8232     AND    strm.active_yn = 'Y'
8233     AND    strm.purpose_code IS NULL
8234     AND    strm.khr_id = cp_contract_id
8235     AND    selm.stream_element_date BETWEEN cp_date_from AND cp_date_to
8236     AND    strm.kle_id = lines.id(+)
8237     AND    lines.lse_id = lse.id (+)
8238     AND    lse.lty_code (+) <> 'INSURANCE'
8239     AND  NOT EXISTS -- tax lines don't exist in AR ( This condition is added to pick up stream elements billed under
8240                     -- old solution : date_billed may not be null but billing may not have been run completely, so tax
8241                     -- may not have been calculated in AR
8242          (SELECT NULL
8243           FROM  okl_bpd_tld_ar_lines_v cnsld
8244           WHERE cnsld.sel_id = selm.id)
8245     ORDER  BY  strm.kle_id, strm.sty_id;
8246 
8247     -- get Billed stream elements
8248     CURSOR c_k_billed_streams_csr(cp_contract_id IN NUMBER,
8249                                   cp_date_from   IN DATE,
8250                                   cp_date_to     IN DATE) IS
8251     SELECT strm.khr_id,
8252            strm.kle_id, -- can be null for K level streams
8253            strm.sty_id stream_type_id,
8254            selm.id sel_id,
8255            selm.stream_element_date stream_element_date,
8256            cnsld.customer_trx_id,
8257            cnsld.customer_trx_line_id,
8258            selm.amount --SECHAWLA 22-APR-08 6975983 : added
8259      FROM  okl_strm_type_b typ,
8260            okl_streams strm,
8261            okl_strm_elements selm,
8262            okc_k_lines_b lines,
8263            okc_line_styles_b lse,
8264            okl_bpd_tld_ar_lines_v cnsld
8265     WHERE  strm.sty_id = typ.id
8266     AND    strm.id = selm.stm_id
8267     AND    typ.billable_yn = 'Y'
8268     AND    strm.say_code ='CURR'
8269     AND    strm.active_yn = 'Y'
8270     AND    strm.purpose_code IS NULL
8271     AND    strm.khr_id = cp_contract_id
8272     AND    selm.stream_element_date BETWEEN cp_date_from AND cp_date_to
8273     AND    selm.date_billed IS NOT NULL  -- pick billed stream elements
8274     AND    strm.kle_id = lines.id(+)
8275     AND    lines.lse_id = lse.id (+)
8276     AND    lse.lty_code (+) <> 'INSURANCE'
8277     AND    cnsld.sel_id = selm.id
8278     AND    cnsld.khr_id = strm.khr_id;
8279     --  ORDER  BY  strm.kle_id, strm.sty_id;
8280 
8281     -- get the billing line details
8282     CURSOR l_txdarlndtls_csr(cp_sel_id IN NUMBER, cp_sty_id IN NUMBER) IS
8283     SELECT hdr.id trx_id, det.id trx_line_id
8284     FROM   okl_trx_ar_invoices_b hdr, okl_txl_ar_inv_lns_b line, okl_txd_ar_ln_dtls_b det
8285     WHERE  det.sel_id = cp_sel_id
8286     AND    det.sty_id = cp_sty_id
8287     AND    det.til_id_details = line.id
8288     AND    line.tai_id = hdr.id;
8289 
8290     -- get all the financial asset lines for the contract
8291     CURSOR l_finassets_csr(CP_KHR_ID IN NUMBER) IS
8292     SELECT DISTINCT strm.kle_id fin_asset_id -- is DISTINCT req ? can an asset line have more than one stream types ?
8293     FROM   okl_strm_type_b typ,
8294            okl_streams strm,
8295            okc_k_lines_b lines,
8296            okc_line_styles_b sty
8297     WHERE  strm.sty_id = typ.id
8298     AND    typ.billable_yn = 'Y'
8299     AND    strm.say_code ='CURR'
8300     AND    strm.active_yn = 'Y'
8301     AND    strm.purpose_code IS NULL
8302     AND    strm.khr_id = CP_KHR_ID
8303     AND    strm.kle_id = lines.id
8304     AND    lines.lse_id = sty.id
8305     AND    sty.lty_code = 'FREE_FORM1';
8306 
8307     --get the asset number
8308     CURSOR l_okclines_csr(cp_fin_asset_id IN NUMBER) IS
8309     SELECT name, lse_id
8310     FROM   OKC_K_LINES_v
8311     WHERE  id = cp_fin_asset_id;
8312 
8313     -- get contract/line stream types (K1-A1-ST1, K1-A1-ST2, K1-S1-ST3, K1-ST4...)
8314     CURSOR l_kstreamtypes_csr(cp_khr_id IN NUMBER) IS
8315     SELECT typ.code Stream_Type,
8316            strm.id stream_id,
8317            strm.kle_id line_id,
8318                    strm.sty_id stream_type_id,
8319            sty.lty_code
8320     FROM   okl_strm_type_b typ,
8321            okl_streams strm,
8322            okc_k_lines_b lines,
8323            okc_line_styles_b sty
8324     WHERE  strm.sty_id = typ.id
8325     AND    typ.billable_yn = 'Y'
8326     AND    strm.say_code ='CURR'
8327     AND    strm.active_yn = 'Y'
8328     AND    strm.purpose_code IS NULL
8329     AND    strm.khr_id = cp_khr_id
8330     AND    strm.kle_id = lines.id(+)
8331     AND    lines.lse_id = sty.id (+)
8332     AND    sty.lty_code (+) <> 'INSURANCE';
8333 
8334     -- Get the financial asset associated with a given subline
8335     CURSOR l_finasset_csr(cp_fee_serviced_asset_line_id IN NUMBER, cp_line_type IN VARCHAR2) IS
8336     SELECT cim.object1_id1
8337     FROM   okc_k_lines_b cle, okc_line_styles_b lse, okc_k_items cim
8338     WHERE  cle.lse_id = lse.id
8339     AND    lse.lty_code = cp_line_type
8340     AND    cim.cle_id = cle.id
8341     AND    cle.id = cp_fee_serviced_asset_line_id;
8342 
8343         -- get the inventory item id and inventory item org for a financial asset
8344         CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
8345         SELECT cim_model.object1_id1,
8346            cim_model.object1_id2
8347     FROM   okc_k_items cim_model,
8348            okc_k_lines_b cleb_model,
8349            okc_line_styles_b lseb_model
8350     WHERE  cim_model.cle_id    = cleb_model.id
8351     AND    cleb_model.cle_id   = cp_fin_asset_id
8352     AND    lseb_model.id       = cleb_model.lse_id
8353     AND    lseb_model.lty_code = 'ITEM';
8354 
8355     -- get the tax lines corresponding to billing tax source ID
8356     CURSOR l_taxtrxdetails_csr(cp_txs_id IN NUMBER) IS
8357     SELECT *
8358     FROM   okl_tax_trx_details
8359     WHERE  txs_id = cp_txs_id;
8360 
8361     -- Get the vendor for asset/service/fee line
8362     CURSOR l_partyroles_csr(cp_line_id IN NUMBER) IS
8363     SELECT object1_id1  --is fk to po_vendors.vendor_id
8364         FROM   okc_k_party_roles_b
8365     WHERE  cle_id = cp_line_id  --fee/service top line id for fee and service, model line id for asset line
8366     AND    rle_code = 'OKL_VENDOR';
8367 
8368     -- get the primary pay vendor location for the vendor
8369     CURSOR l_povendorsites_csr(cp_vendor_id IN NUMBER) IS
8370     SELECT vendor_site_id
8371     FROM   po_vendor_sites
8372     WHERE  vendor_id = cp_vendor_id
8373     AND    primary_pay_site_flag = 'Y';
8374 
8375     -- check if stream element is billed in AR
8376     -- Get total tax for a taxable line
8377     CURSOR l_get_zx_total_tax(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
8378     SELECT SUM(zx.tax_amt)  tax_amt
8379     FROM zx_lines zx
8380     WHERE zx.trx_id                     = cp_trx_id
8381     AND   zx.trx_line_id                = cp_trx_line_id
8382     AND   zx.entity_code                = G_AR_ENTITY_CODE
8383     AND   zx.event_class_code           = G_INVOICE_EVENT_CLASS_CODE
8384     AND   zx.application_id             = G_AR_APPLICATION_ID;
8385 
8386     -- Get tax values for a taxable line
8387     CURSOR l_get_zx_taxable_line_info(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
8388     SELECT zx.line_amt,
8389            zx.taxable_amt,
8390            zx.trx_date,
8391            zx.tax_determine_date,
8392            zx.trx_currency_code,
8393            zx.currency_conversion_type,
8394            zx.currency_conversion_rate,
8395            zx.currency_conversion_date,
8396            zxdet.product_category,
8397            zxdet.trx_business_category,
8398            zxdet.product_fisc_classification,
8399            zxdet.user_defined_fisc_class,
8400            zxdet.product_type,
8401            zxdet.internal_organization_id,
8402            zxdet.input_tax_classification_code,
8403            zx.legal_entity_id,
8404            zxdet.line_intended_use
8405     FROM   zx_lines zx,
8406            zx_lines_det_factors zxdet
8407     WHERE  zx.trx_line_id                = cp_trx_line_id
8408     AND    zx.trx_id                     = cp_trx_id
8409     AND    zx.internal_organization_id   = MO_GLOBAL.get_current_org_id
8410     AND    zx.entity_code                = G_AR_ENTITY_CODE
8411     AND    zx.event_class_code           = G_INVOICE_EVENT_CLASS_CODE
8412     AND    zx.application_id             = G_AR_APPLICATION_ID
8413     AND    zx.trx_line_id                = zxdet.trx_line_id
8414     AND    zx.trx_id                     = zxdet.trx_id
8415     AND    zx.internal_organization_id   = zxdet.internal_organization_id
8416     AND    zx.entity_code                = zxdet.entity_code
8417     AND    zx.event_class_code           = zxdet.event_class_code
8418     AND    zx.application_id             = zxdet.application_id
8419     AND    ROWNUM = 1;
8420 
8421     -- get tax lines from eBTax
8422     CURSOR l_get_zx_tax_lines(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
8423     SELECT zx.tax_rate_id,
8424            zx.tax_rate_code,
8425            zx.tax_exemption_id,
8426            zx.tax_rate,
8427            zx.tax_date,
8428            zx.line_amt,
8429            zx.internal_organization_id,
8430            zx.application_id,
8431            zx.entity_code,
8432            zx.event_class_code,
8433            zx.event_type_code,
8434            zx.trx_id,
8435            zx.trx_line_id,
8436            zx.trx_level_type,
8437            zx.trx_line_number,
8438            zx.tax_line_number,
8439            zx.tax_regime_id,
8440            zx.tax_regime_code,
8441            zx.tax_id,
8442            zx.tax,
8443            zx.tax_status_id,
8444            zx.tax_status_code,
8445            zx.tax_apportionment_line_number,
8446            zx.legal_entity_id,
8447            zx.trx_number,
8448            zx.trx_date,
8449            zx.tax_jurisdiction_id,
8450            zx.tax_jurisdiction_code,
8451            zx.tax_type_code,
8452            zx.tax_currency_code,
8453            zx.taxable_amt_tax_curr,
8454            zx.trx_currency_code,
8455            zx.minimum_accountable_unit,
8456            zx.precision,
8457            zx.currency_conversion_type,
8458            zx.currency_conversion_rate,
8459            zx.currency_conversion_date,
8460            zx.tax_determine_date,
8461            zx.taxable_amt,
8462            zx.tax_amt,
8463            zxdet.product_category,
8464            zxdet.trx_business_category,
8465            zxdet.product_fisc_classification,
8466            zxdet.user_defined_fisc_class,
8467            zxdet.product_type
8468     FROM zx_lines zx,
8469          zx_lines_det_factors zxdet
8470     WHERE  zx.trx_id                     = cp_trx_id
8471     AND    zx.trx_line_id                = cp_trx_line_id
8472     AND    zx.internal_organization_id   = MO_GLOBAL.get_current_org_id
8473     AND    zx.entity_code                = G_AR_ENTITY_CODE
8474     AND    zx.event_class_code           = G_INVOICE_EVENT_CLASS_CODE
8475     AND    zx.application_id             = G_AR_APPLICATION_ID
8476     AND    zx.trx_line_id                = zxdet.trx_line_id
8477     AND    zx.trx_id                     = zxdet.trx_id
8478     AND    zx.internal_organization_id   = zxdet.internal_organization_id
8479     AND    zx.entity_code                = zxdet.entity_code
8480     AND    zx.event_class_code           = zxdet.event_class_code
8481     AND    zx.application_id             = zxdet.application_id;
8482 
8483     -- Local Record Structures
8484         TYPE contract_streams_rec_type IS RECORD (
8485           khr_id                                                        NUMBER,
8486           kle_id                                                        NUMBER,
8487                   lty_code                          VARCHAR2(30),
8488           asset_number                                          VARCHAR2(15),
8489           trx_id                                                        NUMBER,
8490           trx_line_id                                           NUMBER,
8491           entity_code                                           VARCHAR2(30),
8492           event_class_code                                      VARCHAR2(30),
8493           trx_level_type                                        VARCHAR2(30),
8494           adjusted_doc_entity_code                      VARCHAR2(30),
8495           adjusted_doc_event_class_code         VARCHAR2(30),
8496           adjusted_doc_trx_id                           NUMBER,
8497           adjusted_doc_trx_line_id                      NUMBER,
8498           adjusted_doc_trx_level_type           VARCHAR2(30),
8499           adjusted_doc_number                           VARCHAR2(150),
8500           adjusted_doc_date                                     DATE,
8501           tax_call_type_code                            VARCHAR2(30),
8502           stream_type_id                                        NUMBER,
8503           trx_business_category                         VARCHAR2(30),
8504           tax_line_status_code                          VARCHAR2(30),
8505           sel_id                                                        NUMBER,
8506           reported_yn                                           VARCHAR2(1),
8507           Stream_Type                                           VARCHAR2(150),
8508           Billable                                                      VARCHAR2(1),
8509           stream_id                                                     NUMBER,
8510           transaction_number                    NUMBER,
8511           amount                                                        NUMBER,
8512           stream_element_date                           DATE,
8513           tax_sources_id                    NUMBER,
8514           asset_line_id                     NUMBER,
8515           ship_to_siteuseid                 NUMBER,
8516           inventory_item_id                 NUMBER );
8517 
8518     TYPE bill_ts_tx_src_rec_type IS RECORD (
8519                 BILL_ID                                         NUMBER,
8520                         TS_KHR_ID                                       NUMBER,
8521                         TS_KLE_ID                                       NUMBER,
8522                         BILL_ASSET_NUMBER               VARCHAR2(15),
8523                         BILL_TRX_ID                                     NUMBER ,
8524                         BILL_TRX_LINE_ID                                NUMBER ,
8525                         TS_TRX_ID                                               NUMBER,
8526                         TS_TRX_LINE_ID                                  NUMBER,
8527                         TS_STY_ID                                               NUMBER,
8528                         BILL_TRX_BUSINESS_CATEGORY              VARCHAR2(30),
8529                         TS_SEL_ID                                               NUMBER,
8530                         TS_SEL_DATE                                             DATE);
8531 
8532         TYPE asset_level_det_rec_type IS RECORD
8533         (fin_asset_id                           NUMBER,
8534          transfer_of_title                      VARCHAR2(30),
8535          sale_lease_back                        VARCHAR2(30),
8536          purchase_of_lease                      VARCHAR2(30),
8537          usage_of_equipment                     VARCHAR2(30),
8538          vendor_site_id                         NUMBER,
8539          age_of_equipment                       NUMBER);
8540 
8541         TYPE k_billed_streams_rec_type IS RECORD (
8542            khr_id                  NUMBER,
8543            kle_id                  NUMBER,
8544            sty_id                  NUMBER,
8545            sel_id                  NUMBER,
8546            sel_date                DATE,
8547            customer_trx_id         NUMBER,
8548            customer_trx_line_id    NUMBER,
8549 	       sel_amount              NUMBER); --SECHAWLA 22-APR-08 6975983 : added;
8550 
8551     TYPE contract_streams_tbl_type IS TABLE OF contract_streams_rec_type INDEX BY BINARY_INTEGER;
8552     TYPE bill_ts_tx_src_tbl_type IS TABLE OF bill_ts_tx_src_rec_type INDEX BY BINARY_INTEGER;
8553         TYPE asset_level_det_tbl_type IS TABLE OF asset_level_det_rec_type INDEX BY BINARY_INTEGER;
8554         TYPE finassets_tbl_type IS TABLE OF l_finassets_csr%ROWTYPE INDEX BY BINARY_INTEGER;
8555         TYPE kstreamtypes_tbl_type IS TABLE OF l_kstreamtypes_csr%ROWTYPE  INDEX BY BINARY_INTEGER;
8556         TYPE k_billed_streams_tbl_type IS TABLE OF k_billed_streams_rec_type INDEX BY BINARY_INTEGER;
8557 
8558     l_get_zx_taxable_line_info_rec  l_get_zx_taxable_line_info%ROWTYPE;
8559     l_ts_asset_level_det_tbl            asset_level_det_tbl_type;
8560     l_kstreamtypes_tbl              kstreamtypes_tbl_type;
8561     l_finassets_tbl                             finassets_tbl_type;
8562         l_contract_streams_tbl          contract_streams_tbl_type;
8563         l_tax_sources_tbl               tax_sources_tbl_type;
8564         l_tax_trx_details_tbl           tax_lines_tbl_type;
8565         l_K_unbilled_streams_rec        contract_streams_rec_type;
8566         l_bill_ts_tx_src_tbl            bill_ts_tx_src_tbl_type;
8567         l_k_billed_streams_tbl                  k_billed_streams_tbl_type;
8568     lx_tax_codes_tbl                tax_codes_tbl_type;
8569     lx_line_params_tbl              line_params_tbl_type;
8570     lp_hdr_params_rec               hdr_params_rec_type;
8571 
8572         l_fetch_size                    NUMBER := 10000;
8573 
8574         l_ts_trx_type_id_det            NUMBER;
8575         l_asset_number                  VARCHAR2(150);
8576 
8577         l_tax_sources_id                NUMBER;
8578 
8579         l_ts_prch_opt_det                               VARCHAR2(450);
8580         l_ts_fin_prod_id_det                    NUMBER;
8581         l_ts_int_disclosed_det                  VARCHAR2(30);
8582 
8583         l_ts_transfer_of_title                  VARCHAR2(30);
8584         l_ts_sale_lease_back                    VARCHAR2(30);
8585         l_ts_purchase_of_lease                  VARCHAR2(30);
8586         l_ts_usage_of_equipment                 VARCHAR2(450);
8587         l_ts_age_of_equipment                   NUMBER;
8588         l_ts_vendor_site_id             NUMBER;
8589 
8590         l_fin_asset_id                                  NUMBER;
8591         ind                                                     NUMBER;
8592         l_asset_line_id                                 NUMBER;
8593         l_inv_item_org_id                               NUMBER;
8594         l_contract_streams_tbc                  VARCHAR2(30);
8595         l_unbilled_strms_exist                  BOOLEAN := FALSE;
8596         l_bill_ts_tx_src_cnt                    NUMBER;
8597 
8598     j                                                           NUMBER;
8599     l_cust_trx_type_id                          NUMBER;
8600     l_vendor_id                                         NUMBER;
8601     l_vndr_cnt                                          NUMBER;
8602     l_dummy                                                     VARCHAR2(1);
8603         l_ts_khr_id                                             NUMBER;
8604     l_ts_start_date                                     DATE;
8605     l_ts_end_date                                       DATE;
8606 
8607     l_cust_acct_id                                      NUMBER;
8608     l_bill_to_siteuseid                 NUMBER;
8609         l_currency_code                                 VARCHAR2(15);
8610         l_precision                             NUMBER;
8611         l_minimum_accountable_unit              NUMBER;
8612 
8613     lx_bill_to_party_site_id        NUMBER;
8614     lx_bill_to_location_id          NUMBER;
8615     lx_bill_to_party_id             NUMBER;
8616     lx_bill_to_siteuseid            NUMBER;
8617     lx_ship_to_party_site_id        NUMBER;
8618     lx_ship_to_location_id          NUMBER;
8619     lx_ship_to_party_id             NUMBER;
8620     lx_ship_to_siteuseid                NUMBER;
8621 
8622     lx_org_id                       NUMBER;
8623     lx_book_class_code              VARCHAR2(30);
8624     lx_currency_conversion_type     VARCHAR2(30);
8625     lx_currency_conversion_rate     NUMBER;
8626     lx_currency_conversion_date     DATE;
8627     lx_contract_start_date          DATE;
8628 
8629         l_name                                                  VARCHAR2(150);
8630     l_lse_id                        NUMBER;
8631     l_tax_code_count                NUMBER;
8632     l_taxation_country              VARCHAR2(2);
8633     l_ledger_id                     NUMBER;
8634     l_legal_entity_id               NUMBER;
8635     l_inv_item_id                   NUMBER;
8636     l_inv_org_id                    NUMBER;
8637     l_org_id                        NUMBER;
8638     l_value_fetched                 BOOLEAN;
8639 
8640     l_tbc_code                      VARCHAR2(240);
8641     l_ufc_code                      VARCHAR2(240);
8642     l_pc_code                       VARCHAR2(240);
8643     l_tax_class_code                VARCHAR2(50);
8644     l_total_tax                     NUMBER;
8645 
8646   BEGIN
8647     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8648           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax','Begin(+)');
8649         END IF;
8650 
8651         -- Print Input Variables
8652         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8653       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8654                   'p_init_msg_list :'||p_init_msg_list);
8655           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8656                   'p_source_trx_id :'||p_source_trx_id);
8657       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8658                   'p_source_trx_name :'||p_source_trx_name);
8659       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8660                   'p_source_table :'||p_source_table);
8661         END IF;
8662 
8663     x_return_status := OKL_API.G_RET_STS_SUCCESS;
8664 
8665     OPEN  l_trxrequests_csr(p_source_trx_id, p_source_trx_name);
8666         FETCH l_trxrequests_csr INTO l_ts_khr_id, l_ts_start_date, l_ts_end_date,
8667                                  l_ts_trx_type_id_det, l_legal_entity_id, l_org_id;
8668     IF l_trxrequests_csr%NOTFOUND THEN
8669       -- source trx id is invalid
8670       OKC_API.set_message( p_app_name      => 'OKC',
8671                            p_msg_name      => G_INVALID_VALUE,
8672                            p_token1        => G_COL_NAME_TOKEN,
8673                            p_token1_value  => 'SOURCE_TRX_ID');
8674       RAISE OKL_API.G_EXCEPTION_ERROR;
8675     END IF;
8676     CLOSE l_trxrequests_csr;
8677 
8678     -- Fetch the Ledger info
8679     l_ledger_id := okl_accounting_util.get_set_of_books_id;
8680 
8681     -- Fetch the Tax country
8682     l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
8683                                                        x_msg_count         => x_msg_count,
8684                                                        x_msg_data          => x_msg_data,
8685                                                        p_legal_entity_id   => l_legal_entity_id);
8686 
8687     -- Get K header level tax parameters
8688     get_k_hdr_tax_params(
8689                                         p_api_version                  => p_api_version,
8690                                 p_init_msg_list                => OKC_API.G_FALSE,
8691                                 x_return_status                => x_return_status,
8692                                 x_msg_count                    => x_msg_count,
8693                                 x_msg_data                     => x_msg_data,
8694                                 p_khr_id                       => l_ts_khr_id,
8695                                 p_source_trx_name              => p_source_trx_name,
8696                             p_source_table                                 => p_source_table,
8697                                 x_cust_acct_id                             => l_cust_acct_id,
8698                                         x_bill_to_siteuseid            => lx_bill_to_siteuseid,
8699                                         x_currency_code                            => l_currency_code,
8700                                 x_cust_trx_type_id             => l_cust_trx_type_id,
8701                                 x_precision                                        => l_precision,
8702                                         x_minimum_accountable_unit     => l_minimum_accountable_unit,
8703                                         x_prch_opt_det                             => l_ts_prch_opt_det,
8704                                         x_fin_prod_id_det                          => l_ts_fin_prod_id_det,
8705                                         x_int_disclosed_det                        => l_ts_int_disclosed_det,
8706                     x_org_id                       => lx_org_id,
8707                     x_book_class_code              => lx_book_class_code,
8708                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
8709                     x_bill_to_party_id             => lx_bill_to_party_id,
8710                     x_bill_to_location_id          => lx_bill_to_location_id,
8711                     x_currency_conversion_type     => lx_currency_conversion_type,
8712                     x_currency_conversion_rate     => lx_currency_conversion_rate,
8713                     x_currency_conversion_date     => lx_currency_conversion_date,
8714                     x_contract_start_date          => lx_contract_start_date);
8715 
8716     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8717       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8718     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8719       RAISE OKL_API.G_EXCEPTION_ERROR;
8720     END IF;
8721 
8722     --------------- Process Billed Stream elements - Start -------------------
8723 
8724     -- Check if any of the stream elements between the given date range are
8725     -- billed (under old/new solution) If so, insert already calculated tax
8726     -- lines into tax sources and tax trx details with trx type of
8727     -- 'Tax Schedule'  If Billed under new solution, then tax would have been
8728     -- calculated under 'Billing' transaction type and tax lines inserted into
8729     -- okl_tax_sources/okl_tax_trx_detials. Insert these tax lines back into tax
8730     -- sources/tax trx details with transaction type of 'Tax Schedule'
8731 
8732     l_bill_ts_tx_src_cnt := 0;
8733     l_bill_ts_tx_src_tbl.DELETE;
8734     OPEN  c_k_billed_streams_csr(l_ts_khr_id, l_ts_start_date, l_ts_end_date);
8735     LOOP
8736       l_k_billed_streams_tbl.DELETE;
8737       FETCH c_k_billed_streams_csr BULK COLLECT INTO l_k_billed_streams_tbl LIMIT l_fetch_size;
8738 
8739           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8740         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8741                               'l_k_billed_streams_tbl.COUNT '||l_k_billed_streams_tbl.COUNT);
8742           END IF;
8743 
8744           IF l_k_billed_streams_tbl.COUNT > 0 THEN
8745 
8746         l_tax_sources_tbl.DELETE;
8747                 l_tax_trx_details_tbl.DELETE;
8748                 i := 1;
8749         FOR k IN l_k_billed_streams_tbl.FIRST..l_k_billed_streams_tbl.LAST LOOP
8750 
8751           l_total_tax := 0;
8752 
8753           OPEN  l_get_zx_taxable_line_info(l_k_billed_streams_tbl(k).customer_trx_id, l_k_billed_streams_tbl(k).customer_trx_line_id);
8754           FETCH l_get_zx_taxable_line_info INTO l_get_zx_taxable_line_info_rec;
8755           IF l_get_zx_taxable_line_info%NOTFOUND THEN  -- data should exist in the billing tables
8756             --SECHAWLA 22-APR-08 6975983 : begin
8757             --SECHAWLA 22-APR-08 6975983 : shouldn't fail if no tax calculated in eBTax for AR Invoice
8758             /*
8759 			OKL_API.set_message( p_app_name      => 'OKL',
8760                                  p_msg_name      => 'OKL_TX_NO_BILLING_INFO');
8761             RAISE OKL_API.G_EXCEPTION_ERROR;
8762             */
8763             -- In scenario where there is no tax in eBTax for billed AR invoices (stream elements),
8764 			-- Tax determinants can not be derived. Tax determinants are passed to AR through Ar Interface
8765 			-- But these are not stored in actual AR tables. When AR makes tax call to eBTax, these determinants
8766 			-- are passed to ebTax and stored in eBTax. Since in this case, there is no data in eBTax tables,
8767 			-- it is not possible to derive these values. Hence storing Null values
8768             l_get_zx_taxable_line_info_rec.trx_business_category := NULL;
8769             l_get_zx_taxable_line_info_rec.product_category := NULL;
8770             l_get_zx_taxable_line_info_rec.user_defined_fisc_class := NULL;
8771             l_get_zx_taxable_line_info_rec.line_intended_use := NULL;
8772             l_get_zx_taxable_line_info_rec.input_tax_classification_code := NULL;
8773             l_get_zx_taxable_line_info_rec.product_type := NULL;
8774             l_get_zx_taxable_line_info_rec.product_fisc_classification := NULL;
8775 
8776 
8777             l_get_zx_taxable_line_info_rec.internal_organization_id := l_org_id;
8778             l_get_zx_taxable_line_info_rec.legal_entity_id := l_legal_entity_id;
8779 
8780             l_get_zx_taxable_line_info_rec.line_amt  := l_k_billed_streams_tbl(k).sel_amount;
8781             l_get_zx_taxable_line_info_rec.taxable_amt := l_k_billed_streams_tbl(k).sel_amount;
8782 
8783             l_get_zx_taxable_line_info_rec.trx_date := l_k_billed_streams_tbl(k).sel_date;
8784 
8785             l_get_zx_taxable_line_info_rec.tax_determine_date := NULL;
8786 
8787             l_get_zx_taxable_line_info_rec.trx_currency_code := l_currency_code;
8788             l_get_zx_taxable_line_info_rec.currency_conversion_type := NULL;
8789             l_get_zx_taxable_line_info_rec.currency_conversion_rate := NULL;
8790             l_get_zx_taxable_line_info_rec.currency_conversion_date := NULL;
8791             --SECHAWLA 22-APR-08 6975983 : end
8792           END IF;
8793           CLOSE l_get_zx_taxable_line_info;
8794 
8795           OPEN l_get_zx_total_tax(l_k_billed_streams_tbl(k).customer_trx_id, l_k_billed_streams_tbl(k).customer_trx_line_id);
8796           FETCH l_get_zx_total_tax INTO l_total_tax;
8797           CLOSE l_get_zx_total_tax;
8798 
8799           IF (l_k_billed_streams_tbl(k).kle_id IS NOT NULL) THEN
8800                 OPEN  l_okclines_csr(l_k_billed_streams_tbl(k).kle_id);
8801                     FETCH l_okclines_csr INTO l_name, l_lse_id;
8802                     CLOSE l_okclines_csr;
8803           END IF;
8804 
8805           -- populate tax sources table with transaction type of 'Tax Schedule'
8806           l_tax_sources_tbl(k).id                               := get_seq_id;
8807           l_tax_sources_tbl(k).kle_id                           := l_k_billed_streams_tbl(k).kle_id;
8808           l_tax_sources_tbl(k).khr_id                           := l_ts_khr_id;
8809 
8810           IF (l_lse_id = 33) THEN
8811             l_tax_sources_tbl(k).asset_number                   := l_name;
8812           END IF;
8813 
8814           l_tax_sources_tbl(k).trx_id                           := p_source_trx_id;
8815           l_tax_sources_tbl(k).trx_line_id                      := l_tax_sources_tbl(k).id;
8816           l_tax_sources_tbl(k).entity_code                      := G_TAX_SCH_ENTITY_CODE;
8817           l_tax_sources_tbl(k).event_class_code                 := G_TAX_SCHEDULE;
8818           l_tax_sources_tbl(k).trx_level_type                   := G_TRX_LEVEL_TYPE;
8819           l_tax_sources_tbl(k).adjusted_doc_entity_code         := null;
8820           l_tax_sources_tbl(k).adjusted_doc_event_class_code    := null;
8821           l_tax_sources_tbl(k).adjusted_doc_trx_id              := null;
8822           l_tax_sources_tbl(k).adjusted_doc_trx_line_id         := null;
8823           l_tax_sources_tbl(k).adjusted_doc_trx_level_type      := null;
8824           l_tax_sources_tbl(k).adjusted_doc_number              := null;
8825           l_tax_sources_tbl(k).adjusted_doc_date                := null;
8826           l_tax_sources_tbl(k).tax_call_type_code               := G_TAX_SCHEDULE;
8827           l_tax_sources_tbl(k).sty_id                           := l_k_billed_streams_tbl(k).sty_id;
8828           l_tax_sources_tbl(k).trx_business_category            := l_get_zx_taxable_line_info_rec.trx_business_category;
8829           l_tax_sources_tbl(k).tax_line_status_code             := G_ACTIVE_STATUS;
8830           l_tax_sources_tbl(k).sel_id                           := l_k_billed_streams_tbl(k).sel_id;
8831           l_tax_sources_tbl(k).reported_yn                      := 'Y';
8832                   l_tax_sources_tbl(k).program_id                       := null;
8833                   l_tax_sources_tbl(k).request_id                       := null;
8834                   l_tax_sources_tbl(k).program_application_id           := null;
8835                   l_tax_sources_tbl(k).program_update_date              := null;
8836                   l_tax_sources_tbl(k).attribute_category               := null;
8837 
8838                   l_tax_sources_tbl(k).attribute1                    := null;
8839                   l_tax_sources_tbl(k).attribute2                    := null;
8840                   l_tax_sources_tbl(k).attribute3                    := null;
8841                   l_tax_sources_tbl(k).attribute4                    := null;
8842                   l_tax_sources_tbl(k).attribute5                    := null;
8843                   l_tax_sources_tbl(k).attribute6                    := null;
8844                   l_tax_sources_tbl(k).attribute7                    := null;
8845                   l_tax_sources_tbl(k).attribute8                    := null;
8846                   l_tax_sources_tbl(k).attribute9                    := null;
8847                   l_tax_sources_tbl(k).attribute10                   := null;
8848                   l_tax_sources_tbl(k).attribute11                   := null;
8849                   l_tax_sources_tbl(k).attribute12                   := null;
8850                   l_tax_sources_tbl(k).attribute13                   := null;
8851                   l_tax_sources_tbl(k).attribute14                   := null;
8852                   l_tax_sources_tbl(k).attribute15                   := null;
8853                   l_tax_sources_tbl(k).created_by                    := G_USER_ID;
8854                   l_tax_sources_tbl(k).creation_date                 := SYSDATE;
8855                   l_tax_sources_tbl(k).last_updated_by               := G_USER_ID;
8856                   l_tax_sources_tbl(k).last_update_date              := SYSDATE;
8857                   l_tax_sources_tbl(k).last_update_login             := G_LOGIN_ID;
8858                   l_tax_sources_tbl(k).object_version_number         := null;
8859 
8860           l_tax_sources_tbl(k).line_name                 := l_name;
8861           l_tax_sources_tbl(k).application_id            := G_OKL_APPLICATION_ID;
8862           l_tax_sources_tbl(k).tax_reporting_flag        := 'Y';
8863           l_tax_sources_tbl(k).default_taxation_country  := l_taxation_country;
8864           l_tax_sources_tbl(k).product_category          := l_get_zx_taxable_line_info_rec.product_category;
8865           l_tax_sources_tbl(k).user_defined_fisc_class   := l_get_zx_taxable_line_info_rec.user_defined_fisc_class;
8866           l_tax_sources_tbl(k).line_intended_use         := l_get_zx_taxable_line_info_rec.line_intended_use;
8867           l_tax_sources_tbl(k).tax_classification_code   := l_get_zx_taxable_line_info_rec.input_tax_classification_code;
8868           l_tax_sources_tbl(k).inventory_item_id         := null;
8869           l_tax_sources_tbl(k).bill_to_cust_acct_id      := l_cust_acct_id;
8870           l_tax_sources_tbl(k).org_id                    := l_get_zx_taxable_line_info_rec.internal_organization_id;
8871           l_tax_sources_tbl(k).legal_entity_id           := l_get_zx_taxable_line_info_rec.legal_entity_id;
8872           l_tax_sources_tbl(k).line_amt                  := l_get_zx_taxable_line_info_rec.line_amt;
8873           l_tax_sources_tbl(k).assessable_value          := l_get_zx_taxable_line_info_rec.taxable_amt;
8874 
8875           l_tax_sources_tbl(k).total_tax                 := l_total_tax;
8876           l_tax_sources_tbl(k).trx_date                  := l_get_zx_taxable_line_info_rec.trx_date;
8877           l_tax_sources_tbl(k).try_id                    := l_ts_trx_type_id_det ; --SECHAWLA 22-APR-08 6975983 --null;
8878 
8879           l_tax_sources_tbl(k).product_type                    := l_get_zx_taxable_line_info_rec.product_type;
8880           l_tax_sources_tbl(k).product_fisc_classification     := l_get_zx_taxable_line_info_rec.product_fisc_classification;
8881           l_tax_sources_tbl(k).provnl_tax_determination_date   := l_get_zx_taxable_line_info_rec.tax_determine_date;
8882           l_tax_sources_tbl(k).ship_to_location_id             := null;
8883           l_tax_sources_tbl(k).ship_to_party_site_id           := null;
8884           l_tax_sources_tbl(k).ship_to_party_id                := null;
8885           l_tax_sources_tbl(k).bill_to_party_site_id           := null;
8886           l_tax_sources_tbl(k).bill_to_location_id             := null;
8887           l_tax_sources_tbl(k).bill_to_party_id                := null;
8888           l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id   := null;
8889           l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id   := null;
8890           l_tax_sources_tbl(k).trx_currency_code               := l_get_zx_taxable_line_info_rec.trx_currency_code;
8891           l_tax_sources_tbl(k).currency_conversion_type        := l_get_zx_taxable_line_info_rec.currency_conversion_type;
8892           l_tax_sources_tbl(k).currency_conversion_rate        := l_get_zx_taxable_line_info_rec.currency_conversion_rate;
8893           l_tax_sources_tbl(k).currency_conversion_date        := l_get_zx_taxable_line_info_rec.currency_conversion_date;
8894 
8895           -- Populate Tax trx details for each tax source
8896           FOR l_get_zx_tax_lines_rec IN l_get_zx_tax_lines(l_k_billed_streams_tbl(k).customer_trx_id,
8897                                                            l_k_billed_streams_tbl(k).customer_trx_line_id) LOOP
8898 
8899             l_tax_trx_details_tbl(i).id                           := get_seq_id;
8900             l_tax_trx_details_tbl(i).txs_id                       := l_tax_sources_tbl(k).id;
8901                 l_tax_trx_details_tbl(i).tax_determination_date       := l_get_zx_tax_lines_rec.tax_determine_date;
8902                 l_tax_trx_details_tbl(i).tax_rate_id                  := l_get_zx_tax_lines_rec.tax_rate_id;
8903                 l_tax_trx_details_tbl(i).tax_rate_code                := l_get_zx_tax_lines_rec.tax_rate_code;
8904                 l_tax_trx_details_tbl(i).taxable_amount               := l_get_zx_tax_lines_rec.taxable_amt;
8905                 l_tax_trx_details_tbl(i).tax_exemption_id             := l_get_zx_tax_lines_rec.tax_exemption_id;
8906                 l_tax_trx_details_tbl(i).tax_rate                     := l_get_zx_tax_lines_rec.tax_rate;
8907                 l_tax_trx_details_tbl(i).tax_amount                   := l_get_zx_tax_lines_rec.tax_amt;
8908 
8909             l_tax_trx_details_tbl(i).tax_date                     := l_get_zx_tax_lines_rec.tax_date;
8910             l_tax_trx_details_tbl(i).line_amt                     := l_get_zx_tax_lines_rec.line_amt;
8911             l_tax_trx_details_tbl(i).internal_organization_id     := l_get_zx_tax_lines_rec.internal_organization_id;
8912             l_tax_trx_details_tbl(i).application_id               := l_get_zx_tax_lines_rec.application_id;
8913             l_tax_trx_details_tbl(i).entity_code                  := l_get_zx_tax_lines_rec.entity_code;
8914             l_tax_trx_details_tbl(i).event_class_code             := l_get_zx_tax_lines_rec.event_class_code;
8915             l_tax_trx_details_tbl(i).event_type_code              := l_get_zx_tax_lines_rec.event_type_code;
8916             l_tax_trx_details_tbl(i).trx_id                       := l_tax_sources_tbl(k).trx_id;
8917             l_tax_trx_details_tbl(i).trx_line_id                  := l_tax_sources_tbl(k).trx_line_id;
8918             l_tax_trx_details_tbl(i).trx_level_type               := l_get_zx_tax_lines_rec.trx_level_type;
8919             l_tax_trx_details_tbl(i).trx_line_number              := l_get_zx_tax_lines_rec.trx_line_number;
8920             l_tax_trx_details_tbl(i).tax_line_number              := l_get_zx_tax_lines_rec.tax_line_number;
8921             l_tax_trx_details_tbl(i).tax_regime_id                := l_get_zx_tax_lines_rec.tax_regime_id;
8922             l_tax_trx_details_tbl(i).tax_regime_code              := l_get_zx_tax_lines_rec.tax_regime_code;
8923             l_tax_trx_details_tbl(i).tax_id                       := l_get_zx_tax_lines_rec.tax_id;
8924             l_tax_trx_details_tbl(i).tax                          := l_get_zx_tax_lines_rec.tax;
8925             l_tax_trx_details_tbl(i).tax_status_id                := l_get_zx_tax_lines_rec.tax_status_id;
8926             l_tax_trx_details_tbl(i).tax_status_code              := l_get_zx_tax_lines_rec.tax_status_code;
8927             l_tax_trx_details_tbl(i).tax_apportionment_line_number := l_get_zx_tax_lines_rec.tax_apportionment_line_number;
8928             l_tax_trx_details_tbl(i).legal_entity_id              := l_get_zx_tax_lines_rec.legal_entity_id;
8929             l_tax_trx_details_tbl(i).trx_number                   := l_get_zx_tax_lines_rec.trx_number;
8930             l_tax_trx_details_tbl(i).trx_date                     := l_get_zx_tax_lines_rec.trx_date;
8931             l_tax_trx_details_tbl(i).tax_jurisdiction_id          := l_get_zx_tax_lines_rec.tax_jurisdiction_id;
8932             l_tax_trx_details_tbl(i).tax_jurisdiction_code        := l_get_zx_tax_lines_rec.tax_jurisdiction_code;
8933             l_tax_trx_details_tbl(i).tax_type_code                := l_get_zx_tax_lines_rec.tax_type_code;
8934             l_tax_trx_details_tbl(i).tax_currency_code            := l_get_zx_tax_lines_rec.tax_currency_code;
8935             l_tax_trx_details_tbl(i).taxable_amt_tax_curr         := l_get_zx_tax_lines_rec.taxable_amt_tax_curr;
8936             l_tax_trx_details_tbl(i).trx_currency_code            := l_get_zx_tax_lines_rec.trx_currency_code;
8937             l_tax_trx_details_tbl(i).minimum_accountable_unit     := l_get_zx_tax_lines_rec.minimum_accountable_unit;
8938             l_tax_trx_details_tbl(i).precision                    := l_get_zx_tax_lines_rec.precision;
8939             l_tax_trx_details_tbl(i).currency_conversion_type     := l_get_zx_tax_lines_rec.currency_conversion_type;
8940             l_tax_trx_details_tbl(i).currency_conversion_rate     := l_get_zx_tax_lines_rec.currency_conversion_rate;
8941             l_tax_trx_details_tbl(i).currency_conversion_date     := l_get_zx_tax_lines_rec.currency_conversion_date;
8942 
8943             -- columns for backward compatibility
8944             l_tax_trx_details_tbl(i).tax_determine_date           := l_get_zx_tax_lines_rec.tax_determine_date;
8945             l_tax_trx_details_tbl(i).taxable_amt                  := l_get_zx_tax_lines_rec.taxable_amt;
8946             l_tax_trx_details_tbl(i).tax_amt                      := l_get_zx_tax_lines_rec.tax_amt;
8947                 l_tax_trx_details_tbl(i).billed_yn                    := 'Y'; -- tax lines calculated by tax engine are not billed
8948                 l_tax_trx_details_tbl(i).tax_call_type_code           := G_TAX_SCHEDULE;
8949 
8950                 l_tax_trx_details_tbl(i).program_id                   := null;
8951                 l_tax_trx_details_tbl(i).request_id                   := null;
8952                 l_tax_trx_details_tbl(i).program_application_id       := null;
8953                 l_tax_trx_details_tbl(i).program_update_date          := null;
8954                 l_tax_trx_details_tbl(i).attribute_category           := null;
8955                 l_tax_trx_details_tbl(i).attribute1                   := null;
8956                 l_tax_trx_details_tbl(i).attribute2                   := null;
8957                 l_tax_trx_details_tbl(i).attribute3                   := null;
8958                 l_tax_trx_details_tbl(i).attribute4                   := null;
8959                 l_tax_trx_details_tbl(i).attribute5                   := null;
8960                 l_tax_trx_details_tbl(i).attribute6                   := null;
8961                 l_tax_trx_details_tbl(i).attribute7                   := null;
8962                 l_tax_trx_details_tbl(i).attribute8                   := null;
8963                 l_tax_trx_details_tbl(i).attribute9                   := null;
8964                 l_tax_trx_details_tbl(i).attribute10                  := null;
8965                 l_tax_trx_details_tbl(i).attribute11                  := null;
8966                 l_tax_trx_details_tbl(i).attribute12                  := null;
8967                 l_tax_trx_details_tbl(i).attribute13                  := null;
8968                 l_tax_trx_details_tbl(i).attribute14                  := null;
8969                 l_tax_trx_details_tbl(i).attribute15                  := null;
8970                 l_tax_trx_details_tbl(i).created_by                   := G_USER_ID;
8971                 l_tax_trx_details_tbl(i).creation_date                := SYSDATE;
8972                 l_tax_trx_details_tbl(i).last_updated_by              := G_USER_ID;
8973                 l_tax_trx_details_tbl(i).last_update_date             := SYSDATE;
8974                 l_tax_trx_details_tbl(i).last_update_login            := G_LOGIN_ID;
8975                 l_tax_trx_details_tbl(i).object_version_number        := null;
8976 
8977             i := i + 1;
8978           END LOOP;
8979 
8980         END LOOP;
8981       END IF;
8982       EXIT WHEN c_k_billed_streams_csr%NOTFOUND;
8983     END LOOP;
8984     CLOSE c_k_billed_streams_csr;
8985 
8986         -- At this point l_tax_sources_tbl and l_tax_trx_details_tbl tables have
8987         -- all the data for the billed stream elements
8988 
8989     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8990       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8991                                           'before Insert into okl_tax_sources ');
8992     END IF;
8993 
8994     ---- Insert into okl_tax_sources begin -----
8995     BEGIN
8996       IF l_tax_sources_tbl.COUNT > 0 THEN
8997         FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
8998         -- SAVE EXCEPTIONS
8999         INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
9000       END IF;
9001     EXCEPTION
9002       WHEN OTHERS THEN
9003         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
9004                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
9005                         OKL_API.set_message(p_app_name      => 'OKL',
9006                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
9007                                 p_token1        => 'TABLE_NAME',
9008                                 p_token1_value  => 'OKL_TAX_SOURCES',
9009                                 p_token2        => 'ERROR_CODE',
9010                                                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
9011                                                                 p_token3        => 'ITERATION',
9012                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
9013                   END LOOP;
9014                   RAISE OKL_API.G_EXCEPTION_ERROR;
9015                 END IF;
9016     END;
9017     ---- Insert into okl_tax_sources end -----
9018 
9019     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9020       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9021                                           'before Insert into okl_tax_trx_details ');
9022     END IF;
9023 
9024         ---- Insert into okl_tax_trx_details begin -----
9025     BEGIN
9026       IF l_tax_trx_details_tbl.COUNT > 0 THEN
9027         FORALL indx IN l_tax_trx_details_tbl.FIRST..l_tax_trx_details_tbl.LAST
9028         -- SAVE EXCEPTIONS
9029           INSERT INTO okl_tax_trx_details VALUES l_tax_trx_details_tbl(indx);
9030       END IF;
9031     EXCEPTION
9032       WHEN OTHERS THEN
9033         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
9034                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
9035                         OKL_API.set_message(p_app_name      => 'OKL',
9036                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
9037                                 p_token1        => 'TABLE_NAME',
9038                                 p_token1_value  => 'OKL_TAX_TRX_DETAILS',
9039                                 p_token2        => 'ERROR_CODE',
9040                                                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
9041                                                                 p_token3        => 'ITERATION',
9042                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
9043                   END LOOP;
9044                   RAISE OKL_API.G_EXCEPTION_ERROR;
9045                 END IF;
9046     END;
9047 
9048         ---- Insert into okl_tax_trx_details end -----
9049 
9050         -- At this point tax sources and tax trx details have been created for the already billed
9051         -- and taxed stream elements under transaction type 'Tax Schedule'
9052 
9053         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9054       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9055                                           'Process Billed Stream elements end ');
9056     END IF;
9057     --------------- Process Billed Stream elements - End -------------------
9058 
9059     -----------------Process Unbilled Stream elements - Start --------------
9060     OPEN  c_k_unbilled_streams_csr(l_ts_khr_id, l_ts_start_date, l_ts_end_date);
9061     FETCH c_k_unbilled_streams_csr INTO l_K_unbilled_streams_rec;
9062     IF c_k_unbilled_streams_csr%FOUND THEN
9063       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9064         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9065                                           'l_unbilled_strms_exist = TRUE ');
9066       END IF;
9067 
9068       l_unbilled_strms_exist := TRUE;
9069     END IF;
9070     CLOSE c_k_unbilled_streams_csr;
9071 
9072     IF (l_unbilled_strms_exist) THEN -- Processing for Unbilled streams - Start
9073 
9074           -------------- Get financial asset line level TBC Determinants ---------------
9075       i := 0;
9076       OPEN l_finassets_csr(l_ts_khr_id);
9077       LOOP
9078         l_finassets_tbl.DELETE;
9079         FETCH l_finassets_csr BULK COLLECT INTO l_finassets_tbl LIMIT l_fetch_size;
9080 
9081         IF l_finassets_tbl.COUNT > 0 THEN
9082           FOR K IN l_finassets_tbl.FIRST..l_finassets_tbl.LAST LOOP
9083 
9084                 get_asset_tax_params(
9085                                                                 p_api_version                  => p_api_version,
9086                                                         p_init_msg_list                => OKC_API.G_FALSE,
9087                                                         x_return_status                => x_return_status,
9088                                                         x_msg_count                    => x_msg_count,
9089                                                         x_msg_data                     => x_msg_data,
9090                                                         p_khr_id                       => l_ts_khr_id,
9091                                                         p_kle_id                       => l_finassets_tbl(k).fin_asset_id,
9092                                                         p_source_trx_name              => p_source_trx_name,
9093                                                 p_source_table                             => p_source_table,
9094                                                         x_transfer_of_title                        => l_ts_transfer_of_title,
9095                                                         x_sale_lease_back                          => l_ts_sale_lease_back,
9096                                                         x_purchase_of_lease                        => l_ts_purchase_of_lease,
9097                                                         x_usage_of_equipment               => l_ts_usage_of_equipment,
9098                                                                 x_age_of_equipment                         => l_ts_age_of_equipment,
9099                                                                 x_vendor_site_id                       => l_ts_vendor_site_id);
9100 
9101             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9102                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9103                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9104                   RAISE OKL_API.G_EXCEPTION_ERROR;
9105                 END IF;
9106 
9107                 l_ts_asset_level_det_tbl(i).fin_asset_id := l_finassets_tbl(k).fin_asset_id;
9108                 l_ts_asset_level_det_tbl(i).transfer_of_title := l_ts_transfer_of_title;
9109                 l_ts_asset_level_det_tbl(i).sale_lease_back := l_ts_sale_lease_back;
9110                 l_ts_asset_level_det_tbl(i).purchase_of_lease := l_ts_purchase_of_lease;
9111                 l_ts_asset_level_det_tbl(i).usage_of_equipment  := l_ts_usage_of_equipment;
9112                 l_ts_asset_level_det_tbl(i).vendor_site_id      := l_ts_vendor_site_id;
9113                 l_ts_asset_level_det_tbl(i).age_of_equipment := l_ts_age_of_equipment;
9114 
9115                 i := i + 1;
9116           END LOOP;
9117         END IF;
9118         EXIT WHEN l_finassets_csr%NOTFOUND;
9119       END LOOP;
9120       CLOSE l_finassets_csr;
9121 
9122       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9123         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9124                                           'after hdr level and asset level determinant fetch ');
9125       END IF;
9126 
9127       -------- Get all codes at stream type level (for each unique combination of K/Line and stream type) -----------
9128 
9129       OPEN l_kstreamtypes_csr(l_ts_khr_id);
9130       LOOP
9131         l_kstreamtypes_tbl.DELETE;
9132         FETCH l_kstreamtypes_csr BULK COLLECT INTO l_kstreamtypes_tbl LIMIT l_fetch_size;
9133 
9134         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9135           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9136                                                           'l_kstreamtypes_tbl.COUNT '||l_kstreamtypes_tbl.COUNT);
9137         END IF;
9138 
9139         IF l_kstreamtypes_tbl.COUNT > 0 THEN
9140 
9141           l_tax_code_count := 1;
9142           lx_tax_codes_tbl.DELETE;
9143           FOR K IN l_kstreamtypes_tbl.FIRST..l_kstreamtypes_tbl.LAST LOOP
9144 
9145                 IF (l_kstreamtypes_tbl(k).line_id IS NULL OR
9146                 l_kstreamtypes_tbl(k).lty_code IN ('SOLD_SERVICE', 'FEE')) THEN
9147 
9148               -- K level stream or service/fee line level stream
9149               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9150                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9151                                                                           'hdr level OR Service/Fee Line level ');
9152                   END IF;
9153 
9154               l_vendor_id := NULL;
9155               l_ts_vendor_site_id := NULL;
9156 
9157               -- Vendor site is applicable for fin asset / service / fee lines / sublines
9158               -- Vendor site is not applicable at the K level
9159               IF l_kstreamtypes_tbl(k).line_id IS NOT NULL THEN -- service or fee line
9160                 -- Check if multiple vendors exist.  If so, vendor location is
9161                 -- not a determinant, get the service / fee line Vendor
9162                         l_vndr_cnt := 0;
9163 
9164                 FOR l_partyroles_rec IN l_partyroles_csr(l_kstreamtypes_tbl(k).line_id) LOOP -- pass top service/fee line id
9165                           l_vndr_cnt := l_vndr_cnt + 1;
9166                           l_vendor_id := l_partyroles_rec.object1_id1;  -- vendor is optional
9167                         END LOOP;
9168 
9169                         IF l_vndr_cnt =  1 AND l_vendor_id IS NOT NULL THEN
9170                           -- get the primary pay vendor site (if defined) from AP
9171                           OPEN   l_povendorsites_csr(l_vendor_id);
9172                           FETCH  l_povendorsites_csr INTO l_ts_vendor_site_id; -- will be null if none of the sites are checked as primary
9173                           CLOSE  l_povendorsites_csr;
9174                         END IF;
9175                   END IF;
9176 
9177               populate_tax_codes( p_api_version                  => p_api_version,
9178                                   p_init_msg_list                => OKC_API.G_FALSE,
9179                                   x_return_status                => x_return_status,
9180                                   x_msg_count                    => x_msg_count,
9181                                   x_msg_data                     => x_msg_data,
9182                                   p_prch_opt_det                                 =>     l_ts_prch_opt_det,
9183                                   p_fin_prod_id_det                              =>     l_ts_fin_prod_id_det,
9184                                   p_int_disclosed_det                    =>     l_ts_int_disclosed_det,
9185                                   p_title_trnsfr_code                    =>     null,
9186                                   p_sale_lease_back_code                 =>     null,
9187                                   p_lease_purchased_code                 =>     null,
9188                                   p_equip_usage_code                     =>     null,
9189                                   p_vendor_site_id                           => l_ts_vendor_site_id,
9190                                   p_age_of_equip                                 =>     null,
9191                                   p_source_trx_name              => p_source_trx_name,
9192                                   p_book_class_code              => lx_book_class_code,
9193                                   p_tax_code_cnt                 => l_tax_code_count,
9194                                   p_sty_id                       => l_kstreamtypes_tbl(k).stream_type_id,
9195                                   p_try_id                       => l_ts_trx_type_id_det,
9196                                   p_tax_country_code             => l_taxation_country,
9197                                   p_khr_id                       => l_ts_khr_id,
9198                                   p_kle_id                       => l_kstreamtypes_tbl(k).line_id,
9199                                   p_bill_to_party_site_id        => lx_bill_to_party_site_id,
9200                                   p_bill_to_location_id          => lx_bill_to_location_id,
9201                                   p_bill_to_party_id             => lx_bill_to_party_id,
9202                                   p_bill_to_cust_acct_site_id    => lx_bill_to_siteuseid,
9203                                   p_org_id                       => l_org_id,
9204                                   p_trx_date                     => l_ts_start_date,
9205                                   px_tax_codes_tbl               => lx_tax_codes_tbl);
9206 
9207               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9208                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9209                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9210                         RAISE OKL_API.G_EXCEPTION_ERROR;
9211                   END IF;
9212 
9213               l_tax_code_count := l_tax_code_count + 1;
9214 
9215             ELSIF l_kstreamtypes_tbl(k).lty_code IN ('FREE_FORM1','LINK_SERV_ASSET','LINK_FEE_ASSET') THEN
9216                   -- Asset level stream or service/fee sub line level stream
9217 
9218                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9219                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9220                                                                           'asset / service subline / fee subline level ');
9221                   END IF;
9222 
9223                   IF l_kstreamtypes_tbl(k).lty_code = 'FREE_FORM1' THEN
9224                         l_fin_asset_id := l_kstreamtypes_tbl(k).line_id;
9225                   ELSE
9226                         -- If subline level, get the attached fin asset id
9227                         OPEN  l_finasset_csr(l_kstreamtypes_tbl(k).line_id, l_kstreamtypes_tbl(k).lty_code);
9228                         FETCH l_finasset_csr INTO l_fin_asset_id;
9229                         CLOSE l_finasset_csr;
9230                   END IF;
9231 
9232                   IF l_ts_asset_level_det_tbl.count > 0 THEN
9233                         ind := l_ts_asset_level_det_tbl.FIRST;
9234                         LOOP
9235 
9236                           IF l_ts_asset_level_det_tbl(ind).fin_asset_id = l_fin_asset_id THEN
9237 
9238                         -- Equipment Type(inventory item id)
9239                                 -- get the inventory item id
9240                                 OPEN   l_invitem_csr(l_fin_asset_id);
9241                                 FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_org_id;
9242                                 IF l_invitem_csr%NOTFOUND THEN
9243                                   OKL_API.set_message(
9244                                                      p_app_name      => 'OKL',
9245                              p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
9246                                                  p_token1        => 'ASSET_NUMBER',
9247                                                          p_token1_value  => 'FIN_ASSET_ID');
9248 
9249                                   RAISE OKL_API.G_EXCEPTION_ERROR;
9250                                 END IF;
9251                                 CLOSE  l_invitem_csr;
9252 
9253                                 -- get the Location Party ID's
9254                                 get_location_party_ids(
9255                                                                         p_api_version                  => p_api_version,
9256                                                                 p_init_msg_list                => OKC_API.G_FALSE,
9257                                                                 x_return_status                => x_return_status,
9258                                                                 x_msg_count                    => x_msg_count,
9259                                                                 x_msg_data                     => x_msg_data,
9260                                                                 p_cust_acct_id                 => l_cust_acct_id,
9261                                                                 p_fin_asset_id                 => l_fin_asset_id,
9262                                     p_khr_id                       => l_ts_khr_id,
9263                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
9264                                     x_bill_to_location_id          => lx_bill_to_location_id,
9265                                     x_bill_to_party_id             => lx_bill_to_party_id,
9266                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
9267                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
9268                                     x_ship_to_location_id          => lx_ship_to_location_id,
9269                                     x_ship_to_party_id             => lx_ship_to_party_id,
9270                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
9271 
9272                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9273                                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9274                                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9275                                   RAISE OKL_API.G_EXCEPTION_ERROR;
9276                                 END IF;
9277 
9278                     populate_tax_codes( p_api_version                  => p_api_version,
9279                                         p_init_msg_list                => OKC_API.G_FALSE,
9280                                         x_return_status                => x_return_status,
9281                                         x_msg_count                    => x_msg_count,
9282                                         x_msg_data                     => x_msg_data,
9283                                         p_prch_opt_det                             => l_ts_prch_opt_det,
9284                                         p_fin_prod_id_det                          => l_ts_fin_prod_id_det,
9285                                         p_int_disclosed_det                        => l_ts_int_disclosed_det,
9286                                         p_title_trnsfr_code                        => l_ts_asset_level_det_tbl(ind).transfer_of_title,
9287                                         p_sale_lease_back_code             => l_ts_asset_level_det_tbl(ind).sale_lease_back,
9288                                         p_lease_purchased_code             => l_ts_asset_level_det_tbl(ind).purchase_of_lease,
9289                                         p_equip_usage_code                         => l_ts_asset_level_det_tbl(ind).usage_of_equipment,
9290                                         p_vendor_site_id                           => l_ts_asset_level_det_tbl(ind).vendor_site_id,
9291                                         p_age_of_equip                             => l_ts_asset_level_det_tbl(ind).age_of_equipment,
9292                                         p_source_trx_name              => p_source_trx_name,
9293                                         p_book_class_code              => lx_book_class_code,
9294                                         p_tax_code_cnt                 => l_tax_code_count,
9295                                         p_sty_id                       => l_kstreamtypes_tbl(k).stream_type_id,
9296                                         p_try_id                       => l_ts_trx_type_id_det,
9297                                         p_tax_country_code             => l_taxation_country,
9298                                         p_khr_id                       => l_ts_khr_id,
9299                                         p_kle_id                       => l_fin_asset_id,
9300                                         p_bill_to_party_site_id        => lx_bill_to_party_site_id,
9301                                         p_bill_to_location_id          => lx_bill_to_location_id,
9302                                         p_bill_to_party_id             => lx_bill_to_party_id,
9303                                         p_bill_to_cust_acct_site_id    => lx_bill_to_siteuseid,
9304                                         p_ship_to_party_site_id         => lx_ship_to_party_site_id,
9305                                         p_ship_to_location_id           => lx_ship_to_location_id,
9306                                         p_ship_to_party_id              => lx_ship_to_party_id,
9307                                         p_ship_to_cust_acct_site_id     => lx_ship_to_siteuseid,
9308                                         p_inventory_item_id             => l_inv_item_id,
9309                                         p_org_id                        => l_org_id,
9310                                         p_trx_date                      => l_ts_start_date,
9311                                         px_tax_codes_tbl                => lx_tax_codes_tbl);
9312 
9313                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9314                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9315                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9316                               RAISE OKL_API.G_EXCEPTION_ERROR;
9317                         END IF;
9318 
9319                     l_tax_code_count := l_tax_code_count + 1;
9320 
9321                             EXIT;
9322                           END IF;
9323 
9324                   EXIT WHEN (ind = l_ts_asset_level_det_tbl.LAST);
9325                   ind := l_ts_asset_level_det_tbl.NEXT(ind);
9326                     END LOOP;
9327               END IF;
9328             END IF;
9329 
9330           END LOOP;
9331         END IF;
9332         EXIT WHEN l_kstreamtypes_csr%NOTFOUND;
9333       END LOOP;
9334       CLOSE l_kstreamtypes_csr;
9335 
9336       -- Taxable Basis Override not allowed for Tax Schedule type of calls
9337 
9338       l_tax_sources_tbl.DELETE;
9339       OPEN  c_k_unbilled_streams_csr(l_ts_khr_id, l_ts_start_date, l_ts_end_date);
9340       LOOP
9341         l_contract_streams_tbl.DELETE;
9342         FETCH c_k_unbilled_streams_csr BULK COLLECT INTO l_contract_streams_tbl LIMIT l_fetch_size;
9343 
9344                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9345             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9346                                                  'l_contract_streams_tbl.COUNT '||l_contract_streams_tbl.COUNT );
9347           END IF;
9348 
9349                   IF l_contract_streams_tbl.COUNT > 0 THEN
9350             -- insert each row into tax sources
9351             -- fill in the missing values IN l_contract_streams_tbl
9352             FOR K IN l_contract_streams_tbl.FIRST..l_contract_streams_tbl.LAST LOOP
9353 
9354               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9355                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9356                                                                                  'l_contract_streams_tbl(k).lty_code '||l_contract_streams_tbl(k).lty_code );
9357                           END IF;
9358 
9359               -- populate asset number for fin asset line / sublines
9360               IF l_contract_streams_tbl(k).lty_code IN ('FREE_FORM1','LINK_SERV_ASSET', 'LINK_FEE_ASSET') THEN
9361 
9362                 IF l_contract_streams_tbl(k).lty_code = 'FREE_FORM1' THEN
9363                   l_asset_line_id := l_contract_streams_tbl(k).kle_id;
9364                 ELSE -- Service subline or Fee subline
9365                   --get the financial asset associated with the subline
9366 
9367                   -- see if pervious fetch fro aaatched asset id can be stored and used here instead of curosr fetch
9368                           OPEN  l_finasset_csr(l_contract_streams_tbl(k).kle_id, l_contract_streams_tbl(k).lty_code); -- contract_streams_tbl(k).kle_id is a subline here
9369                           FETCH l_finasset_csr INTO l_asset_line_id;
9370                           CLOSE l_finasset_csr;
9371                         END IF;
9372 
9373                 l_contract_streams_tbl(k).asset_line_id := l_asset_line_id;  -- populate asset id for subline as well
9374 
9375                 OPEN  l_okclines_csr(l_asset_line_id);
9376                                 FETCH l_okclines_csr INTO l_name, l_lse_id;
9377                                 CLOSE  l_okclines_csr;
9378 
9379                                 l_contract_streams_tbl(k).asset_number := l_name;-- populate asset num for subline as well
9380 
9381                                 get_location_party_ids(
9382                                                                         p_api_version                  => p_api_version,
9383                                                                 p_init_msg_list                => OKC_API.G_FALSE,
9384                                                                 x_return_status                => x_return_status,
9385                                                                 x_msg_count                    => x_msg_count,
9386                                                                 x_msg_data                     => x_msg_data,
9387                                                                 p_cust_acct_id                 => l_cust_acct_id,
9388                                                                 p_fin_asset_id                 => l_asset_line_id,
9389                                     p_khr_id                       => l_ts_khr_id,
9390                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
9391                                     x_bill_to_location_id          => lx_bill_to_location_id,
9392                                     x_bill_to_party_id             => lx_bill_to_party_id,
9393                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
9394                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
9395                                     x_ship_to_location_id          => lx_ship_to_location_id,
9396                                     x_ship_to_party_id             => lx_ship_to_party_id,
9397                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
9398 
9399                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9400                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9401                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9402                           RAISE OKL_API.G_EXCEPTION_ERROR;
9403                         END IF;
9404 
9405                         l_contract_streams_tbl(k).ship_to_siteuseid := lx_ship_to_siteuseid;
9406 
9407                         -- get the inventory item id
9408                         OPEN l_invitem_csr(l_asset_line_id);
9409                         FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
9410                         IF l_invitem_csr%NOTFOUND THEN
9411                           OKL_API.set_message(p_app_name      => 'OKL',
9412                                       p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
9413                                                                           p_token1        => 'ASSET_NUMBER',
9414                                                                           p_token1_value  => l_asset_number);
9415                   RAISE OKL_API.G_EXCEPTION_ERROR;
9416                         END IF;
9417                         CLOSE  l_invitem_csr;
9418 
9419                         l_contract_streams_tbl(k).inventory_item_id := l_inv_item_id;
9420 
9421               ELSE
9422                 OPEN  l_okclines_csr(l_contract_streams_tbl(k).kle_id);
9423                                 FETCH l_okclines_csr INTO l_name, l_lse_id;
9424                                 CLOSE  l_okclines_csr;
9425                           END IF;
9426 
9427               -- Populate tax sources table with transaction type of 'Tax Schedule'
9428               l_tax_sources_tbl(k).id                               := get_seq_id;
9429               l_tax_sources_tbl(k).kle_id                           := l_contract_streams_tbl(k).kle_id;
9430               l_tax_sources_tbl(k).khr_id                           := l_ts_khr_id;
9431               l_tax_sources_tbl(k).asset_number                     := l_contract_streams_tbl(k).asset_number;
9432 
9433               l_tax_sources_tbl(k).trx_id                           := p_source_trx_id;
9434               l_tax_sources_tbl(k).trx_line_id                      := l_tax_sources_tbl(k).id;
9435               l_tax_sources_tbl(k).entity_code                      := G_TAX_SCH_ENTITY_CODE;
9436               l_tax_sources_tbl(k).event_class_code                 := G_TAX_SCHEDULE;
9437               l_tax_sources_tbl(k).trx_level_type                   := G_TRX_LEVEL_TYPE;
9438               l_tax_sources_tbl(k).adjusted_doc_entity_code         := null;
9439               l_tax_sources_tbl(k).adjusted_doc_event_class_code    := null;
9440               l_tax_sources_tbl(k).adjusted_doc_trx_id              := null;
9441               l_tax_sources_tbl(k).adjusted_doc_trx_line_id         := null;
9442               l_tax_sources_tbl(k).adjusted_doc_trx_level_type      := null;
9443               l_tax_sources_tbl(k).adjusted_doc_number              := null;
9444               l_tax_sources_tbl(k).adjusted_doc_date                := null;
9445               l_tax_sources_tbl(k).tax_call_type_code               := G_TAX_SCHEDULE;
9446               l_tax_sources_tbl(k).sty_id                           := l_contract_streams_tbl(k).stream_type_id;
9447 
9448               l_value_fetched := FALSE;
9449                   IF lx_tax_codes_tbl.COUNT > 0 THEN
9450                         ind := lx_tax_codes_tbl.FIRST;
9451                         LOOP
9452 
9453                           IF ((nvl(lx_tax_codes_tbl(ind).kle_id,-11) = nvl(l_contract_streams_tbl(k).kle_id,-11)) AND
9454                                   (lx_tax_codes_tbl(ind).sty_id = l_contract_streams_tbl(k).stream_type_id)) THEN
9455 
9456                                 l_tbc_code := lx_tax_codes_tbl(ind).tbc_code;
9457                     l_ufc_code := lx_tax_codes_tbl(ind).ufc_code;
9458                     l_pc_code := lx_tax_codes_tbl(ind).pc_code;
9459                     l_tax_class_code := lx_tax_codes_tbl(ind).tax_class_code;
9460 
9461                             EXIT;
9462                           END IF;
9463 
9464                           EXIT WHEN (ind = lx_tax_codes_tbl.LAST);
9465                   ind := lx_tax_codes_tbl.NEXT(ind);
9466                         END LOOP;
9467                         l_contract_streams_tbl(k).trx_business_category := l_contract_streams_tbc;
9468                   END IF;
9469 
9470               l_tax_sources_tbl(k).trx_business_category            := l_tbc_code;
9471               l_tax_sources_tbl(k).tax_line_status_code             := G_ACTIVE_STATUS;
9472               l_tax_sources_tbl(k).sel_id                           := l_contract_streams_tbl(k).sel_id;
9473               l_tax_sources_tbl(k).reported_yn                      := 'N';
9474                       l_tax_sources_tbl(k).program_id                       := null;
9475                       l_tax_sources_tbl(k).request_id                       := null;
9476                       l_tax_sources_tbl(k).program_application_id           := null;
9477                       l_tax_sources_tbl(k).program_update_date              := null;
9478                       l_tax_sources_tbl(k).attribute_category               := null;
9479 
9480                       l_tax_sources_tbl(k).attribute1                    := null;
9481                       l_tax_sources_tbl(k).attribute2                    := null;
9482                       l_tax_sources_tbl(k).attribute3                    := null;
9483                       l_tax_sources_tbl(k).attribute4                    := null;
9484                       l_tax_sources_tbl(k).attribute5                    := null;
9485                       l_tax_sources_tbl(k).attribute6                    := null;
9486                       l_tax_sources_tbl(k).attribute7                    := null;
9487                       l_tax_sources_tbl(k).attribute8                    := null;
9488                       l_tax_sources_tbl(k).attribute9                    := null;
9489                       l_tax_sources_tbl(k).attribute10                   := null;
9490                       l_tax_sources_tbl(k).attribute11                   := null;
9491                       l_tax_sources_tbl(k).attribute12                   := null;
9492                       l_tax_sources_tbl(k).attribute13                   := null;
9493                       l_tax_sources_tbl(k).attribute14                   := null;
9494                       l_tax_sources_tbl(k).attribute15                   := null;
9495                       l_tax_sources_tbl(k).created_by                    := G_USER_ID;
9496                       l_tax_sources_tbl(k).creation_date                 := SYSDATE;
9497                       l_tax_sources_tbl(k).last_updated_by               := G_USER_ID;
9498                       l_tax_sources_tbl(k).last_update_date              := SYSDATE;
9499                       l_tax_sources_tbl(k).last_update_login             := G_LOGIN_ID;
9500                       l_tax_sources_tbl(k).object_version_number         := null;
9501 
9502               l_tax_sources_tbl(k).line_name                 := l_name;
9503               l_tax_sources_tbl(k).application_id            := G_OKL_APPLICATION_ID;
9504               l_tax_sources_tbl(k).tax_reporting_flag        := 'N';
9505               l_tax_sources_tbl(k).default_taxation_country  := l_taxation_country;
9506               l_tax_sources_tbl(k).product_category          := l_pc_code;
9507               l_tax_sources_tbl(k).user_defined_fisc_class   := l_ufc_code;
9508               l_tax_sources_tbl(k).line_intended_use         := l_ts_age_of_equipment;
9509               l_tax_sources_tbl(k).tax_classification_code   := l_tax_class_code;
9510               l_tax_sources_tbl(k).inventory_item_id         := l_contract_streams_tbl(k).inventory_item_id;
9511               l_tax_sources_tbl(k).bill_to_cust_acct_id      := l_cust_acct_id;
9512               l_tax_sources_tbl(k).org_id                    := l_org_id;
9513               l_tax_sources_tbl(k).legal_entity_id           := l_legal_entity_id;
9514               l_tax_sources_tbl(k).line_amt                  := l_contract_streams_tbl(k).amount;
9515               l_tax_sources_tbl(k).assessable_value          := l_contract_streams_tbl(k).amount;
9516 
9517               l_tax_sources_tbl(k).total_tax                 := null;
9518               l_tax_sources_tbl(k).trx_date                  := l_contract_streams_tbl(k).stream_element_date;
9519               l_tax_sources_tbl(k).try_id                    := l_ts_trx_type_id_det;
9520 
9521               l_tax_sources_tbl(k).product_type                    := G_DEFAULT_PRODUCT_TYPE;
9522               l_tax_sources_tbl(k).product_fisc_classification     := null;
9523               l_tax_sources_tbl(k).provnl_tax_determination_date   := l_contract_streams_tbl(k).stream_element_date;
9524               l_tax_sources_tbl(k).ship_to_location_id             := lx_ship_to_location_id;
9525               l_tax_sources_tbl(k).ship_to_party_site_id           := lx_ship_to_party_site_id;
9526               l_tax_sources_tbl(k).ship_to_party_id                := lx_ship_to_party_id;
9527               l_tax_sources_tbl(k).bill_to_party_site_id           := lx_bill_to_party_site_id;
9528               l_tax_sources_tbl(k).bill_to_location_id             := lx_bill_to_location_id;
9529               l_tax_sources_tbl(k).bill_to_party_id                := lx_bill_to_party_id;
9530               l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id   := lx_ship_to_siteuseid;
9531               l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id   := lx_bill_to_siteuseid;
9532               l_tax_sources_tbl(k).trx_currency_code               := l_currency_code;
9533               l_tax_sources_tbl(k).currency_conversion_type        := lx_currency_conversion_type;
9534               l_tax_sources_tbl(k).currency_conversion_rate        := lx_currency_conversion_rate;
9535               l_tax_sources_tbl(k).currency_conversion_date        := lx_currency_conversion_date;
9536 
9537               -- Populate Tax Trx Table to call 'calculate_tax'
9538               lx_line_params_tbl(k).application_id                     := G_OKL_APPLICATION_ID;
9539               lx_line_params_tbl(k).trx_id                             := p_source_trx_id;
9540               lx_line_params_tbl(k).internal_organization_id           := l_org_id;
9541               lx_line_params_tbl(k).entity_code                        := l_tax_sources_tbl(k).entity_code;
9542               lx_line_params_tbl(k).event_class_code                   := l_tax_sources_tbl(k).event_class_code;
9543               lx_line_params_tbl(k).event_type_code                    := G_TAX_SCH_CRE_EVT_TYPE_CODE;
9544               lx_line_params_tbl(k).trx_date                           := l_tax_sources_tbl(k).trx_date;
9545               lx_line_params_tbl(k).ledger_id                          := l_ledger_id;
9546               lx_line_params_tbl(k).legal_entity_id                    := l_legal_entity_id;
9547               lx_line_params_tbl(k).trx_level_type                     := l_tax_sources_tbl(k).trx_level_type;
9548               lx_line_params_tbl(k).line_level_action                  := G_CREATE_LINE_LEVEL_ACTION;
9549 
9550               lx_line_params_tbl(k).trx_line_id                        := l_tax_sources_tbl(k).trx_line_id;
9551 
9552               lx_line_params_tbl(k).line_amt                           := l_tax_sources_tbl(k).line_amt;
9553               lx_line_params_tbl(k).tax_reporting_flag                 := l_tax_sources_tbl(k).tax_reporting_flag;
9554               lx_line_params_tbl(k).default_taxation_country           := l_tax_sources_tbl(k).default_taxation_country;
9555               lx_line_params_tbl(k).product_type                       := l_tax_sources_tbl(k).product_type;
9556               lx_line_params_tbl(k).output_tax_classification_code     := l_tax_sources_tbl(k).tax_classification_code;
9557               lx_line_params_tbl(k).assessable_value                   := l_tax_sources_tbl(k).line_amt;
9558               lx_line_params_tbl(k).receivables_trx_type_id            := l_cust_trx_type_id;
9559               lx_line_params_tbl(k).product_id                         := l_tax_sources_tbl(k).inventory_item_id;
9560               lx_line_params_tbl(k).adjusted_doc_entity_code           := null;
9561               lx_line_params_tbl(k).adjusted_doc_event_class_code      := null;
9562               lx_line_params_tbl(k).adjusted_doc_trx_id                := null;
9563               lx_line_params_tbl(k).adjusted_doc_line_id               := null;
9564               lx_line_params_tbl(k).adjusted_doc_trx_level_type        := null;
9565               lx_line_params_tbl(k).adjusted_doc_number                := null;
9566               lx_line_params_tbl(k).adjusted_doc_date                  := null;
9567               lx_line_params_tbl(k).line_amt_includes_tax_flag         := 'N';
9568 
9569               lx_line_params_tbl(k).trx_business_category              := l_tax_sources_tbl(k).trx_business_category;
9570               lx_line_params_tbl(k).product_category                   := l_tax_sources_tbl(k).product_category;
9571               lx_line_params_tbl(k).user_defined_fisc_class            := l_tax_sources_tbl(k).user_defined_fisc_class;
9572               lx_line_params_tbl(k).line_intended_use                  := l_tax_sources_tbl(k).line_intended_use;
9573               lx_line_params_tbl(k).ship_to_cust_acct_site_use_id      := l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id;
9574               lx_line_params_tbl(k).bill_to_cust_acct_site_use_id      := l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id;
9575               lx_line_params_tbl(k).bill_to_party_site_id              := l_tax_sources_tbl(k).bill_to_party_site_id;
9576               lx_line_params_tbl(k).bill_to_location_id                := l_tax_sources_tbl(k).bill_to_location_id;
9577               lx_line_params_tbl(k).bill_to_party_id                   := l_tax_sources_tbl(k).bill_to_party_id;
9578               lx_line_params_tbl(k).ship_to_party_site_id              := l_tax_sources_tbl(k).ship_to_party_site_id;
9579               lx_line_params_tbl(k).ship_to_location_id                := l_tax_sources_tbl(k).ship_to_location_id;
9580               lx_line_params_tbl(k).ship_to_party_id                   := l_tax_sources_tbl(k).ship_to_party_id;
9581               lx_line_params_tbl(k).rounding_ship_to_party_id          := l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id;
9582               lx_line_params_tbl(k).rounding_bill_to_party_id          := l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id;
9583               lx_line_params_tbl(k).trx_currency_code                  := l_tax_sources_tbl(k).trx_currency_code;
9584               lx_line_params_tbl(k).precision                          := l_precision;
9585               lx_line_params_tbl(k).minimum_accountable_unit           := l_minimum_accountable_unit;
9586               lx_line_params_tbl(k).currency_conversion_date           := l_tax_sources_tbl(k).currency_conversion_date;
9587               lx_line_params_tbl(k).currency_conversion_rate           := l_tax_sources_tbl(k).currency_conversion_rate;
9588               lx_line_params_tbl(k).currency_conversion_type           := l_tax_sources_tbl(k).currency_conversion_type;
9589 
9590             END LOOP;
9591           END IF;
9592 
9593           EXIT WHEN c_k_unbilled_streams_csr%NOTFOUND;
9594       END LOOP;
9595       CLOSE c_k_unbilled_streams_csr;
9596 
9597       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9598         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9599                                                                                  'before Insert into okl_tax_sources ');
9600           END IF;
9601 
9602       ---- Insert into okl_tax_sources begin -----
9603       BEGIN
9604         IF l_tax_sources_tbl.COUNT > 0 THEN
9605           FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
9606           -- SAVE EXCEPTIONS
9607           INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
9608         END IF;
9609       EXCEPTION
9610         WHEN OTHERS THEN
9611           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
9612                     FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
9613                           OKL_API.set_message(p_app_name      => 'OKL',
9614                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
9615                                 p_token1        => 'TABLE_NAME',
9616                                 p_token1_value  => 'OKL_TAX_SOURCES',
9617                                 p_token2        => 'ERROR_CODE',
9618                                                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
9619                                                                 p_token3        => 'ITERATION',
9620                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
9621                     END LOOP;
9622                     RAISE OKL_API.G_EXCEPTION_ERROR;
9623                   END IF;
9624       END;
9625       ---- Insert into okl_tax_sources end -----
9626 
9627       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9628         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9629                                                  'lx_line_params_tbl.COUNT '||lx_line_params_tbl.COUNT);
9630           END IF;
9631 
9632       IF lx_line_params_tbl.COUNT > 0 THEN
9633             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9634                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9635                                'Before Calling OKL_TAX_INTERFACE_PVT.calculate_tax  '||x_return_status);
9636             END IF;
9637 
9638         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
9639         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
9640         lp_hdr_params_rec.internal_organization_id := l_org_id;
9641         lp_hdr_params_rec.entity_code              := G_TAX_SCH_ENTITY_CODE;
9642         lp_hdr_params_rec.event_class_code         := G_TAX_SCHEDULE;
9643         lp_hdr_params_rec.event_type_code          := G_TAX_SCH_CRE_EVT_TYPE_CODE;
9644         lp_hdr_params_rec.quote_flag               := 'Y';
9645 
9646         OKL_TAX_INTERFACE_PVT.calculate_tax(
9647                                     p_api_version       =>  p_api_version,
9648                                     p_init_msg_list     =>  p_init_msg_list,
9649                                     x_return_status     =>  x_return_status,
9650                                     x_msg_count         =>  x_msg_count,
9651                                     x_msg_data          =>  x_msg_data,
9652                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
9653                                     p_line_params_tbl   =>  lx_line_params_tbl);
9654 
9655         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9656                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9657                                    'After tax engine call '||x_return_status);
9658             END IF;
9659 
9660             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9661           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9662         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9663           RAISE OKL_API.G_EXCEPTION_ERROR;
9664         END IF;
9665       END IF;
9666 
9667       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9668         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9669              'Calling "update_tax_sources_total" .. ');
9670       END IF;
9671 
9672       update_tax_sources_total(p_api_version    => p_api_version,
9673                                p_init_msg_list  => p_init_msg_list,
9674                                x_return_status  => x_return_status,
9675                                x_msg_count      => x_msg_count,
9676                                x_msg_data       => x_msg_data,
9677                                p_source_trx_id  => p_source_trx_id,
9678                                p_source_trx_name => p_source_trx_name  );
9679 
9680       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9681         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9682              'Return Status' || x_return_status);
9683       END IF;
9684 
9685       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9686         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9687       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9688         RAISE OKL_API.G_EXCEPTION_ERROR;
9689       END IF;
9690 
9691       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9692         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9693              'Calling "copy_tax_trx_data" .. ');
9694       END IF;
9695 
9696       copy_tax_trx_data ( p_api_version       => p_api_version,
9697                           p_init_msg_list     => p_init_msg_list,
9698                           x_return_status     => x_return_status,
9699                           x_msg_count         => x_msg_count,
9700                           x_msg_data          => x_msg_data,
9701                           p_trx_id            => p_source_trx_id,
9702                           p_entity_code           => G_TAX_SCH_ENTITY_CODE,
9703                           p_event_class_code  => G_TAX_SCHEDULE,
9704                           p_source_trx_name   => p_source_trx_name);
9705 
9706 
9707       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9708         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9709              'Return Status' || x_return_status);
9710       END IF;
9711 
9712       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9713         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9714       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9715         RAISE OKL_API.G_EXCEPTION_ERROR;
9716       END IF;
9717 
9718     END IF;  -- Processing for Unbilled streams - End
9719 
9720     -----------------Process Unbilled Stream elements - End --------------
9721 
9722     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9723       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ','End(-)');
9724     END IF;
9725 
9726   EXCEPTION
9727     WHEN OKL_API.G_EXCEPTION_ERROR THEN
9728       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9729         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ',
9730                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
9731       END IF;
9732 
9733       IF l_trxrequests_csr%ISOPEN THEN
9734         CLOSE l_trxrequests_csr;
9735       END IF;
9736 
9737       IF c_k_unbilled_streams_csr%ISOPEN THEN
9738         CLOSE c_k_unbilled_streams_csr;
9739       END IF;
9740 
9741       IF c_k_billed_streams_csr%ISOPEN THEN
9742         CLOSE c_k_billed_streams_csr;
9743       END IF;
9744 
9745       IF l_txdarlndtls_csr%ISOPEN THEN
9746         CLOSE l_txdarlndtls_csr;
9747       END IF;
9748 
9749       IF l_finassets_csr%ISOPEN THEN
9750         CLOSE l_finassets_csr;
9751       END IF;
9752 
9753       IF l_okclines_csr%ISOPEN THEN
9754         CLOSE l_okclines_csr;
9755       END IF;
9756 
9757       IF l_kstreamtypes_csr%ISOPEN THEN
9758         CLOSE l_kstreamtypes_csr;
9759       END IF;
9760 
9761       IF l_finasset_csr%ISOPEN THEN
9762         CLOSE l_finasset_csr;
9763       END IF;
9764 
9765       IF l_invitem_csr%ISOPEN THEN
9766         CLOSE l_invitem_csr;
9767       END IF;
9768 
9769       IF l_partyroles_csr%ISOPEN THEN
9770         CLOSE l_partyroles_csr;
9771       END IF;
9772 
9773       IF l_povendorsites_csr%ISOPEN THEN
9774         CLOSE l_povendorsites_csr;
9775       END IF;
9776 
9777       IF l_get_zx_total_tax%ISOPEN THEN
9778         CLOSE l_get_zx_total_tax;
9779       END IF;
9780 
9781       IF l_get_zx_taxable_line_info%ISOPEN THEN
9782         CLOSE l_get_zx_taxable_line_info;
9783       END IF;
9784 
9785       IF l_get_zx_tax_lines%ISOPEN THEN
9786         CLOSE l_get_zx_tax_lines;
9787       END IF;
9788 
9789       x_return_status := OKL_API.G_RET_STS_ERROR;
9790 
9791     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
9792       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9793         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ',
9794                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
9795       END IF;
9796 
9797       IF l_trxrequests_csr%ISOPEN THEN
9798         CLOSE l_trxrequests_csr;
9799       END IF;
9800 
9801       IF c_k_unbilled_streams_csr%ISOPEN THEN
9802         CLOSE c_k_unbilled_streams_csr;
9803       END IF;
9804 
9805       IF c_k_billed_streams_csr%ISOPEN THEN
9806         CLOSE c_k_billed_streams_csr;
9807       END IF;
9808 
9809       IF l_txdarlndtls_csr%ISOPEN THEN
9810         CLOSE l_txdarlndtls_csr;
9811       END IF;
9812 
9813       IF l_finassets_csr%ISOPEN THEN
9814         CLOSE l_finassets_csr;
9815       END IF;
9816 
9817       IF l_okclines_csr%ISOPEN THEN
9818         CLOSE l_okclines_csr;
9819       END IF;
9820 
9821       IF l_kstreamtypes_csr%ISOPEN THEN
9822         CLOSE l_kstreamtypes_csr;
9823       END IF;
9824 
9825       IF l_finasset_csr%ISOPEN THEN
9826         CLOSE l_finasset_csr;
9827       END IF;
9828 
9829       IF l_invitem_csr%ISOPEN THEN
9830         CLOSE l_invitem_csr;
9831       END IF;
9832 
9833       IF l_partyroles_csr%ISOPEN THEN
9834         CLOSE l_partyroles_csr;
9835       END IF;
9836 
9837       IF l_povendorsites_csr%ISOPEN THEN
9838         CLOSE l_povendorsites_csr;
9839       END IF;
9840 
9841       IF l_get_zx_total_tax%ISOPEN THEN
9842         CLOSE l_get_zx_total_tax;
9843       END IF;
9844 
9845       IF l_get_zx_taxable_line_info%ISOPEN THEN
9846         CLOSE l_get_zx_taxable_line_info;
9847       END IF;
9848 
9849       IF l_get_zx_tax_lines%ISOPEN THEN
9850         CLOSE l_get_zx_tax_lines;
9851       END IF;
9852 
9853       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
9854 
9855     WHEN OTHERS THEN
9856       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9857         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ',
9858                   'EXCEPTION :'||sqlerrm);
9859       END IF;
9860 
9861       IF l_trxrequests_csr%ISOPEN THEN
9862         CLOSE l_trxrequests_csr;
9863       END IF;
9864 
9865       IF c_k_unbilled_streams_csr%ISOPEN THEN
9866         CLOSE c_k_unbilled_streams_csr;
9867       END IF;
9868 
9869       IF c_k_billed_streams_csr%ISOPEN THEN
9870         CLOSE c_k_billed_streams_csr;
9871       END IF;
9872 
9873       IF l_txdarlndtls_csr%ISOPEN THEN
9874         CLOSE l_txdarlndtls_csr;
9875       END IF;
9876 
9877       IF l_finassets_csr%ISOPEN THEN
9878         CLOSE l_finassets_csr;
9879       END IF;
9880 
9881       IF l_okclines_csr%ISOPEN THEN
9882         CLOSE l_okclines_csr;
9883       END IF;
9884 
9885       IF l_kstreamtypes_csr%ISOPEN THEN
9886         CLOSE l_kstreamtypes_csr;
9887       END IF;
9888 
9889       IF l_finasset_csr%ISOPEN THEN
9890         CLOSE l_finasset_csr;
9891       END IF;
9892 
9893       IF l_invitem_csr%ISOPEN THEN
9894         CLOSE l_invitem_csr;
9895       END IF;
9896 
9897       IF l_partyroles_csr%ISOPEN THEN
9898         CLOSE l_partyroles_csr;
9899       END IF;
9900 
9901       IF l_povendorsites_csr%ISOPEN THEN
9902         CLOSE l_povendorsites_csr;
9903       END IF;
9904 
9905       IF l_get_zx_total_tax%ISOPEN THEN
9906         CLOSE l_get_zx_total_tax;
9907       END IF;
9908 
9909       IF l_get_zx_taxable_line_info%ISOPEN THEN
9910         CLOSE l_get_zx_taxable_line_info;
9911       END IF;
9912 
9913       IF l_get_zx_tax_lines%ISOPEN THEN
9914         CLOSE l_get_zx_tax_lines;
9915       END IF;
9916 
9917       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
9918       -- unexpected error
9919       OKL_API.set_message(p_app_name      => g_app_name,
9920                           p_msg_name      => g_unexpected_error,
9921                           p_token1        => g_sqlcode_token,
9922                           p_token1_value  => sqlcode,
9923                           p_token2        => g_sqlerrm_token,
9924                           p_token2_value  => sqlerrm);
9925 
9926   END process_tax_schedule_tax;
9927 
9928 /*========================================================================
9929  | PRIVATE PROCEDURE process_quote_tax
9930  |
9931  | DESCRIPTION
9932  |    This procedure is called from calculate_sales_tax procedure to calculate
9933  |    invoice tax for Termination / repurchase quote creation/updation/deletion
9934  |
9935  | CALLED FROM                                  calculate_sales_tax()
9936  |
9937  |
9938  | CALLS PROCEDURES/FUNCTIONS
9939  |     get_k_hdr_tax_params()
9940  |     get_asset_tax_params()
9941  |     get_location_party_ids()
9942  |     get_ufc_code()
9943  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
9944  |
9945  |
9946  | PARAMETERS
9947  |      p_source_trx_id                 -- Source transaction ID
9948  |      p_source_trx_name       -- Source transaction Name
9949  |      p_source_table          -- Source table
9950  |
9951  | KNOWN ISSUES
9952  |
9953  | NOTES
9954  |
9955  |
9956  | MODIFICATION HISTORY
9957  | Date                  Author            Description of Changes
9958  | 08-APR-05            SECHAWLA           Created
9959  | 28-feb-11            sechawla           11796455 - system date should be used to calcualte tax for termination quote,
9960  |                                         as opposed to contract start date
9961  |
9962  *====================================================================================================================*/
9963   PROCEDURE process_quote_tax(
9964         p_api_version                   IN  NUMBER,
9965     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
9966     x_return_status                     OUT NOCOPY VARCHAR2,
9967     x_msg_count                         OUT NOCOPY NUMBER,
9968     x_msg_data                          OUT NOCOPY VARCHAR2,
9969     p_source_trx_id                                     IN  NUMBER,
9970     p_source_trx_name               IN  VARCHAR2,
9971     p_source_table                  IN  VARCHAR2) IS
9972 
9973     ---- Termination/Repurchase Quote Creation -------
9974         --p_source_trx_id               ---> okl_trx_quotes_b.id
9975         --p_source_trx_name     ---> 'Estimated Billing'
9976         --p_source_table        ---> 'OKL_TRX_QUOTES_B'
9977     --------------------------------------------------
9978 
9979         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
9980 
9981         -- Get quote details
9982         CURSOR l_trxquotes_csr(cp_qte_id IN NUMBER) IS
9983         SELECT khr_id, date_effective_from, early_termination_yn, qtp_code,
9984            legal_entity_id, qrs_code
9985         FROM   okl_trx_quotes_b
9986         WHERE  id = cp_qte_id;
9987 
9988         -- get the previous tax source transaction for this quote
9989         CURSOR l_prevtaxsources_csr(cp_trx_id IN NUMBER) IS
9990         SELECT id
9991         FROM   okl_tax_sources
9992         WHERE  trx_id = cp_trx_id;
9993 
9994         -- get the previous tax trx details
9995         CURSOR l_prevtaxtrxdet_csr(cp_txs_id IN NUMBER) IS
9996         SELECT ID
9997         FROM   okl_tax_trx_details
9998         WHERE  txs_id = cp_txs_id;
9999 
10000         -- get the tax eligible quote lines
10001         CURSOR l_txlquotelines_csr(cp_qte_id IN NUMBER) IS
10002         SELECT txl.id, txl.sty_id, txl.kle_id,
10003            txl.qlt_code, txl.amount, txl.try_id, cle.name
10004         FROM   okl_txl_quote_lines_b txl, okc_k_lines_v cle
10005         WHERE  qte_id = cp_qte_id
10006         AND    qlt_code NOT IN ('AMCFIA', 'AMCTAX', 'AMYOUB', 'AMCSDD')
10007     AND    txl.kle_id = cle.id (+);
10008 
10009         -- AMYOUB - Outstanding bal : excluding as it is not invoiced So no tax will be calculated on it during acceptance
10010         -- AMCTAX - Tax/VAT : excluding for old quotes. New quotes wil not have this quote line
10011         -- AMCFIA - Used for internal purpose.
10012 
10013         --get line name
10014         CURSOR l_okclines_csr(cp_line_id IN NUMBER) IS
10015         SELECT name, lse_id
10016         FROM   okc_k_lines_v
10017         WHERE  id = cp_line_id;
10018 
10019     -- get the inventory item id and inventory item org for a financial asset
10020         CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
10021         SELECT cim_model.object1_id1,
10022            cim_model.object1_id2
10023     FROM   okc_k_items cim_model,
10024            okc_k_lines_b cleb_model,
10025            okc_line_styles_b lseb_model
10026     WHERE  cim_model.cle_id    = cleb_model.id
10027     AND    cleb_model.cle_id   = cp_fin_asset_id
10028     AND    lseb_model.id       = cleb_model.lse_id
10029     AND    lseb_model.lty_code = 'ITEM';
10030 
10031     -- Check if tax basis override formula exists
10032         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
10033         SELECT fma_id
10034         FROM   okl_tax_basis_override
10035         WHERE  try_id = cp_try_id
10036         AND    org_id = MO_GLOBAL.get_current_org_id;
10037 
10038     -- GET FORMULA NAME
10039     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
10040     SELECT name
10041     FROM   okl_formulae_b
10042     WHERE  id = cp_fma_id;
10043 
10044         TYPE prevtaxsrc_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10045         TYPE prevtaxtrxdet_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10046         TYPE txlquotelines_tbl_type IS TABLE OF l_txlquotelines_csr%ROWTYPE INDEX BY BINARY_INTEGER;
10047 
10048         l_qte_khr_id                                    NUMBER;
10049         l_qte_dt_eff_from                               DATE;
10050 
10051         l_prevtaxsrc_tbl                            prevtaxsrc_tbl_type;
10052         l_prevtaxtrxdet_tbl                             prevtaxtrxdet_tbl_type;
10053         l_txlquotelines_tbl                             txlquotelines_tbl_type;
10054     l_tax_sources_tbl                           tax_sources_tbl_type;
10055     lp_tax_src_params_rec           tax_src_params_rec_type;
10056     lx_line_params_tbl              line_params_tbl_type;
10057     lx_tax_sources_tbl                  tax_sources_tbl_type;
10058     lp_hdr_params_rec               hdr_params_rec_type;
10059 
10060         l_fetch_size                    NUMBER := 10000;
10061         i                                                               NUMBER;
10062         j                                                               NUMBER;
10063         k                                                               NUMBER;
10064 
10065         l_cust_acct_id                                  NUMBER;
10066     l_bill_to_siteuseid                 NUMBER;
10067     l_currency_code                                     VARCHAR2(15);
10068     l_precision                         NUMBER;
10069     l_minimum_accountable_unit          NUMBER;
10070     l_cust_trx_type_id                          NUMBER;
10071     l_legal_entity_id               NUMBER;
10072 
10073     l_qte_prch_opt_det                          VARCHAR2(450);
10074     l_qte_fin_prod_id_det                       NUMBER;
10075     l_qte_int_disclosed_det                     VARCHAR2(30);
10076 
10077     l_name                                                      VARCHAR2(150);
10078     l_qte_transfer_of_title                     VARCHAR2(30);
10079     l_qte_sale_lease_back                       VARCHAR2(30);
10080     l_qte_purchase_of_lease                     VARCHAR2(30);
10081     l_qte_usage_of_equipment        VARCHAR2(450);
10082     l_qte_age_of_equipment                      NUMBER;
10083     l_qte_vendor_site_id            NUMBER;
10084     l_inv_item_id                                       NUMBER;
10085         l_inv_item_org_id                               NUMBER;
10086     l_taxation_country              VARCHAR2(2);
10087 
10088     lx_bill_to_party_site_id        NUMBER;
10089     lx_bill_to_location_id          NUMBER;
10090     lx_bill_to_party_id             NUMBER;
10091     lx_bill_to_siteuseid            NUMBER;
10092     lx_ship_to_party_site_id        NUMBER;
10093     lx_ship_to_location_id          NUMBER;
10094     lx_ship_to_party_id             NUMBER;
10095     lx_ship_to_siteuseid                NUMBER;
10096         lx_tbc_code                                             VARCHAR2(30);
10097     l_ledger_id                     NUMBER;
10098     l_lse_id                        NUMBER;
10099 
10100         l_taxable_basis                                 NUMBER;
10101     l_fma_id                                            NUMBER;
10102     l_formula_name                                      VARCHAR2(150);
10103     l_add_params                                        okl_execute_formula_pub.ctxt_val_tbl_type;
10104     lx_sty_id                                           NUMBER;
10105     l_early_term_yn                                     VARCHAR2(1);
10106         l_qtp_code                                              VARCHAR2(30);
10107     asset_cnt                       NUMBER;
10108     tax_call_cnt                    NUMBER;
10109 
10110     lx_org_id                       NUMBER;
10111     lx_book_class_code              VARCHAR2(30);
10112     lx_currency_conversion_type     VARCHAR2(30);
10113     lx_currency_conversion_rate     NUMBER;
10114     lx_currency_conversion_date     DATE;
10115     lx_contract_start_date          DATE;
10116 
10117     lx_cust_acct_id                                     NUMBER;
10118     lx_currency_code                            VARCHAR2(15);
10119     lx_precision                        NUMBER;
10120     lx_minimum_accountable_unit         NUMBER;
10121     lx_cust_trx_type_id                         NUMBER;
10122 
10123     lx_pb_prch_opt_det                          VARCHAR2(450);
10124     lx_pb_fin_prod_id_det                       NUMBER;
10125     lx_pb_int_disclosed_det                     VARCHAR2(30);
10126 
10127     l_qrs_code                      VARCHAR2(30);
10128 
10129   BEGIN
10130 
10131     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10132       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax','Begin(+)');
10133     END IF;
10134 
10135     --Print Input Variables
10136     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10137       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10138               'p_init_msg_list :'||p_init_msg_list);
10139       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10140               'p_source_trx_id :'||p_source_trx_id);
10141       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10142               'p_source_trx_name :'||p_source_trx_name);
10143       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10144               'p_source_table :'||p_source_table);
10145     END IF;
10146 
10147     x_return_status := OKL_API.G_RET_STS_SUCCESS;
10148 
10149     -- Validate soure trx id
10150     OPEN  l_trxquotes_csr(p_source_trx_id);
10151     FETCH l_trxquotes_csr INTO l_qte_khr_id, l_qte_dt_eff_from,
10152                                l_early_term_yn, l_qtp_code, l_legal_entity_id,
10153                                l_qrs_code;
10154     IF l_trxquotes_csr%NOTFOUND THEN
10155       -- source trx id is invalid
10156       OKC_API.set_message( p_app_name      => 'OKC',
10157                            p_msg_name      => G_INVALID_VALUE,
10158                            p_token1        => G_COL_NAME_TOKEN,
10159                            p_token1_value  => 'SOURCE_TRX_ID');
10160       RAISE OKL_API.G_EXCEPTION_ERROR;
10161     END IF;
10162     CLOSE l_trxquotes_csr;
10163 
10164     --Check if tax source transactions already exist for this quote. If so, delete the previous tax transcations and
10165     --recalculate tax
10166     OPEN  l_prevtaxsources_csr(p_source_trx_id);
10167     LOOP
10168       l_prevtaxsrc_tbl.DELETE;
10169       FETCH l_prevtaxsources_csr BULK COLLECT INTO l_prevtaxsrc_tbl LIMIT l_fetch_size;
10170       IF l_prevtaxsrc_tbl.COUNT > 0 THEN
10171 
10172         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10173           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10174                                   'Deleteing prev tax source transactions for this quote ');
10175         END IF;
10176 
10177         i := 0;
10178         l_prevtaxtrxdet_tbl.DELETE;
10179         FOR k IN l_prevtaxsrc_tbl.FIRST .. l_prevtaxsrc_tbl.LAST LOOP
10180           FOR  l_prevtaxtrxdet_rec IN l_prevtaxtrxdet_csr(l_prevtaxsrc_tbl(k)) LOOP
10181             i := i + 1;
10182             l_prevtaxtrxdet_tbl(i):= l_prevtaxtrxdet_rec.id;
10183 
10184           END LOOP;
10185         END LOOP;
10186 
10187         -- delete from both the tables.
10188         BEGIN
10189           IF l_prevtaxtrxdet_tbl.COUNT > 0 THEN
10190             FORALL i IN l_prevtaxtrxdet_tbl.FIRST..l_prevtaxtrxdet_tbl.LAST
10191               DELETE FROM OKL_TAX_TRX_DETAILS WHERE id = l_prevtaxtrxdet_tbl(i);
10192           END IF;
10193         EXCEPTION
10194           WHEN OTHERS THEN
10195             IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
10196                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
10197                                 OKL_API.set_message(
10198                                                                      p_app_name      => 'OKL',
10199                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
10200                                      p_token1        => 'TABLE_NAME',
10201                                      p_token1_value  => 'OKL_TAX_TRX_DETAILS',
10202                                      p_token2        => 'ERROR_CODE',
10203                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
10204                                                                          p_token3        => 'ITERATION',
10205                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
10206                           END LOOP;
10207                           RAISE OKL_API.G_EXCEPTION_ERROR;
10208                         END IF;
10209         END;
10210 
10211                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10212           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10213                                   'Deleted from okl_tax_trx_details...  ');
10214         END IF;
10215 
10216         BEGIN
10217           FORALL i IN l_prevtaxsrc_tbl.FIRST..l_prevtaxsrc_tbl.LAST
10218             DELETE FROM OKL_TAX_SOURCES WHERE id = l_prevtaxsrc_tbl(i);
10219         EXCEPTION
10220           WHEN OTHERS THEN
10221             IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
10222                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
10223                                 OKL_API.set_message(
10224                                                                      p_app_name      => 'OKL',
10225                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
10226                                      p_token1        => 'TABLE_NAME',
10227                                      p_token1_value  => 'OKL_TAX_SOURCES',
10228                                      p_token2        => 'ERROR_CODE',
10229                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
10230                                                                          p_token3        => 'ITERATION',
10231                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
10232                           END LOOP;
10233                           RAISE OKL_API.G_EXCEPTION_ERROR;
10234                         END IF;
10235         END;
10236 
10237                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10238           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10239                                   'Deleted from okl_tax_sources...  ');
10240         END IF;
10241       END IF;
10242 
10243       EXIT WHEN l_prevtaxsources_csr%NOTFOUND;
10244     END LOOP;
10245         CLOSE l_prevtaxsources_csr;
10246 
10247         -- Get contract header info
10248     get_k_hdr_tax_params(
10249         p_api_version                  => p_api_version,
10250         p_init_msg_list                => p_init_msg_list,
10251         x_return_status                => x_return_status,
10252         x_msg_count                    => x_msg_count,
10253         x_msg_data                     => x_msg_data,
10254         p_khr_id                       => l_qte_khr_id,
10255         p_source_trx_name              => p_source_trx_name,
10256         p_source_table                             => p_source_table,
10257         p_qtp_code                     => l_qtp_code,
10258         p_early_term_yn                            => l_early_term_yn,
10259         x_cust_acct_id                             => lx_cust_acct_id,
10260                 x_bill_to_siteuseid            => lx_bill_to_siteuseid,
10261                 x_currency_code                            => lx_currency_code,
10262         x_cust_trx_type_id             => lx_cust_trx_type_id,
10263         x_precision                                        => lx_precision,
10264                 x_minimum_accountable_unit     => lx_minimum_accountable_unit,
10265                 x_prch_opt_det                             => lx_pb_prch_opt_det,
10266                 x_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
10267                 x_int_disclosed_det                        => lx_pb_int_disclosed_det,
10268         x_org_id                       => lx_org_id,
10269         x_book_class_code              => lx_book_class_code,
10270         x_bill_to_party_site_id        => lx_bill_to_party_site_id,
10271         x_bill_to_party_id             => lx_bill_to_party_id,
10272         x_bill_to_location_id          => lx_bill_to_location_id,
10273         x_currency_conversion_type     => lx_currency_conversion_type,
10274         x_currency_conversion_rate     => lx_currency_conversion_rate,
10275         x_currency_conversion_date     => lx_currency_conversion_date,
10276         x_contract_start_date          => lx_contract_start_date);
10277 
10278         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10279       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10280     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10281       RAISE OKL_API.G_EXCEPTION_ERROR;
10282     END IF;
10283 
10284     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10285       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10286                 'l_cust_acct_id '||lx_cust_acct_id );
10287       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10288                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
10289       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10290                 'lx_currency_code '||lx_currency_code );
10291       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10292                 'lx_cust_trx_type_id '||lx_cust_trx_type_id );
10293       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10294                 'lx_precision '||lx_precision );
10295       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10296                 'lx_minimum_accountable_unit '||lx_minimum_accountable_unit );
10297       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10298                 'lx_pb_prch_opt_det '||lx_pb_prch_opt_det );
10299       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10300                 'lx_pb_fin_prod_id_det '||lx_pb_fin_prod_id_det );
10301       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10302                 'lx_pb_int_disclosed_det '||lx_pb_int_disclosed_det );
10303       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10304                 'lx_org_id '||lx_org_id );
10305       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10306                 'lx_book_class_code '||lx_book_class_code );
10307       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10308                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
10309       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10310                 'lx_bill_to_party_id '||lx_bill_to_party_id );
10311       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10312                 'lx_bill_to_location_id '||lx_bill_to_location_id );
10313       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10314                 'lx_currency_conversion_type '||lx_currency_conversion_type );
10315       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10316                 'lx_currency_conversion_rate '||lx_currency_conversion_rate );
10317       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10318                 'lx_currency_conversion_date '||lx_currency_conversion_date );
10319       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10320                 'lx_contract_start_date '||lx_contract_start_date );
10321     END IF;
10322 
10323     -- Fetch the Ledger info
10324     l_ledger_id := okl_accounting_util.get_set_of_books_id;
10325 
10326     -- Fetch the Tax country
10327     l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
10328                                                        x_msg_count         => x_msg_count,
10329                                                        x_msg_data          => x_msg_data,
10330                                                        p_legal_entity_id   => l_legal_entity_id);
10331         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10332       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10333     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10334       RAISE OKL_API.G_EXCEPTION_ERROR;
10335     END IF;
10336 
10337     tax_call_cnt := 1;
10338     OPEN  l_txlquotelines_csr(p_source_trx_id);
10339     LOOP
10340       l_txlquotelines_tbl.DELETE;
10341       l_tax_sources_tbl.DELETE;
10342       FETCH l_txlquotelines_csr BULK COLLECT INTO l_txlquotelines_tbl LIMIT l_fetch_size;
10343 
10344       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10345         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10346                                   'l_txlquotelines_tbl.COUNT '||l_txlquotelines_tbl.COUNT);
10347       END IF;
10348 
10349       IF l_txlquotelines_tbl.COUNT > 0 THEN
10350         FOR k IN l_txlquotelines_tbl.FIRST .. l_txlquotelines_tbl.LAST LOOP
10351 
10352           IF l_txlquotelines_tbl(k).kle_id IS NOT NULL THEN -- asset level quote line
10353 
10354             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10355                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10356                                   'asset level quote line ');
10357                 END IF;
10358 
10359             OPEN  l_okclines_csr(l_txlquotelines_tbl(k).kle_id);
10360                 FETCH l_okclines_csr INTO l_name, l_lse_id;
10361                 CLOSE l_okclines_csr;
10362 
10363             IF (l_lse_id = 33) THEN
10364               -- Get the financial asset level determinants
10365                   get_asset_tax_params(
10366                                                 p_api_version                  => p_api_version,
10367                                         p_init_msg_list                => OKC_API.G_FALSE,
10368                                         x_return_status                => x_return_status,
10369                                         x_msg_count                    => x_msg_count,
10370                                         x_msg_data                     => x_msg_data,
10371                                         p_khr_id                       => l_qte_khr_id,
10372                                         p_kle_id                       => l_txlquotelines_tbl(k).kle_id,
10373                                         p_source_trx_name              => p_source_trx_name,
10374                                         p_source_table                             => p_source_table,
10375                                         p_qtp_code                     => l_qtp_code,
10376                                     x_transfer_of_title                    => l_qte_transfer_of_title,
10377                                         x_sale_lease_back                          => l_qte_sale_lease_back,
10378                                         x_purchase_of_lease                        => l_qte_purchase_of_lease,
10379                                         x_usage_of_equipment               => l_qte_usage_of_equipment,
10380                                                 x_age_of_equipment                         => l_qte_age_of_equipment,
10381                                                 x_vendor_site_id                       => l_qte_vendor_site_id);
10382 
10383                           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10384                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10385                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10386                     RAISE OKL_API.G_EXCEPTION_ERROR;
10387                   END IF;
10388 
10389                   -- Equipment Type(inventory item id)
10390                   -- get the inventory item id
10391                           OPEN  l_invitem_csr(l_txlquotelines_tbl(k).kle_id);
10392                           FETCH l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
10393                           IF l_invitem_csr%NOTFOUND THEN
10394                             OKL_API.set_message(
10395                                                 p_app_name      => 'OKL',
10396                                 p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
10397                                         p_token1        => 'ASSET_NUMBER',
10398                                                         p_token1_value  => l_name);
10399 
10400                     RAISE OKL_API.G_EXCEPTION_ERROR;
10401                           END IF;
10402                           CLOSE l_invitem_csr;
10403 
10404               IF l_qtp_code LIKE 'TER%' THEN  -- Ship to Location is not applicable for repurchase quote
10405                             -- Get the ship_to and _bill_to identifiers
10406                             get_location_party_ids(
10407                                                                         p_api_version                  => p_api_version,
10408                                                                 p_init_msg_list                => OKC_API.G_FALSE,
10409                                                                 x_return_status                => x_return_status,
10410                                                                 x_msg_count                    => x_msg_count,
10411                                                                 x_msg_data                     => x_msg_data,
10412                                                                 p_cust_acct_id                 => lx_cust_acct_id,
10413                                                                 p_fin_asset_id                 => l_txlquotelines_tbl(k).kle_id,
10414                                     p_khr_id                       => l_qte_khr_id,
10415                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
10416                                     x_bill_to_location_id          => lx_bill_to_location_id,
10417                                     x_bill_to_party_id             => lx_bill_to_party_id,
10418                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
10419                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
10420                                     x_ship_to_location_id          => lx_ship_to_location_id,
10421                                     x_ship_to_party_id             => lx_ship_to_party_id,
10422                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
10423 
10424                             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10425                                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10426                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10427                           RAISE OKL_API.G_EXCEPTION_ERROR;
10428                             END IF;
10429                           END IF;
10430 
10431                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10432                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10433                                   'l_name '||l_name);
10434                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10435                                   'l_qte_khr_id '||l_qte_khr_id);
10436                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10437                                   'l_txlquotelines_tbl(k).kle_id '||l_txlquotelines_tbl(k).kle_id);
10438                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10439                                   'l_qte_transfer_of_title '||l_qte_transfer_of_title);
10440                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10441                                   'l_qte_sale_lease_back '||l_qte_sale_lease_back);
10442                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10443                                   'l_qte_purchase_of_lease '||l_qte_purchase_of_lease);
10444                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10445                                   'l_qte_usage_of_equipment '||l_qte_usage_of_equipment);
10446                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10447                                   'l_qte_age_of_equipment '||l_qte_age_of_equipment);
10448                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10449                                   'l_qte_vendor_site_id '||l_qte_vendor_site_id);
10450                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10451                                   'l_inv_item_id '||l_inv_item_id);
10452                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10453                                   'l_inv_item_org_id '||l_inv_item_org_id);
10454                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10455                                   'lx_ship_to_siteuseid '||lx_ship_to_siteuseid);
10456                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10457                                 'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
10458                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10459                                 'lx_ship_to_location_id '||lx_ship_to_location_id );
10460                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10461                                 'lx_ship_to_party_id '||lx_ship_to_party_id );
10462                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10463                                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
10464                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10465                                 'lx_bill_to_location_id '||lx_bill_to_location_id );
10466                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10467                                 'lx_bill_to_party_id '||lx_bill_to_party_id );
10468                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10469                                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
10470                   END IF;
10471             END IF;
10472           END IF; -- if asset level quote line
10473 
10474           -- SECHAWLA 17-MAR-06 5022404 : For Billing adjustment quote line, get stream type from quote lines table
10475           IF l_txlquotelines_tbl(k).qlt_code = 'BILL_ADJST' THEN
10476             lx_sty_id := l_txlquotelines_tbl(k).sty_id;
10477           ELSE
10478             OKL_STREAMS_UTIL.get_primary_stream_type( p_khr_id                           => l_qte_khr_id,
10479                                                                                                           p_primary_sty_purpose  => l_txlquotelines_tbl(k).qlt_code,
10480                                                                                                           x_return_status                => x_return_status,
10481                                                                                                           x_primary_sty_id       => lx_sty_id);
10482 
10483                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10484                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10485                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10486                   RAISE OKL_API.G_EXCEPTION_ERROR;
10487                         END IF;
10488                   END IF;
10489 
10490           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10491                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10492                                   'stream type '||lx_sty_id);
10493           END IF;
10494 
10495           IF (tax_call_cnt = 1) THEN
10496                 -- Check if taxable bais override applies to Estimated Billing transaction
10497                 OPEN  l_txbasisoverride_csr(l_txlquotelines_tbl(k).try_id);
10498                 FETCH l_txbasisoverride_csr INTO l_fma_id;
10499                 CLOSE l_txbasisoverride_csr;
10500 
10501                 IF l_fma_id IS NOT NULL THEN
10502                   OPEN  l_formulae_csr(l_fma_id);
10503                   FETCH l_formulae_csr INTO l_formula_name;
10504                   IF l_formulae_csr%NOTFOUND THEN
10505                         OKC_API.set_message( p_app_name      => 'OKC',
10506                                      p_msg_name      => G_INVALID_VALUE,
10507                                      p_token1        => G_COL_NAME_TOKEN,
10508                                      p_token1_value  => 'FMA_ID');
10509                         RAISE OKL_API.G_EXCEPTION_ERROR;
10510                   END IF;
10511                   CLOSE l_formulae_csr;
10512 
10513               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10514                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10515                                   'l_formula_name '||l_formula_name);
10516               END IF;
10517             END IF;
10518           END IF;
10519 
10520           -- Populate tax sources record -- start
10521           lp_tax_src_params_rec.kle_id       := l_txlquotelines_tbl(k).kle_id;
10522 
10523           IF (l_lse_id = 33) THEN
10524             lp_tax_src_params_rec.asset_number := l_txlquotelines_tbl(k).name;
10525           END IF;
10526 
10527           lp_tax_src_params_rec.line_name      := l_txlquotelines_tbl(k).name;
10528 
10529           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := lx_ship_to_siteuseid;
10530           lp_tax_src_params_rec.ship_to_party_site_id           := lx_ship_to_party_site_id;
10531           lp_tax_src_params_rec.ship_to_party_id                := lx_ship_to_party_id;
10532           lp_tax_src_params_rec.ship_to_location_id             := lx_ship_to_location_id;
10533 
10534           lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
10535           lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
10536           lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
10537           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
10538 
10539           lp_tax_src_params_rec.inventory_item_id             := l_inv_item_id;
10540           lp_tax_src_params_rec.sty_id                        := lx_sty_id;
10541 
10542           lp_tax_src_params_rec.khr_id                        := l_qte_khr_id;
10543           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
10544           lp_tax_src_params_rec.trx_line_id                   := l_txlquotelines_tbl(k).id;
10545           lp_tax_src_params_rec.entity_code                   := G_AM_QUOTES_ENTITY_CODE;
10546           lp_tax_src_params_rec.event_class_code              := G_AM_QTE_EVENT_CLASS_CODE;
10547           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
10548           lp_tax_src_params_rec.tax_call_type_code            := G_INVOICE_TAX;
10549           lp_tax_src_params_rec.tax_reporting_flag            := 'N';
10550           lp_tax_src_params_rec.reported_yn                   := 'N';
10551           --lp_tax_src_params_rec.trx_date                      := lx_contract_start_date; --sechawla 28-feb-11 11796455
10552           -- System date should be used to calculate tax for termination quotes, not contract start date
10553           lp_tax_src_params_rec.trx_date                      := trunc(sysdate); --sechawla 28-feb-11 11796455
10554           lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
10555           lp_tax_src_params_rec.line_intended_use             := l_qte_usage_of_equipment;
10556           lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
10557           lp_tax_src_params_rec.org_id                        := lx_org_id;
10558           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
10559           lp_tax_src_params_rec.line_amt                      := l_txlquotelines_tbl(k).amount;
10560           lp_tax_src_params_rec.try_id                        := l_txlquotelines_tbl(k).try_id;
10561 
10562           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
10563           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
10564           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
10565               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
10566               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
10567               lp_tax_src_params_rec.adjusted_doc_number           := null;
10568               lp_tax_src_params_rec.adjusted_doc_date             := null;
10569           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
10570           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
10571 
10572           lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
10573           lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
10574           lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
10575           -- Populate tax sources record -- end
10576 
10577           populate_tax_info(
10578                                         p_api_version                  => p_api_version,
10579                                         p_init_msg_list                => OKC_API.G_FALSE,
10580                                         x_return_status                => x_return_status,
10581                                         x_msg_count                    => x_msg_count,
10582                                         x_msg_data                     => x_msg_data,
10583                                         p_prch_opt_det                             => lx_pb_prch_opt_det,
10584                                         p_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
10585                                         p_int_disclosed_det                        => lx_pb_int_disclosed_det,
10586                                         p_title_trnsfr_code                        => l_qte_transfer_of_title,
10587                                         p_sale_lease_back_code             => l_qte_sale_lease_back,
10588                                         p_lease_purchased_code             => l_qte_purchase_of_lease,
10589                                         p_equip_usage_code                         => l_qte_usage_of_equipment,
10590                                         p_vendor_site_id                           => l_qte_vendor_site_id,
10591                                         p_age_of_equip                             => l_qte_age_of_equipment,
10592                     p_source_trx_name              => p_source_trx_name,
10593                                     p_cust_trx_type_id             => lx_cust_trx_type_id,
10594                                     p_book_class_code              => lx_book_class_code,
10595                                         p_tax_call_cnt                             => tax_call_cnt,
10596                                         p_fma_id                                           => l_fma_id,
10597                                         p_formula_name                             => l_formula_name,
10598                                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
10599                                         p_precision                                        => lx_precision,
10600                                         p_sales_quote_id                           => null,
10601                                     p_event_type_code              => G_AM_QTE_CRE_EVT_TYPE_CODE,
10602                                     p_ledger_id                    => l_ledger_id,
10603                                     p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
10604                                     p_tax_src_params_rec           => lp_tax_src_params_rec,
10605                                     p_quote_flag                   => 'Y',
10606                                     p_rounding_ship_to_party_id    => lx_ship_to_party_id,
10607                                     p_rounding_bill_to_party_id    => lx_bill_to_party_id,
10608                                     p_line_amt_includes_tax_flag   => 'N',
10609                     p_term_quote_type_code         => l_qtp_code,
10610                     p_term_quote_reason_code       => l_qrs_code,
10611                                     px_tax_sources_tbl                     => lx_tax_sources_tbl,
10612                                     px_line_params_tbl             => lx_line_params_tbl );
10613 
10614           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10615             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10616           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10617             RAISE OKL_API.G_EXCEPTION_ERROR;
10618           END IF;
10619 
10620                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10621                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10622                         'lx_tax_sources_tbl.count '|| lx_tax_sources_tbl.COUNT );
10623           END IF;
10624 
10625                   tax_call_cnt := tax_call_cnt + 1;
10626 
10627         END LOOP;
10628       END IF;
10629       EXIT WHEN l_txlquotelines_csr%NOTFOUND;
10630     END LOOP;
10631     CLOSE l_txlquotelines_csr;
10632 
10633     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10634           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10635                         'tax_call_cnt '||tax_call_cnt);
10636     END IF;
10637 
10638     -- Insert into okl_tax_sources
10639         BEGIN
10640       IF lx_tax_sources_tbl.COUNT > 0 THEN
10641         FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
10642           -- SAVE EXCEPTIONS
10643           INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
10644       END IF;
10645     EXCEPTION
10646       WHEN OTHERS THEN
10647         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
10648                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
10649                           OKL_API.set_message(   p_app_name      => 'OKL',
10650                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
10651                                      p_token1        => 'TABLE_NAME',
10652                                      p_token1_value  => 'OKL_TAX_SOURCES',
10653                                      p_token2        => 'ERROR_CODE',
10654                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
10655                                                                          p_token3        => 'ITERATION',
10656                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
10657                   END LOOP;
10658                   RAISE OKL_API.G_EXCEPTION_ERROR;
10659                 END IF;
10660     END;
10661     -- Insert into okl_tax_sources end
10662 
10663     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10664       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10665                                        'Insert into okl_tax_sources ');
10666         END IF;
10667 
10668     IF lx_line_params_tbl.COUNT > 0 THEN
10669           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10670                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10671                                'Before Calling OKL_TAX_INTERFACE_PVT.calculate_tax  '||x_return_status);
10672           END IF;
10673 
10674       lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
10675       lp_hdr_params_rec.trx_id                   := p_source_trx_id;
10676       lp_hdr_params_rec.internal_organization_id := lx_org_id;
10677       lp_hdr_params_rec.entity_code              := G_AM_QUOTES_ENTITY_CODE;
10678       lp_hdr_params_rec.event_class_code         := G_AM_QTE_EVENT_CLASS_CODE;
10679       lp_hdr_params_rec.event_type_code          := G_AM_QTE_CRE_EVT_TYPE_CODE;
10680       lp_hdr_params_rec.quote_flag               := 'Y';
10681 
10682       OKL_TAX_INTERFACE_PVT.calculate_tax(
10683                                     p_api_version       =>  p_api_version,
10684                                     p_init_msg_list     =>  p_init_msg_list,
10685                                     x_return_status     =>  x_return_status,
10686                                     x_msg_count         =>  x_msg_count,
10687                                     x_msg_data          =>  x_msg_data,
10688                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
10689                                     p_line_params_tbl   =>  lx_line_params_tbl);
10690 
10691       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10692                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10693                                    'After tax engine call '||x_return_status);
10694           END IF;
10695 
10696           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10697         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10698       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10699         RAISE OKL_API.G_EXCEPTION_ERROR;
10700       END IF;
10701     END IF;
10702 
10703     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10704       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10705              'Calling "update_tax_sources_total" .. ');
10706     END IF;
10707 
10708     update_tax_sources_total(p_api_version    => p_api_version,
10709                              p_init_msg_list  => p_init_msg_list,
10710                              x_return_status  => x_return_status,
10711                              x_msg_count      => x_msg_count,
10712                              x_msg_data       => x_msg_data,
10713                              p_source_trx_id  => p_source_trx_id,
10714                              p_source_trx_name => p_source_trx_name  );
10715 
10716     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10717       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10718              'Return Status' || x_return_status);
10719     END IF;
10720 
10721     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10722       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10723     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10724       RAISE OKL_API.G_EXCEPTION_ERROR;
10725     END IF;
10726 
10727     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10728       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10729              'Calling "copy_tax_trx_data" .. ');
10730     END IF;
10731 
10732     copy_tax_trx_data ( p_api_version       => p_api_version,
10733                         p_init_msg_list     => p_init_msg_list,
10734                         x_return_status     => x_return_status,
10735                         x_msg_count         => x_msg_count,
10736                         x_msg_data          => x_msg_data,
10737                         p_trx_id            => p_source_trx_id,
10738                         p_entity_code           => G_AM_QUOTES_ENTITY_CODE,
10739                         p_event_class_code  => G_AM_QTE_EVENT_CLASS_CODE,
10740                         p_source_trx_name   => p_source_trx_name);
10741 
10742 
10743     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10744       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10745              'Return Status' || x_return_status);
10746     END IF;
10747 
10748     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10749       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10750     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10751       RAISE OKL_API.G_EXCEPTION_ERROR;
10752     END IF;
10753 
10754     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10755        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ','End(-)');
10756     END IF;
10757 
10758   EXCEPTION
10759     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10760       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10761         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ',
10762                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
10763       END IF;
10764 
10765       IF l_trxquotes_csr%ISOPEN THEN
10766         CLOSE l_trxquotes_csr;
10767       END IF;
10768 
10769       IF l_prevtaxsources_csr%ISOPEN THEN
10770         CLOSE l_prevtaxsources_csr;
10771       END IF;
10772 
10773       IF l_prevtaxtrxdet_csr%ISOPEN THEN
10774         CLOSE l_prevtaxtrxdet_csr;
10775       END IF;
10776 
10777       IF l_txlquotelines_csr%ISOPEN THEN
10778         CLOSE l_txlquotelines_csr;
10779       END IF;
10780 
10781       IF l_okclines_csr%ISOPEN THEN
10782         CLOSE l_okclines_csr;
10783       END IF;
10784 
10785       IF l_invitem_csr%ISOPEN THEN
10786         CLOSE l_invitem_csr;
10787       END IF;
10788 
10789       IF l_txbasisoverride_csr%ISOPEN THEN
10790         CLOSE l_txbasisoverride_csr;
10791       END IF;
10792 
10793       IF l_formulae_csr%ISOPEN THEN
10794         CLOSE l_formulae_csr;
10795       END IF;
10796 
10797       x_return_status := OKL_API.G_RET_STS_ERROR;
10798     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10799       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10800         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ',
10801                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
10802       END IF;
10803 
10804       IF l_trxquotes_csr%ISOPEN THEN
10805         CLOSE l_trxquotes_csr;
10806       END IF;
10807 
10808       IF l_prevtaxsources_csr%ISOPEN THEN
10809         CLOSE l_prevtaxsources_csr;
10810       END IF;
10811 
10812       IF l_prevtaxtrxdet_csr%ISOPEN THEN
10813         CLOSE l_prevtaxtrxdet_csr;
10814       END IF;
10815 
10816       IF l_txlquotelines_csr%ISOPEN THEN
10817         CLOSE l_txlquotelines_csr;
10818       END IF;
10819 
10820       IF l_okclines_csr%ISOPEN THEN
10821         CLOSE l_okclines_csr;
10822       END IF;
10823 
10824       IF l_invitem_csr%ISOPEN THEN
10825         CLOSE l_invitem_csr;
10826       END IF;
10827 
10828       IF l_txbasisoverride_csr%ISOPEN THEN
10829         CLOSE l_txbasisoverride_csr;
10830       END IF;
10831 
10832       IF l_formulae_csr%ISOPEN THEN
10833         CLOSE l_formulae_csr;
10834       END IF;
10835 
10836       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
10837 
10838     WHEN OTHERS THEN
10839       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10840         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ',
10841                   'EXCEPTION :'||sqlerrm);
10842       END IF;
10843 
10844       IF l_trxquotes_csr%ISOPEN THEN
10845         CLOSE l_trxquotes_csr;
10846       END IF;
10847 
10848       IF l_prevtaxsources_csr%ISOPEN THEN
10849         CLOSE l_prevtaxsources_csr;
10850       END IF;
10851 
10852       IF l_prevtaxtrxdet_csr%ISOPEN THEN
10853         CLOSE l_prevtaxtrxdet_csr;
10854       END IF;
10855 
10856       IF l_txlquotelines_csr%ISOPEN THEN
10857         CLOSE l_txlquotelines_csr;
10858       END IF;
10859 
10860       IF l_okclines_csr%ISOPEN THEN
10861         CLOSE l_okclines_csr;
10862       END IF;
10863 
10864       IF l_invitem_csr%ISOPEN THEN
10865         CLOSE l_invitem_csr;
10866       END IF;
10867 
10868       IF l_txbasisoverride_csr%ISOPEN THEN
10869         CLOSE l_txbasisoverride_csr;
10870       END IF;
10871 
10872       IF l_formulae_csr%ISOPEN THEN
10873         CLOSE l_formulae_csr;
10874       END IF;
10875 
10876       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
10877       -- unexpected error
10878       OKL_API.set_message(p_app_name      => g_app_name,
10879                           p_msg_name      => g_unexpected_error,
10880                           p_token1        => g_sqlcode_token,
10881                           p_token1_value  => sqlcode,
10882                           p_token2        => g_sqlerrm_token,
10883                           p_token2_value  => sqlerrm);
10884 
10885   END process_quote_tax;
10886 
10887 /*========================================================================
10888  | PRIVATE PROCEDURE process_asset_loc_tax
10889  |
10890  | DESCRIPTION
10891  |    This procedure is called from calculate_sales_tax procedure to calculate
10892  |    upfront tax for Asset location Change
10893  |
10894  | CALLED FROM                                  calculate_sales_tax()
10895  |
10896  |
10897  | CALLS PROCEDURES/FUNCTIONS
10898  |     OKL_TAX_SOURCES_PUB.update_tax_sources()
10899  |     get_k_hdr_tax_params()
10900  |     get_asset_tax_params()
10901  |     get_location_party_ids()
10902  |     get_ufc_code()
10903  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
10904  |
10905  |
10906  | PARAMETERS
10907  |      p_source_trx_id                 -- Source transaction ID
10908  |      p_source_trx_name       -- Source transaction Name
10909  |      p_source_table          -- Source table
10910  |      p_tax_call_type         -- Tax call type (Values - 'ESTIMATED'/ 'ACTUAL')
10911  |      p_serialized_asset      -- Serialized Asset (Values - 'Y'/'N')
10912  |      p_request_id            -- Id of OKL_trx_Requests
10913  |      p_alc_final_call        -- Determines if the asset location change final
10914  |                                 call is being made for the serialized asset
10915  |                                 (Values - null/'N'/'Y')
10916  |
10917  | KNOWN ISSUES
10918  |
10919  | NOTES
10920  |
10921  |
10922  | MODIFICATION HISTORY
10923  | Date                  Author            Description of Changes
10924  | 08-APR-05            SECHAWLA           Created
10925  |
10926  *=======================================================================*/
10927   PROCEDURE process_asset_loc_tax(
10928         p_api_version                   IN  NUMBER,
10929     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
10930     x_return_status                     OUT NOCOPY VARCHAR2,
10931     x_msg_count                         OUT NOCOPY NUMBER,
10932     x_msg_data                          OUT NOCOPY VARCHAR2,
10933     p_source_trx_id                                     IN  NUMBER,
10934     p_source_trx_name               IN  VARCHAR2,
10935     p_source_table                  IN  VARCHAR2,
10936     p_tax_call_type                 IN  VARCHAR2,
10937     p_serialized_asset              IN  VARCHAR2,
10938     p_request_id                    IN  NUMBER,
10939     p_alc_final_call                IN  VARCHAR2) IS
10940 
10941      -------------Asset Location Change --------------
10942     --p_source_trx_id           ---> okl_trx_assets.id
10943     --p_source_trx_name     ---> 'Asset Relocation'  (changed from Internal Asset Creation to Asset Relocation)
10944     --p_source_table        ---> 'OKL_TRX_ASSETS'
10945     --p_tax_call_type       ---> Tax call type
10946     --p_serialized_asset    ---> Serialized Asset (Y/N)
10947     --p_request_id          ---> Id of OKL_trx_Requests
10948     --------------------------------------------------
10949         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
10950 
10951         -- validate source trx id
10952         CURSOR l_trxassets_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
10953         SELECT a.try_id, a.date_trans_occurred, a.legal_entity_id
10954         FROM   okl_trx_assets a , okl_trx_types_tl b
10955         WHERE  a.id = cp_trx_id
10956         AND    a.try_id = b.id
10957         AND    b.name = cp_trx_type_name
10958     AND    language = 'US';
10959 
10960         -- get the trx line details
10961         CURSOR l_txlitminsts_csr(cp_id IN NUMBER) IS
10962         SELECT kle_id, -- Id of INST_ITEM line
10963                OBJECT_ID1_NEW, -- ID of okx_party_site_uses_v
10964                    DNZ_CLE_ID  -- id of FREE_FORM1
10965         FROM   okl_txl_itm_insts
10966         WHERE  tas_id = cp_id;
10967 
10968         -- get the new location id
10969         --asawanka modified for bug # 6612165
10970         CURSOR l_partysiteuses_csr(cp_id1 IN NUMBER) IS
10971         SELECT location_id, party_site_id
10972         FROM   okx_party_site_uses_v
10973         WHERE  id1 = cp_id1
10974         AND    site_use_type = 'INSTALL_AT';
10975 
10976         -- get the acive upfront tax sources for this asset
10977         -- k1 > A1 > RENT
10978         -- k1 > A1 > Estimated Property Tax
10979         CURSOR l_taxsources_csr(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER) IS
10980         SELECT id, org_id, entity_code, event_class_code
10981         FROM   okl_tax_sources
10982         WHERE  khr_id = cp_khr_id
10983         AND    kle_id = cp_kle_id
10984         AND    tax_call_type_code = G_UPFRONT_TAX
10985         AND    tax_line_status_code = G_ACTIVE_STATUS
10986     AND    application_id = G_OKL_APPLICATION_ID
10987     AND    trx_level_type = G_TRX_LEVEL_TYPE
10988         AND    adjusted_doc_trx_id IS NULL
10989     AND    adjusted_doc_trx_line_id IS NULL;
10990 
10991         -- get the contract id
10992         CURSOR l_okcklines_csr(cp_kle_id IN NUMBER) IS
10993         SELECT chr_id, name
10994         FROM   okc_k_lines_v
10995         WHERE  id = cp_kle_id;
10996 
10997         -- get the current, active, billable streams for the asset
10998         CURSOR l_assetstreams_csr(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER) IS
10999         SELECT typ.code Stream_Type,
11000            strm.id stream_id,
11001            strm.kle_id line_id,
11002                    strm.sty_id stream_type_id
11003     FROM   okl_strm_type_b typ,
11004            okl_streams strm
11005     WHERE  strm.sty_id = typ.id
11006     AND    typ.billable_yn = 'Y'
11007     AND    strm.say_code ='CURR'
11008     AND    strm.active_yn = 'Y'
11009     AND    strm.purpose_code IS NULL
11010     AND    strm.khr_id = cp_khr_id
11011     AND    strm.kle_id = cp_kle_id;
11012 
11013     -- get the total stream amount
11014     CURSOR l_strmelements_csr(cp_stm_id IN NUMBER) IS
11015     SELECT sum(amount)
11016         FROM   okl_strm_elements
11017         WHERE  stm_id = cp_stm_id;
11018 
11019         -- Chaeck if tax basis override formula exists
11020         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
11021         SELECT fma_id
11022         FROM   okl_tax_basis_override
11023         WHERE  try_id = cp_try_id
11024         AND    org_id = MO_GLOBAL.get_current_org_id;
11025 
11026         -- get the inventory item id and inventory item org for a financial asset
11027         CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
11028         SELECT cim_model.object1_id1,
11029            cim_model.object1_id2
11030     FROM   okc_k_items cim_model,
11031            okc_k_lines_b cleb_model,
11032            okc_line_styles_b lseb_model
11033     WHERE  cim_model.cle_id    = cleb_model.id
11034     AND    cleb_model.cle_id   = cp_fin_asset_id
11035     AND    lseb_model.id       = cleb_model.lse_id
11036     AND    lseb_model.lty_code = 'ITEM';
11037 
11038     -- GET FORMULA NAME
11039     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
11040     SELECT name
11041     FROM   okl_formulae_b
11042     WHERE  id = cp_fma_id;
11043 
11044     CURSOR l_okltaxsources_csr(cp_app_id  IN  NUMBER, cp_trx_id  IN  NUMBER) IS
11045     SELECT entity_code, event_class_code
11046     FROM okl_tax_sources
11047     WHERE application_id = cp_app_id
11048     AND trx_id = cp_trx_id
11049     AND trx_level_type = G_TRX_LEVEL_TYPE
11050         AND tax_call_type_code = G_UPFRONT_TAX
11051         AND tax_line_status_code = G_ACTIVE_STATUS
11052     AND entity_code = G_ASSETS_ENTITY_CODE
11053     AND event_class_code = G_ALC_EVENT_CODE
11054     AND ROWNUM = 1;
11055 
11056     CURSOR c_get_ast_instances(p_parent_line_id IN NUMBER) IS
11057     SELECT  count(*)
11058     FROM    okc_k_lines_v okcl,
11059             okc_line_styles_v lse
11060     WHERE   okcl.cle_id = p_parent_line_id
11061     AND     okcl.lse_id = lse.id
11062     AND     lse.lty_code = 'FREE_FORM2';
11063 
11064     CURSOR c_get_streams_count(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER) IS
11065     SELECT  count(*)
11066     FROM   okl_strm_type_b typ,
11067            okl_streams strm
11068     WHERE  strm.sty_id = typ.id
11069     AND    typ.billable_yn = 'Y'
11070     AND    strm.say_code ='CURR'
11071     AND    strm.active_yn = 'Y'
11072     AND    strm.purpose_code IS NULL
11073     AND    strm.khr_id = cp_khr_id
11074     AND    strm.kle_id = cp_kle_id;
11075 
11076     l_taxsources_rec         l_okltaxsources_csr%ROWTYPE;
11077 
11078     --asawanka added for bug #6612165
11079     --Cursor to get the ship_to_site_use_id corresponding to the install_location_id of the asset
11080     CURSOR l_get_shiptositeid(cp_cust_acct_id IN NUMBER, cp_inst_loc_id IN NUMBER,cp_loc_id IN NUMBER) IS
11081     SELECT b.site_use_id,
11082            c.party_site_id,
11083            c.party_id,
11084            c.location_id
11085     FROM   hz_cust_acct_sites_all a,
11086            hz_cust_site_uses_all  b,
11087            hz_party_sites      c
11088     WHERE  a.CUST_ACCT_SITE_ID = b.CUST_ACCT_SITE_ID
11089     AND    b.site_use_code     = 'SHIP_TO'
11090     AND    a.party_site_id     = c.party_site_id
11091     AND    a.cust_account_id   = cp_cust_acct_id
11092     AND    a.org_id            = MO_GLOBAL.get_current_org_id
11093     AND    c.party_site_id     = cp_inst_loc_id
11094     AND    c.location_id       = cp_loc_id;
11095 
11096     SUBTYPE txsv_rec_type IS okl_txs_pvt.txsv_rec_type;
11097 
11098         TYPE  tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11099 
11100         l_tax_src_tbl                                           tax_src_tbl_type;
11101     lp_tax_src_params_rec               tax_src_params_rec_type;
11102     lx_line_params_tbl                  line_params_tbl_type;
11103     lx_tax_sources_tbl                      tax_sources_tbl_type;
11104     lp_hdr_params_rec                   hdr_params_rec_type;
11105 
11106         l_alc_trx_type_id_det                           NUMBER;
11107         l_inst_item_line_id                                     NUMBER;
11108         l_party_site_uses_id1               NUMBER;
11109         l_fin_asset_id                                          NUMBER;
11110         l_new_location_id                   NUMBER;
11111         --asawanka added for bug# 6612165 start
11112         l_install_location_id               NUMBER;
11113         --asawanka added for bug# 6612165 end
11114         l_chr_id                                                        NUMBER;
11115         l_name                                                          VARCHAR2(150);
11116         l_total_strm_tax                                        NUMBER;
11117         l_total_prev_tax                                        NUMBER;
11118         l_total_curr_tax                                        NUMBER;
11119 
11120         lx_cust_acct_id                                         NUMBER;
11121         lx_currency_code                                        VARCHAR2(15);
11122         lx_precision                                    NUMBER;
11123         lx_minimum_accountable_unit                     NUMBER;
11124         lx_cust_trx_type_id                                     NUMBER;
11125 
11126         lx_alc_prch_opt_det                                     VARCHAR2(450);
11127         lx_alc_fin_prod_id_det                          NUMBER;
11128         lx_alc_int_disclosed_det                        VARCHAR2(30);
11129 
11130         lx_alc_transfer_of_title                        VARCHAR2(30);
11131         lx_alc_sale_lease_back                          VARCHAR2(30);
11132         lx_alc_purchase_of_lease                        VARCHAR2(30);
11133         lx_alc_usage_of_equipment                       VARCHAR2(450);
11134         lx_alc_age_of_equipment                         NUMBER;
11135         lx_alc_vendor_site_id                   NUMBER;
11136 
11137         lp_txsv_rec                                                     txsv_rec_type;
11138         lp_txsv_rec_emp                                         txsv_rec_type;
11139     lx_txsv_rec                                                 txsv_rec_type;
11140 
11141     lx_tbc_code                                                 VARCHAR2(30);
11142     l_taxable_basis                                             NUMBER;
11143     l_taxable_ser_basis                             NUMBER;
11144     l_fma_id                                                    NUMBER;
11145     l_inv_item_id                                               NUMBER;
11146         l_inv_item_org_id                                       NUMBER;
11147     l_legal_entity_id                   NUMBER;
11148     l_ledger_id                         NUMBER;
11149     l_taxation_country                  VARCHAR2(2);
11150 
11151     lx_bill_to_party_site_id            NUMBER;
11152     lx_bill_to_location_id              NUMBER;
11153     lx_bill_to_party_id                 NUMBER;
11154     lx_bill_to_siteuseid                NUMBER;
11155     lx_ship_to_party_site_id            NUMBER;
11156     lx_ship_to_location_id              NUMBER;
11157     lx_ship_to_party_id                 NUMBER;
11158     lx_ship_to_siteuseid                    NUMBER;
11159 
11160         l_add_params                                            okl_execute_formula_pub.ctxt_val_tbl_type;
11161         l_formula_name                                          VARCHAR2(150);
11162         l_trx_date                                                      DATE;
11163         l_tax_source_id                                         NUMBER;
11164         k                                                                       NUMBER;
11165         j                                                                       NUMBER;
11166         next_tx_src_cnt                                         NUMBER;
11167     tax_call_cnt                        NUMBER;
11168 
11169     lx_org_id                       NUMBER;
11170     lx_book_class_code              VARCHAR2(30);
11171     l_entity_code                   VARCHAR2(30);
11172     l_event_class_code              VARCHAR2(30);
11173     lx_currency_conversion_type     VARCHAR2(30);
11174     lx_currency_conversion_rate     NUMBER;
11175     lx_currency_conversion_date     DATE;
11176     lx_contract_start_date          DATE;
11177     l_org_id                        NUMBER;
11178     l_asset_inst_count              NUMBER;
11179     l_alc_ser_def_code              VARCHAR2(1) := 'N';
11180     l_stream_count                  NUMBER;
11181 
11182   BEGIN
11183 
11184     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11185         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax','Begin(+)');
11186     END IF;
11187 
11188     --Print Input Variables
11189     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11190       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11191               'p_init_msg_list :'||p_init_msg_list);
11192       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11193               'p_source_trx_id :'||p_source_trx_id);
11194       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11195               'p_source_trx_name :'||p_source_trx_name);
11196       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11197               'p_source_table :'||p_source_table);
11198       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11199               'p_tax_call_type :'||p_tax_call_type);
11200       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11201               'p_serialized_asset :'||p_serialized_asset);
11202       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11203               'p_request_id :'||p_request_id);
11204       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11205               'p_alc_final_call :'||p_alc_final_call);
11206     END IF;
11207 
11208     x_return_status := OKL_API.G_RET_STS_SUCCESS;
11209 
11210     -- validate the source trx id
11211         OPEN  l_trxassets_csr(p_source_trx_id, p_source_trx_name);
11212         FETCH l_trxassets_csr INTO l_alc_trx_type_id_det, l_trx_date, l_legal_entity_id;
11213         IF l_trxassets_csr%NOTFOUND THEN
11214           -- source trx id is invalid
11215           OKC_API.set_message( p_app_name      => 'OKC',
11216                                    p_msg_name      => G_INVALID_VALUE,
11217                                        p_token1        => G_COL_NAME_TOKEN,
11218                                            p_token1_value  => 'SOURCE_TRX_ID');
11219           RAISE OKL_API.G_EXCEPTION_ERROR;
11220         END IF;
11221         CLOSE l_trxassets_csr;
11222 
11223     IF p_tax_call_type = G_ESTIMATED_CALL_TYPE  THEN
11224 
11225           -- get trx line details
11226           OPEN  l_txlitminsts_csr(p_source_trx_id);
11227           FETCH l_txlitminsts_csr INTO l_inst_item_line_id, l_party_site_uses_id1, l_fin_asset_id;
11228           IF l_txlitminsts_csr%NOTFOUND THEN
11229             OKC_API.set_message( p_app_name      => 'OKC',
11230                                              p_msg_name      => G_REQUIRED_VALUE,
11231                                              p_token1        => G_COL_NAME_TOKEN,
11232                                              p_token1_value  => 'PARTY_SITE_USES_ID1');
11233             RAISE OKL_API.G_EXCEPTION_ERROR;
11234           END IF;
11235 
11236       IF l_fin_asset_id IS NULL THEN
11237             OKC_API.set_message( p_app_name      => 'OKC',
11238                                              p_msg_name      => G_REQUIRED_VALUE,
11239                                              p_token1        => G_COL_NAME_TOKEN,
11240                                              p_token1_value  => 'DNZ_CLE_ID');
11241             RAISE OKL_API.G_EXCEPTION_ERROR;
11242           END IF;
11243           CLOSE l_txlitminsts_csr;
11244 
11245           OPEN  l_okcklines_csr(l_fin_asset_id);
11246           FETCH l_okcklines_csr INTO l_chr_id, l_name;
11247           IF l_okcklines_csr%NOTFOUND THEN
11248             OKC_API.set_message( p_app_name      => 'OKC',
11249                                              p_msg_name      => G_INVALID_VALUE,
11250                                              p_token1        => G_COL_NAME_TOKEN,
11251                                              p_token1_value  => 'DNZ_CLE_ID');
11252             RAISE OKL_API.G_EXCEPTION_ERROR;
11253           END IF;
11254           CLOSE l_okcklines_csr;
11255 
11256           -- get the new location id
11257           OPEN  l_partysiteuses_csr(l_party_site_uses_id1);
11258           FETCH l_partysiteuses_csr INTO l_new_location_id,l_install_location_id;
11259           IF l_partysiteuses_csr%NOTFOUND THEN
11260             OKC_API.set_message( p_app_name      => 'OKC',
11261                                              p_msg_name      => G_REQUIRED_VALUE,
11262                                              p_token1        => G_COL_NAME_TOKEN,
11263                                              p_token1_value  => 'LOCATION_ID');
11264             RAISE OKL_API.G_EXCEPTION_ERROR;
11265           END IF;
11266           CLOSE l_partysiteuses_csr;
11267 
11268           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11269                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11270                           'l_inst_item_line_id'||l_inst_item_line_id);
11271                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11272                           'l_party_site_uses_id1'||l_party_site_uses_id1);
11273                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11274                           'l_fin_asset_id'||l_fin_asset_id);
11275                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11276                           'l_chr_id'||l_chr_id);
11277                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11278                           'l_name'||l_name);
11279                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11280                           'l_new_location_id'||l_new_location_id);
11281           END IF;
11282 
11283       -- Populate tax sources id to deactivate existing upfront tax lines for this asset.
11284       IF (p_serialized_asset = 'N' OR (p_serialized_asset = 'Y' AND (p_alc_final_call IS NULL OR p_alc_final_call = 'Y')))  THEN -- This processing will be done only once for the serialized asset
11285         k := 1;
11286             l_tax_src_tbl.DELETE;
11287             -- This cursor will fetch only a few rows
11288             FOR l_taxsources_rec IN l_taxsources_csr(l_chr_id, l_fin_asset_id) LOOP
11289                   -- K1 > A1 > RENT
11290                   -- K2 > A1 > Estimated Property Tax
11291 
11292                   -- Store the tax source IDs in a table
11293                   l_tax_src_tbl(k) := l_taxsources_rec.ID;
11294 
11295           IF (k = 1) THEN
11296             l_org_id := l_taxsources_rec.org_id;
11297             l_entity_code := l_taxsources_rec.entity_code;
11298             l_event_class_code := l_taxsources_rec.event_class_code;
11299           END IF;
11300 
11301                   k := k + 1;
11302             END LOOP;
11303 
11304         -- Inactivate the previous ACTIVE upfront tax lines - begin
11305         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11306                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11307                         'l_tax_src_tbl.COUNT '||l_tax_src_tbl.COUNT );
11308         END IF;
11309 
11310         IF l_tax_src_tbl.COUNT > 0 THEN
11311           BEGIN
11312             FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
11313               UPDATE OKL_TAX_SOURCES SET TAX_LINE_STATUS_CODE = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
11314 
11315           EXCEPTION
11316             WHEN OTHERS THEN
11317               IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
11318                             FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
11319                                                                 OKL_API.set_message(
11320                                                                      p_app_name      => 'OKL',
11321                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
11322                                      p_token1        => 'TABLE_NAME',
11323                                      p_token1_value  => 'OKL_TAX_SOURCES',
11324                                      p_token2        => 'ERROR_CODE',
11325                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
11326                                                                          p_token3        => 'ITERATION',
11327                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
11328                             END LOOP;
11329                             RAISE OKL_API.G_EXCEPTION_ERROR;
11330                           END IF;
11331           END;
11332 
11333           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11334                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11335                         'Inactivated the previous active upfront tax lines ' );
11336           END IF;
11337         END IF;
11338         -- Inactivate the previous ACTIVE upfront tax lines - end
11339 
11340             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11341                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11342                           'Updated existing tax lines status to INACIVE');
11343             END IF;
11344 
11345       END IF;  -- Processing will be only once for the serialized asset
11346 
11347           -- Get contract header info
11348       get_k_hdr_tax_params(
11349         p_api_version                  => p_api_version,
11350         p_init_msg_list                => p_init_msg_list,
11351         x_return_status                => x_return_status,
11352         x_msg_count                    => x_msg_count,
11353         x_msg_data                     => x_msg_data,
11354         p_khr_id                       => l_chr_id,
11355         p_source_trx_name              => p_source_trx_name,
11356         p_source_table                             => p_source_table,
11357         x_cust_acct_id                             => lx_cust_acct_id,
11358                 x_bill_to_siteuseid            => lx_bill_to_siteuseid,
11359                 x_currency_code                            => lx_currency_code,
11360         x_cust_trx_type_id             => lx_cust_trx_type_id,
11361         x_precision                                        => lx_precision,
11362                 x_minimum_accountable_unit     => lx_minimum_accountable_unit,
11363                 x_prch_opt_det                             => lx_alc_prch_opt_det,
11364                 x_fin_prod_id_det                          => lx_alc_fin_prod_id_det,
11365                 x_int_disclosed_det                        => lx_alc_int_disclosed_det,
11366         x_org_id                       => lx_org_id,
11367         x_book_class_code              => lx_book_class_code,
11368         x_bill_to_party_site_id        => lx_bill_to_party_site_id,
11369         x_bill_to_party_id             => lx_bill_to_party_id,
11370         x_bill_to_location_id          => lx_bill_to_location_id,
11371         x_currency_conversion_type     => lx_currency_conversion_type,
11372         x_currency_conversion_rate     => lx_currency_conversion_rate,
11373         x_currency_conversion_date     => lx_currency_conversion_date,
11374         x_contract_start_date          => lx_contract_start_date);
11375 
11376           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11377         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11378       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11379         RAISE OKL_API.G_EXCEPTION_ERROR;
11380       END IF;
11381 
11382       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11383         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11384                 'lx_cust_acct_id '||lx_cust_acct_id );
11385         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11386                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
11387         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11388                 'lx_currency_code '||lx_currency_code );
11389         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11390                 'lx_cust_trx_type_id '||lx_cust_trx_type_id );
11391         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11392                 'lx_precision '||lx_precision );
11393         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11394                 'lx_minimum_accountable_unit '||lx_minimum_accountable_unit );
11395         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11396                 'lx_alc_prch_opt_det '||lx_alc_prch_opt_det );
11397         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11398                 'lx_alc_fin_prod_id_det '||lx_alc_fin_prod_id_det );
11399         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11400                 'lx_alc_int_disclosed_det '||lx_alc_int_disclosed_det );
11401         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11402                 'lx_org_id '||lx_org_id );
11403         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11404                 'lx_book_class_code '||lx_book_class_code );
11405         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11406                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
11407         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11408                 'lx_bill_to_party_id '||lx_bill_to_party_id );
11409         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11410                 'lx_bill_to_location_id '||lx_bill_to_location_id );
11411         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11412                 'lx_currency_conversion_type '||lx_currency_conversion_type );
11413         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11414                 'lx_currency_conversion_rate '||lx_currency_conversion_rate );
11415         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11416                 'lx_currency_conversion_date '||lx_currency_conversion_date );
11417         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11418                 'lx_contract_start_date '||lx_contract_start_date );
11419       END IF;
11420 
11421           -- get the asset level determinants
11422           get_asset_tax_params(
11423                    p_api_version                  => p_api_version,
11424                p_init_msg_list                => OKC_API.G_FALSE,
11425                x_return_status                => x_return_status,
11426                x_msg_count                    => x_msg_count,
11427                x_msg_data                     => x_msg_data,
11428                p_khr_id                       => l_chr_id,
11429                p_kle_id                       => l_fin_asset_id,
11430                p_source_trx_name              => p_source_trx_name,
11431                p_source_table                             => p_source_table,
11432                x_transfer_of_title                        => lx_alc_transfer_of_title,
11433                x_sale_lease_back                          => lx_alc_sale_lease_back,
11434                x_purchase_of_lease                        => lx_alc_purchase_of_lease,
11435                x_usage_of_equipment                   => lx_alc_usage_of_equipment,
11436                    x_age_of_equipment                     => lx_alc_age_of_equipment,
11437                    x_vendor_site_id                   => lx_alc_vendor_site_id);
11438 
11439           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11440                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11441           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11442                 RAISE OKL_API.G_EXCEPTION_ERROR;
11443           END IF;
11444 
11445           -- Equipment Type(inventory item id)
11446           -- get the inventory item id
11447           OPEN   l_invitem_csr(l_fin_asset_id);
11448           FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
11449           IF l_invitem_csr%NOTFOUND THEN
11450             OKL_API.set_message( p_app_name      => 'OKL',
11451                                              p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
11452                                                          p_token1        => 'ASSET_NUMBER',
11453                                                          p_token1_value  => l_name);
11454             RAISE OKL_API.G_EXCEPTION_ERROR;
11455           END IF;
11456           CLOSE  l_invitem_csr;
11457 
11458       -- get the Equipment Locationn (IB Loc)
11459           get_location_party_ids(   p_api_version                  => p_api_version,
11460                                     p_init_msg_list                => OKC_API.G_FALSE,
11461                                     x_return_status                => x_return_status,
11462                                     x_msg_count                    => x_msg_count,
11463                                     x_msg_data                     => x_msg_data,
11464                                     p_cust_acct_id                 => lx_cust_acct_id,
11465                                     p_fin_asset_id                 => l_fin_asset_id,
11466                                     p_khr_id                       => l_chr_id,
11467                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
11468                                     x_bill_to_location_id          => lx_bill_to_location_id,
11469                                     x_bill_to_party_id             => lx_bill_to_party_id,
11470                                     x_bill_to_site_use_id          => lx_bill_to_siteuseid,
11471                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
11472                                     x_ship_to_location_id          => lx_ship_to_location_id,
11473                                     x_ship_to_party_id             => lx_ship_to_party_id,
11474                                     x_ship_to_site_use_id          => lx_ship_to_siteuseid);
11475 
11476       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN  -- will never be setting this to unexpecetd inside get_ufc_code ?
11477                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11478           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11479                 RAISE OKL_API.G_EXCEPTION_ERROR;
11480           END IF;
11481 
11482           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11483                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11484                           'l_fin_asset_id '||l_fin_asset_id);
11485                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11486                           'lx_alc_transfer_of_title '||lx_alc_transfer_of_title);
11487                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11488                           'lx_alc_sale_lease_back '||lx_alc_sale_lease_back);
11489                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11490                           'lx_alc_purchase_of_lease '||lx_alc_purchase_of_lease);
11491                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11492                           'lx_alc_usage_of_equipment '||lx_alc_usage_of_equipment);
11493                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11494                           'lx_alc_age_of_equipment '||lx_alc_age_of_equipment);
11495                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11496                           'lx_alc_vendor_site_id '||lx_alc_vendor_site_id);
11497                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11498                           'l_inv_item_id '||l_inv_item_id);
11499                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11500                           'l_inv_item_org_id '||l_inv_item_org_id);
11501                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11502                           'lx_ship_to_siteuseid '||lx_ship_to_siteuseid);
11503                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11504                       'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
11505                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11506                       'lx_ship_to_location_id '||lx_ship_to_location_id );
11507                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11508                       'lx_ship_to_party_id '||lx_ship_to_party_id );
11509                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11510                       'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
11511                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11512                       'lx_bill_to_location_id '||lx_bill_to_location_id );
11513                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11514                       'lx_bill_to_party_id '||lx_bill_to_party_id );
11515                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11516                       'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
11517           END IF;
11518 
11519           --asaawnka added for bug #6612165 start
11520           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11521                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11522                           'lx_cust_acct_id '||lx_cust_acct_id);
11523                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11524                           'l_install_location_id '||l_install_location_id);
11525                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11526                           'l_new_location_id '||l_new_location_id);
11527           END IF;
11528           --get the ship to addresses for the new location specified during asset location change
11529           OPEN  l_get_shiptositeid(lx_cust_acct_id,l_install_location_id,l_new_location_id);
11530           FETCH l_get_shiptositeid INTO lx_ship_to_siteuseid, lx_ship_to_party_site_id,
11531                                           lx_ship_to_party_id, lx_ship_to_location_id;
11532           CLOSE l_get_shiptositeid;
11533 
11534           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11535                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11536                           'lx_ship_to_siteuseid '||lx_ship_to_siteuseid);
11537                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11538                       'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
11539                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11540                       'lx_ship_to_location_id '||lx_ship_to_location_id );
11541                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11542                       'lx_ship_to_party_id '||lx_ship_to_party_id );
11543           END IF;
11544           --asaawnka added for bug #6612165 end
11545 
11546 
11547           -- Check if taxable bais override applies to Asset location Change transaction
11548           OPEN  l_txbasisoverride_csr(l_alc_trx_type_id_det);
11549           FETCH l_txbasisoverride_csr INTO l_fma_id;
11550           CLOSE l_txbasisoverride_csr;
11551 
11552           IF l_fma_id IS NOT NULL THEN
11553 
11554                 OPEN  l_formulae_csr(l_fma_id);
11555                 FETCH l_formulae_csr INTO l_formula_name;
11556                 IF l_formulae_csr%NOTFOUND THEN
11557                   OKC_API.set_message( p_app_name      => 'OKC',
11558                                                    p_msg_name      => G_INVALID_VALUE,
11559                                                    p_token1        => G_COL_NAME_TOKEN,
11560                                                    p_token1_value  => 'FMA_ID');
11561                   RAISE OKL_API.G_EXCEPTION_ERROR;
11562                 END IF;
11563                 CLOSE l_formulae_csr;
11564 
11565                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11566                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11567                           'l_formula_name '||l_formula_name);
11568                 END IF;
11569           END IF;
11570 
11571       -- Fetch the Ledger info
11572       l_ledger_id := okl_accounting_util.get_set_of_books_id;
11573 
11574       -- Fetch the Tax country
11575       l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
11576                                                          x_msg_count         => x_msg_count,
11577                                                          x_msg_data          => x_msg_data,
11578                                                          p_legal_entity_id   => l_legal_entity_id);
11579           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11580         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11581       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11582         RAISE OKL_API.G_EXCEPTION_ERROR;
11583       END IF;
11584 
11585       OPEN c_get_streams_count(l_chr_id, l_fin_asset_id);
11586       FETCH c_get_streams_count INTO l_stream_count;
11587       CLOSE c_get_streams_count;
11588 
11589 
11590       -- If the asset is serialized, divide the taxable amount by number of instances count
11591       -- Fetch the number of instances of asset
11592       OPEN c_get_ast_instances(l_fin_asset_id);
11593       FETCH c_get_ast_instances INTO l_asset_inst_count;
11594       CLOSE c_get_ast_instances;
11595 
11596       -- 'l_alc_ser_def_code' value is used in specific to derive the TBC, PC, UFC codes only once
11597       -- for serialized asset in order to prevent the same processing for all serial numbers
11598       IF (p_serialized_asset = 'Y' AND l_stream_count > 1) THEN
11599         l_alc_ser_def_code := 'A'; -- If there are multiple stream types, fetch the codes always
11600       ELSIF (p_serialized_asset = 'Y' AND ((p_alc_final_call IS NULL OR p_alc_final_call = 'Y') AND l_asset_inst_count = 1)) THEN
11601         l_alc_ser_def_code := 'F'; -- If asset is serialized and asset is having only 1 unit , then fetch it
11602       ELSIF (p_serialized_asset = 'Y' AND p_alc_final_call IS NULL) THEN
11603         l_alc_ser_def_code := 'F'; -- If the asset is serialized and having multiple units, fetch only first time
11604       ELSIF (p_serialized_asset = 'Y' AND p_alc_final_call IN ('N', 'Y')) THEN
11605         l_alc_ser_def_code := 'N'; -- If the asset is serialized and having multiple units, fetch is already done in
11606                                    -- previous 'elsif' .. so don't fetch anymore, use the previous fetched values
11607       ELSIF (p_serialized_asset IS NULL OR p_serialized_asset = 'N') THEN
11608         l_alc_ser_def_code := 'A'; -- If the asset is not serialized fetch it
11609       END IF;
11610 
11611           tax_call_cnt := 1;
11612 
11613           -- This cursor will return only a few rows, typically 1 or 2
11614       -- For Non-Serialized asset
11615          -- A1 > Rent , A1 - Estimated Property tax etc
11616       -- For Serialized asset
11617          -- A1_ser1 > Rent , A1_ser1 - Estimated Property tax ( tax call)
11618          -- A1_ser2 > Rent , A1_ser2 - Estimated Property tax (2 tax call)
11619          -- A1_ser3 > Rent , A1_ser3 - Estimated Property tax (3 tax call)
11620           FOR l_assetstreams_rec IN l_assetstreams_csr(l_chr_id, l_fin_asset_id) LOOP
11621 
11622                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11623                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11624                           'Processing current payment '||l_assetstreams_rec.stream_type_id);
11625                 END IF;
11626 
11627                 -- Get the default taxable basis amount
11628                 OPEN  l_strmelements_csr(l_assetstreams_rec.stream_id);
11629                 FETCH l_strmelements_csr INTO l_taxable_basis;
11630                 CLOSE l_strmelements_csr;
11631 
11632         IF (p_serialized_asset = 'Y' AND l_asset_inst_count IS NOT NULL) THEN
11633           l_taxable_ser_basis := l_taxable_basis / l_asset_inst_count;
11634         END IF;
11635 
11636         -- Populate tax sources record -- start
11637         lp_tax_src_params_rec.kle_id       := l_fin_asset_id;
11638         lp_tax_src_params_rec.asset_number := l_name;
11639         lp_tax_src_params_rec.line_name    := l_name;
11640 
11641         lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := lx_ship_to_siteuseid;
11642         lp_tax_src_params_rec.ship_to_party_site_id           := lx_ship_to_party_site_id;
11643         lp_tax_src_params_rec.ship_to_party_id                := lx_ship_to_party_id;
11644         lp_tax_src_params_rec.ship_to_location_id             := lx_ship_to_location_id;
11645 
11646         lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
11647         lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
11648         lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
11649         lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
11650 
11651         lp_tax_src_params_rec.inventory_item_id             := l_inv_item_id;
11652         lp_tax_src_params_rec.sty_id                        := l_assetstreams_rec.stream_type_id;
11653 
11654         lp_tax_src_params_rec.khr_id                        := l_chr_id;
11655         lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
11656         lp_tax_src_params_rec.entity_code                   := G_ASSETS_ENTITY_CODE;
11657         lp_tax_src_params_rec.event_class_code              := G_ALC_EVENT_CODE;
11658         lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
11659         lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
11660         lp_tax_src_params_rec.tax_reporting_flag            := 'N';
11661         lp_tax_src_params_rec.reported_yn                   := 'N';
11662         lp_tax_src_params_rec.trx_date                      := l_trx_date;
11663         lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
11664         lp_tax_src_params_rec.line_intended_use             := lx_alc_usage_of_equipment;
11665         lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
11666         lp_tax_src_params_rec.org_id                        := lx_org_id;
11667         lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
11668         lp_tax_src_params_rec.try_id                        := l_alc_trx_type_id_det;
11669 
11670         lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
11671         lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
11672         lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
11673             lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
11674             lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
11675             lp_tax_src_params_rec.adjusted_doc_number           := null;
11676             lp_tax_src_params_rec.adjusted_doc_date             := null;
11677 
11678         lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
11679 
11680         lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
11681         lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
11682         lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
11683 
11684         IF (p_serialized_asset = 'Y') THEN
11685           lp_tax_src_params_rec.line_amt                      := l_taxable_ser_basis;
11686           lp_tax_src_params_rec.alc_serialized_total_line_amt := l_taxable_basis;
11687           lp_tax_src_params_rec.tax_line_status_code          := G_INACTIVE_STATUS;
11688 
11689           IF (p_alc_final_call = 'Y') THEN
11690             -- Indicates tax for last serial number. Also, used to display the
11691             -- HGrid data
11692             -- alc_serialized_yn is set at the stream type level. If A1 is
11693             -- serialized (3 units), with 2 stream types, okl_tax_sources will
11694             -- have 6 rows. Out of these 2 rows (last ones for each atream type)
11695             -- will have alc_serialized_yn set to 'L'
11696             lp_tax_src_params_rec.alc_serialized_yn           := 'L';
11697           ELSE
11698             lp_tax_src_params_rec.alc_serialized_yn           := p_serialized_asset;
11699           END IF;
11700 
11701         ELSE
11702           lp_tax_src_params_rec.line_amt                      := l_taxable_basis;
11703           lp_tax_src_params_rec.alc_serialized_total_line_amt := l_taxable_basis;
11704           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
11705         END IF;
11706         -- Populate tax sources record -- end
11707 
11708                 populate_tax_info(
11709                                         p_api_version                  => p_api_version,
11710                                         p_init_msg_list                => OKC_API.G_FALSE,
11711                                         x_return_status                => x_return_status,
11712                                         x_msg_count                    => x_msg_count,
11713                                         x_msg_data                     => x_msg_data,
11714                                         p_prch_opt_det                             => lx_alc_prch_opt_det,
11715                                         p_fin_prod_id_det                          => lx_alc_fin_prod_id_det,
11716                                         p_int_disclosed_det                        => lx_alc_int_disclosed_det,
11717                                         p_title_trnsfr_code                        => lx_alc_transfer_of_title,
11718                                         p_sale_lease_back_code             => lx_alc_sale_lease_back,
11719                                         p_lease_purchased_code             => lx_alc_purchase_of_lease,
11720                                         p_equip_usage_code                         => lx_alc_usage_of_equipment,
11721                                         p_vendor_site_id                           => lx_alc_vendor_site_id,
11722                                         p_age_of_equip                             => lx_alc_age_of_equipment,
11723                     p_source_trx_name              => p_source_trx_name,
11724                                     p_cust_trx_type_id             => lx_cust_trx_type_id,
11725                                     p_book_class_code              => lx_book_class_code,
11726                                         p_tax_call_cnt                             => tax_call_cnt,
11727                                         p_fma_id                                           => l_fma_id,
11728                                         p_formula_name                             => l_formula_name,
11729                                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
11730                                         p_precision                                        => lx_precision,
11731                                         p_sales_quote_id                           => null,
11732                                     p_event_type_code              => G_ALC_CRE_EVENT_CODE,
11733                                     p_ledger_id                    => l_ledger_id,
11734                                     p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
11735                                     p_tax_src_params_rec           => lp_tax_src_params_rec,
11736                                     p_quote_flag                   => 'N',
11737                                     p_rounding_ship_to_party_id    => lx_ship_to_party_id,
11738                                     p_rounding_bill_to_party_id    => lx_bill_to_party_id,
11739                                     p_line_amt_includes_tax_flag   => 'N',
11740                     p_term_quote_type_code         => null,
11741                     p_term_quote_reason_code       => null,
11742                     p_alc_ser_def_code             => l_alc_ser_def_code,
11743                                     px_tax_sources_tbl                     => lx_tax_sources_tbl,
11744                                     px_line_params_tbl             => lx_line_params_tbl );
11745 
11746         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11747           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11748         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11749           RAISE OKL_API.G_EXCEPTION_ERROR;
11750         END IF;
11751 
11752                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11753                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11754                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
11755         END IF;
11756 
11757                 tax_call_cnt := tax_call_cnt + 1;
11758       END LOOP;
11759 
11760           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11761                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11762                           'prepared new tax sources ');
11763           END IF;
11764 
11765       -- insert into okl_tax_sources
11766           BEGIN
11767         IF lx_tax_sources_tbl.COUNT > 0 THEN
11768           FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
11769             -- SAVE EXCEPTIONS
11770             INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
11771         END IF;
11772       EXCEPTION
11773         WHEN OTHERS THEN
11774           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
11775                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
11776                           OKL_API.set_message(
11777                                                                      p_app_name      => 'OKL',
11778                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
11779                                      p_token1        => 'TABLE_NAME',
11780                                      p_token1_value  => 'OKL_TAX_SOURCES',
11781                                      p_token2        => 'ERROR_CODE',
11782                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
11783                                                                          p_token3        => 'ITERATION',
11784                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
11785                         END LOOP;
11786                         RAISE OKL_API.G_EXCEPTION_ERROR;
11787                   END IF;
11788       END;
11789       -- Insert into okl_tax_sources end --
11790 
11791           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11792                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11793                           ' inserted into okl_tax_sources ' );
11794           END IF;
11795 
11796       -- At this point tax sources for previous upfront tax have been Inactivated
11797       -- and tax sources for the current tax calculations have been inserted"
11798       -- Incase of  a non serailzed asset, sample tax sources are -
11799       -- K1 > A1 > RENT
11800       -- K1 > A1 > Est Prop Tax
11801       -- Above Tax sources are created during the single call from ALC to OKl Tax Engine
11802       -- Incase of  a serailzed asset (3 units) , sample tax sources after the
11803       -- first call to OKL Tax engine, for 1st serial no. are -
11804       -- K1 > A1 > Ser 1 > RENT
11805       -- K1 > A1 > Ser 1 > Est Prop Tax
11806       -- During subsequent calls (for each serial no.), following taxsources will be created
11807       -- K1 > A1 > Ser 2 > RENT
11808       -- K1 > A1 > Ser 2 > Est Prop Tax
11809       -- K1 > A1 > Ser 3 > RENT
11810       -- K1 > A1 > Ser 4 > Est Prop Tax
11811           -- Call tax engine to calculate new tax for the current asset location change transaction
11812           IF lx_line_params_tbl.COUNT > 0 THEN
11813             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11814                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11815                                'Before tax engine call '||x_return_status);
11816             END IF;
11817 
11818         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
11819         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
11820         lp_hdr_params_rec.internal_organization_id := lx_org_id;
11821         lp_hdr_params_rec.entity_code              := G_ASSETS_ENTITY_CODE;
11822         lp_hdr_params_rec.event_class_code         := G_ALC_EVENT_CODE;
11823         lp_hdr_params_rec.event_type_code          := G_ALC_CRE_EVENT_CODE;
11824         lp_hdr_params_rec.quote_flag               := 'N';
11825 
11826         OKL_TAX_INTERFACE_PVT.calculate_tax(
11827                                     p_api_version       =>  p_api_version,
11828                                     p_init_msg_list     =>  p_init_msg_list,
11829                                     x_return_status     =>  x_return_status,
11830                                     x_msg_count         =>  x_msg_count,
11831                                     x_msg_data          =>  x_msg_data,
11832                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
11833                                     p_line_params_tbl   =>  lx_line_params_tbl);
11834 
11835                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11836                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11837                                    'After tax engine call '||x_return_status);
11838             END IF;
11839 
11840             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11841           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11842         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11843           RAISE OKL_API.G_EXCEPTION_ERROR;
11844         END IF;
11845       END IF;
11846 
11847       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11848         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11849              'Calling "update_tax_sources_total" .. ');
11850       END IF;
11851 
11852       update_tax_sources_total(p_api_version      => p_api_version,
11853                                p_init_msg_list    => p_init_msg_list,
11854                                x_return_status    => x_return_status,
11855                                x_msg_count        => x_msg_count,
11856                                x_msg_data         => x_msg_data,
11857                                p_source_trx_id    => p_source_trx_id,
11858                                p_source_trx_name  => p_source_trx_name,
11859                                p_serialized_asset => p_serialized_asset);
11860 
11861       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11862         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11863              'Return Status' || x_return_status);
11864       END IF;
11865 
11866       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11867         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11868       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11869         RAISE OKL_API.G_EXCEPTION_ERROR;
11870       END IF;
11871 
11872       IF (p_serialized_asset = 'Y' AND p_alc_final_call = 'Y') THEN
11873         G_UFC_CODE := null;
11874         G_TBC_CODE := null;
11875         G_PC_CODE := null;
11876         G_TAX_CLASS_CODE := null;
11877 
11878         populate_alc_total_tax(p_api_version      => p_api_version,
11879                                p_init_msg_list    => p_init_msg_list,
11880                                x_return_status    => l_return_status,
11881                                x_msg_count        => x_msg_count,
11882                                x_msg_data         => x_msg_data,
11883                                p_asset_id         => l_fin_asset_id,
11884                                p_request_id       => p_request_id,
11885                                p_serialized_asset => p_serialized_asset);
11886 
11887         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11888           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11889         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
11890           RAISE OKL_API.G_EXCEPTION_ERROR;
11891         END IF;
11892       ELSE
11893         populate_alc_total_tax(p_api_version      => p_api_version,
11894                                p_init_msg_list    => p_init_msg_list,
11895                                x_return_status    => l_return_status,
11896                                x_msg_count        => x_msg_count,
11897                                x_msg_data         => x_msg_data,
11898                                p_asset_id         => l_fin_asset_id,
11899                                p_request_id       => p_request_id);
11900 
11901         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11902           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11903         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
11904           RAISE OKL_API.G_EXCEPTION_ERROR;
11905         END IF;
11906       END IF;
11907 
11908     ELSIF p_tax_call_type = G_ACTUAL_CALL_TYPE THEN
11909 
11910       OPEN l_okltaxsources_csr(cp_app_id  =>  G_OKL_APPLICATION_ID,
11911                                cp_trx_id  =>  p_source_trx_id);
11912       FETCH l_okltaxsources_csr into l_taxsources_rec;
11913       CLOSE l_okltaxsources_csr;
11914 
11915 
11916       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11917         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11918               'process_final_upfront_tax');
11919       END IF;
11920 
11921       -- Call ebtax procedure to flip the reportable flag from N to Y
11922       process_final_upfront_tax( p_api_version       => p_api_version,
11923                                          p_init_msg_list     => p_init_msg_list,
11924                                  x_return_status     => x_return_status,
11925                                      x_msg_count         => x_msg_count,
11926                                          x_msg_data          => x_msg_data,
11927                                          p_trx_id                        => p_source_trx_id,
11928                                      p_application_id    => G_OKL_APPLICATION_ID,
11929                                  p_entity_code       => l_taxsources_rec.entity_code,
11930                                  p_event_class_code  => l_taxsources_rec.event_class_code);
11931 
11932       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11933         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11934               'Return Status' || x_return_status);
11935       END IF;
11936 
11937       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11938                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11939           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11940                 RAISE OKL_API.G_EXCEPTION_ERROR;
11941           END IF;
11942 
11943       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11944         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11945              'Calling "make_tax_sources_reportable" .. ');
11946       END IF;
11947 
11948       make_tax_sources_reportable(p_api_version    => p_api_version,
11949                                   p_init_msg_list  => p_init_msg_list,
11950                                   x_return_status  => x_return_status,
11951                                   x_msg_count      => x_msg_count,
11952                                   x_msg_data       => x_msg_data,
11953                                   p_source_trx_id  => p_source_trx_id);
11954 
11955       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11956         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11957              'Return Status' || x_return_status);
11958       END IF;
11959 
11960       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11961         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11962       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11963         RAISE OKL_API.G_EXCEPTION_ERROR;
11964       END IF;
11965 
11966     END IF;
11967 
11968     -- CS will Call BPD API with ALC trx, to create tax only invoice.
11969 
11970         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11971        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ','End(-)');
11972     END IF;
11973   EXCEPTION
11974     WHEN OKL_API.G_EXCEPTION_ERROR THEN
11975          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11976                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ',
11977                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
11978          END IF;
11979 
11980          IF l_trxassets_csr%ISOPEN THEN
11981             CLOSE l_trxassets_csr;
11982          END IF;
11983 
11984          IF l_txlitminsts_csr%ISOPEN THEN
11985             CLOSE l_txlitminsts_csr;
11986          END IF;
11987 
11988          IF l_partysiteuses_csr%ISOPEN THEN
11989             CLOSE l_partysiteuses_csr;
11990          END IF;
11991 
11992          IF l_taxsources_csr%ISOPEN THEN
11993             CLOSE l_taxsources_csr;
11994          END IF;
11995 
11996          IF l_okcklines_csr%ISOPEN THEN
11997             CLOSE l_okcklines_csr;
11998          END IF;
11999 
12000          IF l_assetstreams_csr%ISOPEN THEN
12001             CLOSE l_assetstreams_csr;
12002          END IF;
12003 
12004          IF l_strmelements_csr%ISOPEN THEN
12005             CLOSE l_strmelements_csr;
12006          END IF;
12007 
12008          IF l_txbasisoverride_csr%ISOPEN THEN
12009             CLOSE l_txbasisoverride_csr;
12010          END IF;
12011 
12012          IF l_invitem_csr%ISOPEN THEN
12013             CLOSE l_invitem_csr;
12014          END IF;
12015 
12016          IF l_formulae_csr%ISOPEN THEN
12017             CLOSE l_formulae_csr;
12018          END IF;
12019 
12020          IF c_get_streams_count%ISOPEN THEN
12021             CLOSE c_get_streams_count;
12022          END IF;
12023 
12024          x_return_status := OKL_API.G_RET_STS_ERROR;
12025     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12026          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12027                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ',
12028                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
12029          END IF;
12030 
12031          IF l_trxassets_csr%ISOPEN THEN
12032             CLOSE l_trxassets_csr;
12033          END IF;
12034 
12035          IF l_txlitminsts_csr%ISOPEN THEN
12036             CLOSE l_txlitminsts_csr;
12037          END IF;
12038 
12039          IF l_partysiteuses_csr%ISOPEN THEN
12040             CLOSE l_partysiteuses_csr;
12041          END IF;
12042 
12043          IF l_taxsources_csr%ISOPEN THEN
12044             CLOSE l_taxsources_csr;
12045          END IF;
12046 
12047          IF l_okcklines_csr%ISOPEN THEN
12048             CLOSE l_okcklines_csr;
12049          END IF;
12050 
12051          IF l_assetstreams_csr%ISOPEN THEN
12052             CLOSE l_assetstreams_csr;
12053          END IF;
12054 
12055          IF l_strmelements_csr%ISOPEN THEN
12056             CLOSE l_strmelements_csr;
12057          END IF;
12058 
12059          IF l_txbasisoverride_csr%ISOPEN THEN
12060             CLOSE l_txbasisoverride_csr;
12061          END IF;
12062 
12063          IF l_invitem_csr%ISOPEN THEN
12064             CLOSE l_invitem_csr;
12065          END IF;
12066 
12067          IF l_formulae_csr%ISOPEN THEN
12068             CLOSE l_formulae_csr;
12069          END IF;
12070 
12071          IF c_get_streams_count%ISOPEN THEN
12072             CLOSE c_get_streams_count;
12073          END IF;
12074 
12075          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12076 
12077     WHEN OTHERS THEN
12078          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12079             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ',
12080                   'EXCEPTION :'||sqlerrm);
12081          END IF;
12082 
12083          IF l_trxassets_csr%ISOPEN THEN
12084             CLOSE l_trxassets_csr;
12085          END IF;
12086 
12087          IF l_txlitminsts_csr%ISOPEN THEN
12088             CLOSE l_txlitminsts_csr;
12089          END IF;
12090 
12091          IF l_partysiteuses_csr%ISOPEN THEN
12092             CLOSE l_partysiteuses_csr;
12093          END IF;
12094 
12095          IF l_taxsources_csr%ISOPEN THEN
12096             CLOSE l_taxsources_csr;
12097          END IF;
12098 
12099          IF l_okcklines_csr%ISOPEN THEN
12100             CLOSE l_okcklines_csr;
12101          END IF;
12102 
12103          IF l_assetstreams_csr%ISOPEN THEN
12104             CLOSE l_assetstreams_csr;
12105          END IF;
12106 
12107          IF l_strmelements_csr%ISOPEN THEN
12108             CLOSE l_strmelements_csr;
12109          END IF;
12110 
12111          IF l_txbasisoverride_csr%ISOPEN THEN
12112             CLOSE l_txbasisoverride_csr;
12113          END IF;
12114 
12115          IF l_invitem_csr%ISOPEN THEN
12116             CLOSE l_invitem_csr;
12117          END IF;
12118 
12119          IF l_formulae_csr%ISOPEN THEN
12120             CLOSE l_formulae_csr;
12121          END IF;
12122 
12123          IF c_get_streams_count%ISOPEN THEN
12124             CLOSE c_get_streams_count;
12125          END IF;
12126 
12127          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12128          -- unexpected error
12129          OKL_API.set_message(p_app_name      => g_app_name,
12130                          p_msg_name      => g_unexpected_error,
12131                          p_token1        => g_sqlcode_token,
12132                          p_token1_value  => sqlcode,
12133                          p_token2        => g_sqlerrm_token,
12134                          p_token2_value  => sqlerrm);
12135 
12136   END process_asset_loc_tax;
12137 
12138 /*========================================================================
12139  | PRIVATE PROCEDURE process_split_asset_tax
12140  |
12141  | DESCRIPTION
12142  |    This procedure is called from calculate_sales_tax procedure to Split
12143  |    the currently active upfront tax lines for the asset being split
12144  |
12145  | CALLED FROM                                  calculate_sales_tax()
12146  |
12147  |
12148  | CALLS PROCEDURES/FUNCTIONS
12149  |     OKL_TAX_SOURCES_PUB.update_tax_sources()
12150  |
12151  |
12152  | PARAMETERS
12153  |      p_source_trx_id                 -- Source transaction ID
12154  |      p_source_trx_name       -- Source transaction Name
12155  |      p_source_table          -- Source table
12156  |
12157  | KNOWN ISSUES
12158  |
12159  | NOTES
12160  |
12161  |
12162  | MODIFICATION HISTORY
12163  | Date                  Author            Description of Changes
12164  | 08-APR-05            SECHAWLA           Created
12165  |
12166  *=======================================================================*/
12167   PROCEDURE process_split_asset_tax(
12168         p_api_version                   IN  NUMBER,
12169     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
12170     x_return_status                     OUT NOCOPY VARCHAR2,
12171     x_msg_count                         OUT NOCOPY NUMBER,
12172     x_msg_data                          OUT NOCOPY VARCHAR2,
12173     p_source_trx_id                                     IN  NUMBER,
12174     p_source_trx_name               IN  VARCHAR2,
12175     p_source_table                  IN  VARCHAR2) IS
12176 
12177     -------------Split Asset -------------------------
12178     --p_source_trx_id           ---> okl_trx_assets.id
12179     --p_source_trx_name     ---> 'Split Asset'
12180     --p_source_table        ---> 'OKL_TRX_ASSETS'
12181     --------------------------------------------------
12182 
12183         -- validate source trx id
12184         CURSOR l_trxassets_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
12185         SELECT a.try_id, a.date_trans_occurred
12186         FROM   okl_trx_assets a, okl_trx_types_tl b
12187         WHERE  a.id = cp_trx_id
12188         AND    a.try_id = b.id
12189         AND    b.name = cp_trx_type_name
12190     AND    language = 'US';
12191 
12192         -- get the trx line information
12193         CURSOR l_txlassets_csr(cp_id IN NUMBER) IS
12194         SELECT txl.id, okc.cle_id kle_id, -- financial asset to be split
12195                txl.dnz_khr_id,
12196                txl.asset_number,
12197                txl.current_units
12198         FROM   okl_txl_assets_b txl,
12199            okc_k_lines_b okc
12200         WHERE  txl.tas_id = cp_id
12201     AND    txl.kle_id = okc.id
12202     AND    txl.dnz_khr_id = okc.dnz_chr_id;
12203 
12204         -- get the trx details information
12205         CURSOR l_txdassets_csr(cp_id IN NUMBER) IS
12206         SELECT txd.id, okc.cle_id target_kle_id, txd.asset_number, txd.split_percent, txd.quantity
12207         FROM   okl_txd_assets_b txd,
12208            okc_k_lines_b okc
12209         WHERE  tal_id = cp_id
12210     AND    txd.target_kle_id = okc.id;
12211 
12212 
12213         -- get the current active upfront tax sources for this asset
12214         -- k1 > A1 > RENT
12215         -- k1 > A1 > Estimated Property Tax
12216         CURSOR l_taxsources_csr(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER ) IS
12217         SELECT id, khr_id, kle_id, asset_number, trx_id, trx_line_id, entity_code, event_class_code,
12218                trx_level_type, tax_call_type_code, sty_id, trx_business_category, reported_yn,
12219            sel_id, line_name, application_id, tax_reporting_flag, default_taxation_country,
12220            product_category, user_defined_fisc_class, line_intended_use,
12221            tax_classification_code, inventory_item_id, bill_to_cust_acct_id, legal_entity_id,
12222                    line_amt, assessable_value, total_tax, product_type,
12223            product_fisc_classification, trx_date, provnl_tax_determination_date,
12224            try_id, ship_to_location_id, ship_to_party_site_id, ship_to_party_id,
12225            bill_to_party_site_id, bill_to_location_id, bill_to_party_id,
12226            ship_to_cust_acct_site_use_id, bill_to_cust_acct_site_use_id,
12227            trx_currency_code, currency_conversion_type, currency_conversion_rate,
12228            currency_conversion_date, org_id, alc_serialized_yn
12229         FROM   okl_tax_sources
12230         WHERE  khr_id = cp_khr_id
12231         AND    kle_id = cp_kle_id
12232         AND    tax_call_type_code = G_UPFRONT_TAX
12233         AND    tax_line_status_code = G_ACTIVE_STATUS
12234         AND    ADJUSTED_DOC_TRX_ID IS NULL
12235         AND    ADJUSTED_DOC_TRX_LINE_ID IS NULL;
12236 
12237         -- get the tax lines corresponding to previous upfront tax source ID
12238     CURSOR l_taxtrxdetails_csr(cp_txs_id IN NUMBER) IS
12239     SELECT *
12240     FROM   okl_tax_trx_details
12241     WHERE  txs_id = cp_txs_id;
12242 
12243     -- get the contract id
12244         CURSOR l_okcklines_csr(cp_kle_id IN NUMBER) IS
12245         SELECT dnz_chr_id, name
12246         FROM   okc_k_lines_v
12247         WHERE  id = cp_kle_id;
12248 
12249     CURSOR l_racusttrxtypes_csr IS
12250     SELECT cust_trx_type_id
12251         FROM   ra_cust_trx_types_all
12252         WHERE  name = 'Invoice-OKL';
12253 
12254     CURSOR l_fndcurrency_csr(cp_currency_code IN VARCHAR2) IS
12255     SELECT precision, minimum_accountable_unit
12256     FROM   fnd_currencies
12257     WHERE  currency_code = cp_currency_code
12258         AND    enabled_flag = 'Y'
12259     AND    NVL(start_date_active, sysdate) <= sysdate
12260     AND    NVL(end_date_active, sysdate) >= sysdate;
12261 
12262         TYPE tax_sources_tbl_type IS TABLE OF OKL_TAX_SOURCES%ROWTYPE INDEX BY BINARY_INTEGER;
12263     TYPE tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
12264 
12265         l_tax_src_tbl                                           tax_src_tbl_type;
12266         l_tax_sources_tbl                   tax_sources_tbl_type;
12267     rev_trx_lines_tbl                   zx_trx_lines_tbl_type;
12268     rev_trx_hdr_rec                     line_params_rec_type;
12269     l_line_params_tbl                   line_params_tbl_type;
12270     l_new_tax_sources_tbl               tax_sources_tbl_type;
12271     lp_hdr_params_rec                   hdr_params_rec_type;
12272 
12273     l_spl_trx_type_id                                   NUMBER;
12274     l_trx_date                                                  DATE;
12275     l_fin_asset_id                                              NUMBER;
12276     l_dnz_khr_id                                                NUMBER;
12277         l_asset_number                                          VARCHAR2(150);
12278         l_txl_id                                                        NUMBER;
12279         l_txd_id                                                        NUMBER;
12280         l_current_units                                         NUMBER;
12281     l_dnz_chr_id                                                NUMBER;
12282         l_name                                                          VARCHAR2(150);
12283         k                                                                       NUMBER;
12284         j                                                                       NUMBER;
12285         old_tx_src_cnt                                          NUMBER;
12286         new_tax_count                                           NUMBER;
12287     lp_txsv_rec                                                 txsv_rec_type;
12288         lp_txsv_rec_emp                                         txsv_rec_type;
12289     lx_txsv_rec                                                 txsv_rec_type;
12290     l_split_ratio                                               NUMBER;
12291     l_reverse                           BOOLEAN := FALSE;
12292     l_org_id                            NUMBER;
12293     l_legal_entity_id                   NUMBER;
12294 
12295     l_cust_trx_type_id                  NUMBER;
12296     l_precision                         NUMBER;
12297     l_minimum_accountable_unit          NUMBER;
12298     l_hdr_total_tax                     NUMBER := 0;
12299     l_trx_currency_code                 VARCHAR2(15);
12300     l_asset_ser_alc                     VARCHAR2(1);
12301 
12302   BEGIN
12303 
12304     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12305       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax','Begin(+)');
12306     END IF;
12307 
12308     --Print Input Variables
12309     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12310       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12311               'p_init_msg_list :'||p_init_msg_list);
12312       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12313               'p_source_trx_id :'||p_source_trx_id);
12314       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12315               'p_source_trx_name :'||p_source_trx_name);
12316       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12317               'p_source_table :'||p_source_table);
12318     END IF;
12319 
12320     x_return_status := OKL_API.G_RET_STS_SUCCESS;
12321 
12322     -- validate the source trx id
12323     OPEN  l_trxassets_csr(p_source_trx_id, p_source_trx_name);
12324     FETCH l_trxassets_csr INTO l_spl_trx_type_id, l_trx_date;
12325     IF l_trxassets_csr%NOTFOUND THEN
12326       -- source trx id is invalid
12327       OKC_API.set_message( p_app_name      => 'OKC',
12328                            p_msg_name      => G_INVALID_VALUE,
12329                            p_token1        => G_COL_NAME_TOKEN,
12330                            p_token1_value  => 'SOURCE_TRX_ID');
12331       RAISE OKL_API.G_EXCEPTION_ERROR;
12332     END IF;
12333     CLOSE l_trxassets_csr;
12334 
12335     -- get trx line information
12336     OPEN  l_txlassets_csr(p_source_trx_id);
12337     FETCH l_txlassets_csr INTO l_txl_id, l_fin_asset_id, l_dnz_khr_id,
12338                                l_asset_number, l_current_units;
12339     IF l_txlassets_csr%NOTFOUND THEN
12340       OKC_API.set_message( p_app_name      => 'OKC',
12341                            p_msg_name      => G_REQUIRED_VALUE,
12342                            p_token1        => G_COL_NAME_TOKEN,
12343                            p_token1_value  => 'Financial Asset');
12344       RAISE OKL_API.G_EXCEPTION_ERROR;
12345     END IF;
12346 
12347     IF l_fin_asset_id IS NULL THEN
12348       OKC_API.set_message( p_app_name      => 'OKC',
12349                            p_msg_name      => G_REQUIRED_VALUE,
12350                            p_token1        => G_COL_NAME_TOKEN,
12351                            p_token1_value  => 'KLE_ID');
12352       RAISE OKL_API.G_EXCEPTION_ERROR;
12353     END IF;
12354 
12355     IF l_current_units IS NULL THEN
12356       OKC_API.set_message( p_app_name      => 'OKC',
12357                            p_msg_name      => G_REQUIRED_VALUE,
12358                            p_token1        => G_COL_NAME_TOKEN,
12359                            p_token1_value  => 'CURRENT_UNITS');
12360       RAISE OKL_API.G_EXCEPTION_ERROR;
12361     END IF;
12362 
12363     CLOSE l_txlassets_csr;
12364 
12365     IF l_dnz_khr_id IS NULL OR l_asset_number IS NULL THEN
12366       OPEN  l_okcklines_csr(l_fin_asset_id);
12367       FETCH l_okcklines_csr INTO l_dnz_chr_id, l_name;
12368       IF l_okcklines_csr%NOTFOUND THEN
12369         OKC_API.set_message( p_app_name      => 'OKC',
12370                              p_msg_name      => G_INVALID_VALUE,
12371                              p_token1        => G_COL_NAME_TOKEN,
12372                              p_token1_value  => 'KLE_ID');
12373         RAISE OKL_API.G_EXCEPTION_ERROR;
12374       END IF;
12375       CLOSE l_okcklines_csr;
12376 
12377       IF l_dnz_khr_id IS NULL THEN
12378         l_dnz_khr_id := l_dnz_chr_id;
12379       END IF;
12380 
12381       IF l_asset_number IS NULL THEN
12382         l_asset_number := l_name;
12383         IF l_asset_number IS NULL THEN
12384           OKC_API.set_message( p_app_name      => 'OKC',
12385                                p_msg_name      => G_REQUIRED_VALUE,
12386                                p_token1        => G_COL_NAME_TOKEN,
12387                                p_token1_value  => 'ASSET_NUMBER');
12388           RAISE OKL_API.G_EXCEPTION_ERROR;
12389         END IF;
12390       END IF;
12391     END IF;
12392 
12393         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12394       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12395                   'l_txl_id'||l_txl_id);
12396       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12397                   'l_fin_asset_id'||l_fin_asset_id);
12398       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12399                   'l_dnz_khr_id'||l_dnz_khr_id);
12400       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12401                   'l_asset_number'||l_asset_number);
12402       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12403                   'l_current_units'||l_current_units);
12404     END IF;
12405 
12406 
12407     -- Create adjusting tax source transaction for the previous active tax lines
12408     -- These tax lines could have resulted from an earlier booking / rebooking /
12409     -- asset location change / split asset transactions
12410     -- Deactivate existing upfront tax lines for this asset.
12411     k := 1;
12412     l_tax_sources_tbl.DELETE;
12413     l_tax_src_tbl.DELETE;
12414     -- This cursor will fetch only a few rows
12415     FOR l_taxsources_rec IN l_taxsources_csr(l_dnz_khr_id, l_fin_asset_id) LOOP
12416       -- K1 > A1 > RENT
12417       -- K2 > A1 > Estimated Property Tax
12418 
12419       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12420         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12421                   'creating -ve tax sources for prev ACTIVE upfront tax lines '||' k = '||k);
12422       END IF;
12423 
12424       IF (k = 1) THEN
12425         l_reverse                           := TRUE;
12426         l_org_id                            := l_taxsources_rec.org_id;
12427         l_legal_entity_id                   := l_taxsources_rec.legal_entity_id;
12428         l_trx_currency_code                 := l_taxsources_rec.trx_currency_code;
12429       END IF;
12430 
12431       l_hdr_total_tax := l_hdr_total_tax + l_taxsources_rec.total_tax;
12432 
12433       -- Create adjusting tax source transaction for the previous active tax lines
12434           l_tax_sources_tbl(k).id                           := get_seq_id;
12435       l_tax_sources_tbl(k).khr_id                       := l_taxsources_rec.khr_id;
12436       l_tax_sources_tbl(k).kle_id                       := l_taxsources_rec.kle_id;
12437       l_tax_sources_tbl(k).asset_number                 := l_taxsources_rec.asset_number;
12438       l_tax_sources_tbl(k).trx_id                       := p_source_trx_id; -- split asset trx id
12439       l_tax_sources_tbl(k).trx_line_id                  := l_tax_sources_tbl(k).id;
12440       l_tax_sources_tbl(k).entity_code                  := G_CONTRACTS_ENTITY_CODE;
12441       l_tax_sources_tbl(k).event_class_code             := G_REBOOK_EVENT_CLASS_CODE;
12442       l_tax_sources_tbl(k).trx_level_type               := G_TRX_LEVEL_TYPE;
12443       l_tax_sources_tbl(k).adjusted_doc_entity_code     := l_taxsources_rec.entity_code;
12444       l_tax_sources_tbl(k).adjusted_doc_event_class_code := l_taxsources_rec.event_class_code;
12445       l_tax_sources_tbl(k).adjusted_doc_trx_id           := l_taxsources_rec.trx_id;
12446       l_tax_sources_tbl(k).adjusted_doc_trx_line_id      := l_taxsources_rec.trx_line_id;
12447       l_tax_sources_tbl(k).adjusted_doc_trx_level_type   := l_taxsources_rec.trx_level_type;
12448           l_tax_sources_tbl(k).adjusted_doc_number           := NULL;
12449           l_tax_sources_tbl(k).adjusted_doc_date             := NULL;
12450           l_tax_sources_tbl(k).tax_call_type_code            := l_taxsources_rec.tax_call_type_code;
12451           l_tax_sources_tbl(k).sty_id                        := l_taxsources_rec.sty_id;
12452           l_tax_sources_tbl(k).trx_business_category         := l_taxsources_rec.trx_business_category;
12453           l_tax_sources_tbl(k).tax_line_status_code          := G_ACTIVE_STATUS;
12454 
12455           l_tax_sources_tbl(k).sel_id                        := l_taxsources_rec.sel_id;
12456           l_tax_sources_tbl(k).line_name                     := l_taxsources_rec.line_name;
12457           l_tax_sources_tbl(k).application_id                := l_taxsources_rec.application_id;
12458           l_tax_sources_tbl(k).tax_reporting_flag            := l_taxsources_rec.tax_reporting_flag;
12459           l_tax_sources_tbl(k).default_taxation_country      := l_taxsources_rec.default_taxation_country;
12460           l_tax_sources_tbl(k).product_category              := l_taxsources_rec.product_category;
12461           l_tax_sources_tbl(k).user_defined_fisc_class       := l_taxsources_rec.user_defined_fisc_class;
12462           l_tax_sources_tbl(k).line_intended_use             := l_taxsources_rec.line_intended_use;
12463           l_tax_sources_tbl(k).tax_classification_code       := l_taxsources_rec.tax_classification_code;
12464           l_tax_sources_tbl(k).inventory_item_id             := l_taxsources_rec.inventory_item_id;
12465           l_tax_sources_tbl(k).bill_to_cust_acct_id          := l_taxsources_rec.bill_to_cust_acct_id;
12466           l_tax_sources_tbl(k).org_id                        := l_taxsources_rec.org_id;
12467           l_tax_sources_tbl(k).legal_entity_id               := l_taxsources_rec.legal_entity_id;
12468           l_tax_sources_tbl(k).line_amt                      := -l_taxsources_rec.line_amt;
12469           l_tax_sources_tbl(k).assessable_value              := -l_taxsources_rec.assessable_value;
12470           l_tax_sources_tbl(k).total_tax                     := null; -- Populated after Reverse document ZX call
12471           l_tax_sources_tbl(k).product_type                  := l_taxsources_rec.product_type;
12472           l_tax_sources_tbl(k).product_fisc_classification   := l_taxsources_rec.product_fisc_classification;
12473           l_tax_sources_tbl(k).trx_date                      := l_trx_date;
12474           l_tax_sources_tbl(k).provnl_tax_determination_date := l_taxsources_rec.trx_date;
12475           l_tax_sources_tbl(k).try_id                        := l_spl_trx_type_id;
12476           l_tax_sources_tbl(k).ship_to_location_id           := l_taxsources_rec.ship_to_location_id;
12477           l_tax_sources_tbl(k).ship_to_party_site_id         := l_taxsources_rec.ship_to_party_site_id;
12478           l_tax_sources_tbl(k).ship_to_party_id              := l_taxsources_rec.ship_to_party_id;
12479           l_tax_sources_tbl(k).bill_to_party_site_id         := l_taxsources_rec.bill_to_party_site_id;
12480           l_tax_sources_tbl(k).bill_to_location_id           := l_taxsources_rec.bill_to_location_id;
12481           l_tax_sources_tbl(k).bill_to_party_id              := l_taxsources_rec.bill_to_party_id;
12482           l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id := l_taxsources_rec.ship_to_cust_acct_site_use_id;
12483           l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id := l_taxsources_rec.bill_to_cust_acct_site_use_id;
12484           l_tax_sources_tbl(k).trx_currency_code             := l_taxsources_rec.trx_currency_code;
12485           l_tax_sources_tbl(k).currency_conversion_type      := l_taxsources_rec.currency_conversion_type;
12486           l_tax_sources_tbl(k).currency_conversion_rate      := l_taxsources_rec.currency_conversion_rate;
12487           l_tax_sources_tbl(k).currency_conversion_date      := l_taxsources_rec.currency_conversion_date;
12488       l_tax_sources_tbl(k).alc_serialized_yn             := l_taxsources_rec.alc_serialized_yn;
12489 
12490       l_tax_sources_tbl(k).reported_yn                   := l_taxsources_rec.reported_yn;
12491           l_tax_sources_tbl(k).program_id                    := NULL;
12492           l_tax_sources_tbl(k).request_id                    := NULL;
12493           l_tax_sources_tbl(k).program_application_id        := NULL;
12494           l_tax_sources_tbl(k).program_update_date           := NULL;
12495           l_tax_sources_tbl(k).attribute_category            := NULL;
12496 
12497           l_tax_sources_tbl(k).attribute1                    := NULL;
12498           l_tax_sources_tbl(k).attribute2                    := NULL;
12499           l_tax_sources_tbl(k).attribute3                    := NULL;
12500           l_tax_sources_tbl(k).attribute4                    := NULL;
12501           l_tax_sources_tbl(k).attribute5                    := NULL;
12502           l_tax_sources_tbl(k).attribute6                    := NULL;
12503           l_tax_sources_tbl(k).attribute7                    := NULL;
12504           l_tax_sources_tbl(k).attribute8                    := NULL;
12505           l_tax_sources_tbl(k).attribute9                    := NULL;
12506           l_tax_sources_tbl(k).attribute10                   := NULL;
12507           l_tax_sources_tbl(k).attribute11                   := NULL;
12508           l_tax_sources_tbl(k).attribute12                   := NULL;
12509           l_tax_sources_tbl(k).attribute13                   := NULL;
12510           l_tax_sources_tbl(k).attribute14                   := NULL;
12511           l_tax_sources_tbl(k).attribute15                   := NULL;
12512           l_tax_sources_tbl(k).created_by                    := G_USER_ID;
12513           l_tax_sources_tbl(k).creation_date                 := SYSDATE;
12514           l_tax_sources_tbl(k).last_updated_by               := G_USER_ID;
12515           l_tax_sources_tbl(k).last_update_date              := SYSDATE;
12516           l_tax_sources_tbl(k).last_update_login             := G_LOGIN_ID;
12517           l_tax_sources_tbl(k).object_version_number         := NULL;
12518 
12519       l_tax_src_tbl(k)                                   := l_taxsources_rec.id;
12520 
12521       -- Populate the ZX reverse transaction lines table for tax call
12522       rev_trx_lines_tbl(k).internal_organization_id      := l_org_id;
12523       rev_trx_lines_tbl(k).reversing_appln_id            := G_OKL_APPLICATION_ID;
12524       rev_trx_lines_tbl(k).reversing_entity_code         := G_CONTRACTS_ENTITY_CODE;
12525       rev_trx_lines_tbl(k).reversing_evnt_cls_code       := G_REBOOK_EVENT_CLASS_CODE;
12526       rev_trx_lines_tbl(k).reversing_trx_id              := p_source_trx_id;
12527       rev_trx_lines_tbl(k).reversing_trx_level_type      := l_taxsources_rec.trx_level_type;
12528       rev_trx_lines_tbl(k).reversing_trx_line_id         := l_tax_sources_tbl(k).id;
12529 
12530       rev_trx_lines_tbl(k).reversed_appln_id             := G_OKL_APPLICATION_ID;
12531       rev_trx_lines_tbl(k).reversed_entity_code          := l_taxsources_rec.entity_code;
12532       rev_trx_lines_tbl(k).reversed_evnt_cls_code        := l_taxsources_rec.event_class_code;
12533       rev_trx_lines_tbl(k).reversed_trx_id               := l_taxsources_rec.trx_id;
12534       rev_trx_lines_tbl(k).reversed_trx_level_type       := l_taxsources_rec.trx_level_type;
12535       rev_trx_lines_tbl(k).reversed_trx_line_id          := l_taxsources_rec.trx_line_id;
12536 
12537       k := k + 1;
12538     END LOOP;
12539 
12540     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12541       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12542                   ' k = '||k);
12543     END IF;
12544 
12545     -- Inactivate the previous ACTIVE tax lines - begin
12546     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12547       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12548                   ' Inactivating the status of previous active upfront tax sources - Start ');
12549     END IF;
12550 
12551     IF l_tax_src_tbl.COUNT > 0 THEN
12552       BEGIN
12553         FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
12554           UPDATE okl_tax_sources SET tax_line_status_code = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
12555       EXCEPTION
12556         WHEN OTHERS THEN
12557           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
12558                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
12559                                                                 OKL_API.set_message(
12560                                                                      p_app_name      => 'OKL',
12561                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
12562                                      p_token1        => 'TABLE_NAME',
12563                                      p_token1_value  => 'OKL_TAX_SOURCES',
12564                                      p_token2        => 'ERROR_CODE',
12565                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
12566                                                                          p_token3        => 'ITERATION',
12567                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
12568                         END LOOP;
12569                         RAISE OKL_API.G_EXCEPTION_ERROR;
12570                   END IF;
12571       END;
12572     END IF;
12573 
12574     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12575                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12576                         'Inactivating the status of previous active upfront tax sources - End ' );
12577     END IF;
12578     -- Inactivate the previous ACTIVE tax lines - end
12579 
12580     -- bulk insert into okl_tax_sources -- start
12581     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12582       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12583                   ' Insert Adjusting tax sources  - Start');
12584     END IF;
12585 
12586     BEGIN
12587       IF l_tax_sources_tbl.COUNT > 0 THEN
12588         FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
12589           -- SAVE EXCEPTIONS
12590           INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
12591       END IF;
12592     EXCEPTION
12593       WHEN OTHERS THEN
12594         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
12595                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
12596                         OKL_API.set_message(p_app_name      => 'OKL',
12597                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
12598                                 p_token1        => 'TABLE_NAME',
12599                                 p_token1_value  => 'OKL_TAX_SOURCES',
12600                                 p_token2        => 'ERROR_CODE',
12601                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
12602                                                                 p_token3        => 'ITERATION',
12603                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
12604           END LOOP;
12605               RAISE OKL_API.G_EXCEPTION_ERROR;
12606                 END IF;
12607     END;
12608 
12609     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12610       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12611                   ' Insert Adjusting tax sources  - End');
12612     END IF;
12613     -- bulk insert into okl_tax_sources -- end
12614 
12615     -- Reverse document call
12616     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12617          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12618               'Calling OKL_TAX_INTERFACE_PVT.reverse_document');
12619     END IF;
12620 
12621     IF (l_reverse) THEN  -- Process Reversal only if the tax is created for the contract
12622 
12623       rev_trx_hdr_rec.internal_organization_id := l_org_id;
12624       rev_trx_hdr_rec.application_id           := G_OKL_APPLICATION_ID;
12625       rev_trx_hdr_rec.trx_id                   := p_source_trx_id;
12626       rev_trx_hdr_rec.legal_entity_id          := l_legal_entity_id;
12627       rev_trx_hdr_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
12628       rev_trx_hdr_rec.event_class_code         := G_REBOOK_EVENT_CLASS_CODE;
12629 
12630       OKL_TAX_INTERFACE_PVT.reverse_document (
12631                               p_api_version       => p_api_version,
12632                               p_init_msg_list     => p_init_msg_list,
12633                               x_return_status     => x_return_status,
12634                               x_msg_count         => x_msg_count,
12635                               x_msg_data          => x_msg_data,
12636                               p_rev_trx_hdr_rec   => rev_trx_hdr_rec,
12637                               p_rev_trx_lines_tbl => rev_trx_lines_tbl);
12638 
12639       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12640         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12641               'Return Status' || x_return_status);
12642       END IF;
12643 
12644       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12645         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12646       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12647         RAISE OKL_API.G_EXCEPTION_ERROR;
12648       END IF;
12649 
12650       -- Get the total tax amount corresponding to 'Reverse' transaction from
12651       -- zx_lines and update total_tax on okl_tax_sources
12652       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12653         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12654           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
12655       END IF;
12656 
12657       update_tax_sources_total(p_api_version     => p_api_version,
12658                                p_init_msg_list   => p_init_msg_list,
12659                                x_return_status   => x_return_status,
12660                                x_msg_count       => x_msg_count,
12661                                x_msg_data        => x_msg_data,
12662                                p_source_trx_id   => p_source_trx_id,
12663                                p_source_trx_name => p_source_trx_name);
12664 
12665       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12666         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12667           'Return Status' || x_return_status);
12668       END IF;
12669 
12670       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12671         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12672       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12673         RAISE OKL_API.G_EXCEPTION_ERROR;
12674       END IF;
12675 
12676     END IF;
12677 
12678     -- get the AR cust trx type ID
12679     OPEN  l_racusttrxtypes_csr;
12680     FETCH l_racusttrxtypes_csr INTO l_cust_trx_type_id;
12681     IF l_racusttrxtypes_csr%NOTFOUND THEN
12682        -- cust trx tyep id is required
12683        OKC_API.set_message( p_app_name      => 'OKC',
12684                             p_msg_name      => G_REQUIRED_VALUE,
12685                             p_token1        => G_COL_NAME_TOKEN,
12686                             p_token1_value  => 'CUST_TRX_TYPE_ID');
12687        RAISE OKL_API.G_EXCEPTION_ERROR;
12688     END IF;
12689     CLOSE l_racusttrxtypes_csr;
12690 
12691         OPEN  l_fndcurrency_csr(l_trx_currency_code);
12692     FETCH l_fndcurrency_csr INTO l_precision, l_minimum_accountable_unit;  -- l_minimum_accountable_unit is optional in fnd_currencies
12693                                                                                                                                            -- but mandatory for tax team
12694                                                                                                                                            -- check with Nilesh
12695     IF l_fndcurrency_csr%NOTFOUND THEN
12696       OKC_API.set_message( p_app_name      => 'OKC',
12697                            p_msg_name      => G_INVALID_VALUE,
12698                            p_token1        => G_COL_NAME_TOKEN,
12699                            p_token1_value  => 'CURRENCY_CODE');
12700       RAISE OKL_API.G_EXCEPTION_ERROR;
12701     END IF;
12702     CLOSE l_fndcurrency_csr;
12703 
12704     IF k > 1 THEN -- if there are any existing ACTIVE upfront tax lines
12705       old_tx_src_cnt := k - 1;  -- tax source trx count for the original asset
12706 
12707       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12708                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12709                   'old_tx_src_cnt '||old_tx_src_cnt );
12710       END IF;
12711 
12712       l_asset_ser_alc := is_serialized_and_alc(l_dnz_khr_id);
12713 
12714           -- create tax sources for assets after split
12715       l_new_tax_sources_tbl.DELETE;
12716       new_tax_count := 1;
12717       FOR l_txdassets_rec IN l_txdassets_csr(l_txl_id) LOOP  -- for each new asset
12718 
12719         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12720           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12721                   'asset after split '||l_txdassets_rec.asset_number );
12722           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12723                   'split_percent '||l_txdassets_rec.split_percent );
12724         END IF;
12725 
12726         IF l_txdassets_rec.split_percent IS NOT NULL THEN
12727           l_split_ratio := l_txdassets_rec.split_percent  / 100;
12728         ELSE
12729           l_split_ratio := l_txdassets_rec.quantity / l_current_units;
12730         END IF;
12731 
12732         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12733           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12734                   'l_split_ratio '||l_split_ratio );
12735         END IF;
12736 
12737         -- for each new asset, create as many tax source transactions as the original asset
12738         FOR k IN 1..old_tx_src_cnt LOOP
12739 
12740           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12741                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12742                        'Creating tax src for the new asset, k = '||k);
12743           END IF;
12744 
12745                   -- Create new tax sources for split transaction
12746               l_new_tax_sources_tbl(new_tax_count).id                           := get_seq_id;
12747           l_new_tax_sources_tbl(new_tax_count).khr_id                       := l_dnz_khr_id;
12748           l_new_tax_sources_tbl(new_tax_count).kle_id                       := l_txdassets_rec.target_kle_id;
12749           l_new_tax_sources_tbl(new_tax_count).asset_number                 := l_txdassets_rec.asset_number;
12750           l_new_tax_sources_tbl(new_tax_count).trx_id                       := p_source_trx_id; -- split asset trx id
12751           l_new_tax_sources_tbl(new_tax_count).trx_line_id                  := l_new_tax_sources_tbl(new_tax_count).id;
12752           l_new_tax_sources_tbl(new_tax_count).entity_code                  := G_CONTRACTS_ENTITY_CODE;
12753           l_new_tax_sources_tbl(new_tax_count).event_class_code             := G_BOOKING_EVENT_CLASS_CODE;
12754           l_new_tax_sources_tbl(new_tax_count).trx_level_type               := G_TRX_LEVEL_TYPE;
12755           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_entity_code     := NULL;
12756           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_event_class_code := NULL;
12757           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_trx_id           := NULL;
12758           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_trx_line_id      := NULL;
12759           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_trx_level_type   := NULL;
12760               l_new_tax_sources_tbl(new_tax_count).adjusted_doc_number           := NULL;
12761               l_new_tax_sources_tbl(new_tax_count).adjusted_doc_date             := NULL;
12762               l_new_tax_sources_tbl(new_tax_count).tax_call_type_code            := G_UPFRONT_TAX;
12763               l_new_tax_sources_tbl(new_tax_count).sty_id                        := l_tax_sources_tbl(k).sty_id;
12764               l_new_tax_sources_tbl(new_tax_count).trx_business_category         := l_tax_sources_tbl(k).trx_business_category;
12765               l_new_tax_sources_tbl(new_tax_count).tax_line_status_code          := G_ACTIVE_STATUS;
12766 
12767               l_new_tax_sources_tbl(new_tax_count).sel_id                        := l_tax_sources_tbl(k).sel_id;
12768               l_new_tax_sources_tbl(new_tax_count).line_name                     := l_txdassets_rec.asset_number;
12769               l_new_tax_sources_tbl(new_tax_count).application_id                := G_OKL_APPLICATION_ID;
12770               l_new_tax_sources_tbl(new_tax_count).tax_reporting_flag            := l_tax_sources_tbl(k).tax_reporting_flag;
12771               l_new_tax_sources_tbl(new_tax_count).default_taxation_country      := l_tax_sources_tbl(k).default_taxation_country;
12772               l_new_tax_sources_tbl(new_tax_count).product_category              := l_tax_sources_tbl(k).product_category;
12773               l_new_tax_sources_tbl(new_tax_count).user_defined_fisc_class       := l_tax_sources_tbl(k).user_defined_fisc_class;
12774               l_new_tax_sources_tbl(new_tax_count).line_intended_use             := l_tax_sources_tbl(k).line_intended_use;
12775               l_new_tax_sources_tbl(new_tax_count).tax_classification_code       := l_tax_sources_tbl(k).tax_classification_code;
12776               l_new_tax_sources_tbl(new_tax_count).inventory_item_id             := l_tax_sources_tbl(k).inventory_item_id;
12777               l_new_tax_sources_tbl(new_tax_count).bill_to_cust_acct_id          := l_tax_sources_tbl(k).bill_to_cust_acct_id;
12778               l_new_tax_sources_tbl(new_tax_count).org_id                        := l_tax_sources_tbl(k).org_id;
12779               l_new_tax_sources_tbl(new_tax_count).legal_entity_id               := l_tax_sources_tbl(k).legal_entity_id;
12780               l_new_tax_sources_tbl(new_tax_count).line_amt                      := -l_tax_sources_tbl(k).line_amt * l_split_ratio;
12781               l_new_tax_sources_tbl(new_tax_count).assessable_value              := -l_tax_sources_tbl(k).assessable_value * l_split_ratio;
12782               l_new_tax_sources_tbl(new_tax_count).total_tax                     := null; -- Populated after tax call
12783               l_new_tax_sources_tbl(new_tax_count).product_type                  := l_tax_sources_tbl(k).product_type;
12784               l_new_tax_sources_tbl(new_tax_count).product_fisc_classification   := l_tax_sources_tbl(k).product_fisc_classification;
12785               l_new_tax_sources_tbl(new_tax_count).trx_date                      := l_tax_sources_tbl(k).trx_date;
12786               l_new_tax_sources_tbl(new_tax_count).provnl_tax_determination_date := l_tax_sources_tbl(k).provnl_tax_determination_date;
12787               l_new_tax_sources_tbl(new_tax_count).try_id                        := l_spl_trx_type_id;
12788               l_new_tax_sources_tbl(new_tax_count).ship_to_location_id           := l_tax_sources_tbl(k).ship_to_location_id;
12789               l_new_tax_sources_tbl(new_tax_count).ship_to_party_site_id         := l_tax_sources_tbl(k).ship_to_party_site_id;
12790               l_new_tax_sources_tbl(new_tax_count).ship_to_party_id              := l_tax_sources_tbl(k).ship_to_party_id;
12791               l_new_tax_sources_tbl(new_tax_count).bill_to_party_site_id         := l_tax_sources_tbl(k).bill_to_party_site_id;
12792               l_new_tax_sources_tbl(new_tax_count).bill_to_location_id           := l_tax_sources_tbl(k).bill_to_location_id;
12793               l_new_tax_sources_tbl(new_tax_count).bill_to_party_id              := l_tax_sources_tbl(k).bill_to_party_id;
12794               l_new_tax_sources_tbl(new_tax_count).ship_to_cust_acct_site_use_id := l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id;
12795               l_new_tax_sources_tbl(new_tax_count).bill_to_cust_acct_site_use_id := l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id;
12796               l_new_tax_sources_tbl(new_tax_count).trx_currency_code             := l_tax_sources_tbl(k).trx_currency_code;
12797               l_new_tax_sources_tbl(new_tax_count).currency_conversion_type      := l_tax_sources_tbl(k).currency_conversion_type;
12798               l_new_tax_sources_tbl(new_tax_count).currency_conversion_rate      := l_tax_sources_tbl(k).currency_conversion_rate;
12799               l_new_tax_sources_tbl(new_tax_count).currency_conversion_date      := l_tax_sources_tbl(k).currency_conversion_date;
12800               l_new_tax_sources_tbl(new_tax_count).alc_serialized_yn             := l_tax_sources_tbl(k).alc_serialized_yn;
12801 
12802           l_new_tax_sources_tbl(new_tax_count).reported_yn                   := l_tax_sources_tbl(k).reported_yn;
12803               l_new_tax_sources_tbl(new_tax_count).program_id                    := NULL;
12804               l_new_tax_sources_tbl(new_tax_count).request_id                    := NULL;
12805               l_new_tax_sources_tbl(new_tax_count).program_application_id        := NULL;
12806               l_new_tax_sources_tbl(new_tax_count).program_update_date           := NULL;
12807               l_new_tax_sources_tbl(new_tax_count).attribute_category            := NULL;
12808 
12809               l_new_tax_sources_tbl(new_tax_count).attribute1                    := NULL;
12810               l_new_tax_sources_tbl(new_tax_count).attribute2                    := NULL;
12811               l_new_tax_sources_tbl(new_tax_count).attribute3                    := NULL;
12812               l_new_tax_sources_tbl(new_tax_count).attribute4                    := NULL;
12813               l_new_tax_sources_tbl(new_tax_count).attribute5                    := NULL;
12814               l_new_tax_sources_tbl(new_tax_count).attribute6                    := NULL;
12815               l_new_tax_sources_tbl(new_tax_count).attribute7                    := NULL;
12816               l_new_tax_sources_tbl(new_tax_count).attribute8                    := NULL;
12817               l_new_tax_sources_tbl(new_tax_count).attribute9                    := NULL;
12818               l_new_tax_sources_tbl(new_tax_count).attribute10                   := NULL;
12819               l_new_tax_sources_tbl(new_tax_count).attribute11                   := NULL;
12820               l_new_tax_sources_tbl(new_tax_count).attribute12                   := NULL;
12821               l_new_tax_sources_tbl(new_tax_count).attribute13                   := NULL;
12822               l_new_tax_sources_tbl(new_tax_count).attribute14                   := NULL;
12823               l_new_tax_sources_tbl(new_tax_count).attribute15                   := NULL;
12824               l_new_tax_sources_tbl(new_tax_count).created_by                    := G_USER_ID;
12825               l_new_tax_sources_tbl(new_tax_count).creation_date                 := SYSDATE;
12826               l_new_tax_sources_tbl(new_tax_count).last_updated_by               := G_USER_ID;
12827               l_new_tax_sources_tbl(new_tax_count).last_update_date              := SYSDATE;
12828               l_new_tax_sources_tbl(new_tax_count).last_update_login             := G_LOGIN_ID;
12829               l_new_tax_sources_tbl(new_tax_count).object_version_number         := NULL;
12830 
12831           -- Populate line params table for tax calculation
12832           l_line_params_tbl(new_tax_count).application_id                     := G_OKL_APPLICATION_ID;
12833           l_line_params_tbl(new_tax_count).trx_id                             := p_source_trx_id;
12834           l_line_params_tbl(new_tax_count).internal_organization_id           := l_tax_sources_tbl(k).org_id;
12835           l_line_params_tbl(new_tax_count).entity_code                        := G_CONTRACTS_ENTITY_CODE;
12836           l_line_params_tbl(new_tax_count).event_class_code                   := G_BOOKING_EVENT_CLASS_CODE;
12837           l_line_params_tbl(new_tax_count).event_type_code                    := G_BOOKING_CRE_EVT_TYPE_CODE;
12838           l_line_params_tbl(new_tax_count).trx_date                           := l_tax_sources_tbl(k).trx_date;
12839           l_line_params_tbl(new_tax_count).ledger_id                          := okl_accounting_util.get_set_of_books_id;
12840           l_line_params_tbl(new_tax_count).legal_entity_id                    := l_tax_sources_tbl(k).legal_entity_id;
12841           l_line_params_tbl(new_tax_count).trx_level_type                     := G_TRX_LEVEL_TYPE;
12842           l_line_params_tbl(new_tax_count).line_level_action                  := G_CREATE_LINE_LEVEL_ACTION;
12843           l_line_params_tbl(new_tax_count).trx_line_id                        := l_new_tax_sources_tbl(new_tax_count).id;
12844           l_line_params_tbl(new_tax_count).line_amt                           := -l_tax_sources_tbl(k).line_amt * l_split_ratio;
12845           l_line_params_tbl(new_tax_count).tax_reporting_flag                 := l_tax_sources_tbl(k).tax_reporting_flag;
12846           l_line_params_tbl(new_tax_count).default_taxation_country           := l_tax_sources_tbl(k).default_taxation_country;
12847           l_line_params_tbl(new_tax_count).product_type                       := l_tax_sources_tbl(k).product_type;
12848           l_line_params_tbl(new_tax_count).output_tax_classification_code     := l_tax_sources_tbl(k).tax_classification_code;
12849           l_line_params_tbl(new_tax_count).assessable_value                   := -l_tax_sources_tbl(k).assessable_value * l_split_ratio;
12850           l_line_params_tbl(new_tax_count).receivables_trx_type_id            := l_cust_trx_type_id;
12851           l_line_params_tbl(new_tax_count).product_id                         := l_tax_sources_tbl(k).inventory_item_id;
12852           l_line_params_tbl(new_tax_count).adjusted_doc_entity_code           := NULL;
12853           l_line_params_tbl(new_tax_count).adjusted_doc_event_class_code      := NULL;
12854           l_line_params_tbl(new_tax_count).adjusted_doc_trx_id                := NULL;
12855           l_line_params_tbl(new_tax_count).adjusted_doc_line_id               := NULL;
12856           l_line_params_tbl(new_tax_count).adjusted_doc_trx_level_type        := NULL;
12857           l_line_params_tbl(new_tax_count).adjusted_doc_number                := NULL;
12858           l_line_params_tbl(new_tax_count).adjusted_doc_date                  := NULL;
12859           l_line_params_tbl(new_tax_count).line_amt_includes_tax_flag         := 'N';
12860           l_line_params_tbl(new_tax_count).trx_business_category              := l_tax_sources_tbl(k).trx_business_category;
12861           l_line_params_tbl(new_tax_count).product_category                   := l_tax_sources_tbl(k).product_category;
12862           l_line_params_tbl(new_tax_count).user_defined_fisc_class            := l_tax_sources_tbl(k).user_defined_fisc_class;
12863           l_line_params_tbl(new_tax_count).line_intended_use                  := l_tax_sources_tbl(k).line_intended_use;
12864           l_line_params_tbl(new_tax_count).ship_to_cust_acct_site_use_id      := l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id;
12865           l_line_params_tbl(new_tax_count).bill_to_cust_acct_site_use_id      := l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id;
12866           l_line_params_tbl(new_tax_count).bill_to_party_site_id              := l_tax_sources_tbl(k).bill_to_party_site_id;
12867           l_line_params_tbl(new_tax_count).bill_to_location_id                := l_tax_sources_tbl(k).bill_to_location_id;
12868           l_line_params_tbl(new_tax_count).bill_to_party_id                   := l_tax_sources_tbl(k).bill_to_party_id;
12869           l_line_params_tbl(new_tax_count).ship_to_party_site_id              := l_tax_sources_tbl(k).ship_to_party_site_id;
12870           l_line_params_tbl(new_tax_count).ship_to_location_id                := l_tax_sources_tbl(k).ship_to_location_id;
12871           l_line_params_tbl(new_tax_count).ship_to_party_id                   := l_tax_sources_tbl(k).ship_to_party_id;
12872           l_line_params_tbl(new_tax_count).rounding_ship_to_party_id          := l_tax_sources_tbl(k).ship_to_party_id;
12873           l_line_params_tbl(new_tax_count).rounding_bill_to_party_id          := l_tax_sources_tbl(k).bill_to_party_id;
12874           l_line_params_tbl(new_tax_count).trx_currency_code                  := l_tax_sources_tbl(k).trx_currency_code;
12875           l_line_params_tbl(new_tax_count).precision                          := l_precision;
12876           l_line_params_tbl(new_tax_count).minimum_accountable_unit           := l_minimum_accountable_unit;
12877           l_line_params_tbl(new_tax_count).currency_conversion_date           := l_tax_sources_tbl(k).currency_conversion_date;
12878           l_line_params_tbl(new_tax_count).currency_conversion_rate           := l_tax_sources_tbl(k).currency_conversion_rate;
12879           l_line_params_tbl(new_tax_count).currency_conversion_type               := l_tax_sources_tbl(k).currency_conversion_type;
12880           l_line_params_tbl(new_tax_count).provnl_tax_determination_date      := l_tax_sources_tbl(k).provnl_tax_determination_date;
12881           l_line_params_tbl(new_tax_count).ctrl_total_hdr_tax_amt             := l_hdr_total_tax;
12882 
12883               new_tax_count := new_tax_count + 1;
12884 
12885             END LOOP;
12886 
12887       END LOOP;
12888 
12889       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12890         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12891                      'l_line_params_tbl.COUNT '||l_line_params_tbl.COUNT);
12892         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12893                      'l_new_tax_sources_tbl.COUNT '||l_new_tax_sources_tbl.COUNT);
12894       END IF;
12895 
12896       -- bulk insert into okl_tax_sources -- start
12897       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12898         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12899                   ' Insert Split asset tax sources  - Start');
12900       END IF;
12901 
12902       BEGIN
12903         IF l_new_tax_sources_tbl.COUNT > 0 THEN
12904           FORALL indx in l_new_tax_sources_tbl.FIRST..l_new_tax_sources_tbl.LAST
12905             -- SAVE EXCEPTIONS
12906             INSERT INTO okl_tax_sources VALUES l_new_tax_sources_tbl(indx);
12907         END IF;
12908       EXCEPTION
12909         WHEN OTHERS THEN
12910           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
12911                     FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
12912                           OKL_API.set_message(p_app_name      => 'OKL',
12913                                   p_msg_name      => 'OKL_TX_TRX_INS_ERR',
12914                                   p_token1        => 'TABLE_NAME',
12915                                   p_token1_value  => 'OKL_TAX_SOURCES',
12916                                   p_token2        => 'ERROR_CODE',
12917                                   p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
12918                                                                   p_token3        => 'ITERATION',
12919                                                                   p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
12920             END LOOP;
12921                         RAISE OKL_API.G_EXCEPTION_ERROR;
12922                   END IF;
12923       END;
12924 
12925       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12926         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12927                   ' Insert Split asset tax sources  - End');
12928       END IF;
12929       -- bulk insert into okl_tax_sources -- end
12930 
12931 
12932           IF l_line_params_tbl.COUNT > 0 THEN
12933             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12934                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12935                                'Before tax engine call '||x_return_status);
12936             END IF;
12937 
12938         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
12939         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
12940         lp_hdr_params_rec.internal_organization_id := l_org_id;
12941         lp_hdr_params_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
12942         lp_hdr_params_rec.event_class_code         := G_BOOKING_EVENT_CLASS_CODE;
12943         lp_hdr_params_rec.event_type_code          := G_BOOKING_CRE_EVT_TYPE_CODE;
12944         lp_hdr_params_rec.quote_flag               := 'N';
12945 
12946         OKL_TAX_INTERFACE_PVT.calculate_tax(
12947                                     p_api_version       =>  p_api_version,
12948                                     p_init_msg_list     =>  p_init_msg_list,
12949                                     x_return_status     =>  x_return_status,
12950                                     x_msg_count         =>  x_msg_count,
12951                                     x_msg_data          =>  x_msg_data,
12952                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
12953                                     p_line_params_tbl   =>  l_line_params_tbl);
12954 
12955                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12956                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12957                                    'After tax engine call '||x_return_status);
12958             END IF;
12959 
12960             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12961           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12962         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12963           RAISE OKL_API.G_EXCEPTION_ERROR;
12964         END IF;
12965       END IF;
12966 
12967       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12968         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12969              'Calling "update_tax_sources_total" .. ');
12970       END IF;
12971 
12972       update_tax_sources_total(p_api_version    => p_api_version,
12973                                p_init_msg_list  => p_init_msg_list,
12974                                x_return_status  => x_return_status,
12975                                x_msg_count      => x_msg_count,
12976                                x_msg_data       => x_msg_data,
12977                                p_source_trx_id  => p_source_trx_id);
12978 
12979       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12980         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12981              'Return Status' || x_return_status);
12982       END IF;
12983 
12984       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12985         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12986       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12987         RAISE OKL_API.G_EXCEPTION_ERROR;
12988       END IF;
12989 
12990       -- Populate Serialized Asset total tax, if the ALC happened on the asset
12991       -- before the Split process
12992       IF (l_asset_ser_alc = 'Y') THEN
12993         FOR l_txdassets_rec IN l_txdassets_csr(l_txl_id) LOOP
12994           populate_ser_split_total_tax(p_api_version      => p_api_version,
12995                                        p_init_msg_list    => p_init_msg_list,
12996                                        x_return_status    => x_return_status,
12997                                        x_msg_count        => x_msg_count,
12998                                        x_msg_data         => x_msg_data,
12999                                        p_asset_id         => l_txdassets_rec.target_kle_id,
13000                                        p_serialized_asset => l_asset_ser_alc);
13001 
13002           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13003             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13004           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13005             RAISE OKL_API.G_EXCEPTION_ERROR;
13006           END IF;
13007         END LOOP;
13008       END IF;
13009 
13010     END IF; -- if there are any existing ACTIVE upfront tax lines
13011 
13012     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13013        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ','End(-)');
13014     END IF;
13015 
13016   EXCEPTION
13017     WHEN OKL_API.G_EXCEPTION_ERROR THEN
13018       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13019         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ',
13020                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
13021       END IF;
13022 
13023       IF l_trxassets_csr%ISOPEN THEN
13024         CLOSE l_trxassets_csr;
13025       END IF;
13026 
13027       IF l_txlassets_csr%ISOPEN THEN
13028         CLOSE l_txlassets_csr;
13029       END IF;
13030 
13031       IF l_txdassets_csr%ISOPEN THEN
13032         CLOSE l_txdassets_csr;
13033       END IF;
13034 
13035       IF l_taxsources_csr%ISOPEN THEN
13036         CLOSE l_taxsources_csr;
13037       END IF;
13038 
13039       IF l_taxtrxdetails_csr%ISOPEN THEN
13040         CLOSE l_taxtrxdetails_csr;
13041       END IF;
13042 
13043       IF l_okcklines_csr%ISOPEN THEN
13044         CLOSE l_okcklines_csr;
13045       END IF;
13046 
13047       IF l_racusttrxtypes_csr%ISOPEN THEN
13048         CLOSE l_racusttrxtypes_csr;
13049       END IF;
13050 
13051       IF l_fndcurrency_csr%ISOPEN THEN
13052         CLOSE l_fndcurrency_csr;
13053       END IF;
13054 
13055     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13056       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13057         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ',
13058                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
13059       END IF;
13060 
13061       IF l_trxassets_csr%ISOPEN THEN
13062         CLOSE l_trxassets_csr;
13063       END IF;
13064 
13065       IF l_txlassets_csr%ISOPEN THEN
13066         CLOSE l_txlassets_csr;
13067       END IF;
13068 
13069       IF l_txdassets_csr%ISOPEN THEN
13070         CLOSE l_txdassets_csr;
13071       END IF;
13072 
13073       IF l_taxsources_csr%ISOPEN THEN
13074         CLOSE l_taxsources_csr;
13075       END IF;
13076 
13077       IF l_taxtrxdetails_csr%ISOPEN THEN
13078         CLOSE l_taxtrxdetails_csr;
13079       END IF;
13080 
13081       IF l_okcklines_csr%ISOPEN THEN
13082         CLOSE l_okcklines_csr;
13083       END IF;
13084 
13085       IF l_racusttrxtypes_csr%ISOPEN THEN
13086         CLOSE l_racusttrxtypes_csr;
13087       END IF;
13088 
13089       IF l_fndcurrency_csr%ISOPEN THEN
13090         CLOSE l_fndcurrency_csr;
13091       END IF;
13092 
13093       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13094 
13095     WHEN OTHERS THEN
13096       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13097         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ',
13098                   'EXCEPTION :'||sqlerrm);
13099       END IF;
13100 
13101       IF l_trxassets_csr%ISOPEN THEN
13102         CLOSE l_trxassets_csr;
13103       END IF;
13104 
13105       IF l_txlassets_csr%ISOPEN THEN
13106         CLOSE l_txlassets_csr;
13107       END IF;
13108 
13109       IF l_txdassets_csr%ISOPEN THEN
13110         CLOSE l_txdassets_csr;
13111       END IF;
13112 
13113       IF l_taxsources_csr%ISOPEN THEN
13114         CLOSE l_taxsources_csr;
13115       END IF;
13116 
13117       IF l_taxtrxdetails_csr%ISOPEN THEN
13118         CLOSE l_taxtrxdetails_csr;
13119       END IF;
13120 
13121       IF l_okcklines_csr%ISOPEN THEN
13122         CLOSE l_okcklines_csr;
13123       END IF;
13124 
13125       IF l_racusttrxtypes_csr%ISOPEN THEN
13126         CLOSE l_racusttrxtypes_csr;
13127       END IF;
13128 
13129       IF l_fndcurrency_csr%ISOPEN THEN
13130         CLOSE l_fndcurrency_csr;
13131       END IF;
13132 
13133       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13134       -- unexpected error
13135       OKL_API.set_message(p_app_name      => g_app_name,
13136                           p_msg_name      => g_unexpected_error,
13137                           p_token1        => g_sqlcode_token,
13138                           p_token1_value  => sqlcode,
13139                           p_token2        => g_sqlerrm_token,
13140                           p_token2_value  => sqlerrm);
13141 
13142   END process_split_asset_tax;
13143 
13144 /*========================================================================
13145  | PRIVATE PROCEDURE process_booking_upfront_tax
13146  |
13147  | DESCRIPTION
13148  |    This procedure is called from calculate_sales_tax procedure to calculate
13149  |    Upfront tax during Pre Booking and Booking
13150  |
13151  | CALLED FROM                                  calculate_sales_tax()
13152  |
13153  |
13154  | CALLS PROCEDURES/FUNCTIONS
13155  |     get_k_hdr_tax_params()
13156  |     get_asset_tax_params()
13157  |     get_location_party_ids()
13158  |     populate_tax_info()
13159  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
13160  |
13161  |
13162  | PARAMETERS
13163  |      p_source_trx_id                 -- Source transaction ID
13164  |      p_source_trx_name       -- Source transaction Name
13165  |      p_source_table          -- Source table
13166  |      p_tax_call_type         -- 'ESTIMATED'/'ACTUAL'
13167  |
13168  | KNOWN ISSUES
13169  |
13170  | NOTES
13171  |
13172  |
13173  | MODIFICATION HISTORY
13174  | Date          Author     Description of Changes
13175  | 08-APR-05    SECHAWLA      Created
13176  | 29-NOV-05    SECHAWLA      4772640 Modified to merge Pre-Booking and Booking
13177  |                            setups into 'Booking'
13178  |
13179  *=======================================================================*/
13180  PROCEDURE process_booking_upfront_tax(
13181         p_api_version                   IN  NUMBER,
13182     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
13183     x_return_status                     OUT NOCOPY VARCHAR2,
13184     x_msg_count                         OUT NOCOPY NUMBER,
13185     x_msg_data                          OUT NOCOPY VARCHAR2,
13186     p_source_trx_id                                     IN  NUMBER,
13187     p_source_trx_name               IN  VARCHAR2,
13188     p_source_table                  IN  VARCHAR2,
13189     p_tax_call_type                 IN  VARCHAR2) IS
13190 
13191      -------------Booking --------------
13192     --p_source_trx_id           ---> okl_trx_contracts.id
13193     --p_source_trx_name     ---> 'Booking'
13194     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
13195     --p_tax_call_type       ---> 'ESTIMATED'/'ACTUAL'
13196     --------------------------------------------------
13197         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
13198 
13199         -- validate source trx id (Booking)
13200         CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
13201         SELECT a.try_id, a.khr_id, a.legal_entity_id
13202         FROM   okl_trx_contracts a , okl_trx_types_tl b
13203         WHERE  a.id = cp_trx_id
13204         AND    a.try_id = b.id
13205         AND    b.name = cp_trx_type_name
13206     AND    language = 'US';
13207 
13208         -- validate source trx id (Rebook)
13209     -- okl_trx_contracts.khr_id has original contract id
13210     -- okl_trx_contracts.khr_id_new has rebook copy contract id
13211         CURSOR l_trxcontracts_rbk_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
13212         SELECT a.khr_id_new, a.legal_entity_id
13213         FROM   okl_trx_contracts a , okl_trx_types_tl b
13214         WHERE  a.id = cp_trx_id
13215         AND    a.try_id = b.id
13216         AND    b.name = cp_trx_type_name
13217     AND    language = 'US';
13218 
13219     CURSOR l_bookingtrxtypeid_csr IS
13220     SELECT id
13221         FROM   okl_trx_types_v
13222         WHERE  NAME = 'Booking';
13223 
13224     CURSOR l_tax_src_info_csr(cp_khr_id IN NUMBER, cp_trx_id IN NUMBER) IS
13225     SELECT org_id, application_id, entity_code, event_class_code
13226     FROM   okl_tax_sources
13227     WHERE  khr_id = cp_khr_id
13228     AND    tax_call_type_code = G_UPFRONT_TAX
13229     AND    tax_line_status_code = G_ACTIVE_STATUS
13230     AND    application_id = G_OKL_APPLICATION_ID
13231     AND    trx_id = cp_trx_id
13232     AND    trx_level_type = G_TRX_LEVEL_TYPE
13233     AND    ROWNUM = 1;
13234 
13235     CURSOR l_prev_taxsources_csr(cp_khr_id IN NUMBER, cp_trx_id IN NUMBER) IS
13236     SELECT id
13237     FROM   okl_tax_sources
13238     WHERE  khr_id = cp_khr_id
13239     AND    tax_call_type_code = G_UPFRONT_TAX
13240     AND    tax_line_status_code = G_ACTIVE_STATUS
13241     AND    application_id = G_OKL_APPLICATION_ID
13242     AND    trx_id = cp_trx_id
13243     AND    trx_level_type = G_TRX_LEVEL_TYPE;
13244 
13245     --delete the pre-booking tax source transaction and tax details
13246         -- This cursor is used during Booking. It will pick up the Pre-booking tax lines
13247         -- Pre-Booking tax lines will be the only ACTIVE set of tax lines at the time K is being Booked
13248     CURSOR l_prevtaxsourcesbk_csr(cp_khr_id IN NUMBER) IS
13249     SELECT id
13250     FROM   okl_tax_sources
13251     WHERE  khr_id = cp_khr_id
13252     AND    tax_call_type_code = G_UPFRONT_TAX
13253     AND    tax_line_status_code = G_ACTIVE_STATUS
13254     AND    application_id = G_OKL_APPLICATION_ID
13255     AND    trx_level_type = G_TRX_LEVEL_TYPE;
13256 
13257     -- Bug #15992711 :Start
13258     -- cursor will now fetch only those asset lines which are new
13259     -- so tax calculation will be fired only for these assets
13260         -- Get all the asset lines of the contract
13261     /*     CURSOR l_finassets_csr(cp_chr_id IN NUMBER) IS
13262      SELECT cle.id  fin_asset_id, cle.name asset_number
13263      FROM   okc_k_lines_v cle
13264      WHERE  cle.chr_id = cp_chr_id
13265      AND    cle.lse_id = 33
13266      AND    sts_code NOT IN ('ABANDONED', 'EXPIRED', 'REVERSED', 'TERMINATED');*/
13267 
13268 
13269     CURSOR l_finassets_csr(cp_chr_id IN NUMBER) IS
13270     SELECT cle.id  fin_asset_id, cle.name asset_number
13271     FROM   okc_k_lines_v cle
13272           ,okl_k_lines   kle
13273     WHERE  cle.chr_id = cp_chr_id
13274     AND    cle.lse_id = 33
13275     AND    kle.id = cle.id
13276     AND    NVL(kle.re_lease_yn,'N') = 'N'
13277     AND    sts_code NOT IN ('ABANDONED', 'EXPIRED', 'REVERSED', 'TERMINATED');
13278     -- Bug #15992711 :End
13279 
13280         -- get the current contract and asset line level payments
13281         CURSOR  l_k_asset_pymnts_csr(cp_chr_id IN NUMBER) IS
13282         SELECT  rgpb.cle_id  line_id,
13283                         styb.id  stream_type_id,
13284                         styb.CODE stream_type_code,
13285                         sum(nvl((rulb2.RULE_INFORMATION3 * rulb2.RULE_INFORMATION6),0) + nvl(rulb2.RULE_INFORMATION8,0)) line_amt
13286         FROM
13287                 okc_rule_groups_b rgpb,
13288                 okc_rules_b       rulb,
13289                 okc_rules_b       rulb2,
13290                 okl_strm_type_b   styb
13291     WHERE   rgpb.dnz_chr_id = cp_chr_id
13292         AND    rgpb.chr_id     = cp_chr_id
13293         AND    rgpb.cle_id IS NULL
13294         AND    rgpb.rgd_code   = 'LALEVL'
13295         AND    rulb.rgp_id     = rgpb.id
13296         AND    rulb.rule_information_category  = 'LASLH'
13297         AND    rulb.dnz_chr_id                 = cp_chr_id
13298         AND    styb.id                         = rulb.object1_id1
13299         AND    rulb2.object2_id1               = rulb.id
13300         AND    rulb2.rgp_id                    = rgpb.id
13301         AND    rulb2.rule_information_category = 'LASLL'
13302         -- Bug #15992711 : Start
13303         -- modification to look at re_lease_yn flag at line level
13304         AND    EXISTS ( SELECT '1'
13305                                   FROM   okl_k_lines kle
13306                                   WHERE  NVL(kle.re_lease_yn,'N') = 'N'
13307                                   AND    kle.id = rgpb.cle_id)
13308         -- Bug #15992711 : End
13309         GROUP BY rgpb.cle_id, styb.id, styb.CODE
13310         -- Bug 9682559
13311         -- , rulb2.RULE_INFORMATION6
13312         -- End Bug 9682559
13313     UNION
13314         SELECT  rgpb.cle_id  line_id,
13315                         styb.id                 stream_type_id,
13316                         styb.CODE               stream_type_code,
13317                     sum(nvl((rulb2.RULE_INFORMATION3 * rulb2.RULE_INFORMATION6),0) + nvl(rulb2.RULE_INFORMATION8,0)) line_amt
13318         FROM    okc_k_lines_b       cleb,
13319                 okc_rule_groups_b rgpb,
13320                 okc_rules_b       rulb,
13321             okc_rules_b       rulb2,
13322             okl_strm_type_b   styb
13323         WHERE   rgpb.dnz_chr_id = cp_chr_id
13324         AND     rgpb.chr_id    IS NULL
13325         AND     rgpb.cle_id  = cleb.id
13326         AND     cleb.dnz_chr_id = cp_chr_id
13327         AND     cleb.lse_id     = 33
13328     AND     cleb.sts_code NOT IN ('ABANDONED', 'EXPIRED', 'REVERSED', 'TERMINATED')
13329         AND     rgpb.rgd_code   = 'LALEVL'
13330         AND     rulb.rgp_id     = rgpb.id
13331         AND     rulb.rule_information_category  = 'LASLH'
13332         AND     rulb.dnz_chr_id                 = cp_chr_id
13333         AND     styb.id                         = rulb.object1_id1
13334         AND     rulb2.object2_id1               = rulb.id
13335         AND     rulb2.rgp_id                    = rgpb.id
13336         AND     rulb2.rule_information_category = 'LASLL'
13337         -- Bug #15992711 : Start
13338         -- modification to look at re_lease_yn flag at line level
13339         AND     EXISTS ( SELECT '1'
13340                                   FROM   okl_k_lines kle
13341                                   WHERE  NVL(kle.re_lease_yn,'N') = 'N'
13342                                   AND    kle.id = rgpb.cle_id)
13343         -- Bug #15992711 : End
13344     GROUP BY rgpb.cle_id, styb.id, styb.CODE;
13345     -- Bug 9682559
13346     -- , rulb2.RULE_INFORMATION6;
13347     -- End Bug 9682559
13348    -- get the inventory item id and inventory item org for a financial asset
13349     CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
13350         SELECT cim_model.object1_id1,
13351            cim_model.object1_id2
13352     FROM   okc_k_items cim_model,
13353            okc_k_lines_b cleb_model,
13354            okc_line_styles_b lseb_model
13355     WHERE  cim_model.cle_id    = cleb_model.id
13356     AND    cleb_model.cle_id   = cp_fin_asset_id
13357     AND    lseb_model.id       = cleb_model.lse_id
13358     AND    lseb_model.lty_code = 'ITEM';
13359 
13360         -- Check if tax basis override formula exists
13361         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
13362         SELECT fma_id
13363         FROM   okl_tax_basis_override
13364         WHERE  try_id = cp_try_id
13365         AND    org_id = MO_GLOBAL.get_current_org_id;
13366 
13367         -- GET FORMULA NAME
13368     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
13369     SELECT name
13370     FROM   Okl_formulae_b
13371     WHERE  id = cp_fma_id;
13372 
13373     l_fetch_size                    NUMBER := 10000;
13374     l_bk_trx_type_id_det                        NUMBER;
13375     l_khr_id                                            NUMBER;
13376     l_legal_entity_id               NUMBER;
13377     i                                                           NUMBER;
13378     l_fma_id                                            NUMBER;
13379     l_formula_name                                      VARCHAR2(150);
13380     l_ledger_id                     NUMBER;
13381 
13382     lx_cust_acct_id                                     NUMBER;
13383     lx_currency_code                                    VARCHAR2(15);
13384     lx_precision                        NUMBER;
13385     lx_minimum_accountable_unit         NUMBER;
13386     lx_cust_trx_type_id                         NUMBER;
13387 
13388     lx_pb_prch_opt_det                          VARCHAR2(450);
13389     lx_pb_fin_prod_id_det                       NUMBER;
13390     lx_pb_int_disclosed_det                     VARCHAR2(30);
13391     l_tax_call_type                             VARCHAR2(30);
13392 
13393     l_pb_transfer_of_title                      VARCHAR2(30);
13394     l_pb_sale_lease_back                        VARCHAR2(30);
13395     l_pb_purchase_of_lease                      VARCHAR2(30);
13396     l_pb_usage_of_equipment                     VARCHAR2(450);
13397     l_pb_age_of_equipment                       NUMBER;
13398     l_pb_vendor_site_id             NUMBER;
13399     l_inv_item_id                                       NUMBER;
13400         l_inv_item_org_id                               NUMBER;
13401 
13402     lx_bill_to_party_site_id        NUMBER;
13403     lx_bill_to_location_id          NUMBER;
13404     lx_bill_to_party_id             NUMBER;
13405     lx_bill_to_siteuseid            NUMBER;
13406     lx_ship_to_party_site_id        NUMBER;
13407     lx_ship_to_location_id          NUMBER;
13408     lx_ship_to_party_id             NUMBER;
13409     lx_ship_to_siteuseid                NUMBER;
13410 
13411     lx_org_id                       NUMBER;
13412     lx_book_class_code              VARCHAR2(30);
13413     lx_currency_conversion_type     VARCHAR2(30);
13414     lx_currency_conversion_rate     NUMBER;
13415     lx_currency_conversion_date     DATE;
13416     lx_contract_start_date          DATE;
13417 
13418     tax_call_cnt                                        NUMBER;
13419     k_pymnt_exist                                       VARCHAR2(1);
13420     l_reported_yn                                       VARCHAR2(1);
13421 
13422     l_internal_organization_id      NUMBER;
13423     l_application_id                NUMBER;
13424     l_entity_code                   VARCHAR2(30);
13425     l_event_class_code              VARCHAR2(30);
13426     k                               NUMBER;
13427     l_taxation_country              VARCHAR2(2);
13428     ind                                                         NUMBER;
13429     l_delete_data                   BOOLEAN := FALSE;
13430 
13431     l_event_type_code               VARCHAR2(30);
13432 
13433 
13434     TYPE  prev_tax_source_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13435     TYPE  prev_tx_trx_det_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13436     TYPE k_asset_pymnts_tbl_type  IS TABLE OF l_k_asset_pymnts_csr%ROWTYPE INDEX BY BINARY_INTEGER;
13437     TYPE finassets_tbl_type       IS TABLE OF l_finassets_csr%ROWTYPE INDEX BY BINARY_INTEGER;
13438 
13439     l_k_asset_pymnts_tbl                        k_asset_pymnts_tbl_type;
13440     l_prev_tax_source_tbl           prev_tax_source_tbl_type;
13441     lp_hdr_params_rec               hdr_params_rec_type;
13442     l_transaction_rec               transaction_rec_type;
13443     lp_tax_src_params_rec           tax_src_params_rec_type;
13444     lx_line_params_tbl              line_params_tbl_type;
13445         l_pb_asset_level_det_tbl            asset_level_det_tbl_type;
13446     lx_tax_sources_tbl                  tax_sources_tbl_type;
13447     l_finassets_tbl                             finassets_tbl_type;
13448 
13449   BEGIN
13450 
13451     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13452         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax','Begin(+)');
13453     END IF;
13454 
13455     --Print Input Variables
13456     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13457          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13458               'p_init_msg_list :'||p_init_msg_list);
13459          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13460               'p_source_trx_id :'||p_source_trx_id);
13461          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13462               'p_source_trx_name :'||p_source_trx_name);
13463          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13464               'p_source_table :'||p_source_table);
13465 
13466     END IF;
13467 
13468     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13469 
13470     IF (p_source_trx_name = 'Booking') THEN
13471       -- validate the source trx id
13472 
13473       OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
13474       FETCH l_trxcontracts_csr INTO l_bk_trx_type_id_det, l_khr_id, l_legal_entity_id;
13475       -- At this point, l_bk_trx_type_id_det will be the id of Booking trx type
13476       IF l_trxcontracts_csr%NOTFOUND THEN
13477         -- source trx id is invalid
13478         OKC_API.set_message( p_app_name      => 'OKC',
13479                              p_msg_name      => G_INVALID_VALUE,
13480                              p_token1        => G_COL_NAME_TOKEN,
13481                              p_token1_value  => 'SOURCE_TRX_ID');
13482         RAISE OKL_API.G_EXCEPTION_ERROR;
13483       END IF;
13484       CLOSE l_trxcontracts_csr;
13485 
13486     ELSIF (p_source_trx_name = 'Rebook') THEN
13487       -- validate the source trx id
13488       OPEN  l_trxcontracts_rbk_csr(p_source_trx_id, p_source_trx_name);
13489       FETCH l_trxcontracts_rbk_csr INTO l_khr_id, l_legal_entity_id;
13490       -- At this point, l_bk_trx_type_id_det will be the id of Booking trx type
13491       IF l_trxcontracts_rbk_csr%NOTFOUND THEN
13492         -- source trx id is invalid
13493         OKC_API.set_message( p_app_name      => 'OKC',
13494                              p_msg_name      => G_INVALID_VALUE,
13495                              p_token1        => G_COL_NAME_TOKEN,
13496                              p_token1_value  => 'SOURCE_TRX_ID');
13497         RAISE OKL_API.G_EXCEPTION_ERROR;
13498       END IF;
13499       CLOSE l_trxcontracts_rbk_csr;
13500 
13501       OPEN  l_bookingtrxtypeid_csr;
13502       FETCH l_bookingtrxtypeid_csr INTO l_bk_trx_type_id_det;
13503       CLOSE l_bookingtrxtypeid_csr;
13504 
13505     END IF;
13506 
13507     l_tax_call_type := upper(p_tax_call_type);
13508 
13509     IF (l_tax_call_type IS NOT NULL AND
13510         l_tax_call_type NOT IN (G_ESTIMATED_CALL_TYPE, G_ACTUAL_CALL_TYPE)) THEN
13511       OKC_API.set_message( p_app_name      => 'OKC',
13512                            p_msg_name      => G_INVALID_VALUE,
13513                            p_token1        => G_COL_NAME_TOKEN,
13514                            p_token1_value  => 'TAX_CALL_TYPE');
13515       RAISE OKL_API.G_EXCEPTION_ERROR;
13516     END IF;
13517 
13518     IF (l_tax_call_type = G_ESTIMATED_CALL_TYPE) THEN
13519 
13520       l_event_class_code        := G_BOOKING_EVENT_CLASS_CODE;
13521       l_event_type_code         := G_BOOKING_CRE_EVT_TYPE_CODE;
13522 
13523       -- Fetch info from tax sources
13524       OPEN  l_tax_src_info_csr(l_khr_id, p_source_trx_id);
13525       FETCH l_tax_src_info_csr INTO l_internal_organization_id, l_application_id,
13526                                     l_entity_code, l_event_class_code;
13527       CLOSE l_tax_src_info_csr;
13528 
13529       -- Check if estimated Booking tax lines already exist for p_source_trx_id
13530       -- This may happen if contract is validated multiple times prior to activation
13531       -- Bulk delete Previous Booking tax sources
13532       OPEN  l_prev_taxsources_csr(l_khr_id, p_source_trx_id);
13533       LOOP
13534         l_prev_tax_source_tbl.DELETE;
13535             FETCH l_prev_taxsources_csr BULK COLLECT INTO l_prev_tax_source_tbl LIMIT l_fetch_size;
13536         IF l_prev_tax_source_tbl.COUNT > 0 THEN
13537           l_delete_data := TRUE;
13538           BEGIN
13539             FORALL i IN l_prev_tax_source_tbl.FIRST..l_prev_tax_source_tbl.LAST
13540               DELETE FROM OKL_TAX_SOURCES WHERE id = l_prev_tax_source_tbl(i);
13541 
13542           EXCEPTION
13543                 WHEN OTHERS THEN
13544                   IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
13545                                 FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
13546                                     OKL_API.set_message(p_app_name      => 'OKL',
13547                                         p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
13548                                         p_token1        => 'TABLE_NAME',
13549                                         p_token1_value  => 'OKL_TAX_SOURCES',
13550                                         p_token2        => 'ERROR_CODE',
13551                                         p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
13552                                                                                 p_token3        => 'ITERATION',
13553                                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
13554                             END LOOP;
13555                                 RAISE OKL_API.G_EXCEPTION_ERROR;
13556                           END IF;
13557           END;
13558         END IF;
13559         EXIT WHEN l_prev_taxsources_csr%NOTFOUND;
13560       END LOOP;
13561       CLOSE l_prev_taxsources_csr;
13562       -- deletion from tax sources -- end
13563 
13564       -- delete booking tax lines from zx_lines -- start
13565       IF (l_delete_data) THEN
13566 
13567         l_transaction_rec.internal_organization_id := l_internal_organization_id;
13568         l_transaction_rec.application_id           := l_application_id;
13569         l_transaction_rec.entity_code              := l_entity_code;
13570         l_transaction_rec.event_class_code         := l_event_class_code;
13571         l_transaction_rec.event_type_code          := G_BOOK_DEL_EVENT_CODE;
13572 
13573         l_transaction_rec.trx_id                   :=  p_source_trx_id;
13574 
13575         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13576           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13577               'OKL_TAX_INTERFACE_PVT.update_document');
13578         END IF;
13579 
13580         OKL_TAX_INTERFACE_PVT.update_document(p_api_version     => p_api_version,
13581                                               p_init_msg_list   => p_init_msg_list,
13582                                               x_return_status   => x_return_status,
13583                                               x_msg_count       => x_msg_count,
13584                                               x_msg_data        => x_msg_data,
13585                                               p_transaction_rec => l_transaction_rec);
13586 
13587         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13588           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13589               'Return Status' || x_return_status);
13590         END IF;
13591 
13592             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13593           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13594         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13595           RAISE OKL_API.G_EXCEPTION_ERROR;
13596         END IF;
13597       END IF;
13598       -- delete booking tax lines from zx_lines -- end
13599 
13600       -- Fetch the Ledger info
13601       l_ledger_id := okl_accounting_util.get_set_of_books_id;
13602       l_reported_yn := 'N';
13603 
13604       -- Fetch the Tax country
13605       l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
13606                                                          x_msg_count         => x_msg_count,
13607                                                          x_msg_data          => x_msg_data,
13608                                                          p_legal_entity_id   => l_legal_entity_id);
13609           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13610         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13611       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13612         RAISE OKL_API.G_EXCEPTION_ERROR;
13613       END IF;
13614 
13615       -- Check if taxable basis override applies to Estimated Booking / Booking transaction
13616       OPEN  l_txbasisoverride_csr(l_bk_trx_type_id_det);
13617       FETCH l_txbasisoverride_csr INTO l_fma_id;
13618       CLOSE l_txbasisoverride_csr;
13619 
13620       IF l_fma_id IS NOT NULL THEN
13621         OPEN  l_formulae_csr(l_fma_id);
13622         FETCH l_formulae_csr INTO l_formula_name;
13623         IF l_formulae_csr%NOTFOUND THEN
13624           OKC_API.set_message( p_app_name      => 'OKC',
13625                                p_msg_name      => G_INVALID_VALUE,
13626                                p_token1        => G_COL_NAME_TOKEN,
13627                                p_token1_value  => 'FMA_ID');
13628           RAISE OKL_API.G_EXCEPTION_ERROR;
13629         END IF;
13630         CLOSE l_formulae_csr;
13631 
13632             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13633                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13634                         'l_formula_name '||l_formula_name );
13635         END IF;
13636           END IF;
13637 
13638       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13639                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13640                 'l_khr_id '||l_khr_id );
13641       END IF;
13642           -- Get contract header info
13643       get_k_hdr_tax_params(
13644         p_api_version                  => p_api_version,
13645         p_init_msg_list                => p_init_msg_list,
13646         x_return_status                => x_return_status,
13647         x_msg_count                    => x_msg_count,
13648         x_msg_data                     => x_msg_data,
13649         p_khr_id                       => l_khr_id,
13650         p_source_trx_name              => p_source_trx_name,
13651         p_source_table                             => p_source_table,
13652         x_cust_acct_id                             => lx_cust_acct_id,
13653                 x_bill_to_siteuseid            => lx_bill_to_siteuseid,
13654                 x_currency_code                            => lx_currency_code,
13655         x_cust_trx_type_id             => lx_cust_trx_type_id,
13656         x_precision                                        => lx_precision,
13657                 x_minimum_accountable_unit     => lx_minimum_accountable_unit,
13658                 x_prch_opt_det                             => lx_pb_prch_opt_det,
13659                 x_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
13660                 x_int_disclosed_det                        => lx_pb_int_disclosed_det,
13661         x_org_id                       => lx_org_id,
13662         x_book_class_code              => lx_book_class_code,
13663         x_bill_to_party_site_id        => lx_bill_to_party_site_id,
13664         x_bill_to_party_id             => lx_bill_to_party_id,
13665         x_bill_to_location_id          => lx_bill_to_location_id,
13666         x_currency_conversion_type     => lx_currency_conversion_type,
13667         x_currency_conversion_rate     => lx_currency_conversion_rate,
13668         x_currency_conversion_date     => lx_currency_conversion_date,
13669         x_contract_start_date          => lx_contract_start_date);
13670 
13671           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13672         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13673       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13674         RAISE OKL_API.G_EXCEPTION_ERROR;
13675       END IF;
13676 
13677       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13678         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13679                 'l_cust_acct_id '||lx_cust_acct_id );
13680         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13681                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
13682         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13683                 'lx_currency_code '||lx_currency_code );
13684         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13685                 'lx_cust_trx_type_id '||lx_cust_trx_type_id );
13686         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13687                 'lx_precision '||lx_precision );
13688         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13689                 'lx_minimum_accountable_unit '||lx_minimum_accountable_unit );
13690         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13691                 'lx_pb_prch_opt_det '||lx_pb_prch_opt_det );
13692         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13693                 'lx_pb_fin_prod_id_det '||lx_pb_fin_prod_id_det );
13694         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13695                 'lx_pb_int_disclosed_det '||lx_pb_int_disclosed_det );
13696         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13697                 'lx_org_id '||lx_org_id );
13698         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13699                 'lx_book_class_code '||lx_book_class_code );
13700         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13701                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
13702         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13703                 'lx_bill_to_party_id '||lx_bill_to_party_id );
13704         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13705                 'lx_bill_to_location_id '||lx_bill_to_location_id );
13706         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13707                 'lx_currency_conversion_type '||lx_currency_conversion_type );
13708         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13709                 'lx_currency_conversion_rate '||lx_currency_conversion_rate );
13710         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13711                 'lx_currency_conversion_date '||lx_currency_conversion_date );
13712         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13713                 'lx_contract_start_date '||lx_contract_start_date );
13714       END IF;
13715 
13716       -- Tax call will be made at the contract and asset line level, even if no payments exist at any of these levels
13717       i := 0;
13718 
13719       OPEN l_finassets_csr(l_khr_id);
13720       LOOP
13721         l_finassets_tbl.DELETE;
13722         FETCH l_finassets_csr BULK COLLECT INTO l_finassets_tbl LIMIT l_fetch_size;
13723 
13724         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13725                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13726                 'l_finassets_tbl.COUNT '||l_finassets_tbl.COUNT );
13727             END IF;
13728 
13729             IF l_finassets_tbl.COUNT > 0 THEN
13730 
13731           FOR K IN l_finassets_tbl.FIRST..l_finassets_tbl.LAST LOOP
13732 
13733             l_pb_transfer_of_title   := null;
13734                 l_pb_sale_lease_back     := null;
13735                 l_pb_purchase_of_lease   := null;
13736                 l_pb_usage_of_equipment  := null;
13737                         l_pb_age_of_equipment    := null;
13738                         l_pb_vendor_site_id      := null;
13739 
13740             lx_bill_to_party_site_id := null;
13741             lx_bill_to_location_id   := null;
13742             lx_bill_to_party_id      := null;
13743             lx_bill_to_siteuseid     := null;
13744             lx_ship_to_party_site_id := null;
13745             lx_ship_to_location_id   := null;
13746             lx_ship_to_party_id      := null;
13747             lx_ship_to_siteuseid     := null;
13748 
13749             -- Get financial asset line level tax determinants --
13750                 get_asset_tax_params(
13751                                                                 p_api_version                  => p_api_version,
13752                                                         p_init_msg_list                => OKC_API.G_FALSE,
13753                                                         x_return_status                => x_return_status,
13754                                                         x_msg_count                    => x_msg_count,
13755                                                         x_msg_data                     => x_msg_data,
13756                                                         p_khr_id                       => l_khr_id,
13757                                                         p_kle_id                       => l_finassets_tbl(k).fin_asset_id,
13758                                                         p_source_trx_name              => p_source_trx_name,
13759                                                     p_source_table                                 => p_source_table,
13760                                                         x_transfer_of_title                        => l_pb_transfer_of_title,
13761                                                         x_sale_lease_back                          => l_pb_sale_lease_back,
13762                                                         x_purchase_of_lease                        => l_pb_purchase_of_lease,
13763                                                         x_usage_of_equipment               => l_pb_usage_of_equipment,
13764                                                                 x_age_of_equipment                         => l_pb_age_of_equipment,
13765                                                                 x_vendor_site_id                       => l_pb_vendor_site_id);
13766 
13767                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13768                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13769                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13770                   RAISE OKL_API.G_EXCEPTION_ERROR;
13771                 END IF;
13772 
13773                 -- Equipment Type(inventory item id)
13774                         -- get the inventory item id
13775                         OPEN   l_invitem_csr(l_finassets_tbl(k).fin_asset_id);
13776                         FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
13777                         IF l_invitem_csr%NOTFOUND THEN
13778                           OKL_API.set_message(
13779                                                      p_app_name      => 'OKL',
13780                              p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
13781                                                  p_token1        => 'ASSET_NUMBER',
13782                                                          p_token1_value  => l_finassets_tbl(k).asset_number);
13783 
13784                           RAISE OKL_API.G_EXCEPTION_ERROR;
13785                         END IF;
13786                         CLOSE  l_invitem_csr;
13787 
13788                         -- get the Location Party ID's
13789                         get_location_party_ids(
13790                                                                         p_api_version                  => p_api_version,
13791                                                                 p_init_msg_list                => OKC_API.G_FALSE,
13792                                                                 x_return_status                => x_return_status,
13793                                                                 x_msg_count                    => x_msg_count,
13794                                                                 x_msg_data                     => x_msg_data,
13795                                                                 p_cust_acct_id                 => lx_cust_acct_id,
13796                                                                 p_fin_asset_id                 => l_finassets_tbl(k).fin_asset_id,
13797                                     p_khr_id                       => l_khr_id,
13798                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
13799                                     x_bill_to_location_id          => lx_bill_to_location_id,
13800                                     x_bill_to_party_id             => lx_bill_to_party_id,
13801                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
13802                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
13803                                     x_ship_to_location_id          => lx_ship_to_location_id,
13804                                     x_ship_to_party_id             => lx_ship_to_party_id,
13805                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
13806 
13807             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13808                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13809                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13810                           RAISE OKL_API.G_EXCEPTION_ERROR;
13811                         END IF;
13812 
13813                 l_pb_asset_level_det_tbl(i).fin_asset_id       := l_finassets_tbl(k).fin_asset_id;
13814                 l_pb_asset_level_det_tbl(i).asset_number       := l_finassets_tbl(k).asset_number;
13815                 l_pb_asset_level_det_tbl(i).transfer_of_title  := l_pb_transfer_of_title;
13816                 l_pb_asset_level_det_tbl(i).sale_lease_back    := l_pb_sale_lease_back;
13817                 l_pb_asset_level_det_tbl(i).purchase_of_lease  := l_pb_purchase_of_lease;
13818                 l_pb_asset_level_det_tbl(i).usage_of_equipment := l_pb_usage_of_equipment;
13819                 l_pb_asset_level_det_tbl(i).vendor_site_id         := l_pb_vendor_site_id;
13820                 l_pb_asset_level_det_tbl(i).age_of_equipment   := l_pb_age_of_equipment;
13821 
13822                         -- tax engine parameters
13823                         l_pb_asset_level_det_tbl(i).inv_item_id        := l_inv_item_id;
13824                         l_pb_asset_level_det_tbl(i).inv_org_id         := l_inv_item_org_id;
13825 
13826                         -- Party, location identifiers
13827             l_pb_asset_level_det_tbl(i).ship_to_site_use_id   := lx_ship_to_siteuseid;
13828             l_pb_asset_level_det_tbl(i).ship_to_party_site_id := lx_ship_to_party_site_id;
13829             l_pb_asset_level_det_tbl(i).ship_to_location_id   := lx_ship_to_location_id;
13830             l_pb_asset_level_det_tbl(i).ship_to_party_id      := lx_ship_to_party_id;
13831 
13832             l_pb_asset_level_det_tbl(i).bill_to_party_site_id := lx_bill_to_party_site_id;
13833             l_pb_asset_level_det_tbl(i).bill_to_location_id   := lx_bill_to_location_id;
13834             l_pb_asset_level_det_tbl(i).bill_to_party_id      := lx_bill_to_party_id;
13835             l_pb_asset_level_det_tbl(i).bill_to_site_use_id   := lx_bill_to_siteuseid;
13836 
13837                         l_pb_asset_level_det_tbl(i).asset_pymnt_exist     := 'N';
13838 
13839             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13840                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.', 'i '||i );
13841               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13842                                 'fin_asset_id '||l_finassets_tbl(k).fin_asset_id );
13843               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13844                                 'asset_number '||l_finassets_tbl(k).asset_number );
13845               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13846                                 'l_pb_transfer_of_title '||l_pb_transfer_of_title );
13847               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13848                                 'l_pb_sale_lease_back '||l_pb_sale_lease_back );
13849               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13850                                 'l_pb_purchase_of_lease '||l_pb_purchase_of_lease );
13851               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13852                                 'l_pb_usage_of_equipment '||l_pb_usage_of_equipment );
13853               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13854                                 'l_pb_vendor_site_id '||l_pb_vendor_site_id );
13855               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13856                                 'l_pb_age_of_equipment '||l_pb_age_of_equipment );
13857               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13858                                 'l_inv_item_id '||l_inv_item_id );
13859               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13860                                 'l_inv_item_org_id '||l_inv_item_org_id );
13861               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13862                                 'lx_ship_to_siteuseid '||lx_ship_to_siteuseid );
13863               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13864                                 'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
13865               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13866                                 'lx_ship_to_location_id '||lx_ship_to_location_id );
13867               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13868                                 'lx_ship_to_party_id '||lx_ship_to_party_id );
13869               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13870                                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
13871               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13872                                 'lx_bill_to_location_id '||lx_bill_to_location_id );
13873               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13874                                 'lx_bill_to_party_id '||lx_bill_to_party_id );
13875               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13876                                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
13877                     END IF;
13878 
13879                         i := i+1;
13880           END LOOP;
13881         END IF;
13882         EXIT WHEN l_finassets_csr%NOTFOUND;
13883       END LOOP;
13884       CLOSE l_finassets_csr;
13885 
13886       -- Get TBC at payment level (for each unique combination of K/Asset Line and payment) --
13887       k_pymnt_exist := 'N';
13888 
13889       i := 1;
13890       OPEN l_k_asset_pymnts_csr(l_khr_id);
13891       LOOP
13892         l_k_asset_pymnts_tbl.DELETE;
13893         FETCH l_k_asset_pymnts_csr BULK COLLECT INTO l_k_asset_pymnts_tbl LIMIT l_fetch_size;
13894 
13895         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13896                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13897                         'l_k_asset_pymnts_tbl.count '||l_k_asset_pymnts_tbl.count||' i = '||i );
13898         END IF;
13899 
13900         IF l_k_asset_pymnts_tbl.count = 0 AND i = 1 THEN
13901                   -- No payments exist
13902                   -- tax call will still be made at the K hdr and each fin asset line level
13903                   tax_call_cnt := 1;
13904 
13905                   -- contract level call begin
13906                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13907                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13908                         'No payments exist, tax_call_cnt = '||tax_call_cnt);
13909           END IF;
13910 
13911           -- Populate tax sources record -- start
13912           lp_tax_src_params_rec.kle_id       := null;
13913           lp_tax_src_params_rec.asset_number := null;
13914           lp_tax_src_params_rec.line_name    := null;
13915 
13916           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := null;
13917           lp_tax_src_params_rec.ship_to_party_site_id := null;
13918           lp_tax_src_params_rec.ship_to_party_id      := null;
13919           lp_tax_src_params_rec.ship_to_location_id   := null;
13920 
13921           lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
13922           lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
13923           lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
13924           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
13925 
13926           lp_tax_src_params_rec.inventory_item_id             := null;
13927           lp_tax_src_params_rec.sty_id                        := null;
13928           lp_tax_src_params_rec.khr_id                        := l_khr_id;
13929           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
13930           lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
13931           lp_tax_src_params_rec.event_class_code              := l_event_class_code;
13932           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
13933               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
13934           lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
13935           lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
13936           lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
13937           lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
13938           lp_tax_src_params_rec.line_intended_use             := null;
13939           lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
13940           lp_tax_src_params_rec.org_id                        := lx_org_id;
13941           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
13942           lp_tax_src_params_rec.line_amt                      := 0;
13943           lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
13944 
13945           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
13946           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
13947           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
13948               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
13949               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
13950               lp_tax_src_params_rec.adjusted_doc_number           := null;
13951               lp_tax_src_params_rec.adjusted_doc_date             := null;
13952           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
13953           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
13954 
13955           lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
13956           lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
13957           lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
13958           -- Populate tax sources record -- end
13959 
13960                   populate_tax_info(
13961                         p_api_version                  => p_api_version,
13962                         p_init_msg_list                => OKC_API.G_FALSE,
13963                         x_return_status                => x_return_status,
13964                         x_msg_count                    => x_msg_count,
13965                         x_msg_data                     => x_msg_data,
13966                         p_prch_opt_det                             => lx_pb_prch_opt_det,
13967                                 p_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
13968                                 p_int_disclosed_det                        => lx_pb_int_disclosed_det,
13969                         -- asset level begin
13970                         p_title_trnsfr_code                        => null,
13971                         p_sale_lease_back_code             => null,
13972                         p_lease_purchased_code             => null,
13973                         p_equip_usage_code                         => null,
13974                         p_vendor_site_id                           => null,
13975                         p_age_of_equip                             => null,
13976                 p_source_trx_name              => p_source_trx_name,
13977                 p_cust_trx_type_id             => lx_cust_trx_type_id,
13978                 p_book_class_code              => lx_book_class_code,
13979                         p_tax_call_cnt                             => tax_call_cnt,
13980                         p_fma_id                                           => l_fma_id,
13981                         p_formula_name                             => l_formula_name,
13982                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
13983                         p_precision                                        => lx_precision,
13984                         p_sales_quote_id                           => null,
13985                 p_event_type_code              => l_event_type_code,
13986                 p_ledger_id                    => l_ledger_id,
13987                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
13988                 p_tax_src_params_rec           => lp_tax_src_params_rec,
13989                 p_quote_flag                   => 'N',
13990                 p_rounding_ship_to_party_id    => null,
13991                 p_rounding_bill_to_party_id    => lx_bill_to_party_id,
13992                 p_line_amt_includes_tax_flag   => 'N',
13993                 p_term_quote_type_code         => null,
13994                 p_term_quote_reason_code       => null,
13995                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
13996                 px_line_params_tbl             => lx_line_params_tbl );
13997 
13998           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13999             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14000           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14001             RAISE OKL_API.G_EXCEPTION_ERROR;
14002           END IF;
14003 
14004                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14005                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14006                         'lx_tax_sources_tbl.count '|| lx_tax_sources_tbl.COUNT );
14007           END IF;
14008                   -- contract level call end
14009 
14010                   tax_call_cnt := tax_call_cnt + 1;
14011 
14012           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14013                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14014                         'tax_call_cnt '||tax_call_cnt);
14015           END IF;
14016 
14017                   -- Fin asset level call begin
14018                   IF l_pb_asset_level_det_tbl.COUNT > 0 THEN
14019                         FOR asset_cnt IN l_pb_asset_level_det_tbl.FIRST .. l_pb_asset_level_det_tbl.LAST LOOP
14020 
14021               -- Populate tax sources record -- start
14022               lp_tax_src_params_rec.kle_id       := l_pb_asset_level_det_tbl(asset_cnt).fin_asset_id;
14023               lp_tax_src_params_rec.asset_number := l_pb_asset_level_det_tbl(asset_cnt).asset_number;
14024               lp_tax_src_params_rec.line_name    := l_pb_asset_level_det_tbl(asset_cnt).asset_number;
14025 
14026               lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_pb_asset_level_det_tbl(asset_cnt).ship_to_site_use_id;
14027               lp_tax_src_params_rec.ship_to_party_site_id := l_pb_asset_level_det_tbl(asset_cnt).ship_to_party_site_id;
14028               lp_tax_src_params_rec.ship_to_party_id      := l_pb_asset_level_det_tbl(asset_cnt).ship_to_party_id;
14029               lp_tax_src_params_rec.ship_to_location_id   := l_pb_asset_level_det_tbl(asset_cnt).ship_to_location_id;
14030 
14031               lp_tax_src_params_rec.bill_to_party_site_id         := l_pb_asset_level_det_tbl(asset_cnt).bill_to_party_site_id;
14032               lp_tax_src_params_rec.bill_to_party_id              := l_pb_asset_level_det_tbl(asset_cnt).bill_to_party_id;
14033               lp_tax_src_params_rec.bill_to_location_id           := l_pb_asset_level_det_tbl(asset_cnt).bill_to_location_id;
14034               lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_pb_asset_level_det_tbl(asset_cnt).bill_to_site_use_id;
14035 
14036               lp_tax_src_params_rec.inventory_item_id             := l_pb_asset_level_det_tbl(asset_cnt).inv_item_id;
14037               lp_tax_src_params_rec.sty_id                        := null;
14038               lp_tax_src_params_rec.khr_id                        := l_khr_id;
14039               lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14040               lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14041               lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14042               lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14043               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14044               lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14045               lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14046               lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14047               lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14048               lp_tax_src_params_rec.line_intended_use             := l_pb_asset_level_det_tbl(asset_cnt).usage_of_equipment;
14049               lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14050               lp_tax_src_params_rec.org_id                        := lx_org_id;
14051               lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14052               lp_tax_src_params_rec.line_amt                      := 0;
14053               lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14054 
14055               lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14056               lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14057               lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14058                   lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14059                   lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14060                   lp_tax_src_params_rec.adjusted_doc_number           := null;
14061                   lp_tax_src_params_rec.adjusted_doc_date             := null;
14062               lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14063               lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14064 
14065               lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14066               lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14067               lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14068               -- Populate tax sources record -- end
14069 
14070                           -- asset level call begin
14071                           populate_tax_info(
14072                                         p_api_version                  => p_api_version,
14073                                         p_init_msg_list                => OKC_API.G_FALSE,
14074                                         x_return_status                => x_return_status,
14075                                         x_msg_count                    => x_msg_count,
14076                                         x_msg_data                     => x_msg_data,
14077                                         p_prch_opt_det                             => lx_pb_prch_opt_det,
14078                                         p_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
14079                                         p_int_disclosed_det                        => lx_pb_int_disclosed_det,
14080                                         -- asset level begin
14081                                         p_title_trnsfr_code                        => l_pb_asset_level_det_tbl(asset_cnt).transfer_of_title,
14082                                         p_sale_lease_back_code             => l_pb_asset_level_det_tbl(asset_cnt).sale_lease_back,
14083                                         p_lease_purchased_code             => l_pb_asset_level_det_tbl(asset_cnt).purchase_of_lease,
14084                                         p_equip_usage_code                         => l_pb_asset_level_det_tbl(asset_cnt).usage_of_equipment,
14085                                         p_vendor_site_id                           => l_pb_asset_level_det_tbl(asset_cnt).vendor_site_id,
14086                                         p_age_of_equip                             => l_pb_asset_level_det_tbl(asset_cnt).age_of_equipment,
14087                     p_source_trx_name              => p_source_trx_name,
14088                                     p_cust_trx_type_id             => lx_cust_trx_type_id,
14089                                     p_book_class_code              => lx_book_class_code,
14090                                         p_tax_call_cnt                             => tax_call_cnt,
14091                                         p_fma_id                                           => l_fma_id,
14092                                         p_formula_name                             => l_formula_name,
14093                                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
14094                                         p_precision                                        => lx_precision,
14095                                         p_sales_quote_id                           => null,
14096                                     p_event_type_code              => l_event_type_code,
14097                                     p_ledger_id                    => l_ledger_id,
14098                                     p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14099                                     p_tax_src_params_rec           => lp_tax_src_params_rec,
14100                                     p_quote_flag                   => 'N',
14101                                     p_rounding_ship_to_party_id    => l_pb_asset_level_det_tbl(asset_cnt).ship_to_party_id,
14102                                     p_rounding_bill_to_party_id    => l_pb_asset_level_det_tbl(asset_cnt).bill_to_party_id,
14103                                     p_line_amt_includes_tax_flag   => 'N',
14104                     p_term_quote_type_code         => null,
14105                     p_term_quote_reason_code       => null,
14106                                     px_tax_sources_tbl                     => lx_tax_sources_tbl,
14107                                     px_line_params_tbl             => lx_line_params_tbl );
14108 
14109               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14110                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14111                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14112                 RAISE OKL_API.G_EXCEPTION_ERROR;
14113                   END IF;
14114                           -- asset level call end
14115 
14116                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14117                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14118                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14119               END IF;
14120 
14121                           tax_call_cnt := tax_call_cnt + 1;
14122                         END LOOP;
14123                   END IF;
14124                   -- Fin asset level call end
14125                   -- No payments exist - end
14126         ELSIF l_k_asset_pymnts_tbl.COUNT > 0 THEN
14127                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14128                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14129                         'payments exist ');
14130           END IF;
14131 
14132           FOR K IN l_k_asset_pymnts_tbl.FIRST..l_k_asset_pymnts_tbl.LAST LOOP
14133                 tax_call_cnt := i;
14134 
14135                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14136                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14137                                 'tax_call_cnt '||tax_call_cnt);
14138             END IF;
14139 
14140                 IF l_k_asset_pymnts_tbl(k).line_id IS NULL THEN
14141               -- K level payment
14142                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14143                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14144                                 'K level payment ');
14145               END IF;
14146 
14147               -- Populate tax sources record -- start
14148               lp_tax_src_params_rec.kle_id       := null;
14149               lp_tax_src_params_rec.asset_number := null;
14150               lp_tax_src_params_rec.line_name    := null;
14151 
14152               lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := null;
14153               lp_tax_src_params_rec.ship_to_party_site_id := null;
14154               lp_tax_src_params_rec.ship_to_party_id      := null;
14155               lp_tax_src_params_rec.ship_to_location_id   := null;
14156 
14157               lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
14158               lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
14159               lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
14160               lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
14161 
14162               lp_tax_src_params_rec.inventory_item_id             := null;
14163               lp_tax_src_params_rec.sty_id                        := l_k_asset_pymnts_tbl(k).stream_type_id;
14164               lp_tax_src_params_rec.khr_id                        := l_khr_id;
14165               lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14166               lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14167               lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14168               lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14169               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14170               lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14171               lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14172               lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14173               lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14174               lp_tax_src_params_rec.line_intended_use             := null;
14175               lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14176               lp_tax_src_params_rec.org_id                        := lx_org_id;
14177               lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14178               lp_tax_src_params_rec.line_amt                      := l_k_asset_pymnts_tbl(k).line_amt;
14179               lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14180 
14181               lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14182               lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14183               lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14184                   lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14185                   lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14186                   lp_tax_src_params_rec.adjusted_doc_number           := null;
14187                   lp_tax_src_params_rec.adjusted_doc_date             := null;
14188               lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14189               lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14190 
14191               lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14192               lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14193               lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14194               -- Populate tax sources record -- end
14195 
14196                           populate_tax_info(
14197                                               p_api_version                  => p_api_version,
14198                                               p_init_msg_list                => OKC_API.G_FALSE,
14199                                               x_return_status                => x_return_status,
14200                                               x_msg_count                    => x_msg_count,
14201                                               x_msg_data                     => x_msg_data,
14202                                               p_prch_opt_det                             => lx_pb_prch_opt_det,
14203                                                       p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14204                                                       p_int_disclosed_det                        => lx_pb_int_disclosed_det,
14205                                               -- asset level begin
14206                                               p_title_trnsfr_code                        => null,
14207                                               p_sale_lease_back_code         => null,
14208                                               p_lease_purchased_code             => null,
14209                                               p_equip_usage_code                         => null,
14210                                               p_vendor_site_id                       => null,
14211                                               p_age_of_equip                             => null,
14212                                       p_source_trx_name              => p_source_trx_name,
14213                                       p_cust_trx_type_id             => lx_cust_trx_type_id,
14214                                       p_book_class_code              => lx_book_class_code,
14215                                               p_tax_call_cnt                             => tax_call_cnt,
14216                                               p_fma_id                                       => l_fma_id,
14217                                               p_formula_name                             => l_formula_name,
14218                                               p_minimum_accountable_unit         => lx_minimum_accountable_unit,
14219                                               p_precision                                        => lx_precision,
14220                                               p_sales_quote_id                       => null,
14221                                       p_event_type_code              => l_event_type_code,
14222                                       p_ledger_id                    => l_ledger_id,
14223                                       p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14224                                       p_tax_src_params_rec           => lp_tax_src_params_rec,
14225                                       p_quote_flag                   => 'N',
14226                                       p_rounding_ship_to_party_id    => null,
14227                                       p_rounding_bill_to_party_id    => lx_bill_to_party_id,
14228                                       p_line_amt_includes_tax_flag   => 'N',
14229                                       p_term_quote_type_code         => null,
14230                                       p_term_quote_reason_code       => null,
14231                                       px_tax_sources_tbl                         => lx_tax_sources_tbl,
14232                                       px_line_params_tbl             => lx_line_params_tbl );
14233 
14234               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14235                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14236                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14237                 RAISE OKL_API.G_EXCEPTION_ERROR;
14238                   END IF;
14239 
14240                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14241                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14242                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14243               END IF;
14244 
14245                   k_pymnt_exist := 'Y';
14246 
14247                 ELSE  -- asset line level payment
14248 
14249                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14250                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14251                                         'asset line level payment ');
14252               END IF;
14253 
14254                   IF l_pb_asset_level_det_tbl.count > 0 THEN
14255                         ind := l_pb_asset_level_det_tbl.FIRST;
14256                         LOOP
14257                           IF l_pb_asset_level_det_tbl(ind).fin_asset_id = l_k_asset_pymnts_tbl(k).line_id THEN
14258                             -- get the determinants and get TBC
14259                             l_pb_asset_level_det_tbl(ind).asset_pymnt_exist := 'Y';
14260 
14261                     -- Populate tax sources record -- start
14262                     lp_tax_src_params_rec.kle_id       := l_k_asset_pymnts_tbl(k).line_id;
14263                     lp_tax_src_params_rec.asset_number := l_pb_asset_level_det_tbl(ind).asset_number;
14264                     lp_tax_src_params_rec.line_name    := l_pb_asset_level_det_tbl(ind).asset_number;
14265 
14266                     lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_pb_asset_level_det_tbl(ind).ship_to_site_use_id;
14267                     lp_tax_src_params_rec.ship_to_party_site_id := l_pb_asset_level_det_tbl(ind).ship_to_party_site_id;
14268                     lp_tax_src_params_rec.ship_to_party_id      := l_pb_asset_level_det_tbl(ind).ship_to_party_id;
14269                     lp_tax_src_params_rec.ship_to_location_id   := l_pb_asset_level_det_tbl(ind).ship_to_location_id;
14270 
14271                     lp_tax_src_params_rec.bill_to_party_site_id         := l_pb_asset_level_det_tbl(ind).bill_to_party_site_id;
14272                     lp_tax_src_params_rec.bill_to_party_id              := l_pb_asset_level_det_tbl(ind).bill_to_party_id;
14273                     lp_tax_src_params_rec.bill_to_location_id           := l_pb_asset_level_det_tbl(ind).bill_to_location_id;
14274                     lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_pb_asset_level_det_tbl(ind).bill_to_site_use_id;
14275 
14276                     lp_tax_src_params_rec.inventory_item_id             := l_pb_asset_level_det_tbl(ind).inv_item_id;
14277                     lp_tax_src_params_rec.sty_id                        := l_k_asset_pymnts_tbl(k).stream_type_id;
14278                     lp_tax_src_params_rec.khr_id                        := l_khr_id;
14279                     lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14280                     lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14281                     lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14282                     lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14283                     lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14284                     lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14285                     lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14286                     lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14287                     lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14288                     lp_tax_src_params_rec.line_intended_use             := l_pb_asset_level_det_tbl(ind).usage_of_equipment;
14289                     lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14290                     lp_tax_src_params_rec.org_id                        := lx_org_id;
14291                     lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14292                     lp_tax_src_params_rec.line_amt                      := l_k_asset_pymnts_tbl(k).line_amt;
14293                     lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14294 
14295                     lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14296                     lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14297                     lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14298                         lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14299                         lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14300                         lp_tax_src_params_rec.adjusted_doc_number           := null;
14301                         lp_tax_src_params_rec.adjusted_doc_date             := null;
14302                     lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14303                     lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14304 
14305                     lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14306                     lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14307                     lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14308                     -- Populate tax sources record -- end
14309 
14310                                 -- asset level call begin
14311                                 populate_tax_info(
14312                                                 p_api_version                  => p_api_version,
14313                                                     p_init_msg_list                => OKC_API.G_FALSE,
14314                                                     x_return_status                => x_return_status,
14315                                                     x_msg_count                    => x_msg_count,
14316                                                     x_msg_data                     => x_msg_data,
14317                                                     p_prch_opt_det                                 => lx_pb_prch_opt_det,
14318                                                     p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14319                                                     p_int_disclosed_det                    => lx_pb_int_disclosed_det,
14320                                                     -- asset level begin
14321                                                     p_title_trnsfr_code                    => l_pb_asset_level_det_tbl(ind).transfer_of_title,
14322                                                     p_sale_lease_back_code                 => l_pb_asset_level_det_tbl(ind).sale_lease_back,
14323                                                     p_lease_purchased_code                 => l_pb_asset_level_det_tbl(ind).purchase_of_lease,
14324                                                     p_equip_usage_code                     => l_pb_asset_level_det_tbl(ind).usage_of_equipment,
14325                                                     p_vendor_site_id                       => l_pb_asset_level_det_tbl(ind).vendor_site_id,
14326                                                     p_age_of_equip                                 => l_pb_asset_level_det_tbl(ind).age_of_equipment,
14327                                 p_source_trx_name              => p_source_trx_name,
14328                                                 p_cust_trx_type_id             => lx_cust_trx_type_id,
14329                                                 p_book_class_code              => lx_book_class_code,
14330                                                     p_tax_call_cnt                                 => tax_call_cnt,
14331                                                     p_fma_id                                       => l_fma_id,
14332                                                     p_formula_name                                 => l_formula_name,
14333                                                     p_minimum_accountable_unit     => lx_minimum_accountable_unit,
14334                                                     p_precision                                    => lx_precision,
14335                                                     p_sales_quote_id                       => null,
14336                                                 p_event_type_code              => l_event_type_code,
14337                                                 p_ledger_id                    => l_ledger_id,
14338                                                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14339                                                 p_tax_src_params_rec           => lp_tax_src_params_rec,
14340                                                 p_quote_flag                   => 'N',
14341                                                 p_rounding_ship_to_party_id    => l_pb_asset_level_det_tbl(ind).ship_to_party_id,
14342                                                 p_rounding_bill_to_party_id    => l_pb_asset_level_det_tbl(ind).bill_to_party_id,
14343                                                 p_line_amt_includes_tax_flag   => 'N',
14344                                 p_term_quote_type_code         => null,
14345                                 p_term_quote_reason_code       => null,
14346                                                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
14347                                                 px_line_params_tbl             => lx_line_params_tbl );
14348 
14349                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14350                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14351                                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14352                           RAISE OKL_API.G_EXCEPTION_ERROR;
14353                                 END IF;
14354 
14355                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14356                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14357                                                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14358                                 END IF;
14359                                     -- asset level call end
14360                             EXIT;
14361                       END IF;
14362                       EXIT WHEN (ind = l_pb_asset_level_det_tbl.LAST);
14363                   ind := l_pb_asset_level_det_tbl.NEXT(ind);
14364                         END LOOP;
14365                   END IF;
14366                 END IF;
14367                 i := i + 1;
14368           END LOOP;
14369         END IF;
14370         EXIT WHEN l_k_asset_pymnts_csr%NOTFOUND;
14371       END LOOP;
14372       CLOSE l_k_asset_pymnts_csr;
14373 
14374       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14375                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.', 'i '||i);
14376       END IF;
14377 
14378       IF i > 1 THEN -- some payments exist
14379         tax_call_cnt := i; -- pick the last index
14380 
14381         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14382               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14383                      'some payments exist, tax_call_cnt= '||tax_call_cnt);
14384         END IF;
14385 
14386             IF k_pymnt_exist = 'N' THEN -- K level payment does not exist
14387 
14388               -- contract level call begin
14389                   --tax_call_cnt := i; -- pick the last index
14390                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14391                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14392                 'K level payment does not exist ');
14393           END IF;
14394 
14395           -- Populate tax sources record -- start
14396           lp_tax_src_params_rec.kle_id       := null;
14397           lp_tax_src_params_rec.asset_number := null;
14398           lp_tax_src_params_rec.line_name    := null;
14399 
14400           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := null;
14401           lp_tax_src_params_rec.ship_to_party_site_id := null;
14402           lp_tax_src_params_rec.ship_to_party_id      := null;
14403           lp_tax_src_params_rec.ship_to_location_id   := null;
14404 
14405           lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
14406           lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
14407           lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
14408           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
14409 
14410           lp_tax_src_params_rec.inventory_item_id             := null;
14411           lp_tax_src_params_rec.sty_id                        := null;
14412           lp_tax_src_params_rec.khr_id                        := l_khr_id;
14413           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14414           lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14415           lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14416           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14417           lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14418           lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14419           lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14420           lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14421           lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14422           lp_tax_src_params_rec.line_intended_use             := null;
14423           lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14424           lp_tax_src_params_rec.org_id                        := lx_org_id;
14425           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14426           lp_tax_src_params_rec.line_amt                      := 0;
14427           lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14428 
14429           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14430           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14431           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14432               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14433               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14434               lp_tax_src_params_rec.adjusted_doc_number           := null;
14435               lp_tax_src_params_rec.adjusted_doc_date             := null;
14436           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14437           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14438 
14439           lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14440           lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14441           lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14442           -- Populate tax sources record -- end
14443 
14444                   populate_tax_info(
14445                                               p_api_version                  => p_api_version,
14446                                               p_init_msg_list                => OKC_API.G_FALSE,
14447                                               x_return_status                => x_return_status,
14448                                               x_msg_count                    => x_msg_count,
14449                                               x_msg_data                     => x_msg_data,
14450                                               p_prch_opt_det                             => lx_pb_prch_opt_det,
14451                                                       p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14452                                                       p_int_disclosed_det                        => lx_pb_int_disclosed_det,
14453                                               -- asset level begin
14454                                               p_title_trnsfr_code                        => null,
14455                                               p_sale_lease_back_code         => null,
14456                                               p_lease_purchased_code             => null,
14457                                               p_equip_usage_code                         => null,
14458                                               p_vendor_site_id                       => null,
14459                                               p_age_of_equip                             => null,
14460                                       p_source_trx_name              => p_source_trx_name,
14461                                       p_cust_trx_type_id             => lx_cust_trx_type_id,
14462                                       p_book_class_code              => lx_book_class_code,
14463                                               p_tax_call_cnt                             => tax_call_cnt,
14464                                               p_fma_id                                       => l_fma_id,
14465                                               p_formula_name                             => l_formula_name,
14466                                               p_minimum_accountable_unit         => lx_minimum_accountable_unit,
14467                                               p_precision                                        => lx_precision,
14468                                               p_sales_quote_id                       => null,
14469                                       p_event_type_code              => l_event_type_code,
14470                                       p_ledger_id                    => l_ledger_id,
14471                                       p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14472                                       p_tax_src_params_rec           => lp_tax_src_params_rec,
14473                                       p_quote_flag                   => 'N',
14474                                       p_rounding_ship_to_party_id    => null,
14475                                       p_rounding_bill_to_party_id    => lx_bill_to_party_id,
14476                                       p_line_amt_includes_tax_flag   => 'N',
14477                                       p_term_quote_type_code         => null,
14478                                       p_term_quote_reason_code       => null,
14479                                       px_tax_sources_tbl                         => lx_tax_sources_tbl,
14480                                       px_line_params_tbl             => lx_line_params_tbl );
14481 
14482           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14483             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14484           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14485             RAISE OKL_API.G_EXCEPTION_ERROR;
14486           END IF;
14487 
14488                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14489                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14490                              'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14491                   END IF;
14492                   -- contract level call end
14493                   tax_call_cnt := tax_call_cnt + 1;
14494             END IF;
14495 
14496             -- this table will have one record for each asset
14497             -- check if payment does not exist for any of the assets
14498             FOR k IN l_pb_asset_level_det_tbl.FIRST .. l_pb_asset_level_det_tbl.LAST LOOP
14499               IF l_pb_asset_level_det_tbl(k).asset_pymnt_exist = 'N' THEN -- asset level payment does not exist
14500                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14501                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14502                           'tax_call_cnt '||tax_call_cnt||'asset_pymnt_exist = N ' );
14503                         END IF;
14504 
14505             -- asset level call begin
14506             -- Populate tax sources record -- start
14507             lp_tax_src_params_rec.kle_id       := l_pb_asset_level_det_tbl(k).fin_asset_id;
14508             lp_tax_src_params_rec.asset_number := l_pb_asset_level_det_tbl(k).asset_number;
14509             lp_tax_src_params_rec.line_name    := l_pb_asset_level_det_tbl(k).asset_number;
14510 
14511             lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_pb_asset_level_det_tbl(k).ship_to_site_use_id;
14512             lp_tax_src_params_rec.ship_to_party_site_id := l_pb_asset_level_det_tbl(k).ship_to_party_site_id;
14513             lp_tax_src_params_rec.ship_to_party_id      := l_pb_asset_level_det_tbl(k).ship_to_party_id;
14514             lp_tax_src_params_rec.ship_to_location_id   := l_pb_asset_level_det_tbl(k).ship_to_location_id;
14515             lp_tax_src_params_rec.bill_to_party_site_id         := l_pb_asset_level_det_tbl(k).bill_to_party_site_id;
14516             lp_tax_src_params_rec.bill_to_party_id              := l_pb_asset_level_det_tbl(k).bill_to_party_id;
14517             lp_tax_src_params_rec.bill_to_location_id           := l_pb_asset_level_det_tbl(k).bill_to_location_id;
14518             lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_pb_asset_level_det_tbl(k).bill_to_site_use_id;
14519             lp_tax_src_params_rec.inventory_item_id             := l_pb_asset_level_det_tbl(ind).inv_item_id;
14520             lp_tax_src_params_rec.sty_id                        := null;
14521             lp_tax_src_params_rec.khr_id                        := l_khr_id;
14522             lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14523             lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14524             lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14525             lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14526             lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14527             lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14528             lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14529             lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14530             lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14531             lp_tax_src_params_rec.line_intended_use             := l_pb_asset_level_det_tbl(k).usage_of_equipment;
14532             lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14533             lp_tax_src_params_rec.org_id                        := lx_org_id;
14534             lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14535             lp_tax_src_params_rec.line_amt                      := 0;
14536             lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14537 
14538             lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14539             lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14540             lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14541                 lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14542                 lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14543                 lp_tax_src_params_rec.adjusted_doc_number           := null;
14544                 lp_tax_src_params_rec.adjusted_doc_date             := null;
14545             lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14546             lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14547             lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14548             lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14549             lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14550             -- Populate tax sources record -- end
14551 
14552                 -- asset level call begin
14553                         populate_tax_info(
14554                                                 p_api_version                  => p_api_version,
14555                                                     p_init_msg_list                => OKC_API.G_FALSE,
14556                                                     x_return_status                => x_return_status,
14557                                                     x_msg_count                    => x_msg_count,
14558                                                     x_msg_data                     => x_msg_data,
14559                                                     p_prch_opt_det                                 => lx_pb_prch_opt_det,
14560                                                     p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14561                                                     p_int_disclosed_det                    => lx_pb_int_disclosed_det,
14562                                                     -- asset level begin
14563                                                     p_title_trnsfr_code                    => l_pb_asset_level_det_tbl(k).transfer_of_title,
14564                                                     p_sale_lease_back_code                 => l_pb_asset_level_det_tbl(k).sale_lease_back,
14565                                                     p_lease_purchased_code                 => l_pb_asset_level_det_tbl(k).purchase_of_lease,
14566                                                     p_equip_usage_code                     => l_pb_asset_level_det_tbl(k).usage_of_equipment,
14567                                                     p_vendor_site_id                       => l_pb_asset_level_det_tbl(k).vendor_site_id,
14568                                                     p_age_of_equip                                 => l_pb_asset_level_det_tbl(k).age_of_equipment,
14569                                 p_source_trx_name              => p_source_trx_name,
14570                                                 p_cust_trx_type_id             => lx_cust_trx_type_id,
14571                                                 p_book_class_code              => lx_book_class_code,
14572                                                     p_tax_call_cnt                                 => tax_call_cnt,
14573                                                     p_fma_id                                       => l_fma_id,
14574                                                     p_formula_name                                 => l_formula_name,
14575                                                     p_minimum_accountable_unit     => lx_minimum_accountable_unit,
14576                                                     p_precision                                    => lx_precision,
14577                                                     p_sales_quote_id                       => null,
14578                                                 p_event_type_code              => l_event_type_code,
14579                                                 p_ledger_id                    => l_ledger_id,
14580                                                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14581                                                 p_tax_src_params_rec           => lp_tax_src_params_rec,
14582                                                 p_quote_flag                   => 'N',
14583                                                 p_rounding_ship_to_party_id    => l_pb_asset_level_det_tbl(k).ship_to_party_id,
14584                                                 p_rounding_bill_to_party_id    => l_pb_asset_level_det_tbl(k).bill_to_party_id,
14585                                                 p_line_amt_includes_tax_flag   => 'N',
14586                                 p_term_quote_type_code         => null,
14587                                 p_term_quote_reason_code       => null,
14588                                                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
14589                                                 px_line_params_tbl             => lx_line_params_tbl );
14590 
14591             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14592               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14593                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14594               RAISE OKL_API.G_EXCEPTION_ERROR;
14595                 END IF;
14596                         -- asset level call end
14597                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14598                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14599                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14600                         END IF;
14601 
14602                     tax_call_cnt := tax_call_cnt + 1;
14603               END IF;
14604             END LOOP;
14605       END IF;
14606 
14607       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14608         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14609                         'lx_tax_sources_tbl.COUNT '||lx_tax_sources_tbl.COUNT);
14610           END IF;
14611 
14612       -- insert into okl_tax_sources
14613           BEGIN
14614         IF lx_tax_sources_tbl.COUNT > 0 THEN
14615           FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
14616             -- SAVE EXCEPTIONS
14617             INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
14618         END IF;
14619       EXCEPTION
14620         WHEN OTHERS THEN
14621           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
14622                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
14623                           OKL_API.set_message(
14624                                                                      p_app_name      => 'OKL',
14625                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
14626                                      p_token1        => 'TABLE_NAME',
14627                                      p_token1_value  => 'OKL_TAX_SOURCES',
14628                                      p_token2        => 'ERROR_CODE',
14629                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
14630                                                                          p_token3        => 'ITERATION',
14631                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
14632                         END LOOP;
14633                         RAISE OKL_API.G_EXCEPTION_ERROR;
14634                   END IF;
14635       END;
14636       -- Insert into okl_tax_sources end --
14637 
14638       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14639                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14640                                        'Insert into okl_tax_sources ');
14641           END IF;
14642 
14643           IF lx_line_params_tbl.COUNT > 0 THEN
14644             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14645                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14646                                'Before tax engine call '||x_return_status);
14647             END IF;
14648 
14649         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
14650         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
14651         lp_hdr_params_rec.internal_organization_id := lx_org_id;
14652         lp_hdr_params_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
14653         lp_hdr_params_rec.event_class_code         := l_event_class_code;
14654         lp_hdr_params_rec.event_type_code          := l_event_type_code;
14655         lp_hdr_params_rec.quote_flag               := 'N';
14656 
14657         OKL_TAX_INTERFACE_PVT.calculate_tax(
14658                                     p_api_version       =>  p_api_version,
14659                                     p_init_msg_list     =>  p_init_msg_list,
14660                                     x_return_status     =>  x_return_status,
14661                                     x_msg_count         =>  x_msg_count,
14662                                     x_msg_data          =>  x_msg_data,
14663                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
14664                                     p_line_params_tbl   =>  lx_line_params_tbl);
14665 
14666                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14667                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14668                                    'After tax engine call '||x_return_status);
14669             END IF;
14670 
14671             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14672           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14673         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14674           RAISE OKL_API.G_EXCEPTION_ERROR;
14675         END IF;
14676       END IF;
14677 
14678       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14679         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14680              'Calling "update_tax_sources_total" .. ');
14681       END IF;
14682 
14683       update_tax_sources_total(p_api_version    => p_api_version,
14684                                p_init_msg_list  => p_init_msg_list,
14685                                x_return_status  => x_return_status,
14686                                x_msg_count      => x_msg_count,
14687                                x_msg_data       => x_msg_data,
14688                                p_source_trx_id  => p_source_trx_id);
14689 
14690       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14691         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14692              'Return Status' || x_return_status);
14693       END IF;
14694 
14695       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14696         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14697       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14698         RAISE OKL_API.G_EXCEPTION_ERROR;
14699       END IF;
14700 
14701     ELSIF (l_tax_call_type = G_ACTUAL_CALL_TYPE) THEN
14702 
14703       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14704          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14705               'process_final_upfront_tax');
14706       END IF;
14707 
14708       -- Call ebtax procedure to flip the reportable flag from N to Y
14709       process_final_upfront_tax( p_api_version       => p_api_version,
14710                                          p_init_msg_list     => p_init_msg_list,
14711                                      x_return_status     => x_return_status,
14712                                      x_msg_count         => x_msg_count,
14713                                          x_msg_data          => x_msg_data,
14714                                          p_trx_id                        => p_source_trx_id,
14715                                      p_application_id    => G_OKL_APPLICATION_ID,
14716                                  p_entity_code       => G_CONTRACTS_ENTITY_CODE,
14717                                  p_event_class_code  => G_BOOKING_EVENT_CLASS_CODE);
14718 
14719       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14720          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14721               'Return Status' || x_return_status);
14722       END IF;
14723 
14724           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14725                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14726           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14727                 RAISE OKL_API.G_EXCEPTION_ERROR;
14728       END IF;
14729 
14730       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14731         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14732              'Calling "make_tax_sources_reportable" .. ');
14733       END IF;
14734 
14735       make_tax_sources_reportable(p_api_version    => p_api_version,
14736                                   p_init_msg_list  => p_init_msg_list,
14737                                   x_return_status  => x_return_status,
14738                                   x_msg_count      => x_msg_count,
14739                                   x_msg_data       => x_msg_data,
14740                                   p_source_trx_id  => p_source_trx_id);
14741 
14742       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14743         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14744              'Return Status' || x_return_status);
14745       END IF;
14746 
14747       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14748         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14749       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14750         RAISE OKL_API.G_EXCEPTION_ERROR;
14751       END IF;
14752 
14753     END IF;
14754 
14755     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14756        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ','End(-)');
14757     END IF;
14758   EXCEPTION
14759     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14760          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14761                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ',
14762                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
14763          END IF;
14764 
14765          IF l_trxcontracts_csr%ISOPEN THEN
14766             CLOSE l_trxcontracts_csr;
14767          END IF;
14768 
14769          IF l_tax_src_info_csr%ISOPEN THEN
14770            CLOSE l_tax_src_info_csr;
14771          END IF;
14772 
14773          IF l_prev_taxsources_csr%ISOPEN THEN
14774             CLOSE l_prev_taxsources_csr;
14775          END IF;
14776 
14777          IF l_finassets_csr%ISOPEN THEN
14778             CLOSE l_finassets_csr;
14779          END IF;
14780 
14781          IF l_k_asset_pymnts_csr%ISOPEN THEN
14782             CLOSE l_k_asset_pymnts_csr;
14783          END IF;
14784 
14785          IF l_invitem_csr%ISOPEN THEN
14786             CLOSE l_invitem_csr;
14787          END IF;
14788 
14789          IF l_txbasisoverride_csr%ISOPEN THEN
14790             CLOSE l_txbasisoverride_csr;
14791          END IF;
14792 
14793          IF l_formulae_csr%ISOPEN THEN
14794             CLOSE l_formulae_csr;
14795          END IF;
14796 
14797          x_return_status := OKL_API.G_RET_STS_ERROR;
14798     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14799          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14800                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ',
14801                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
14802          END IF;
14803 
14804          IF l_trxcontracts_csr%ISOPEN THEN
14805             CLOSE l_trxcontracts_csr;
14806          END IF;
14807 
14808          IF l_tax_src_info_csr%ISOPEN THEN
14809            CLOSE l_tax_src_info_csr;
14810          END IF;
14811 
14812          IF l_prev_taxsources_csr%ISOPEN THEN
14813             CLOSE l_prev_taxsources_csr;
14814          END IF;
14815 
14816          IF l_finassets_csr%ISOPEN THEN
14817             CLOSE l_finassets_csr;
14818          END IF;
14819 
14820          IF l_k_asset_pymnts_csr%ISOPEN THEN
14821             CLOSE l_k_asset_pymnts_csr;
14822          END IF;
14823 
14824          IF l_invitem_csr%ISOPEN THEN
14825             CLOSE l_invitem_csr;
14826          END IF;
14827 
14828          IF l_txbasisoverride_csr%ISOPEN THEN
14829             CLOSE l_txbasisoverride_csr;
14830          END IF;
14831 
14832          IF l_formulae_csr%ISOPEN THEN
14833             CLOSE l_formulae_csr;
14834          END IF;
14835 
14836          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14837 
14838     WHEN OTHERS THEN
14839          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14840             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ',
14841                   'EXCEPTION :'||sqlerrm);
14842          END IF;
14843 
14844          IF l_trxcontracts_csr%ISOPEN THEN
14845             CLOSE l_trxcontracts_csr;
14846          END IF;
14847 
14848          IF l_tax_src_info_csr%ISOPEN THEN
14849            CLOSE l_tax_src_info_csr;
14850          END IF;
14851 
14852          IF l_prev_taxsources_csr%ISOPEN THEN
14853             CLOSE l_prev_taxsources_csr;
14854          END IF;
14855 
14856          IF l_finassets_csr%ISOPEN THEN
14857             CLOSE l_finassets_csr;
14858          END IF;
14859 
14860          IF l_k_asset_pymnts_csr%ISOPEN THEN
14861             CLOSE l_k_asset_pymnts_csr;
14862          END IF;
14863 
14864          IF l_invitem_csr%ISOPEN THEN
14865             CLOSE l_invitem_csr;
14866          END IF;
14867 
14868          IF l_txbasisoverride_csr%ISOPEN THEN
14869             CLOSE l_txbasisoverride_csr;
14870          END IF;
14871 
14872          IF l_formulae_csr%ISOPEN THEN
14873             CLOSE l_formulae_csr;
14874          END IF;
14875 
14876          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14877          -- unexpected error
14878          OKL_API.set_message(p_app_name      => g_app_name,
14879                              p_msg_name      => g_unexpected_error,
14880                              p_token1        => g_sqlcode_token,
14881                              p_token1_value  => sqlcode,
14882                              p_token2        => g_sqlerrm_token,
14883                              p_token2_value  => sqlerrm);
14884 
14885   END process_booking_upfront_tax;
14886 
14887 /*========================================================================
14888  | PRIVATE PROCEDURE process_pre_rbk_upfront_tax
14889  |
14890  | DESCRIPTION
14891  |    This procedure is called from calculate_sales_tax procedure to calculate
14892  |    Upfront tax during Pre Rebooking
14893  |
14894  | CALLED FROM                                  calculate_sales_tax()
14895  |
14896  |
14897  | CALLS PROCEDURES/FUNCTIONS
14898  |     process_booking_upfront_tax()
14899  |
14900  | PARAMETERS
14901  |      p_source_trx_id                 -- Source transaction ID
14902  |      p_source_trx_name       -- Source transaction Name
14903  |      p_source_table          -- Source table
14904  |
14905  | KNOWN ISSUES
14906  |
14907  | NOTES
14908  |
14909  |
14910  | MODIFICATION HISTORY
14911  | Date          Author            Description of Changes
14912  | 08-APR-05     SECHAWLA           Created
14913  | 29-NOV-05     SECHAWLA           4772640 Modified to merge Pre-Rebook trx type
14914  |                                  setups into 'Booking'
14915  |
14916  *=======================================================================*/
14917   PROCEDURE process_pre_rbk_upfront_tax(
14918         p_api_version                   IN  NUMBER,
14919     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
14920     x_return_status                     OUT NOCOPY VARCHAR2,
14921     x_msg_count                         OUT NOCOPY NUMBER,
14922     x_msg_data                          OUT NOCOPY VARCHAR2,
14923     p_source_trx_id                                     IN  NUMBER,
14924     p_source_trx_name               IN  VARCHAR2,
14925     p_source_table                  IN  VARCHAR2,
14926     p_tax_call_type                 IN  VARCHAR2) IS
14927 
14928     -------------Pre Rebook --------------
14929     --p_source_trx_id           ---> okl_trx_contracts.id
14930     --p_source_trx_name     ---> 'Rebook'
14931     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
14932     --p_tax_call_type       ---> 'ESTIMATED'
14933     --------------------------------------------------
14934 
14935   BEGIN
14936 
14937     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14938         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax','Begin(+)');
14939     END IF;
14940 
14941     --Print Input Variables
14942     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14943       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14944               'p_init_msg_list :'||p_init_msg_list);
14945       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14946               'p_source_trx_id :'||p_source_trx_id);
14947       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14948               'p_source_trx_name :'||p_source_trx_name);
14949       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14950               'p_source_table :'||p_source_table);
14951       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14952               'p_tax_call_type :'||p_tax_call_type);
14953     END IF;
14954 
14955     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14956 
14957     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14958       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14959                   'Calling process_booking_upfront_tax');
14960     END IF;
14961 
14962     process_booking_upfront_tax(p_api_version        =>  p_api_version,
14963                                 p_init_msg_list      =>  p_init_msg_list,
14964                                 x_return_status      =>  x_return_status,
14965                                 x_msg_count          =>  x_msg_count,
14966                                 x_msg_data           =>  x_msg_data,
14967                                 p_source_trx_id          =>  p_source_trx_id,
14968                                 p_source_trx_name    =>  p_source_trx_name,
14969                                 p_source_table       =>  p_source_table,
14970                                 p_tax_call_type      =>  p_tax_call_type);
14971 
14972     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14973       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14974                   'Finished process_booking_upfront_tax '|| x_return_status);
14975     END IF;
14976 
14977         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14978        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14979     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14980        RAISE OKL_API.G_EXCEPTION_ERROR;
14981     END IF;
14982 
14983     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14984        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ','End(-)');
14985     END IF;
14986 
14987   EXCEPTION
14988     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14989       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14990         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ',
14991                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
14992       END IF;
14993 
14994       x_return_status := OKL_API.G_RET_STS_ERROR;
14995 
14996     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14997       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14998         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ',
14999                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
15000       END IF;
15001 
15002       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
15003 
15004     WHEN OTHERS THEN
15005       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15006         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ',
15007                   'EXCEPTION :'||sqlerrm);
15008       END IF;
15009 
15010       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
15011       -- unexpected error
15012       OKL_API.set_message(p_app_name      => g_app_name,
15013                           p_msg_name      => g_unexpected_error,
15014                           p_token1        => g_sqlcode_token,
15015                           p_token1_value  => sqlcode,
15016                           p_token2        => g_sqlerrm_token,
15017                           p_token2_value  => sqlerrm);
15018   END process_pre_rbk_upfront_tax;
15019 
15020 /*========================================================================
15021  | PRIVATE PROCEDURE process_rebook_upfront_tax
15022  |
15023  | DESCRIPTION
15024  |    This procedure is called from calculate_sales_tax procedure to calculate
15025  |    Upfront tax during Rebook
15026  |
15027  | CALLED FROM                                  calculate_sales_tax()
15028  |
15029  |
15030  | CALLS PROCEDURES/FUNCTIONS
15031  |     OKL_TAX_INTERFACE_PVT.reverse_document()
15032  |     update_tax_sources_total()
15033  |     okl_tax_sources_pub.update_tax_sources()
15034  |     process_final_upfront_tax()
15035  |
15036  |
15037  | PARAMETERS
15038  |      p_source_trx_id                 -- Source transaction ID
15039  |      p_source_trx_name       -- Source transaction Name
15040  |      p_source_table          -- Source table
15041  |
15042  | KNOWN ISSUES
15043  |
15044  | NOTES
15045  |
15046  |
15047  | MODIFICATION HISTORY
15048  | Date           Author        Description of Changes
15049  | 08-APR-05      SECHAWLA        Created
15050  | 29-NOV-05      SECHAWLA        4772640 Modified to merge Rebook trx type setups
15051  |                                into 'Booking' trx type
15052  |
15053  *=======================================================================*/
15054   PROCEDURE process_rebook_upfront_tax(
15055         p_api_version                   IN  NUMBER,
15056     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
15057     x_return_status                     OUT NOCOPY VARCHAR2,
15058     x_msg_count                         OUT NOCOPY NUMBER,
15059     x_msg_data                          OUT NOCOPY VARCHAR2,
15060     p_source_trx_id                                     IN  NUMBER,
15061     p_source_trx_name               IN  VARCHAR2,
15062     p_source_table                  IN  VARCHAR2) IS
15063 
15064      -------------Rebook --------------
15065     --p_source_trx_id           ---> okl_trx_contracts.id
15066     --p_source_trx_name     ---> 'Rebook'
15067     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
15068     --------------------------------------------------
15069 
15070         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
15071 
15072         -- validate source trx id
15073     -- okl_trx_contracts.khr_id has original contract id
15074     -- okl_trx_contracts.khr_id_new has rebook copy contract id
15075         CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
15076         SELECT a.try_id, a.khr_id, a.khr_id_new, a.date_transaction_occurred
15077         FROM   okl_trx_contracts a , okl_trx_types_tl b
15078         WHERE  a.id = cp_trx_id
15079         AND    a.try_id = b.id
15080         AND    b.name = cp_trx_type_name
15081     AND    language = 'US';
15082 
15083     -- Booking tax lines will be the only ACTIVE set of tax lines at the time K is being Reversed
15084         -- Contract can be reversed only if no other transactions have happened on the contract
15085         -- this cursor selects existing active upfront taxable lines for a contract that is being reversed
15086         CURSOR l_prevtaxsources_csr(cp_khr_id IN NUMBER) IS
15087         SELECT id, khr_id, kle_id, asset_number, trx_id, trx_line_id, entity_code,
15088                event_class_code, trx_level_type, tax_call_type_code, sty_id,
15089                trx_business_category, tax_line_status_code, sel_id, reported_yn,
15090                line_name, application_id, tax_reporting_flag, default_taxation_country,
15091                product_category, user_defined_fisc_class, line_intended_use,
15092                tax_classification_code, inventory_item_id, bill_to_cust_acct_id,
15093                org_id, legal_entity_id, line_amt, assessable_value, total_tax,
15094                product_type, product_fisc_classification, trx_date, provnl_tax_determination_date,
15095                try_id, ship_to_location_id, ship_to_party_site_id, ship_to_party_id,
15096                bill_to_party_site_id, bill_to_location_id, bill_to_party_id,
15097                ship_to_cust_acct_site_use_id, bill_to_cust_acct_site_use_id,
15098                trx_currency_code, currency_conversion_date, currency_conversion_rate,
15099                currency_conversion_type
15100         FROM   okl_tax_sources
15101         WHERE  khr_id = cp_khr_id
15102         AND    tax_call_type_code = G_UPFRONT_TAX
15103         AND    tax_line_status_code = G_ACTIVE_STATUS
15104     AND    application_id = G_OKL_APPLICATION_ID
15105     AND    trx_level_type = G_TRX_LEVEL_TYPE
15106         AND    ADJUSTED_DOC_TRX_ID IS NULL
15107         AND    ADJUSTED_DOC_TRX_LINE_ID IS NULL;
15108 
15109     CURSOR l_rbk_taxablelines_csr(cp_trx_id IN NUMBER, cp_khr_id IN NUMBER) IS
15110     SELECT id, kle_id
15111     FROM okl_tax_sources
15112     WHERE trx_id = cp_trx_id
15113     AND   khr_id = cp_khr_id
15114     AND   tax_call_type_code = G_UPFRONT_TAX
15115     AND   tax_line_status_code = G_ACTIVE_STATUS;
15116 
15117     CURSOR l_orig_kle_id(cp_kle_id IN NUMBER) IS
15118     SELECT orig_system_id1
15119     FROM   okc_k_lines_b
15120     WHERE  id = cp_kle_id;
15121 
15122     CURSOR l_new_line_id(cp_orig_system_id IN NUMBER) IS
15123     SELECT id
15124     FROM   okc_k_lines_b
15125     WHERE  orig_system_id1 = cp_orig_system_id;
15126 
15127         TYPE  tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15128         TYPE  prev_tx_src_tbl_type IS TABLE OF l_prevtaxsources_csr%ROWTYPE INDEX BY BINARY_INTEGER;
15129 
15130     l_prevtaxsources_tbl                        prev_tx_src_tbl_type;
15131         l_tax_src_tbl                                   tax_src_tbl_type;
15132         l_tax_sources_tbl               tax_sources_tbl_type;
15133     rev_trx_lines_tbl               zx_trx_lines_tbl_type;
15134     rev_trx_hdr_rec                 line_params_rec_type;
15135     l_txsv_tbl                      txsv_tbl_type;
15136     lx_txsv_tbl                     txsv_tbl_type;
15137 
15138         l_fetch_size                    NUMBER := 10000;
15139     i                                                           NUMBER;
15140     j                                                           NUMBER;
15141 
15142     l_trx_date                      DATE;
15143     l_trx_level_type                VARCHAR2(30);
15144     l_org_id                        NUMBER;
15145     l_legal_entity_id               NUMBER;
15146     l_reversed_trx_id               NUMBER;
15147     l_rbk_khr_id                    NUMBER;
15148     l_rbk_trx_type_id_det                       NUMBER;
15149     l_khr_id                                            NUMBER;
15150     l_kle_id                        NUMBER;
15151     l_sync_kle_id                   NUMBER;
15152     l_booking_tax_exists            BOOLEAN := FALSE;
15153 
15154   BEGIN
15155 
15156 
15157     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15158         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax','Begin(+)');
15159     END IF;
15160 
15161     --Print Input Variables
15162     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15163       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15164               'p_init_msg_list :'||p_init_msg_list);
15165       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15166               'p_source_trx_id :'||p_source_trx_id);
15167       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15168               'p_source_trx_name :'||p_source_trx_name);
15169       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15170               'p_source_table :'||p_source_table);
15171     END IF;
15172 
15173     x_return_status := OKL_API.G_RET_STS_SUCCESS;
15174 
15175     -- Validate the source trx id
15176     OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
15177     FETCH l_trxcontracts_csr INTO l_rbk_trx_type_id_det, l_khr_id, l_rbk_khr_id, l_trx_date; -- l_khr_id has original contract id
15178     -- At this point l_rbk_trx_type_id_det has the id of the Rebook trx type
15179     IF l_trxcontracts_csr%NOTFOUND THEN
15180       -- source trx id is invalid
15181       OKC_API.set_message( p_app_name      => 'OKC',
15182                            p_msg_name      => G_INVALID_VALUE,
15183                            p_token1        => G_COL_NAME_TOKEN,
15184                            p_token1_value  => 'SOURCE_TRX_ID');
15185       RAISE OKL_API.G_EXCEPTION_ERROR;
15186     END IF;
15187     CLOSE l_trxcontracts_csr;
15188 
15189     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15190           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15191                 'l_rbk_trx_type_id_det '||l_rbk_trx_type_id_det );
15192       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15193                 'l_khr_id '||l_khr_id );
15194       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15195                 'l_rbk_khr_id '||l_rbk_khr_id );
15196       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15197                 'l_trx_date '||l_trx_date );
15198     END IF;
15199 
15200         --Create negative tax lines for the previously active upfront tax lines
15201     i := 1;
15202         j := 1;
15203         l_tax_sources_tbl.DELETE;
15204         l_tax_src_tbl.DELETE;
15205 
15206     OPEN l_prevtaxsources_csr(l_khr_id);
15207         LOOP
15208           l_prevtaxsources_tbl.DELETE;
15209           FETCH l_prevtaxsources_csr BULK COLLECT INTO l_prevtaxsources_tbl LIMIT l_fetch_size;
15210           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15211             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15212                                 'l_prevtaxsources_tbl.COUNT '||l_prevtaxsources_tbl.COUNT );
15213       END IF;
15214 
15215       IF l_prevtaxsources_tbl.COUNT > 0 THEN
15216         l_booking_tax_exists := TRUE;
15217         FOR k IN  l_prevtaxsources_tbl.FIRST..l_prevtaxsources_tbl.LAST LOOP
15218 
15219           IF i = 1 THEN
15220             l_org_id          := l_prevtaxsources_tbl(k).org_id;
15221             l_trx_level_type  := l_prevtaxsources_tbl(k).trx_level_type;
15222             l_legal_entity_id := l_prevtaxsources_tbl(k).legal_entity_id;
15223             l_reversed_trx_id := l_prevtaxsources_tbl(k).trx_id;
15224           END IF;
15225 
15226           -- Create adjusting tax source transaction for the previous active tax lines
15227               l_tax_sources_tbl(i).id                            := get_seq_id;
15228           l_tax_sources_tbl(i).khr_id                        := l_prevtaxsources_tbl(k).khr_id;
15229           l_tax_sources_tbl(i).kle_id                        := l_prevtaxsources_tbl(k).kle_id;
15230           l_tax_sources_tbl(i).asset_number                  := l_prevtaxsources_tbl(k).asset_number;
15231           l_tax_sources_tbl(i).trx_id                        := p_source_trx_id;
15232           l_tax_sources_tbl(i).trx_line_id                   := l_tax_sources_tbl(i).id;
15233           l_tax_sources_tbl(i).entity_code                   := G_CONTRACTS_ENTITY_CODE;
15234           l_tax_sources_tbl(i).event_class_code              := G_REBOOK_EVENT_CLASS_CODE;
15235           l_tax_sources_tbl(i).trx_level_type                := G_TRX_LEVEL_TYPE;
15236           l_tax_sources_tbl(i).adjusted_doc_entity_code      := l_prevtaxsources_tbl(k).entity_code;
15237           l_tax_sources_tbl(i).adjusted_doc_event_class_code := l_prevtaxsources_tbl(k).event_class_code;
15238           l_tax_sources_tbl(i).adjusted_doc_trx_id           := l_prevtaxsources_tbl(k).trx_id;
15239                   l_tax_sources_tbl(i).adjusted_doc_trx_line_id      := l_prevtaxsources_tbl(k).trx_line_id;
15240                   l_tax_sources_tbl(i).adjusted_doc_trx_level_type   := l_prevtaxsources_tbl(k).trx_level_type;
15241                   l_tax_sources_tbl(i).adjusted_doc_number           := NULL;
15242                   l_tax_sources_tbl(i).adjusted_doc_date             := NULL;
15243                   l_tax_sources_tbl(i).tax_call_type_code            := G_UPFRONT_TAX;
15244                   l_tax_sources_tbl(i).sty_id                        := l_prevtaxsources_tbl(k).sty_id;
15245                   l_tax_sources_tbl(i).trx_business_category         := l_prevtaxsources_tbl(k).trx_business_category;
15246                   l_tax_sources_tbl(i).tax_line_status_code          := G_INACTIVE_STATUS;
15247 
15248           l_tax_sources_tbl(i).sel_id                        := l_prevtaxsources_tbl(k).sel_id;
15249                   l_tax_sources_tbl(i).reported_yn                   := l_prevtaxsources_tbl(k).reported_yn;
15250           l_tax_sources_tbl(i).tax_reporting_flag            := l_prevtaxsources_tbl(k).tax_reporting_flag;
15251                   l_tax_sources_tbl(i).program_id                    := NULL;
15252                   l_tax_sources_tbl(i).request_id                    := NULL;
15253                   l_tax_sources_tbl(i).program_application_id        := NULL;
15254                   l_tax_sources_tbl(i).program_update_date           := NULL;
15255                   l_tax_sources_tbl(i).attribute_category            := NULL;
15256 
15257                   l_tax_sources_tbl(i).attribute1                    := NULL;
15258                   l_tax_sources_tbl(i).attribute2                    := NULL;
15259                   l_tax_sources_tbl(i).attribute3                    := NULL;
15260                   l_tax_sources_tbl(i).attribute4                    := NULL;
15261                   l_tax_sources_tbl(i).attribute5                    := NULL;
15262                   l_tax_sources_tbl(i).attribute6                    := NULL;
15263                   l_tax_sources_tbl(i).attribute7                    := NULL;
15264                   l_tax_sources_tbl(i).attribute8                    := NULL;
15265                   l_tax_sources_tbl(i).attribute9                    := NULL;
15266                   l_tax_sources_tbl(i).attribute10                   := NULL;
15267                   l_tax_sources_tbl(i).attribute11                   := NULL;
15268                   l_tax_sources_tbl(i).attribute12                   := NULL;
15269                   l_tax_sources_tbl(i).attribute13                   := NULL;
15270                   l_tax_sources_tbl(i).attribute14                   := NULL;
15271                   l_tax_sources_tbl(i).attribute15                   := NULL;
15272                   l_tax_sources_tbl(i).created_by                    := G_USER_ID;
15273                   l_tax_sources_tbl(i).creation_date                 := SYSDATE;
15274                   l_tax_sources_tbl(i).last_updated_by               := G_USER_ID;
15275                   l_tax_sources_tbl(i).last_update_date              := SYSDATE;
15276                   l_tax_sources_tbl(i).last_update_login             := G_LOGIN_ID;
15277                   l_tax_sources_tbl(i).object_version_number         := NULL;
15278 
15279           l_tax_sources_tbl(i).line_name                 := l_prevtaxsources_tbl(k).line_name;
15280           l_tax_sources_tbl(i).application_id            := l_prevtaxsources_tbl(k).application_id;
15281           l_tax_sources_tbl(i).default_taxation_country  := l_prevtaxsources_tbl(k).default_taxation_country;
15282           l_tax_sources_tbl(i).product_category          := l_prevtaxsources_tbl(k).product_category;
15283           l_tax_sources_tbl(i).user_defined_fisc_class   := l_prevtaxsources_tbl(k).user_defined_fisc_class;
15284           l_tax_sources_tbl(i).line_intended_use         := l_prevtaxsources_tbl(k).line_intended_use;
15285           l_tax_sources_tbl(i).tax_classification_code   := l_prevtaxsources_tbl(k).tax_classification_code;
15286           l_tax_sources_tbl(i).inventory_item_id         := l_prevtaxsources_tbl(k).inventory_item_id;
15287           l_tax_sources_tbl(i).bill_to_cust_acct_id      := l_prevtaxsources_tbl(k).bill_to_cust_acct_id;
15288           l_tax_sources_tbl(i).org_id                    := l_prevtaxsources_tbl(k).org_id;
15289           l_tax_sources_tbl(i).legal_entity_id           := l_prevtaxsources_tbl(k).legal_entity_id;
15290           l_tax_sources_tbl(i).line_amt                  := -l_prevtaxsources_tbl(k).line_amt;
15291           l_tax_sources_tbl(i).assessable_value          := -l_prevtaxsources_tbl(k).assessable_value;
15292 
15293           l_tax_sources_tbl(i).total_tax                 := null;  -- this col will be populated after reverse doc API is called
15294           l_tax_sources_tbl(i).trx_date                  := l_trx_date;
15295           l_tax_sources_tbl(i).try_id                    := l_rbk_trx_type_id_det;
15296 
15297           l_tax_sources_tbl(i).product_type                    := l_prevtaxsources_tbl(k).product_type;
15298           l_tax_sources_tbl(i).product_fisc_classification     := l_prevtaxsources_tbl(k).product_fisc_classification;
15299           l_tax_sources_tbl(i).provnl_tax_determination_date   := null;
15300           l_tax_sources_tbl(i).ship_to_location_id             := l_prevtaxsources_tbl(k).ship_to_location_id;
15301           l_tax_sources_tbl(i).ship_to_party_site_id           := l_prevtaxsources_tbl(k).ship_to_party_site_id;
15302           l_tax_sources_tbl(i).ship_to_party_id                := l_prevtaxsources_tbl(k).ship_to_party_id;
15303           l_tax_sources_tbl(i).bill_to_party_site_id           := l_prevtaxsources_tbl(k).bill_to_party_site_id;
15304           l_tax_sources_tbl(i).bill_to_location_id             := l_prevtaxsources_tbl(k).bill_to_location_id;
15305           l_tax_sources_tbl(i).bill_to_party_id                := l_prevtaxsources_tbl(k).bill_to_party_id;
15306           l_tax_sources_tbl(i).ship_to_cust_acct_site_use_id   := l_prevtaxsources_tbl(k).ship_to_cust_acct_site_use_id;
15307           l_tax_sources_tbl(i).bill_to_cust_acct_site_use_id   := l_prevtaxsources_tbl(k).bill_to_cust_acct_site_use_id;
15308           l_tax_sources_tbl(i).trx_currency_code               := l_prevtaxsources_tbl(k).trx_currency_code;
15309           l_tax_sources_tbl(i).currency_conversion_type        := l_prevtaxsources_tbl(k).currency_conversion_type;
15310           l_tax_sources_tbl(i).currency_conversion_rate        := l_prevtaxsources_tbl(k).currency_conversion_rate;
15311           l_tax_sources_tbl(i).currency_conversion_date        := l_prevtaxsources_tbl(k).currency_conversion_date;
15312 
15313           -- Store the tax source IDs in a table
15314           l_tax_src_tbl(i)                                     := l_prevtaxsources_tbl(k).id;
15315 
15316           -- Populate the ZX reverse transaction lines table for tax call
15317           rev_trx_lines_tbl(i).internal_organization_id        := l_org_id;
15318           rev_trx_lines_tbl(i).reversing_appln_id              := G_OKL_APPLICATION_ID;
15319           rev_trx_lines_tbl(i).reversing_entity_code           := G_CONTRACTS_ENTITY_CODE;
15320           rev_trx_lines_tbl(i).reversing_evnt_cls_code         := G_REBOOK_EVENT_CLASS_CODE;
15321           rev_trx_lines_tbl(i).reversing_trx_id                := p_source_trx_id;
15322           rev_trx_lines_tbl(i).reversing_trx_level_type        := l_trx_level_type;
15323           rev_trx_lines_tbl(i).reversing_trx_line_id           := l_tax_sources_tbl(i).trx_line_id;
15324 
15325           rev_trx_lines_tbl(i).reversed_appln_id               := G_OKL_APPLICATION_ID;
15326           rev_trx_lines_tbl(i).reversed_entity_code            := l_prevtaxsources_tbl(k).entity_code;
15327           rev_trx_lines_tbl(i).reversed_evnt_cls_code          := l_prevtaxsources_tbl(k).event_class_code;
15328           rev_trx_lines_tbl(i).reversed_trx_id                 := l_tax_sources_tbl(i).adjusted_doc_trx_id;
15329           rev_trx_lines_tbl(i).reversed_trx_level_type         := l_trx_level_type;
15330           rev_trx_lines_tbl(i).reversed_trx_line_id            := l_tax_sources_tbl(i).adjusted_doc_trx_line_id;
15331 
15332           i := i + 1;
15333         END LOOP;
15334       END IF;
15335       EXIT WHEN l_prevtaxsources_csr%NOTFOUND;
15336     END LOOP;
15337     CLOSE l_prevtaxsources_csr;
15338 
15339     -- Inactivate the previous ACTIVE tax lines - begin
15340     IF l_tax_src_tbl.COUNT > 0 THEN
15341       BEGIN
15342         FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
15343           UPDATE OKL_TAX_SOURCES SET TAX_LINE_STATUS_CODE = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
15344       EXCEPTION
15345         WHEN OTHERS THEN
15346           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
15347                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
15348                                                                 OKL_API.set_message(
15349                                                                      p_app_name      => 'OKL',
15350                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
15351                                      p_token1        => 'TABLE_NAME',
15352                                      p_token1_value  => 'OKL_TAX_SOURCES',
15353                                      p_token2        => 'ERROR_CODE',
15354                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
15355                                                                          p_token3        => 'ITERATION',
15356                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
15357                     END LOOP;
15358                         RAISE OKL_API.G_EXCEPTION_ERROR;
15359                   END IF;
15360       END;
15361 
15362       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15363                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15364                         'Inactivated the previous active upfront tax lines ' );
15365       END IF;
15366     END IF;
15367     -- Inactivate the previous ACTIVE tax lines - end
15368 
15369     -- Push the negative tax lines populated before for original contract into
15370     -- tax sources
15371     -- bulk insert into okl_tax_sources -- start
15372     BEGIN
15373       IF l_tax_sources_tbl.COUNT > 0 THEN
15374         FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
15375           -- SAVE EXCEPTIONS
15376           INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
15377       END IF;
15378     EXCEPTION
15379       WHEN OTHERS THEN
15380         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
15381                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
15382                         OKL_API.set_message(p_app_name      => 'OKL',
15383                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
15384                                 p_token1        => 'TABLE_NAME',
15385                                 p_token1_value  => 'OKL_TAX_SOURCES',
15386                                 p_token2        => 'ERROR_CODE',
15387                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
15388                                                                 p_token3        => 'ITERATION',
15389                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
15390           END LOOP;
15391                   RAISE OKL_API.G_EXCEPTION_ERROR;
15392                 END IF;
15393     END;
15394     -- bulk insert into okl_tax_sources -- end
15395 
15396     -- Reverse document call for the reversal of original contract tax sources
15397         -- Populate ZX reverse transaction tables
15398     IF (l_booking_tax_exists) THEN -- Perform reversal only if the booking tax exists
15399       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15400         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15401               'Calling OKL_TAX_INTERFACE_PVT.reverse_document');
15402       END IF;
15403 
15404       rev_trx_hdr_rec.internal_organization_id := l_org_id;
15405       rev_trx_hdr_rec.application_id           := G_OKL_APPLICATION_ID;
15406       rev_trx_hdr_rec.trx_id                   := p_source_trx_id;
15407       rev_trx_hdr_rec.legal_entity_id          := l_legal_entity_id;
15408       rev_trx_hdr_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
15409       rev_trx_hdr_rec.event_class_code         := G_REBOOK_EVENT_CLASS_CODE;
15410 
15411       OKL_TAX_INTERFACE_PVT.reverse_document (
15412                               p_api_version       => p_api_version,
15413                               p_init_msg_list     => p_init_msg_list,
15414                               x_return_status     => x_return_status,
15415                               x_msg_count         => x_msg_count,
15416                               x_msg_data          => x_msg_data,
15417                               p_rev_trx_hdr_rec   => rev_trx_hdr_rec,
15418                               p_rev_trx_lines_tbl => rev_trx_lines_tbl);
15419 
15420       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15421         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15422               'Return Status' || x_return_status);
15423       END IF;
15424 
15425       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15426         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15427       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15428         RAISE OKL_API.G_EXCEPTION_ERROR;
15429       END IF;
15430 
15431       -- Get the total tax amount corresponding to 'Reverse' transaction initiated
15432       -- for the 'Rebook' transaction and update total_tax in okl_tax_sources
15433       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15434         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15435           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
15436       END IF;
15437 
15438       update_tax_sources_total(p_api_version      => p_api_version,
15439                                p_init_msg_list    => p_init_msg_list,
15440                                x_return_status    => x_return_status,
15441                                x_msg_count        => x_msg_count,
15442                                x_msg_data         => x_msg_data,
15443                                p_source_trx_id    => p_source_trx_id,
15444                                p_source_trx_name  => p_source_trx_name);
15445 
15446       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15447         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15448           'Return Status' || x_return_status);
15449       END IF;
15450 
15451       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15452         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15453       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15454         RAISE OKL_API.G_EXCEPTION_ERROR;
15455       END IF;
15456 
15457     END IF;  -- Perform reversal only if the booking tax exists
15458 
15459     -- Sync rebook tax sources with original contract info
15460     i := 1;
15461     FOR l_rbk_taxablelines_rec IN l_rbk_taxablelines_csr(cp_trx_id => p_source_trx_id,
15462                                                          cp_khr_id => l_rbk_khr_id ) LOOP
15463       l_sync_kle_id := null;
15464 
15465       l_txsv_tbl(i).id      := l_rbk_taxablelines_rec.id;
15466       l_txsv_tbl(i).khr_id  := l_khr_id; -- sync the parent contract id
15467 
15468       l_kle_id := l_rbk_taxablelines_rec.kle_id;
15469 
15470       IF (l_kle_id IS NOT NULL) THEN  -- Asset Line, else Contract level tax line
15471 
15472         -- Sync rebook tax sources with original contract line ids (for existing assets)
15473         -- and new contract line id (for new assets)
15474         -- Sync the parent contract kle_id's
15475         OPEN l_orig_kle_id(cp_kle_id  => l_kle_id);
15476         FETCH l_orig_kle_id INTO l_sync_kle_id;
15477         IF l_orig_kle_id%NOTFOUND THEN
15478           OKC_API.set_message( p_app_name      => 'OKC',
15479                                p_msg_name      => G_INVALID_VALUE,
15480                                p_token1        => G_COL_NAME_TOKEN,
15481                               p_token1_value  => 'SOURCE_TRX_ID');
15482           RAISE OKL_API.G_EXCEPTION_ERROR;
15483         END IF;
15484         CLOSE l_orig_kle_id;
15485 
15486         IF (l_sync_kle_id IS NOT NULL) THEN
15487           l_txsv_tbl(i).kle_id  := l_sync_kle_id;
15488         ELSE
15489           -- This means the asset is newly created during Rebook process, so fetch
15490           -- the id of okc_k_lines_b where the orig_system_id1 is the kle_id of
15491           -- l_rbk_taxablelines_rec
15492           OPEN l_new_line_id(cp_orig_system_id => l_kle_id);
15493           FETCH l_new_line_id INTO l_sync_kle_id;
15494           IF l_new_line_id%NOTFOUND THEN
15495             OKC_API.set_message( p_app_name      => 'OKC',
15496                                  p_msg_name      => G_INVALID_VALUE,
15497                                  p_token1        => G_COL_NAME_TOKEN,
15498                                  p_token1_value  => 'SOURCE_TRX_ID');
15499             RAISE OKL_API.G_EXCEPTION_ERROR;
15500           END IF;
15501           CLOSE l_new_line_id;
15502 
15503           l_txsv_tbl(i).kle_id  := l_sync_kle_id;
15504         END IF;
15505 
15506       END IF;
15507 
15508       i := i+1;
15509 
15510     END LOOP;
15511 
15512     IF (l_txsv_tbl.COUNT > 0) THEN
15513 
15514       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15515         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax',
15516            'Calling okl_tax_sources_pub.update_tax_sources for synching back original contract info for all Lines in Tax Sources');
15517       END IF;
15518 
15519       okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
15520                                             ,p_init_msg_list   => p_init_msg_list
15521                                             ,x_return_status   => x_return_status
15522                                             ,x_msg_count       => x_msg_count
15523                                             ,x_msg_data        => x_msg_data
15524                                             ,p_txsv_tbl        => l_txsv_tbl
15525                                             ,x_txsv_tbl        => lx_txsv_tbl);
15526 
15527       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15528         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax',
15529               'Return Status' || x_return_status);
15530       END IF;
15531 
15532       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15533         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15534       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15535         RAISE OKL_API.G_EXCEPTION_ERROR;
15536       END IF;
15537     END IF;
15538     -- End Sync rebook tax sources with original contract info
15539 
15540     -- Change the reportable flag after synching back the rebook copy contract
15541     -- with the original contract
15542     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15543       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15544               'process_final_upfront_tax');
15545     END IF;
15546 
15547     -- Call ebtax procedure to flip the reportable flag from N to Y
15548     process_final_upfront_tax( p_api_version       => p_api_version,
15549                                    p_init_msg_list     => p_init_msg_list,
15550                                x_return_status     => x_return_status,
15551                                    x_msg_count         => x_msg_count,
15552                                        x_msg_data          => x_msg_data,
15553                                        p_trx_id                    => p_source_trx_id,
15554                                    p_application_id    => G_OKL_APPLICATION_ID,
15555                                p_entity_code       => G_CONTRACTS_ENTITY_CODE,
15556                                p_event_class_code  => G_BOOKING_EVENT_CLASS_CODE);
15557 
15558     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15559       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15560             'Return Status' || x_return_status);
15561     END IF;
15562 
15563     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15564       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15565         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15566           RAISE OKL_API.G_EXCEPTION_ERROR;
15567         END IF;
15568 
15569     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15570       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15571             'Calling "make_tax_sources_reportable" .. ');
15572     END IF;
15573 
15574     make_tax_sources_reportable(p_api_version    => p_api_version,
15575                                 p_init_msg_list  => p_init_msg_list,
15576                                 x_return_status  => x_return_status,
15577                                 x_msg_count      => x_msg_count,
15578                                 x_msg_data       => x_msg_data,
15579                                 p_source_trx_id  => p_source_trx_id);
15580 
15581     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15582       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15583             'Return Status' || x_return_status);
15584     END IF;
15585 
15586     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15587       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15588     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15589       RAISE OKL_API.G_EXCEPTION_ERROR;
15590     END IF;
15591 
15592     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15593        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ','End(-)');
15594     END IF;
15595 
15596   EXCEPTION
15597     WHEN OKL_API.G_EXCEPTION_ERROR THEN
15598       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15599         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ',
15600                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
15601       END IF;
15602 
15603       IF l_trxcontracts_csr%ISOPEN THEN
15604         CLOSE l_trxcontracts_csr;
15605       END IF;
15606 
15607       IF l_prevtaxsources_csr%ISOPEN THEN
15608         CLOSE l_prevtaxsources_csr;
15609       END IF;
15610 
15611       IF l_rbk_taxablelines_csr%ISOPEN THEN
15612         CLOSE l_rbk_taxablelines_csr;
15613       END IF;
15614 
15615       IF l_orig_kle_id%ISOPEN THEN
15616         CLOSE l_orig_kle_id;
15617       END IF;
15618 
15619       IF l_new_line_id%ISOPEN THEN
15620         CLOSE l_new_line_id;
15621       END IF;
15622 
15623       x_return_status := OKL_API.G_RET_STS_ERROR;
15624 
15625     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
15626       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15627         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ',
15628                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
15629       END IF;
15630 
15631       IF l_trxcontracts_csr%ISOPEN THEN
15632         CLOSE l_trxcontracts_csr;
15633       END IF;
15634 
15635       IF l_prevtaxsources_csr%ISOPEN THEN
15636         CLOSE l_prevtaxsources_csr;
15637       END IF;
15638 
15639       IF l_rbk_taxablelines_csr%ISOPEN THEN
15640         CLOSE l_rbk_taxablelines_csr;
15641       END IF;
15642 
15643       IF l_orig_kle_id%ISOPEN THEN
15644         CLOSE l_orig_kle_id;
15645       END IF;
15646 
15647       IF l_new_line_id%ISOPEN THEN
15648         CLOSE l_new_line_id;
15649       END IF;
15650 
15651       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
15652 
15653     WHEN OTHERS THEN
15654       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15655         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ',
15656                   'EXCEPTION :'||sqlerrm);
15657       END IF;
15658 
15659       IF l_trxcontracts_csr%ISOPEN THEN
15660         CLOSE l_trxcontracts_csr;
15661       END IF;
15662 
15663       IF l_prevtaxsources_csr%ISOPEN THEN
15664         CLOSE l_prevtaxsources_csr;
15665       END IF;
15666 
15667       IF l_rbk_taxablelines_csr%ISOPEN THEN
15668         CLOSE l_rbk_taxablelines_csr;
15669       END IF;
15670 
15671       IF l_orig_kle_id%ISOPEN THEN
15672         CLOSE l_orig_kle_id;
15673       END IF;
15674 
15675       IF l_new_line_id%ISOPEN THEN
15676         CLOSE l_new_line_id;
15677       END IF;
15678 
15679       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
15680       -- unexpected error
15681       OKL_API.set_message(p_app_name      => g_app_name,
15682                           p_msg_name      => g_unexpected_error,
15683                           p_token1        => g_sqlcode_token,
15684                           p_token1_value  => sqlcode,
15685                           p_token2        => g_sqlerrm_token,
15686                           p_token2_value  => sqlerrm);
15687 
15688   END process_rebook_upfront_tax;
15689 
15690 /*========================================================================
15691  | PRIVATE PROCEDURE process_quoting_upfront_tax
15692  |
15693  | DESCRIPTION
15694  |    This procedure is called from calculate_sales_tax procedure to calculate
15695  |    Upfront tax for a sales quote
15696  |
15697  | CALLED FROM                                  calculate_sales_tax()
15698  |
15699  |
15700  | CALLS PROCEDURES/FUNCTIONS
15701  |     populate_tax_info()
15702  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
15703  |
15704  |
15705  | PARAMETERS
15706  |      p_source_trx_id                 -- Source transaction ID
15707  |      p_source_trx_name       -- Source transaction Name
15708  |      p_source_table          -- Source table
15709  |
15710  | KNOWN ISSUES
15711  |
15712  | NOTES
15713  |
15714  |
15715  | MODIFICATION HISTORY
15716  | Date         Author     Description of Changes
15717  | 08-APR-05   SECHAWLA     Created
15718  | 12-DEC-05   SECHAWLA     4690074 - modified cursor l_get_location_id to map
15719  |                                    Install site id of the assets to
15720  |                                    PARTY_SITE_USE_ID in hz_party_site_uses
15721  |
15722  *=======================================================================*/
15723   PROCEDURE process_quoting_upfront_tax(
15724         p_api_version                   IN  NUMBER,
15725     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
15726     x_return_status                     OUT NOCOPY VARCHAR2,
15727     x_msg_count                         OUT NOCOPY NUMBER,
15728     x_msg_data                          OUT NOCOPY VARCHAR2,
15729     p_source_trx_id                                     IN  NUMBER,
15730     p_source_trx_name               IN  VARCHAR2,
15731     p_source_table                  IN  VARCHAR2) IS
15732 
15733     ---------------------Sales Quote / Lease Application ----------------
15734     --p_source_trx_id           ---> okl_lease_quotes_b.id  (sales quote ID)
15735     --p_source_trx_name     ---> 'Sales Quote'
15736     --p_source_table        ---> 'OKL_LEASE_QUOTES_B'
15737     -- 'Sales Quote' is not going to store/add try_id in okl_lease_quotes_b,
15738     -- as it will be the same for all the rows
15739     ----------------------------------------------------------------------
15740 
15741         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
15742 
15743         -- Validate source trx id
15744         CURSOR l_leasequotes_csr(cp_trx_id IN NUMBER) IS
15745         SELECT expected_start_date, product_id, interest_disclosed,
15746                transfer_of_title, sale_and_lease_back, purchase_of_lease, usage_category,
15747                age_of_equipment, parent_object_code , parent_object_id, legal_entity_id
15748         FROM   okl_lease_quotes_b
15749         WHERE  id = cp_trx_id;
15750 
15751         -- Get the transaction type id
15752         CURSOR l_trxtypes_csr IS
15753         SELECT id
15754         FROM   okl_trx_types_tl
15755         WHERE  name = 'Sales Quote'
15756     AND    language = 'US';
15757 
15758         -- Get Currency code and cust a/c for lease opportunity
15759         CURSOR l_leaseopp_csr(cp_id IN NUMBER) IS
15760         SELECT lop.currency_code, lop.cust_acct_id, lop.prospect_id,  --> (party id)
15761            lop.org_id, lsq.expected_start_date, lop.currency_conversion_type,
15762            lop.currency_conversion_rate, lop.currency_conversion_date, lsq.line_intended_use,
15763            pdt.name
15764         FROM   okl_lease_opportunities_b lop, okl_lease_quotes_b lsq, okl_products pdt
15765         WHERE  lsq.parent_object_id = lop.id
15766     AND    lsq.parent_object_code = 'LEASEOPP'
15767     AND    lsq.product_id = pdt.id
15768     AND    lsq.id = cp_id;
15769 
15770         -- Get Currency code and cust a/c for lease application
15771         CURSOR l_leaseapp_csr(cp_id IN NUMBER) IS
15772         SELECT lap.currency_code, lap.cust_acct_id, lap.prospect_id, --> (party id)
15773            lap.org_id, lsq.expected_start_date, lap.currency_conversion_type,
15774            lap.currency_conversion_rate, lap.currency_conversion_date, lsq.line_intended_use,
15775            pdt.name
15776         FROM   okl_lease_applications_b lap, okl_lease_quotes_b lsq, okl_products pdt
15777         WHERE  lsq.parent_object_id = lap.id
15778     AND    lsq.parent_object_code = 'LEASEAPP'
15779     AND    lsq.primary_quote = 'Y'
15780     AND    lsq.product_id = pdt.id
15781     AND    lsq.id = cp_id;
15782 
15783         -- Check if quoting tax was already calculated for this quote. If so, first
15784         -- delete the quoting tax source transaction and tax details
15785     CURSOR l_prevtaxsources_csr(cp_trx_id IN NUMBER) IS
15786     SELECT id
15787     FROM   okl_tax_sources
15788     WHERE  tax_call_type_code = G_UPFRONT_TAX
15789     AND    trx_id = cp_trx_id;
15790 
15791         -- Get the previous tax trx details
15792         CURSOR l_prevtaxtrxdet_csr(cp_txs_id IN NUMBER) IS
15793         SELECT ID
15794         FROM   okl_tax_trx_details
15795         WHERE  txs_id = cp_txs_id;
15796 
15797         -- Get all the assets of the sales quote
15798         CURSOR l_quoteassets_csr(cp_quote_id IN NUMBER) IS
15799     SELECT AST.ID  asset_id, asset_number, install_site_id
15800     FROM   OKL_ASSETS_B AST
15801     WHERE  AST.PARENT_OBJECT_CODE = 'LEASEQUOTE'
15802     AND    AST.PARENT_OBJECT_ID = cp_quote_id;
15803 
15804     -- Get Inv item and supplier
15805     CURSOR l_assetcomponent_csr(cp_asset_id IN NUMBER) IS
15806     SELECT inv_item_id, supplier_id
15807     FROM   okl_asset_components_b
15808     WHERE  asset_id = cp_asset_id
15809     AND    primary_component = 'Y';
15810 
15811         -- Get the quote and asset level cash flows for a sales quote
15812         CURSOR l_q_asset_cashflows_csr(cp_quote_id IN NUMBER) IS
15813         SELECT cfo.source_id ,  ast.asset_number, caf.sty_id,
15814            sum(nvl((cfl.amount * cfl.number_of_periods),0) + nvl(cfl.stub_amount,0)) taxable_basis
15815         FROM   OKL_ASSETS_B ast, okl_cash_flow_objects cfo, okl_cash_flows caf, okl_cash_flow_levels cfl
15816         WHERE  AST.PARENT_OBJECT_CODE = 'LEASEQUOTE'
15817         AND    AST.PARENT_OBJECT_ID = cp_quote_id
15818         AND    ast.id = cfo.source_id
15819         AND    cfo.oty_code = 'QUOTED_ASSET'
15820         AND    cfo.source_table = 'OKL_ASSETS_B'
15821         AND    cfo.id = caf.cfo_id
15822         AND    caf.cft_code = 'PAYMENT_SCHEDULE'
15823         AND    caf.sts_code IN ('CURRENT', 'WORK')
15824         AND    caf.id = cfl.caf_id
15825         GROUP BY cfo.source_id ,  ast.asset_number, caf.sty_id
15826     UNION
15827     SELECT cfo.source_id ,  null, caf.sty_id,
15828            sum(nvl((cfl.amount * cfl.number_of_periods),0) + nvl(cfl.stub_amount,0)) taxable_basis
15829         FROM   okl_cash_flow_objects cfo, okl_cash_flows caf, okl_cash_flow_levels cfl
15830         WHERE  cfo.oty_code = 'LEASE_QUOTE'
15831         AND    cfo.source_table = 'OKL_LEASE_QUOTES_B'
15832         AND    cfo.source_id = cp_quote_id
15833         AND    cfo.id = caf.cfo_id
15834         AND    caf.cft_code = 'PAYMENT_SCHEDULE'
15835         AND    caf.sts_code IN ('CURRENT', 'WORK')
15836         AND    caf.id = cfl.caf_id
15837         GROUP BY cfo.source_id ,  null, caf.sty_id;
15838 
15839         -- Get 'BILL_TO' identifiers for the quote party
15840         CURSOR l_billtosite_csr(cp_party_id IN NUMBER) IS
15841     SELECT
15842            b.site_use_id,
15843            c.party_site_id,
15844            c.party_id,
15845            c.location_id
15846     FROM   hz_cust_acct_sites_all a,
15847            hz_cust_site_uses_all  b,
15848            hz_party_sites      c,
15849            hz_parties d
15850     WHERE
15851            a.cust_acct_site_id = b.cust_acct_site_id
15852     AND    b.site_use_code     = 'BILL_TO'
15853     AND    d.party_id          = cp_party_id
15854     AND    a.party_site_id     = c.party_site_id
15855     AND    c.party_id          = d.party_id;
15856 
15857         -- Get 'SHIP_TO' identifiers for the quote party
15858         CURSOR l_shiptosite_csr(cp_party_id IN NUMBER) IS
15859     SELECT
15860            b.site_use_id,
15861            c.party_site_id,
15862            c.party_id,
15863            c.location_id
15864     FROM   hz_cust_acct_sites_all a,
15865            hz_cust_site_uses_all  b,
15866            hz_party_sites      c,
15867            hz_parties d
15868     WHERE
15869            a.cust_acct_site_id = b.cust_acct_site_id
15870     AND    b.site_use_code     = 'SHIP_TO'
15871     AND    d.party_id          = cp_party_id
15872     AND    a.party_site_id     = c.party_site_id
15873     AND    c.party_id          = d.party_id;
15874 
15875     -- Check if tax basis override formula exists
15876         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
15877         SELECT fma_id
15878         FROM   okl_tax_basis_override
15879         WHERE  try_id = cp_try_id
15880         AND    org_id = MO_GLOBAL.get_current_org_id;
15881 
15882         -- GET FORMULA NAME
15883     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
15884     SELECT name
15885     FROM   Okl_formulae_b
15886     WHERE  id = cp_fma_id;
15887 
15888     -- Get the AR customer transaction type used by OKL
15889     CURSOR l_racusttrxtypes_csr IS
15890     SELECT cust_trx_type_id
15891         FROM   ra_cust_trx_types_all
15892         WHERE  name = 'Invoice-OKL';
15893 
15894     -- Get currency attributes
15895     CURSOR l_fndcurrency_csr(cp_currency_code IN VARCHAR2) IS
15896     SELECT precision, minimum_accountable_unit
15897     FROM   fnd_currencies
15898     WHERE  currency_code = cp_currency_code
15899         AND    enabled_flag = 'Y'
15900     AND    NVL(start_date_active, sysdate) <= sysdate
15901     AND    NVL(end_date_active, sysdate) >= sysdate;
15902 
15903     -- Get the primary pay vendor location for the vendor
15904     CURSOR l_povendorsites_csr(cp_vendor_id IN NUMBER) IS
15905     SELECT vendor_site_id
15906     FROM   po_vendor_sites
15907     WHERE  vendor_id = cp_vendor_id
15908     AND    primary_pay_site_flag = 'Y';
15909 
15910     -- Cursor to get the corresponding hz_location id for the install location id
15911     CURSOR l_get_location_id(cp_party_site_id  IN NUMBER) IS
15912     -- SECHAWLA 12-DEC-05 4690074
15913     SELECT hzp.location_id
15914     FROM   HZ_PARTY_SITES hzp, hz_party_site_uses hsu
15915     WHERE  hsu.PARTY_SITE_USE_ID = cp_party_site_id
15916     AND    hzp.party_Site_id = hsu.party_site_id;
15917 
15918     -- Cursor to get the ship_to_site_use_id corresponding to the install_location_id of the asset
15919     CURSOR l_get_shiptositeid(cp_cust_acct_id IN NUMBER, cp_inst_loc_id IN NUMBER,cp_loc_id IN NUMBER) IS
15920     SELECT b.site_use_id, c.party_site_id, c.party_id, c.location_id
15921     FROM   hz_cust_acct_sites_all a,
15922            hz_cust_site_uses_all  b,
15923            hz_party_sites      c
15924     WHERE  a.cust_acct_site_id = b.cust_acct_site_id
15925     AND    b.site_use_code     = 'SHIP_TO'
15926     AND    a.party_site_id     = c.party_site_id
15927     AND    a.cust_account_id   = cp_cust_acct_id
15928     AND    a.org_id            = MO_GLOBAL.get_current_org_id
15929     AND    c.party_site_id     = cp_inst_loc_id
15930     AND    c.location_id       = cp_loc_id;
15931 
15932     TYPE asset_level_det_rec_type IS RECORD
15933         (asset_id                                               NUMBER,
15934          asset_number                                   VARCHAR2(150),
15935          vendor_site_id                                 NUMBER,
15936          inv_item_id                                    NUMBER,
15937          ship_to_site_use_id                    NUMBER,
15938          asset_pymnt_exist                              VARCHAR2(1));
15939 
15940     TYPE  prev_tx_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15941     TYPE  prev_tx_trx_det_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15942     TYPE  quoteassets_tbl_type IS TABLE OF l_quoteassets_csr%ROWTYPE INDEX BY BINARY_INTEGER;
15943         TYPE asset_level_det_tbl_type IS TABLE OF asset_level_det_rec_type INDEX BY BINARY_INTEGER;
15944         TYPE q_asset_cashflows_tbl_type IS TABLE OF l_q_asset_cashflows_csr%ROWTYPE INDEX BY BINARY_INTEGER;
15945 
15946         l_q_asset_cashflows_tbl                 q_asset_cashflows_tbl_type;
15947         l_sq_asset_level_det_tbl            asset_level_det_tbl_type;
15948     l_quoteassets_tbl                           quoteassets_tbl_type;
15949     l_prevtaxsources_tbl                        prev_tx_src_tbl_type;
15950     l_prevtaxtrxdet_tbl                         prev_tx_trx_det_tbl_type;
15951     lp_tax_src_params_rec           tax_src_params_rec_type;
15952 
15953     lx_line_params_tbl              line_params_tbl_type;
15954     lx_tax_sources_tbl                  tax_sources_tbl_type;
15955     lp_hdr_params_rec               hdr_params_rec_type;
15956 
15957     l_sq_trx_type_id                            NUMBER;
15958     l_parent_object_code                        VARCHAR2(30);
15959         l_parent_object_id                              NUMBER;
15960     l_legal_entity_id               NUMBER;
15961         l_inv_item_id                                   NUMBER;
15962         l_supplier_id                                   NUMBER;
15963 
15964     l_reported_yn                                       VARCHAR2(1);
15965     l_ledger_id                     NUMBER;
15966     l_taxation_country              VARCHAR2(2);
15967 
15968         l_k_start_date                                  DATE;
15969         l_sq_fin_prod_id                                NUMBER;
15970         l_sq_int_disclosed                              VARCHAR2(30);
15971         l_sq_transfer_of_title                  VARCHAR2(30);
15972     l_sq_sale_lease_back                        VARCHAR2(30);
15973     l_sq_purchase_of_lease                      VARCHAR2(30);
15974     l_sq_usage_of_equipment                     VARCHAR2(450);
15975     l_sq_age_of_equipment                       NUMBER;
15976 
15977         l_inv_item_org_id                               NUMBER;
15978 
15979     l_fetch_size                    NUMBER := 10000;
15980     i                                                           NUMBER;
15981     l_fma_id                                            NUMBER;
15982     l_formula_name                                      VARCHAR2(150);
15983 
15984     l_cust_acct_id                                      NUMBER;
15985     l_bill_to_siteuseid                 NUMBER;
15986     l_bill_to_party_site_id         NUMBER;
15987     l_bill_to_party_id              NUMBER;
15988     l_bill_to_location_id           NUMBER;
15989     l_currency_code                                     VARCHAR2(15);
15990     l_precision                         NUMBER;
15991     l_minimum_accountable_unit          NUMBER;
15992     l_cust_trx_type_id                          NUMBER;
15993     l_party_id                                          NUMBER;
15994     l_vendor_site_id                            NUMBER;
15995     l_loc_id                                            NUMBER;
15996     l_ship_to_siteuseid                         NUMBER;
15997     l_ship_to_party_site_id         NUMBER;
15998     l_ship_to_party_id              NUMBER;
15999     l_ship_to_location_id           NUMBER;
16000     l_org_id                        NUMBER;
16001     l_start_date                    DATE;
16002     l_currency_conversion_type      VARCHAR2(30);
16003     l_currency_conversion_rate      NUMBER;
16004     l_currency_conversion_date      DATE;
16005     l_line_intended_use             VARCHAR2(240);
16006     l_deal_type                     VARCHAR2(30);
16007 
16008     tax_call_cnt                                        NUMBER;
16009     Q_pymnt_exist                                       VARCHAR2(1);
16010     ind                                                         NUMBER;
16011 
16012   BEGIN
16013 
16014     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16015         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax','Begin(+)');
16016     END IF;
16017 
16018     --Print Input Variables
16019     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16020          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16021               'p_init_msg_list :'||p_init_msg_list);
16022          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16023               'p_source_trx_id :'||p_source_trx_id);
16024          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16025               'p_source_trx_name :'||p_source_trx_name);
16026          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16027               'p_source_table :'||p_source_table);
16028     END IF;
16029 
16030     x_return_status := OKL_API.G_RET_STS_SUCCESS;
16031 
16032     -- Validate the source trx id
16033     OPEN  l_leasequotes_csr(p_source_trx_id);
16034     FETCH l_leasequotes_csr INTO  l_k_start_date, l_sq_fin_prod_id, l_sq_int_disclosed,
16035               l_sq_transfer_of_title, l_sq_sale_lease_back, l_sq_purchase_of_lease, l_sq_usage_of_equipment,
16036                   l_sq_age_of_equipment, l_parent_object_code, l_parent_object_id, l_legal_entity_id;
16037 
16038     IF l_leasequotes_csr%NOTFOUND THEN
16039       -- Source trx id is invalid
16040       OKC_API.set_message( p_app_name      => 'OKC',
16041                            p_msg_name      => G_INVALID_VALUE,
16042                            p_token1        => G_COL_NAME_TOKEN,
16043                            p_token1_value  => 'SOURCE_TRX_ID');
16044       RAISE OKL_API.G_EXCEPTION_ERROR;
16045     END IF;
16046     CLOSE l_leasequotes_csr;
16047 
16048     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16049           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16050             'l_k_start_date '||l_k_start_date );
16051       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16052             'l_sq_fin_prod_id '||l_sq_fin_prod_id );
16053       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16054             'l_sq_int_disclosed '||l_sq_int_disclosed );
16055       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16056             'l_sq_transfer_of_title '||l_sq_transfer_of_title );
16057       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16058             'l_sq_sale_lease_back '||l_sq_sale_lease_back );
16059       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16060             'l_sq_purchase_of_lease '||l_sq_purchase_of_lease );
16061       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16062             'l_sq_usage_of_equipment '||l_sq_usage_of_equipment );
16063       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16064             'l_sq_age_of_equipment '||l_sq_age_of_equipment );
16065       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16066             'l_parent_object_code '||l_parent_object_code );
16067       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16068             'l_parent_object_id '||l_parent_object_id );
16069     END IF;
16070 
16071         -- Check if Quoting tax lines already exist for this quote
16072     OPEN  l_prevtaxsources_csr(p_source_trx_id);
16073         LOOP
16074           l_prevtaxsources_tbl.DELETE;
16075           FETCH l_prevtaxsources_csr BULK COLLECT INTO l_prevtaxsources_tbl LIMIT l_fetch_size;
16076       IF l_prevtaxsources_tbl.COUNT > 0 THEN
16077         i := 0;
16078         l_prevtaxtrxdet_tbl.DELETE;
16079 
16080         FOR k IN l_prevtaxsources_tbl.FIRST .. l_prevtaxsources_tbl.LAST LOOP
16081           -- Get the corresponding tax trx details
16082           FOR  l_prevtaxtrxdet_rec IN l_prevtaxtrxdet_csr(l_prevtaxsources_tbl(k)) LOOP
16083             i := i + 1;
16084             l_prevtaxtrxdet_tbl(i):= l_prevtaxtrxdet_rec.id;
16085 
16086           END LOOP;
16087         END LOOP;
16088 
16089         -- Delete from both the tables.
16090         BEGIN
16091           IF l_prevtaxtrxdet_tbl.COUNT > 0 THEN
16092             FORALL i IN l_prevtaxtrxdet_tbl.FIRST..l_prevtaxtrxdet_tbl.LAST
16093               DELETE FROM OKL_TAX_TRX_DETAILS WHERE id = l_prevtaxtrxdet_tbl(i);
16094 
16095           END IF;
16096         EXCEPTION
16097           WHEN OTHERS THEN
16098             IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
16099                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
16100                                 OKL_API.set_message( p_app_name      => 'OKL',
16101                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
16102                                      p_token1        => 'TABLE_NAME',
16103                                      p_token1_value  => 'OKL_TAX_TRX_DETAILS',
16104                                      p_token2        => 'ERROR_CODE',
16105                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
16106                                                                          p_token3        => 'ITERATION',
16107                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
16108                           END LOOP;
16109                           RAISE OKL_API.G_EXCEPTION_ERROR;
16110                         END IF;
16111         END;
16112 
16113         BEGIN
16114           FORALL i IN l_prevtaxsources_tbl.FIRST..l_prevtaxsources_tbl.LAST
16115             DELETE FROM OKL_TAX_SOURCES WHERE id = l_prevtaxsources_tbl(i);
16116         EXCEPTION
16117           WHEN OTHERS THEN
16118                 IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
16119                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
16120                                 OKL_API.set_message( p_app_name      => 'OKL',
16121                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
16122                                      p_token1        => 'TABLE_NAME',
16123                                      p_token1_value  => 'OKL_TAX_SOURCES',
16124                                      p_token2        => 'ERROR_CODE',
16125                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
16126                                                                          p_token3        => 'ITERATION',
16127                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
16128                           END LOOP;
16129                           RAISE OKL_API.G_EXCEPTION_ERROR;
16130                         END IF;
16131         END;
16132 
16133         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16134                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16135                                 'Deleted prev tax sources and lines for this sales quote ' );
16136         END IF;
16137 
16138       END IF;
16139       EXIT WHEN l_prevtaxsources_csr%NOTFOUND;
16140     END LOOP;
16141     CLOSE l_prevtaxsources_csr;
16142 
16143     -- Fetch the Ledger info
16144     l_ledger_id := okl_accounting_util.get_set_of_books_id;
16145     l_reported_yn := 'N';
16146 
16147     -- Fetch the Tax country
16148     l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
16149                                                        x_msg_count         => x_msg_count,
16150                                                        x_msg_data          => x_msg_data,
16151                                                        p_legal_entity_id   => l_legal_entity_id);
16152         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16153       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16154     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16155       RAISE OKL_API.G_EXCEPTION_ERROR;
16156     END IF;
16157 
16158     -- Fetch 'Sales Quote' Trx type ID
16159     OPEN l_trxtypes_csr;
16160     FETCH l_trxtypes_csr INTO l_sq_trx_type_id;
16161     CLOSE l_trxtypes_csr;
16162 
16163     -- Check if taxable basis override applies to 'Sales Quote' transaction
16164     OPEN  l_txbasisoverride_csr(cp_try_id => l_sq_trx_type_id);
16165     FETCH l_txbasisoverride_csr INTO l_fma_id;
16166     CLOSE l_txbasisoverride_csr;
16167 
16168     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16169       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16170                 'Sales Quote Trx Type ID '||l_sq_trx_type_id );
16171       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16172                 'Formula ID '||l_fma_id );
16173     END IF;
16174 
16175     IF l_fma_id IS NOT NULL THEN
16176       OPEN  l_formulae_csr(l_fma_id);
16177       FETCH l_formulae_csr INTO l_formula_name;
16178       IF l_formulae_csr%NOTFOUND THEN
16179         OKC_API.set_message( p_app_name      => 'OKC',
16180                              p_msg_name      => G_INVALID_VALUE,
16181                              p_token1        => G_COL_NAME_TOKEN,
16182                              p_token1_value  => 'FMA_ID');
16183         RAISE OKL_API.G_EXCEPTION_ERROR;
16184           END IF;
16185           CLOSE l_formulae_csr;
16186 
16187       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16188                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16189                 'l_formula_name '||l_formula_name );
16190       END IF;
16191         END IF;
16192 
16193         -- Get the AR cust trx type ID
16194     OPEN  l_racusttrxtypes_csr;
16195     FETCH l_racusttrxtypes_csr INTO l_cust_trx_type_id;
16196     IF l_racusttrxtypes_csr%NOTFOUND THEN
16197       -- Cust trx type id is required
16198       OKC_API.set_message( p_app_name      => 'OKC',
16199                            p_msg_name      => G_REQUIRED_VALUE,
16200                            p_token1        => G_COL_NAME_TOKEN,
16201                            p_token1_value  => 'CUST_TRX_TYPE_ID');
16202       RAISE OKL_API.G_EXCEPTION_ERROR;
16203     END IF;
16204     CLOSE l_racusttrxtypes_csr;
16205 
16206     -- Fetch parent object values
16207         IF l_parent_object_code ='LEASEOPP' THEN
16208           OPEN  l_leaseopp_csr(p_source_trx_id);
16209           FETCH l_leaseopp_csr INTO l_currency_code, l_cust_acct_id, l_party_id,  -- l_cust_acct_id may be null
16210                                 l_org_id, l_start_date, l_currency_conversion_type,
16211                                 l_currency_conversion_rate, l_currency_conversion_date,
16212                                 l_line_intended_use,l_deal_type;
16213           IF l_leaseopp_csr%NOTFOUND THEN
16214             OKC_API.set_message( p_app_name      => 'OKC',
16215                              p_msg_name      => G_REQUIRED_VALUE,
16216                              p_token1        => G_COL_NAME_TOKEN,
16217                              p_token1_value  => 'CURRENCY_CODE');
16218         RAISE OKL_API.G_EXCEPTION_ERROR;
16219       END IF;
16220           CLOSE l_leaseopp_csr;
16221         ELSIF l_parent_object_code ='LEASEAPP' THEN
16222           OPEN  l_leaseapp_csr(p_source_trx_id);
16223           FETCH l_leaseapp_csr INTO l_currency_code, l_cust_acct_id, l_party_id, -- l_cust_acct_id may be null
16224                                 l_org_id, l_start_date, l_currency_conversion_type,
16225                                 l_currency_conversion_rate, l_currency_conversion_date,
16226                                 l_line_intended_use, l_deal_type;
16227           IF l_leaseapp_csr%NOTFOUND THEN
16228             OKC_API.set_message( p_app_name      => 'OKC',
16229                              p_msg_name      => G_REQUIRED_VALUE,
16230                              p_token1        => G_COL_NAME_TOKEN,
16231                              p_token1_value  => 'CURRENCY_CODE');
16232         RAISE OKL_API.G_EXCEPTION_ERROR;
16233       END IF;
16234           CLOSE l_leaseapp_csr;
16235         END IF;
16236 
16237         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16238           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16239             'l_currency_code '||l_currency_code );
16240       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16241             'l_cust_acct_id '||l_cust_acct_id );
16242       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16243             'l_party_id '||l_party_id );
16244     END IF;
16245 
16246         -- Get Bill to Site Use ID from TCA
16247         -- This cursor may return more than one Bill To sites for a party
16248         -- Select the first bill to returned by the cursor
16249         -- Bill To is not captured on a sales quote. So we get it from TCA
16250         -- There may not be any Bill To site defined for a party
16251     OPEN  l_billtosite_csr(l_party_id);
16252         FETCH l_billtosite_csr INTO l_bill_to_siteuseid, l_bill_to_party_site_id,
16253                                 l_bill_to_party_id, l_bill_to_location_id;
16254         IF l_billtosite_csr%NOTFOUND THEN
16255           OKC_API.set_message( p_app_name      => 'OKL',
16256                            p_msg_name      => 'OKL_TX_NO_SQ_BILL_TO');
16257       RAISE OKL_API.G_EXCEPTION_ERROR;
16258         END IF;
16259         CLOSE l_billtosite_csr ;
16260 
16261     -- Fetch precision, minimum accountable unit
16262     OPEN  l_fndcurrency_csr(l_currency_code);
16263     FETCH l_fndcurrency_csr INTO l_precision, l_minimum_accountable_unit;
16264     IF l_fndcurrency_csr%NOTFOUND THEN
16265       -- Currency code is invalid
16266       OKC_API.set_message( p_app_name      => 'OKC',
16267                            p_msg_name      => G_INVALID_VALUE,
16268                            p_token1        => G_COL_NAME_TOKEN,
16269                            p_token1_value  => 'CURRENCY_CODE');
16270       RAISE OKL_API.G_EXCEPTION_ERROR;
16271     END IF;
16272     CLOSE l_fndcurrency_csr;
16273 
16274     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16275           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16276             'l_bill_to_siteuseid '||l_bill_to_siteuseid );
16277       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16278             'l_precision '||l_precision );
16279       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16280             'l_minimum_accountable_unit '||l_minimum_accountable_unit );
16281     END IF;
16282 
16283     -- Sales Quoting is not capturing Purchase Option as of now.
16284     -- So this determinant will be null for Sales Quote
16285 
16286     -- Get all the assets belonging to a quote
16287     -------------- Populate asset level TBC Determinants ---------------
16288     i := 0;
16289 
16290     OPEN l_quoteassets_csr(p_source_trx_id);
16291     LOOP
16292       l_quoteassets_tbl.DELETE;
16293       FETCH l_quoteassets_csr BULK COLLECT INTO l_quoteassets_tbl LIMIT l_fetch_size;
16294 
16295       IF l_quoteassets_tbl.COUNT > 0 THEN
16296         FOR K IN l_quoteassets_tbl.FIRST..l_quoteassets_tbl.LAST LOOP
16297 
16298           OPEN  l_assetcomponent_csr(l_quoteassets_tbl(k).asset_id);
16299                   FETCH l_assetcomponent_csr INTO l_inv_item_id, l_supplier_id;
16300                   CLOSE l_assetcomponent_csr;
16301 
16302                   IF l_supplier_id IS NOT NULL THEN
16303                         OPEN   l_povendorsites_csr(l_supplier_id);
16304                 FETCH  l_povendorsites_csr INTO l_vendor_site_id; -- will be null if none of the sites are checked as primary
16305                 CLOSE  l_povendorsites_csr;
16306           END IF;
16307 
16308           -- get the location ID
16309                   OPEN  l_get_location_id(l_quoteassets_tbl(k).install_site_id);
16310                   FETCH l_get_location_id INTO l_loc_id;
16311                   CLOSE l_get_location_id;
16312 
16313                   IF l_loc_id IS NULL THEN
16314             -- Install Location id is required
16315                 OKL_API.set_message( p_app_name      => 'OKC',
16316                                  p_msg_name      => G_REQUIRED_VALUE,
16317                                  p_token1        => G_COL_NAME_TOKEN,
16318                                  p_token1_value  => 'INSTALL_LOCATION_ID');
16319                 RAISE OKL_API.G_EXCEPTION_ERROR;
16320           END IF;
16321 
16322               IF l_cust_acct_id IS NOT NULL THEN
16323                 -- Get the ship to site use id of the asset
16324                 OPEN  l_get_shiptositeid(l_cust_acct_id,l_quoteassets_tbl(k).install_site_id,l_loc_id);
16325                 FETCH l_get_shiptositeid INTO l_ship_to_siteuseid, l_ship_to_party_site_id,
16326                                           l_ship_to_party_id, l_ship_to_location_id;
16327                 CLOSE l_get_shiptositeid;
16328           ELSE
16329                 OPEN  l_shiptosite_csr(l_party_id);
16330                 FETCH l_shiptosite_csr INTO l_ship_to_siteuseid, l_ship_to_party_site_id,
16331                                         l_ship_to_party_id, l_ship_to_location_id;
16332                 CLOSE l_shiptosite_csr;
16333           END IF;
16334 
16335           l_sq_asset_level_det_tbl(i).asset_id            := l_quoteassets_tbl(k).asset_id;
16336           l_sq_asset_level_det_tbl(i).asset_number        := l_quoteassets_tbl(k).asset_number;
16337           l_sq_asset_level_det_tbl(i).vendor_site_id      := l_vendor_site_id;
16338           l_sq_asset_level_det_tbl(i).inv_item_id         := l_inv_item_id;
16339           l_sq_asset_level_det_tbl(i).ship_to_site_use_id := l_ship_to_siteuseid;
16340 
16341           l_sq_asset_level_det_tbl(i).asset_pymnt_exist := 'N';
16342 
16343           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16344                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16345                                 'i '||i );
16346             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16347                                 'asset_id '||l_sq_asset_level_det_tbl(i).asset_id );
16348             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16349                                 'asset_number '||l_sq_asset_level_det_tbl(i).asset_number );
16350             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16351                                 'vendor_site_id '||l_sq_asset_level_det_tbl(i).vendor_site_id );
16352             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16353                                 'inv_item_id '||l_sq_asset_level_det_tbl(i).inv_item_id );
16354             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16355                                 'ship_to_site_use_id '||l_sq_asset_level_det_tbl(i).ship_to_site_use_id );
16356             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16357                                 'asset_pymnt_exist '||l_sq_asset_level_det_tbl(i).asset_pymnt_exist );
16358           END IF;
16359 
16360                   i := i+1;
16361         END LOOP;
16362       END IF;
16363           EXIT WHEN l_quoteassets_csr%NOTFOUND;
16364     END LOOP;
16365     CLOSE l_quoteassets_csr;
16366 
16367     -- Populate tax info
16368     Q_pymnt_exist := 'N';
16369 
16370     i := 1;
16371     OPEN l_q_asset_cashflows_csr(p_source_trx_id);
16372     LOOP
16373       l_q_asset_cashflows_tbl.DELETE;
16374       FETCH l_q_asset_cashflows_csr BULK COLLECT INTO l_q_asset_cashflows_tbl LIMIT l_fetch_size;
16375 
16376       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16377                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16378                 'l_q_asset_cashflows_tbl.count '||l_q_asset_cashflows_tbl.count||' i = '||i );
16379       END IF;
16380 
16381           IF l_q_asset_cashflows_tbl.count = 0 AND i = 1 THEN
16382                 -- No payments exist
16383         -- Tax call will still be made at the Q hdr and each asset level
16384 
16385                 tax_call_cnt := 1;
16386 
16387                 -- Quote level call begin
16388 
16389                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16390                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16391                   'tax_call_cnt '||tax_call_cnt );
16392         END IF;
16393 
16394         -- Populate tax sources record -- start
16395         lp_tax_src_params_rec.kle_id       := null;
16396         lp_tax_src_params_rec.asset_number := null;
16397         lp_tax_src_params_rec.line_name    := null;
16398 
16399         lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_ship_to_siteuseid;
16400         lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16401         lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16402         lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16403 
16404         lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16405         lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16406         lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16407         lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16408 
16409         lp_tax_src_params_rec.inventory_item_id             := null;
16410         lp_tax_src_params_rec.sty_id                        := null;
16411         lp_tax_src_params_rec.khr_id                        := null;
16412         lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16413         lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16414         lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16415         lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16416         lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16417         lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16418         lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16419         lp_tax_src_params_rec.trx_date                      := l_start_date;
16420         lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16421         lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16422         lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16423         lp_tax_src_params_rec.org_id                        := l_org_id;
16424         lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16425         lp_tax_src_params_rec.line_amt                      := 0;
16426         lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16427 
16428         lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16429         lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16430         lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16431         lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16432         lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16433         lp_tax_src_params_rec.adjusted_doc_number           := null;
16434             lp_tax_src_params_rec.adjusted_doc_date             := null;
16435         lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16436         lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16437 
16438         lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16439         lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16440         lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16441         -- Populate tax sources record -- end
16442 
16443         populate_tax_info(
16444                         p_api_version                  => p_api_version,
16445                         p_init_msg_list                => OKC_API.G_FALSE,
16446                         x_return_status                => x_return_status,
16447                         x_msg_count                    => x_msg_count,
16448                         x_msg_data                     => x_msg_data,
16449                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16450                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16451                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16452                         p_title_trnsfr_code                        => null,
16453                         p_sale_lease_back_code             => null,
16454                         p_lease_purchased_code             => null,
16455                         p_equip_usage_code                         => null,
16456                         p_vendor_site_id                           => null,
16457                         p_age_of_equip                             => null,
16458                 p_source_trx_name              => p_source_trx_name,
16459                 p_cust_trx_type_id             => l_cust_trx_type_id,
16460                 p_book_class_code              => l_deal_type,
16461                         p_tax_call_cnt                             => tax_call_cnt,
16462                         p_fma_id                                           => l_fma_id,
16463                         p_formula_name                             => l_formula_name,
16464                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16465                         p_precision                                        => l_precision,
16466                         p_sales_quote_id                           => p_source_trx_id,
16467                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16468                 p_ledger_id                    => l_ledger_id,
16469                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16470                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16471                 p_quote_flag                   => 'Y',
16472                 p_rounding_ship_to_party_id    => null,
16473                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16474                 p_line_amt_includes_tax_flag   => 'N',
16475                 p_term_quote_type_code         => null,
16476                 p_term_quote_reason_code       => null,
16477                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16478                 px_line_params_tbl             => lx_line_params_tbl );
16479 
16480         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16481           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16482         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16483           RAISE OKL_API.G_EXCEPTION_ERROR;
16484         END IF;
16485 
16486                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16487                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16488                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16489         END IF;
16490             -- quote level call end
16491 
16492                 tax_call_cnt := tax_call_cnt + 1;
16493 
16494                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16495                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16496                   'tax_call_cnt '||tax_call_cnt );
16497         END IF;
16498 
16499             -- Asset level call begin
16500                 IF l_sq_asset_level_det_tbl.COUNT > 0 THEN
16501 
16502                   FOR asset_cnt IN l_sq_asset_level_det_tbl.FIRST .. l_sq_asset_level_det_tbl.LAST LOOP
16503 
16504             -- Populate tax sources record -- start
16505             lp_tax_src_params_rec.kle_id       := null;
16506             lp_tax_src_params_rec.asset_number := l_sq_asset_level_det_tbl(asset_cnt).asset_number;
16507             lp_tax_src_params_rec.line_name    := l_sq_asset_level_det_tbl(asset_cnt).asset_number;
16508 
16509             lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_sq_asset_level_det_tbl(asset_cnt).ship_to_site_use_id;
16510             lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16511             lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16512             lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16513 
16514             lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16515             lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16516             lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16517             lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16518 
16519             lp_tax_src_params_rec.inventory_item_id             := l_sq_asset_level_det_tbl(asset_cnt).inv_item_id;
16520             lp_tax_src_params_rec.sty_id                        := null;
16521             lp_tax_src_params_rec.khr_id                        := null;
16522             lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16523             lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16524             lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16525             lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16526             lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16527             lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16528             lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16529             lp_tax_src_params_rec.trx_date                      := l_start_date;
16530             lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16531             lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16532             lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16533             lp_tax_src_params_rec.org_id                        := l_org_id;
16534             lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16535             lp_tax_src_params_rec.line_amt                      := 0;
16536             lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16537 
16538             lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16539             lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16540             lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16541             lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16542             lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16543             lp_tax_src_params_rec.adjusted_doc_number           := null;
16544                 lp_tax_src_params_rec.adjusted_doc_date             := null;
16545             lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16546             lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16547 
16548             lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16549             lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16550             lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16551             -- Populate tax sources record -- end
16552 
16553                     -- asset level call begin
16554             populate_tax_info(
16555                         p_api_version                  => p_api_version,
16556                         p_init_msg_list                => OKC_API.G_FALSE,
16557                         x_return_status                => x_return_status,
16558                         x_msg_count                    => x_msg_count,
16559                         x_msg_data                     => x_msg_data,
16560                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16561                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16562                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16563                         p_title_trnsfr_code                        => l_sq_transfer_of_title,
16564                         p_sale_lease_back_code             => l_sq_sale_lease_back,
16565                         p_lease_purchased_code             => l_sq_purchase_of_lease,
16566                         p_equip_usage_code                         => l_sq_usage_of_equipment,
16567                         p_vendor_site_id                           => l_sq_asset_level_det_tbl(asset_cnt).vendor_site_id,
16568                         p_age_of_equip                             => l_sq_age_of_equipment,
16569                 p_source_trx_name              => p_source_trx_name,
16570                 p_cust_trx_type_id             => l_cust_trx_type_id,
16571                 p_book_class_code              => l_deal_type,
16572                         p_tax_call_cnt                             => tax_call_cnt,
16573                         p_fma_id                                           => l_fma_id,
16574                         p_formula_name                             => l_formula_name,
16575                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16576                         p_precision                                        => l_precision,
16577                         p_sales_quote_id                           => p_source_trx_id,
16578                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16579                 p_ledger_id                    => l_ledger_id,
16580                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16581                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16582                 p_quote_flag                   => 'Y',
16583                 p_rounding_ship_to_party_id    => null,
16584                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16585                 p_line_amt_includes_tax_flag   => 'N',
16586                 p_term_quote_type_code         => null,
16587                 p_term_quote_reason_code       => null,
16588                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16589                 px_line_params_tbl             => lx_line_params_tbl );
16590 
16591             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16592               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16593                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16594               RAISE OKL_API.G_EXCEPTION_ERROR;
16595                 END IF;
16596                         -- asset level call end
16597 
16598                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16599                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16600                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16601                     END IF;
16602                         tax_call_cnt := tax_call_cnt + 1;
16603                   END LOOP;
16604                 END IF;
16605                 -- Asset level call end
16606                 -- No payments exist - end
16607 
16608             ELSIF l_q_asset_cashflows_tbl.COUNT > 0 THEN
16609                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16610                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16611                         'payments exist ');
16612           END IF;
16613 
16614           FOR K IN l_q_asset_cashflows_tbl.FIRST..l_q_asset_cashflows_tbl.LAST LOOP
16615 
16616                         tax_call_cnt := i;
16617 
16618                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16619                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16620                                 'tax_call_cnt '||tax_call_cnt);
16621                 END IF;
16622 
16623                 IF l_q_asset_cashflows_tbl(k).asset_number IS NULL THEN
16624               -- Q level payment
16625 
16626                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16627                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16628                                         'Quote level payment ');
16629               END IF;
16630 
16631               -- Populate tax sources record -- start
16632               lp_tax_src_params_rec.kle_id       := null;
16633               lp_tax_src_params_rec.asset_number := null;
16634               lp_tax_src_params_rec.line_name    := null;
16635 
16636               lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_ship_to_siteuseid;
16637               lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16638               lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16639               lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16640 
16641               lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16642               lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16643               lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16644               lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16645 
16646               lp_tax_src_params_rec.inventory_item_id             := null;
16647               lp_tax_src_params_rec.sty_id                        := l_q_asset_cashflows_tbl(k).sty_id;
16648               lp_tax_src_params_rec.khr_id                        := null;
16649               lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16650               lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16651               lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16652               lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16653               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16654               lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16655               lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16656               lp_tax_src_params_rec.trx_date                      := l_start_date;
16657               lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16658               lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16659               lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16660               lp_tax_src_params_rec.org_id                        := l_org_id;
16661               lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16662               lp_tax_src_params_rec.line_amt                      := l_q_asset_cashflows_tbl(k).taxable_basis;
16663               lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16664 
16665               lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16666               lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16667               lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16668               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16669               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16670               lp_tax_src_params_rec.adjusted_doc_number           := null;
16671                   lp_tax_src_params_rec.adjusted_doc_date             := null;
16672               lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16673               lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16674 
16675               lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16676               lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16677               lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16678               -- Populate tax sources record -- end
16679 
16680               populate_tax_info(
16681                         p_api_version                  => p_api_version,
16682                         p_init_msg_list                => OKC_API.G_FALSE,
16683                         x_return_status                => x_return_status,
16684                         x_msg_count                    => x_msg_count,
16685                         x_msg_data                     => x_msg_data,
16686                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16687                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16688                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16689                         p_title_trnsfr_code                        => null,
16690                         p_sale_lease_back_code             => null,
16691                         p_lease_purchased_code             => null,
16692                         p_equip_usage_code                         => null,
16693                         p_vendor_site_id                           => null,
16694                         p_age_of_equip                             => null,
16695                 p_source_trx_name              => p_source_trx_name,
16696                 p_cust_trx_type_id             => l_cust_trx_type_id,
16697                 p_book_class_code              => l_deal_type,
16698                         p_tax_call_cnt                             => tax_call_cnt,
16699                         p_fma_id                                           => l_fma_id,
16700                         p_formula_name                             => l_formula_name,
16701                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16702                         p_precision                                        => l_precision,
16703                         p_sales_quote_id                           => p_source_trx_id,
16704                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16705                 p_ledger_id                    => l_ledger_id,
16706                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16707                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16708                 p_quote_flag                   => 'Y',
16709                 p_rounding_ship_to_party_id    => null,
16710                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16711                 p_line_amt_includes_tax_flag   => 'N',
16712                 p_term_quote_type_code         => null,
16713                 p_term_quote_reason_code       => null,
16714                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16715                 px_line_params_tbl             => lx_line_params_tbl );
16716 
16717               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16718                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16719                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16720                 RAISE OKL_API.G_EXCEPTION_ERROR;
16721                   END IF;
16722 
16723                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16724                                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16725                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16726                       END IF;
16727 
16728                   Q_pymnt_exist := 'Y';
16729 
16730                 ELSE  -- asset line level payment
16731                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16732                              FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16733                                         'Asset level payment ');
16734               END IF;
16735 
16736                   IF l_sq_asset_level_det_tbl.count > 0 THEN
16737                         ind := l_sq_asset_level_det_tbl.FIRST;
16738                         LOOP
16739                           IF l_sq_asset_level_det_tbl(ind).asset_number = l_q_asset_cashflows_tbl(k).asset_number THEN
16740                             l_sq_asset_level_det_tbl(ind).asset_pymnt_exist := 'Y';
16741 
16742                             -- asset level call begin
16743                     -- Populate tax sources record -- start
16744                     lp_tax_src_params_rec.kle_id       := null;
16745                     lp_tax_src_params_rec.asset_number := l_sq_asset_level_det_tbl(ind).asset_number;
16746                     lp_tax_src_params_rec.line_name    := l_sq_asset_level_det_tbl(ind).asset_number;
16747 
16748                     lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_sq_asset_level_det_tbl(ind).ship_to_site_use_id;
16749                     lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16750                     lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16751                     lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16752 
16753                     lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16754                     lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16755                     lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16756                     lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16757 
16758                     lp_tax_src_params_rec.inventory_item_id             := l_sq_asset_level_det_tbl(ind).inv_item_id;
16759                     lp_tax_src_params_rec.sty_id                        := l_q_asset_cashflows_tbl(k).sty_id;
16760                     lp_tax_src_params_rec.khr_id                        := null;
16761                     lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16762                     lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16763                     lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16764                     lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16765                     lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16766                     lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16767                     lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16768                     lp_tax_src_params_rec.trx_date                      := l_start_date;
16769                     lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16770                     lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16771                     lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16772                     lp_tax_src_params_rec.org_id                        := l_org_id;
16773                     lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16774                     lp_tax_src_params_rec.line_amt                      := l_q_asset_cashflows_tbl(k).taxable_basis;
16775                     lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16776 
16777                     lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16778                     lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16779                     lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16780                     lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16781                     lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16782                     lp_tax_src_params_rec.adjusted_doc_number           := null;
16783                         lp_tax_src_params_rec.adjusted_doc_date             := null;
16784                     lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16785                     lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16786 
16787                     lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16788                     lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16789                     lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16790                     -- Populate tax sources record -- end
16791 
16792                             -- asset level call begin
16793                     populate_tax_info(
16794                                      p_api_version                  => p_api_version,
16795                                      p_init_msg_list                => OKC_API.G_FALSE,
16796                                      x_return_status                => x_return_status,
16797                                      x_msg_count                    => x_msg_count,
16798                                      x_msg_data                     => x_msg_data,
16799                                      p_prch_opt_det                                 => null,  -- purchase option is not captured on Sales Quote
16800                                              p_fin_prod_id_det                      => l_sq_fin_prod_id,
16801                                              p_int_disclosed_det                    => l_sq_int_disclosed,
16802                                      p_title_trnsfr_code                    => l_sq_transfer_of_title,
16803                                      p_sale_lease_back_code                 => l_sq_sale_lease_back,
16804                                      p_lease_purchased_code                 => l_sq_purchase_of_lease,
16805                                      p_equip_usage_code                     => l_sq_usage_of_equipment,
16806                                      p_vendor_site_id                       => l_sq_asset_level_det_tbl(ind).vendor_site_id,
16807                                      p_age_of_equip                                 => l_sq_age_of_equipment,
16808                              p_source_trx_name              => p_source_trx_name,
16809                              p_cust_trx_type_id             => l_cust_trx_type_id,
16810                              p_book_class_code              => l_deal_type,
16811                                      p_tax_call_cnt                         => tax_call_cnt,
16812                                      p_fma_id                                       => l_fma_id,
16813                                      p_formula_name                                 => l_formula_name,
16814                                      p_minimum_accountable_unit     => l_minimum_accountable_unit,
16815                                      p_precision                                        => l_precision,
16816                                      p_sales_quote_id                       => p_source_trx_id,
16817                              p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16818                              p_ledger_id                    => l_ledger_id,
16819                              p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16820                              p_tax_src_params_rec           => lp_tax_src_params_rec,
16821                              p_quote_flag                   => 'Y',
16822                              p_rounding_ship_to_party_id    => null,
16823                              p_rounding_bill_to_party_id    => l_bill_to_party_id,
16824                              p_line_amt_includes_tax_flag   => 'N',
16825                              p_term_quote_type_code         => null,
16826                              p_term_quote_reason_code       => null,
16827                              px_tax_sources_tbl                     => lx_tax_sources_tbl,
16828                              px_line_params_tbl             => lx_line_params_tbl );
16829 
16830                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16831                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16832                                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16833                       RAISE OKL_API.G_EXCEPTION_ERROR;
16834                                 END IF;
16835 
16836                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16837                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16838                                                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16839                                         END IF;
16840                                     -- asset level call end
16841                           EXIT;
16842                     END IF;
16843                     EXIT WHEN (ind = l_sq_asset_level_det_tbl.LAST);
16844                 ind := l_sq_asset_level_det_tbl.NEXT(ind);
16845                   END LOOP;
16846                 END IF;
16847           END IF;
16848                   i := i + 1;
16849         END LOOP;
16850       END IF;
16851       EXIT WHEN l_q_asset_cashflows_csr%NOTFOUND;
16852     END LOOP;
16853     CLOSE l_q_asset_cashflows_csr;
16854 
16855     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16856             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16857                 'i '||i);
16858     END IF;
16859 
16860     IF i > 1 THEN -- some payments exist
16861       tax_call_cnt := i; -- pick the last index
16862 
16863       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16864             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16865             'some payments exist, tax_call_cnt= '||tax_call_cnt);
16866       END IF;
16867 
16868       IF Q_pymnt_exist = 'N' THEN -- Q level payment does not exist
16869             -- Quote level call begin
16870 
16871             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16872               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16873                 'Q level payment does not exist ');
16874         END IF;
16875 
16876         -- Populate tax sources record -- start
16877         lp_tax_src_params_rec.kle_id       := null;
16878         lp_tax_src_params_rec.asset_number := null;
16879         lp_tax_src_params_rec.line_name    := null;
16880 
16881         lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_ship_to_siteuseid;
16882         lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16883         lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16884         lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16885 
16886         lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16887         lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16888         lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16889         lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16890 
16891         lp_tax_src_params_rec.inventory_item_id             := null;
16892         lp_tax_src_params_rec.sty_id                        := null;
16893         lp_tax_src_params_rec.khr_id                        := null;
16894         lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16895         lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16896         lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16897         lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16898         lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16899         lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16900         lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16901         lp_tax_src_params_rec.trx_date                      := l_start_date;
16902         lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16903         lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16904         lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16905         lp_tax_src_params_rec.org_id                        := l_org_id;
16906         lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16907         lp_tax_src_params_rec.line_amt                      := 0;
16908         lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16909 
16910         lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16911         lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16912         lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16913         lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16914         lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16915         lp_tax_src_params_rec.adjusted_doc_number           := null;
16916             lp_tax_src_params_rec.adjusted_doc_date             := null;
16917         lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16918         lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16919 
16920         lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16921         lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16922         lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16923         -- Populate tax sources record -- end
16924 
16925         populate_tax_info(
16926                         p_api_version                  => p_api_version,
16927                         p_init_msg_list                => OKC_API.G_FALSE,
16928                         x_return_status                => x_return_status,
16929                         x_msg_count                    => x_msg_count,
16930                         x_msg_data                     => x_msg_data,
16931                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16932                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16933                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16934                         p_title_trnsfr_code                        => null,
16935                         p_sale_lease_back_code             => null,
16936                         p_lease_purchased_code             => null,
16937                         p_equip_usage_code                         => null,
16938                         p_vendor_site_id                           => null,
16939                         p_age_of_equip                             => null,
16940                 p_source_trx_name              => p_source_trx_name,
16941                 p_cust_trx_type_id             => l_cust_trx_type_id,
16942                 p_book_class_code              => l_deal_type,
16943                         p_tax_call_cnt                             => tax_call_cnt,
16944                         p_fma_id                                           => l_fma_id,
16945                         p_formula_name                             => l_formula_name,
16946                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16947                         p_precision                                        => l_precision,
16948                         p_sales_quote_id                           => p_source_trx_id,
16949                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16950                 p_ledger_id                    => l_ledger_id,
16951                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16952                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16953                 p_quote_flag                   => 'Y',
16954                 p_rounding_ship_to_party_id    => null,
16955                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16956                 p_line_amt_includes_tax_flag   => 'N',
16957                 p_term_quote_type_code         => null,
16958                 p_term_quote_reason_code       => null,
16959                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16960                 px_line_params_tbl             => lx_line_params_tbl );
16961 
16962         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16963           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16964         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16965           RAISE OKL_API.G_EXCEPTION_ERROR;
16966         END IF;
16967 
16968                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16969                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16970                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16971         END IF;
16972                 -- quote level call end
16973                 tax_call_cnt := tax_call_cnt + 1;
16974       END IF;
16975 
16976           -- this table will have one record for each asset
16977           -- check if payment does not exist for any of the assets
16978           FOR k IN l_sq_asset_level_det_tbl.FIRST .. l_sq_asset_level_det_tbl.LAST LOOP
16979             IF l_sq_asset_level_det_tbl(k).asset_pymnt_exist = 'N' THEN -- aset level payment does not exist
16980 
16981           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16982                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16983                           'tax_call_cnt '||tax_call_cnt||'asset_pymnt_exist = N ' );
16984               END IF;
16985 
16986           -- Populate tax sources record -- start
16987           lp_tax_src_params_rec.kle_id       := null;
16988           lp_tax_src_params_rec.asset_number := l_sq_asset_level_det_tbl(k).asset_number;
16989           lp_tax_src_params_rec.line_name    := l_sq_asset_level_det_tbl(k).asset_number;
16990 
16991           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_sq_asset_level_det_tbl(k).ship_to_site_use_id;
16992           lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16993           lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16994           lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16995 
16996           lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16997           lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16998           lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16999           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
17000 
17001           lp_tax_src_params_rec.inventory_item_id             := l_sq_asset_level_det_tbl(k).inv_item_id;
17002           lp_tax_src_params_rec.sty_id                        := null;
17003           lp_tax_src_params_rec.khr_id                        := null;
17004           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
17005           lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
17006           lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
17007           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
17008           lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
17009           lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
17010           lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
17011           lp_tax_src_params_rec.trx_date                      := l_start_date;
17012           lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
17013           lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
17014           lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
17015           lp_tax_src_params_rec.org_id                        := l_org_id;
17016           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
17017           lp_tax_src_params_rec.line_amt                      := 0;
17018           lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
17019 
17020           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
17021           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
17022           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
17023           lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
17024           lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
17025           lp_tax_src_params_rec.adjusted_doc_number           := null;
17026           lp_tax_src_params_rec.adjusted_doc_date             := null;
17027           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
17028           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
17029 
17030           lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
17031           lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
17032           lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
17033           -- Populate tax sources record -- end
17034 
17035               -- asset level call begin
17036           populate_tax_info(
17037                         p_api_version                  => p_api_version,
17038                         p_init_msg_list                => OKC_API.G_FALSE,
17039                         x_return_status                => x_return_status,
17040                         x_msg_count                    => x_msg_count,
17041                         x_msg_data                     => x_msg_data,
17042                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
17043                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
17044                                 p_int_disclosed_det                        => l_sq_int_disclosed,
17045                         p_title_trnsfr_code                        => l_sq_transfer_of_title,
17046                         p_sale_lease_back_code             => l_sq_sale_lease_back,
17047                         p_lease_purchased_code             => l_sq_purchase_of_lease,
17048                         p_equip_usage_code                         => l_sq_usage_of_equipment,
17049                         p_vendor_site_id                           => l_sq_asset_level_det_tbl(k).vendor_site_id,
17050                         p_age_of_equip                             => l_sq_age_of_equipment,
17051                 p_source_trx_name              => p_source_trx_name,
17052                 p_cust_trx_type_id             => l_cust_trx_type_id,
17053                 p_book_class_code              => l_deal_type,
17054                         p_tax_call_cnt                             => tax_call_cnt,
17055                         p_fma_id                                           => l_fma_id,
17056                         p_formula_name                             => l_formula_name,
17057                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
17058                         p_precision                                        => l_precision,
17059                         p_sales_quote_id                           => p_source_trx_id,
17060                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
17061                 p_ledger_id                    => l_ledger_id,
17062                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
17063                 p_tax_src_params_rec           => lp_tax_src_params_rec,
17064                 p_quote_flag                   => 'Y',
17065                 p_rounding_ship_to_party_id    => null,
17066                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
17067                 p_line_amt_includes_tax_flag   => 'N',
17068                 p_term_quote_type_code         => null,
17069                 p_term_quote_reason_code       => null,
17070                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
17071                 px_line_params_tbl             => lx_line_params_tbl );
17072 
17073           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17074             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17075           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17076             RAISE OKL_API.G_EXCEPTION_ERROR;
17077           END IF;
17078                   -- asset level call end
17079 
17080                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17081                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17082                                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
17083                   END IF;
17084 
17085           tax_call_cnt := tax_call_cnt + 1;
17086 
17087              END IF;
17088            END LOOP;
17089          END IF;
17090 
17091      IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17092            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17093                         'lx_tax_sources_tbl.COUNT '||lx_tax_sources_tbl.COUNT);
17094            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17095                         'lx_line_params_tbl.COUNT '||lx_line_params_tbl.COUNT);
17096         END IF;
17097 
17098     -- Insert into okl_tax_sources
17099         BEGIN
17100       IF lx_tax_sources_tbl.COUNT > 0 THEN
17101         FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
17102           -- SAVE EXCEPTIONS
17103           INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
17104       END IF;
17105     EXCEPTION
17106       WHEN OTHERS THEN
17107         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
17108                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
17109                         OKL_API.set_message(     p_app_name      => 'OKL',
17110                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
17111                                      p_token1        => 'TABLE_NAME',
17112                                      p_token1_value  => 'OKL_TAX_SOURCES',
17113                                      p_token2        => 'ERROR_CODE',
17114                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
17115                                                                          p_token3        => 'ITERATION',
17116                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
17117                   END LOOP;
17118                   RAISE OKL_API.G_EXCEPTION_ERROR;
17119                 END IF;
17120     END;
17121 
17122     ---- Insert into okl_tax_sources end -----
17123     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17124                  FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17125                         'Insert into okl_tax_sources ');
17126         END IF;
17127 
17128     IF lx_line_params_tbl.COUNT > 0 THEN
17129           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17130                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17131                                'Before Calling OKL_TAX_INTERFACE_PVT.calculate_tax  '||x_return_status);
17132           END IF;
17133 
17134       lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
17135       lp_hdr_params_rec.trx_id                   := p_source_trx_id;
17136       lp_hdr_params_rec.internal_organization_id := l_org_id;
17137       lp_hdr_params_rec.entity_code              := G_SQ_ENTITY_CODE;
17138       lp_hdr_params_rec.event_class_code         := G_SQ_EVENT_CLASS_CODE;
17139       lp_hdr_params_rec.event_type_code          := G_SQ_CRE_EVT_TYPE_CODE;
17140       lp_hdr_params_rec.quote_flag               := 'Y';
17141 
17142       OKL_TAX_INTERFACE_PVT.calculate_tax(
17143                                     p_api_version       =>  p_api_version,
17144                                     p_init_msg_list     =>  p_init_msg_list,
17145                                     x_return_status     =>  x_return_status,
17146                                     x_msg_count         =>  x_msg_count,
17147                                     x_msg_data          =>  x_msg_data,
17148                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
17149                                     p_line_params_tbl   =>  lx_line_params_tbl);
17150 
17151       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17152                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17153                                    'After tax engine call '||x_return_status);
17154           END IF;
17155 
17156           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17157         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17158       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17159         RAISE OKL_API.G_EXCEPTION_ERROR;
17160       END IF;
17161     END IF;
17162 
17163     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17164       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17165              'Calling "update_tax_sources_total" .. ');
17166     END IF;
17167 
17168     update_tax_sources_total(p_api_version    => p_api_version,
17169                              p_init_msg_list  => p_init_msg_list,
17170                              x_return_status  => x_return_status,
17171                              x_msg_count      => x_msg_count,
17172                              x_msg_data       => x_msg_data,
17173                              p_source_trx_id  => p_source_trx_id,
17174                              p_source_trx_name => p_source_trx_name  );
17175 
17176     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17177       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17178              'Return Status' || x_return_status);
17179     END IF;
17180 
17181     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17182       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17183     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17184       RAISE OKL_API.G_EXCEPTION_ERROR;
17185     END IF;
17186 
17187     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17188       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17189              'Calling "copy_tax_trx_data" .. ');
17190     END IF;
17191 
17192     copy_tax_trx_data ( p_api_version       => p_api_version,
17193                         p_init_msg_list     => p_init_msg_list,
17194                         x_return_status     => x_return_status,
17195                         x_msg_count         => x_msg_count,
17196                         x_msg_data          => x_msg_data,
17197                         p_trx_id            => p_source_trx_id,
17198                         p_entity_code           => G_SQ_ENTITY_CODE,
17199                         p_event_class_code  => G_SQ_EVENT_CLASS_CODE,
17200                         p_source_trx_name   => p_source_trx_name);
17201 
17202 
17203     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17204       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17205              'Return Status' || x_return_status);
17206     END IF;
17207 
17208     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17209       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17210     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17211       RAISE OKL_API.G_EXCEPTION_ERROR;
17212     END IF;
17213 
17214     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17215        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ','End(-)');
17216     END IF;
17217 
17218   EXCEPTION
17219     WHEN OKL_API.G_EXCEPTION_ERROR THEN
17220       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17221         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ',
17222                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
17223       END IF;
17224 
17225       IF l_leasequotes_csr%ISOPEN THEN
17226         CLOSE l_leasequotes_csr;
17227       END IF;
17228 
17229       IF l_leaseopp_csr%ISOPEN THEN
17230         CLOSE l_leaseopp_csr;
17231       END IF;
17232 
17233       IF l_leaseapp_csr%ISOPEN THEN
17234         CLOSE l_leaseapp_csr;
17235       END IF;
17236 
17237       IF l_prevtaxsources_csr%ISOPEN THEN
17238         CLOSE l_prevtaxsources_csr;
17239       END IF;
17240 
17241       IF l_prevtaxtrxdet_csr%ISOPEN THEN
17242         CLOSE l_prevtaxtrxdet_csr;
17243       END IF;
17244 
17245       IF l_quoteassets_csr%ISOPEN THEN
17246         CLOSE l_quoteassets_csr;
17247       END IF;
17248 
17249       IF l_assetcomponent_csr%ISOPEN THEN
17250         CLOSE l_assetcomponent_csr;
17251       END IF;
17252 
17253       IF l_q_asset_cashflows_csr%ISOPEN THEN
17254         CLOSE l_q_asset_cashflows_csr;
17255       END IF;
17256 
17257       IF l_billtosite_csr%ISOPEN THEN
17258         CLOSE l_billtosite_csr;
17259       END IF;
17260 
17261       IF l_shiptosite_csr%ISOPEN THEN
17262         CLOSE l_shiptosite_csr;
17263       END IF;
17264 
17265       IF l_trxtypes_csr%ISOPEN THEN
17266         CLOSE l_trxtypes_csr;
17267       END IF;
17268 
17269       IF l_txbasisoverride_csr%ISOPEN THEN
17270         CLOSE l_txbasisoverride_csr;
17271       END IF;
17272 
17273       IF l_formulae_csr%ISOPEN THEN
17274         CLOSE l_formulae_csr;
17275       END IF;
17276 
17277       IF l_racusttrxtypes_csr%ISOPEN THEN
17278         CLOSE l_racusttrxtypes_csr;
17279       END IF;
17280 
17281       IF l_fndcurrency_csr%ISOPEN THEN
17282         CLOSE l_fndcurrency_csr;
17283       END IF;
17284 
17285       IF l_povendorsites_csr%ISOPEN THEN
17286         CLOSE l_povendorsites_csr;
17287       END IF;
17288 
17289       IF l_get_location_id%ISOPEN THEN
17290         CLOSE l_get_location_id;
17291       END IF;
17292 
17293       IF l_get_shiptositeid%ISOPEN THEN
17294         CLOSE l_get_shiptositeid;
17295       END IF;
17296 
17297       x_return_status := OKL_API.G_RET_STS_ERROR;
17298 
17299     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
17300       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17301         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ',
17302                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
17303       END IF;
17304 
17305       IF l_leasequotes_csr%ISOPEN THEN
17306         CLOSE l_leasequotes_csr;
17307       END IF;
17308 
17309       IF l_leaseopp_csr%ISOPEN THEN
17310         CLOSE l_leaseopp_csr;
17311       END IF;
17312 
17313       IF l_leaseapp_csr%ISOPEN THEN
17314         CLOSE l_leaseapp_csr;
17315       END IF;
17316 
17317       IF l_prevtaxsources_csr%ISOPEN THEN
17318         CLOSE l_prevtaxsources_csr;
17319       END IF;
17320 
17321       IF l_prevtaxtrxdet_csr%ISOPEN THEN
17322         CLOSE l_prevtaxtrxdet_csr;
17323       END IF;
17324 
17325       IF l_quoteassets_csr%ISOPEN THEN
17326         CLOSE l_quoteassets_csr;
17327       END IF;
17328 
17329       IF l_assetcomponent_csr%ISOPEN THEN
17330         CLOSE l_assetcomponent_csr;
17331       END IF;
17332 
17333       IF l_q_asset_cashflows_csr%ISOPEN THEN
17334         CLOSE l_q_asset_cashflows_csr;
17335       END IF;
17336 
17337       IF l_billtosite_csr%ISOPEN THEN
17338         CLOSE l_billtosite_csr;
17339       END IF;
17340 
17341       IF l_shiptosite_csr%ISOPEN THEN
17342         CLOSE l_shiptosite_csr;
17343       END IF;
17344 
17345       IF l_trxtypes_csr%ISOPEN THEN
17346         CLOSE l_trxtypes_csr;
17347       END IF;
17348 
17349       IF l_txbasisoverride_csr%ISOPEN THEN
17350         CLOSE l_txbasisoverride_csr;
17351       END IF;
17352 
17353       IF l_formulae_csr%ISOPEN THEN
17354         CLOSE l_formulae_csr;
17355       END IF;
17356 
17357       IF l_racusttrxtypes_csr%ISOPEN THEN
17358         CLOSE l_racusttrxtypes_csr;
17359       END IF;
17360 
17361       IF l_fndcurrency_csr%ISOPEN THEN
17362         CLOSE l_fndcurrency_csr;
17363       END IF;
17364 
17365       IF l_povendorsites_csr%ISOPEN THEN
17366         CLOSE l_povendorsites_csr;
17367       END IF;
17368 
17369       IF l_get_location_id%ISOPEN THEN
17370         CLOSE l_get_location_id;
17371       END IF;
17372 
17373       IF l_get_shiptositeid%ISOPEN THEN
17374         CLOSE l_get_shiptositeid;
17375       END IF;
17376 
17377       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
17378 
17379     WHEN OTHERS THEN
17380       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17381         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ',
17382                   'EXCEPTION :'||sqlerrm);
17383       END IF;
17384 
17385       IF l_leasequotes_csr%ISOPEN THEN
17386         CLOSE l_leasequotes_csr;
17387       END IF;
17388 
17389       IF l_leaseopp_csr%ISOPEN THEN
17390         CLOSE l_leaseopp_csr;
17391       END IF;
17392 
17393       IF l_leaseapp_csr%ISOPEN THEN
17394         CLOSE l_leaseapp_csr;
17395       END IF;
17396 
17397       IF l_prevtaxsources_csr%ISOPEN THEN
17398         CLOSE l_prevtaxsources_csr;
17399       END IF;
17400 
17401       IF l_prevtaxtrxdet_csr%ISOPEN THEN
17402         CLOSE l_prevtaxtrxdet_csr;
17403       END IF;
17404 
17405       IF l_quoteassets_csr%ISOPEN THEN
17406         CLOSE l_quoteassets_csr;
17407       END IF;
17408 
17409       IF l_assetcomponent_csr%ISOPEN THEN
17410         CLOSE l_assetcomponent_csr;
17411       END IF;
17412 
17413       IF l_q_asset_cashflows_csr%ISOPEN THEN
17414         CLOSE l_q_asset_cashflows_csr;
17415       END IF;
17416 
17417       IF l_billtosite_csr%ISOPEN THEN
17418         CLOSE l_billtosite_csr;
17419       END IF;
17420 
17421       IF l_shiptosite_csr%ISOPEN THEN
17422         CLOSE l_shiptosite_csr;
17423       END IF;
17424 
17425       IF l_trxtypes_csr%ISOPEN THEN
17426         CLOSE l_trxtypes_csr;
17427       END IF;
17428 
17429       IF l_txbasisoverride_csr%ISOPEN THEN
17430         CLOSE l_txbasisoverride_csr;
17431       END IF;
17432 
17433       IF l_formulae_csr%ISOPEN THEN
17434         CLOSE l_formulae_csr;
17435       END IF;
17436 
17437       IF l_racusttrxtypes_csr%ISOPEN THEN
17438         CLOSE l_racusttrxtypes_csr;
17439       END IF;
17440 
17441       IF l_fndcurrency_csr%ISOPEN THEN
17442         CLOSE l_fndcurrency_csr;
17443       END IF;
17444 
17445       IF l_povendorsites_csr%ISOPEN THEN
17446         CLOSE l_povendorsites_csr;
17447       END IF;
17448 
17449       IF l_get_location_id%ISOPEN THEN
17450         CLOSE l_get_location_id;
17451       END IF;
17452 
17453       IF l_get_shiptositeid%ISOPEN THEN
17454         CLOSE l_get_shiptositeid;
17455       END IF;
17456 
17457       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
17458       -- unexpected error
17459       OKL_API.set_message(p_app_name      => g_app_name,
17460                           p_msg_name      => g_unexpected_error,
17461                           p_token1        => g_sqlcode_token,
17462                           p_token1_value  => sqlcode,
17463                           p_token2        => g_sqlerrm_token,
17464                           p_token2_value  => sqlerrm);
17465   END process_quoting_upfront_tax;
17466 
17467   /*========================================================================
17468    | PUBLIC PROCEDURE calculate_sales_tax
17469    |
17470    | DESCRIPTION
17471    |    This procedure is called by OLM tax events to calculate tax
17472    |
17473    | CALLED FROM          OLM Tax Events
17474    |
17475    |
17476    | CALLS PROCEDURES/FUNCTIONS
17477    |     process_tax_schedule_tax()
17478    |     process_quote_tax()
17479    |     process_asset_loc_tax()
17480    |     process_split_asset_tax()
17481    |     process_booking_upfront_tax()
17482    |     process_pre_rbk_upfront_tax()
17483    |     process_rebook_upfront_tax()
17484    |
17485    |
17486    | PARAMETERS
17487    |      p_source_trx_id     -- Source transaction ID
17488    |      p_source_trx_name   -- Source transaction Name
17489    |      p_source_table      -- Source table
17490    |      p_tax_call_type     -- Tax call type (applies to Booking, Rebook, Asset Location Change)
17491    |      p_serialized_asset  -- Serialized asset Y/N flag (applies to Asset Location Change)
17492    |      p_request_id        -- ID of Okl_Trx_Requests  (applies to Asset Location Change)
17493    |
17494    | KNOWN ISSUES
17495    |
17496    | NOTES
17497    |
17498    |
17499    | MODIFICATION HISTORY
17500    | Date          Author     Description of Changes
17501    | 08-APR-05    SECHAWLA      Created
17502    | 12-DEC-05    SECHAWLA      4690074  set a message if OU does not allow
17503    |                                     tax calculation
17504    | 23-MAR-10   SMADHAVA 9327076 Calculate Upfront tax only if prior upfront tax calculation done
17505    *=======================================================================*/
17506     PROCEDURE calculate_sales_tax(
17507       p_api_version                   IN  NUMBER,
17508       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
17509       x_return_status                 OUT NOCOPY VARCHAR2,
17510       x_msg_count                     OUT NOCOPY NUMBER,
17511       x_msg_data                      OUT NOCOPY VARCHAR2,
17512       p_source_trx_id                 IN  NUMBER,
17513       p_source_trx_name               IN  VARCHAR2,
17514       p_source_table                  IN  VARCHAR2,
17515       p_tax_call_type                 IN  VARCHAR2 DEFAULT NULL,
17516       p_serialized_asset              IN  VARCHAR2 DEFAULT NULL,
17517       p_request_id                    IN  NUMBER   DEFAULT NULL,
17518       p_alc_final_call                IN  VARCHAR2 DEFAULT NULL)IS
17519 
17520       --------------- CS Tax Schedule ------------------
17521       --p_source_trx_id   ---> okl_trx_requests.id
17522       --p_source_trx_name     ---> 'Tax Schedule'
17523       --p_source_table        ---> 'OKL_TRX_REQUESTS'
17524       --------------------------------------------------
17525 
17526       --------------- Booking ------------------
17527       --p_source_trx_id   ---> okl_trx_contracts.id
17528       --p_source_trx_name     ---> 'Booking'
17529       --p_source_table        ---> 'OKL_TRX_CONTRACTS'
17530       --p_tax_call_type       ---> 'ESTIMATED'/'ACTUAL' call type
17531       --------------------------------------------------
17532 
17533       --------------- Rebook ------------------
17534       --p_source_trx_id   ---> okl_trx_contracts.id
17535       --p_source_trx_name     ---> 'Rebook'
17536       --p_source_table        ---> 'OKL_TRX_CONTRACTS'
17537       --p_tax_call_type       ---> 'ESTIMATED'/'ACTUAL' call type
17538       --------------------------------------------------
17539 
17540       -------------- Split Asset ------------------
17541       --p_source_trx_id   ---> okl_trx_assets.id
17542       --p_source_trx_name     ---> 'Split Asset'
17543       --p_source_table        ---> 'OKL_TRX_ASSETS'
17544       --------------------------------------------------
17545 
17546       -------------- Reverse ------------------
17547       --p_source_trx_id   ---> okl_trx_assets.id
17548       --p_source_trx_name     ---> 'Reverse'
17549       --p_source_table        ---> 'OKL_TRX_ASSETS'
17550       --------------------------------------------------
17551 
17552       ---- Termination/Repurchase Quote Creation -------
17553       --p_source_trx_id   ---> okl_trx_quotes_b.id
17554       --p_source_trx_name     ---> 'Estimated Billing'
17555       --p_source_table        ---> 'OKL_TRX_QUOTES_B'
17556       --------------------------------------------------
17557 
17558       /*-----------------------------------------------------------------------+
17559       | Cursor Declarations                                                   |
17560       +-----------------------------------------------------------------------*/
17561       -- Get the OU tax options
17562       CURSOR  l_systemparams_csr(cp_org_id  IN  NUMBER) IS
17563       SELECT  tax_upfront_yn, tax_invoice_yn
17564       FROM    OKL_SYSTEM_PARAMS_ALL
17565       WHERE   org_id = cp_org_id;
17566 
17567       CURSOR l_tax_schedule_csr(cp_trx_id IN NUMBER) IS
17568       SELECT rul.rule_information5
17569       FROM okc_rules_b rul,
17570            okc_rule_groups_b rgp,
17571            okl_trx_requests trx
17572       WHERE rgp.dnz_chr_id = trx.dnz_khr_id
17573       AND   rul.rgp_id = rgp.id
17574       AND   rgp.rgd_code = 'LAHDTX'
17575       AND   rul.rule_information_category = 'LASTPR'
17576       AND   trx.id = cp_trx_id
17577       AND   trx.request_type_code = 'TAX_SCHEDULES';
17578 
17579 	  -- ER#9327076
17580       CURSOR get_ast_reloc_khr(p_trx_id okl_trx_assets.ID%TYPE) IS
17581         SELECT cle.dnz_chr_id
17582          FROM   okl_trx_assets trx,
17583                     okl_txl_itm_insts inst,
17584                     okc_k_lines_b cle
17585         WHERE  trx.tas_type = 'ALG'
17586              AND inst.tas_id = trx.ID
17587              AND cle.ID = inst.kle_id
17588 			 AND trx.id = p_trx_id;
17589 
17590       CURSOR get_rbk_act_khr(p_trx_id okl_trx_contracts.ID%TYPE) IS
17591         SELECT chr.ID
17592          FROM   okl_trx_contracts trx,
17593                     okc_k_headers_b chr
17594         WHERE  chr.ID = trx.khr_id
17595              AND trx.ID = p_trx_id ;
17596 
17597       -- 16522428 15/03/13
17598       -- added a new cursor to get the rebook contract id
17599       CURSOR get_rbk_khr_id(p_chr_id okc_k_headers_b.ID%TYPE) IS
17600         SELECT chr.ID
17601          FROM   okc_k_headers_b chr
17602         WHERE  chr.orig_system_id1 = p_chr_id
17603         AND    chr.sts_code <> 'ABANDONED';
17604       -- 16522428 15/03/13
17605 
17606       /*-----------------------------------------------------------------------+
17607       | Local Variable Declarations and initializations                       |
17608       +-----------------------------------------------------------------------*/
17609       l_api_version            CONSTANT NUMBER := 1;
17610       l_api_name               CONSTANT VARCHAR2(30) := 'calculate_sales_tax';
17611       l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
17612 
17613       l_ou_tax_upfront_yn         VARCHAR2(1);
17614       l_ou_tax_invoice_yn         VARCHAR2(1);
17615       l_k_tax_schedule_yn         VARCHAR2(1);
17616 
17617       l_source_table              VARCHAR2(30);
17618 
17619       l_tax_call_type             VARCHAR2(30);
17620       l_org_id                    NUMBER;
17621       l_quote_object_code         VARCHAR2(30);
17622       l_quote_object_id           NUMBER;
17623 	  l_chr_id                    OKC_K_HEADERS_B.ID%TYPE; --ER# 9327076
17624 	  l_rbk_chr_id                OKC_K_HEADERS_B.ID%TYPE; --16522428
17625 
17626     BEGIN
17627 
17628 
17629       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17630           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax','Begin(+)');
17631       END IF;
17632 
17633       --Print Input Variables
17634       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17635         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17636                 'p_init_msg_list :'||p_init_msg_list);
17637         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17638                 'p_source_trx_id :'||to_char(p_source_trx_id));
17639         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17640                 'p_source_trx_name :'||p_source_trx_name);
17641         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17642                 'p_source_table :'||p_source_table);
17643         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17644               'p_tax_call_type :'||p_tax_call_type);
17645         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17646               'p_serialized_asset :'||p_serialized_asset);
17647         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17648               'p_request_id :'||p_request_id);
17649       END IF;
17650 
17651       --Check API version, initialize message list and create savepoint.
17652       l_return_status := OKL_API.START_ACTIVITY(l_api_name,
17653                                                 G_PKG_NAME,
17654                                                 p_init_msg_list,
17655                                                 l_api_version,
17656                                                 p_api_version,
17657                                                 '_PVT',
17658                                                 x_return_status);
17659       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17660         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17661       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
17662         RAISE OKL_API.G_EXCEPTION_ERROR;
17663       END IF;
17664 
17665       l_source_table := upper(p_source_table);
17666       l_org_id := mo_global.get_current_org_id;
17667 
17668       -- Get the OU Tax options
17669       OPEN  l_systemparams_csr(cp_org_id  => l_org_id);
17670       FETCH l_systemparams_csr INTO l_ou_tax_upfront_yn, l_ou_tax_invoice_yn;
17671       IF  l_systemparams_csr%NOTFOUND THEN
17672         -- Tax options are not setup for this operating unit.
17673         OKL_API.set_message(   p_app_name      => 'OKL',
17674                                p_msg_name      => 'OKL_TX_NO_TAX_SETUP');
17675         RAISE OKL_API.G_EXCEPTION_ERROR;
17676       END IF;
17677       CLOSE l_systemparams_csr;
17678 
17679       IF p_source_trx_name = 'Tax Schedule' THEN
17680 
17681         OPEN  l_tax_schedule_csr(cp_trx_id  => p_source_trx_id);
17682         FETCH l_tax_schedule_csr INTO l_k_tax_schedule_yn ;
17683         CLOSE l_tax_schedule_csr;
17684 
17685         IF  l_k_tax_schedule_yn = 'Y' THEN -- OU allows Tax schedule type of call
17686           process_tax_schedule_tax(
17687                             p_api_version     =>   p_api_version,
17688                             p_init_msg_list   =>   OKL_API.G_FALSE,
17689                             x_return_status   =>   x_return_status,
17690                             x_msg_count       =>   x_msg_count,
17691                             x_msg_data        =>   x_msg_data,
17692                             p_source_trx_id   =>   p_source_trx_id,
17693                             p_source_trx_name =>   p_source_trx_name,
17694                             p_source_table    =>   l_source_table);
17695 
17696           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17697             OKL_API.set_message( p_app_name      => 'OKL',
17698                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17699                                  p_token1        => 'TRX_TYPE',
17700                                  p_token1_value  => p_source_trx_name);
17701 
17702             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17703               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17704             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17705               RAISE OKL_API.G_EXCEPTION_ERROR;
17706             END IF;
17707           END IF;
17708         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17709           OKL_API.set_message(   p_app_name      => 'OKL',
17710                                  p_msg_name      => 'OKL_TAX_SCH_FLAG_NOT_SET');
17711         END IF;
17712 
17713       ELSIF p_source_trx_name = 'Estimated Billing' AND l_source_table = 'OKL_TRX_QUOTES_B' THEN -- AM Quote creation
17714         process_quote_tax(    p_api_version     =>   p_api_version,
17715                               p_init_msg_list   =>   OKL_API.G_FALSE,
17716                               x_return_status   =>   x_return_status,
17717                               x_msg_count       =>   x_msg_count,
17718                               x_msg_data        =>   x_msg_data,
17719                               p_source_trx_id   =>   p_source_trx_id,
17720                               p_source_trx_name =>   p_source_trx_name,
17721                               p_source_table    =>   l_source_table);
17722 
17723         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17724           OKL_API.set_message(   p_app_name      => 'OKL',
17725                                  p_msg_name      => 'OKL_TX_QUOTE_TAX_ERR');
17726         END IF;
17727 
17728         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17729           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17730         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17731           RAISE OKL_API.G_EXCEPTION_ERROR;
17732         END IF;
17733 
17734       ELSIF (p_source_trx_name = 'Asset Relocation') THEN
17735 
17736     -- Commented for ER# 9327076 - Asset relocation upfront tax to be calculated only if
17737     -- prior upfront tax transactions exist. The tax decision will not be decided by l_ou_tax_upfront_yn
17738 	-- anymore.
17739      --   IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17740 	 OPEN get_ast_reloc_khr(p_source_trx_id);
17741 	   FETCH get_ast_reloc_khr INTO l_chr_id;
17742 	 CLOSE get_ast_reloc_khr;
17743 
17744 	   IF (OKL_LA_SALES_TAX_PVT.check_prior_upfront_tax(l_chr_id)) THEN
17745 
17746           IF p_tax_call_type IS NULL THEN
17747               OKC_API.set_message( p_app_name      => 'OKC',
17748                                    p_msg_name      => G_REQUIRED_VALUE,
17749                                    p_token1        => G_COL_NAME_TOKEN,
17750                                    p_token1_value  => 'Tax Call Type');
17751               RAISE OKL_API.G_EXCEPTION_ERROR;
17752           ELSE
17753             l_tax_call_type := upper(p_tax_call_type);
17754             IF l_tax_call_type NOT IN (G_ESTIMATED_CALL_TYPE, G_ACTUAL_CALL_TYPE) THEN
17755               OKC_API.set_message( p_app_name      => 'OKC',
17756                                    p_msg_name      => G_INVALID_VALUE,
17757                                    p_token1        => G_COL_NAME_TOKEN,
17758                                    p_token1_value  => 'Tax Call Type');
17759               RAISE OKL_API.G_EXCEPTION_ERROR;
17760             END IF;
17761           END IF;
17762 
17763           process_asset_loc_tax(p_api_version       =>   p_api_version,
17764                                 p_init_msg_list     =>   OKL_API.G_FALSE,
17765                                 x_return_status     =>   x_return_status,
17766                                 x_msg_count         =>   x_msg_count,
17767                                 x_msg_data          =>   x_msg_data,
17768                                 p_source_trx_id     =>   p_source_trx_id,
17769                                 p_source_trx_name   =>   p_source_trx_name,
17770                                 p_source_table      =>   l_source_table,
17771                                 p_tax_call_type     =>   p_tax_call_type,
17772                                 p_serialized_asset  =>   p_serialized_asset,
17773                                 p_request_id        =>   p_request_id,
17774                                 p_alc_final_call    =>   p_alc_final_call);
17775 
17776           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17777             OKL_API.set_message( p_app_name      => 'OKL',
17778                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17779                                  p_token1        => 'TRX_TYPE',
17780                                  p_token1_value  => p_source_trx_name);
17781 
17782             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17783               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17784             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17785               RAISE OKL_API.G_EXCEPTION_ERROR;
17786             END IF;
17787           END IF;
17788 
17789 		-- ER# 9327076
17790         -- ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17791         --  OKL_API.set_message(   p_app_name      => 'OKL',
17792         --                         p_msg_name      => 'OKL_TX_OU_NO_TAX',
17793         --                         p_token1        => 'TAX_CALL_TYPE',
17794         --                        p_token1_value  => 'Upfront Tax');
17795         END IF;
17796       ELSIF p_source_trx_name = 'Split Asset' THEN
17797         process_split_asset_tax(p_api_version     =>   p_api_version,
17798                                 p_init_msg_list   =>   OKL_API.G_FALSE,
17799                                 x_return_status   =>   x_return_status,
17800                                 x_msg_count       =>   x_msg_count,
17801                                 x_msg_data        =>   x_msg_data,
17802                                 p_source_trx_id   =>   p_source_trx_id,
17803                                 p_source_trx_name =>   p_source_trx_name,
17804                                 p_source_table    =>   l_source_table);
17805 
17806         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17807           OKL_API.set_message(   p_app_name      => 'OKL',
17808                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17809                                  p_token1        => 'TRX_TYPE',
17810                                  p_token1_value  => p_source_trx_name);
17811 
17812           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17813             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17814           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17815             RAISE OKL_API.G_EXCEPTION_ERROR;
17816           END IF;
17817         END IF;
17818 
17819       ELSIF ( p_source_trx_name = 'Booking') THEN
17820         IF l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17821           IF p_tax_call_type IS NULL THEN
17822             OKC_API.set_message( p_app_name      => 'OKC',
17823                                  p_msg_name      => G_REQUIRED_VALUE,
17824                                  p_token1        => G_COL_NAME_TOKEN,
17825                                  p_token1_value  => 'Tax Call Type');
17826             RAISE OKL_API.G_EXCEPTION_ERROR;
17827           ELSE
17828             l_tax_call_type := upper(p_tax_call_type);
17829             IF l_tax_call_type NOT IN (G_ESTIMATED_CALL_TYPE, G_ACTUAL_CALL_TYPE) THEN
17830               OKC_API.set_message( p_app_name      => 'OKC',
17831                                    p_msg_name      => G_INVALID_VALUE,
17832                                    p_token1        => G_COL_NAME_TOKEN,
17833                                    p_token1_value  => 'Tax Call Type');
17834               RAISE OKL_API.G_EXCEPTION_ERROR;
17835             END IF;
17836           END IF;
17837 
17838           process_booking_upfront_tax(
17839                             p_api_version     =>   p_api_version,
17840                             p_init_msg_list   =>   OKL_API.G_FALSE,
17841                             x_return_status   =>   x_return_status,
17842                             x_msg_count       =>   x_msg_count,
17843                             x_msg_data        =>   x_msg_data,
17844                             p_source_trx_id   =>   p_source_trx_id,
17845                             p_source_trx_name =>   p_source_trx_name,
17846                             p_source_table    =>   l_source_table,
17847                             p_tax_call_type   =>   p_tax_call_type);
17848 
17849           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17850             OKL_API.set_message(p_app_name      => 'OKL',
17851                                 p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17852                                 p_token1        => 'TRX_TYPE',
17853                                 p_token1_value  => p_source_trx_name);
17854 
17855             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17856               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17857             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17858               RAISE OKL_API.G_EXCEPTION_ERROR;
17859             END IF;
17860           END IF;
17861 
17862         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17863           OKL_API.set_message(   p_app_name      => 'OKL',
17864                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
17865                                  p_token1        => 'TAX_CALL_TYPE',
17866                                  p_token1_value  => 'Upfront Tax');
17867         END IF;
17868         -- Authoring will create a CS request during Booking (no tax schedule call during pre-booking) for Tax Schedule
17869         -- and then make the Tax Schedule call directly using that trx
17870 
17871       ELSIF  p_source_trx_name = 'Rebook' AND p_tax_call_type = G_ESTIMATED_CALL_TYPE THEN
17872 
17873 
17874         -- Commented for ER# 9327076 - Pre-Rebook upfront tax to be calculated only if
17875         -- prior upfront tax transactions exist. The tax decision will not be decided by l_ou_tax_upfront_yn
17876 	    -- anymore.
17877         --IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17878 		OPEN get_rbk_act_khr(p_source_trx_id);
17879 		  FETCH get_rbk_act_khr INTO l_chr_id;
17880 		CLOSE get_rbk_act_khr;
17881 
17882                 -- 16522428 15/03/13
17883                 -- getting rebbok contract id
17884 		OPEN get_rbk_khr_id(l_chr_id);
17885 		  FETCH get_rbk_khr_id INTO l_rbk_chr_id;
17886 		CLOSE get_rbk_khr_id;
17887                 -- 16522428 15/03/13
17888 
17889 	   IF (OKL_LA_SALES_TAX_PVT.check_prior_upfront_tax(l_chr_id)
17890 	       OR OKL_LA_SALES_TAX_PVT.check_rel_mxd_ctr(l_rbk_chr_id)) THEN -- 16522428 14/03/13 - additional condition
17891 
17892 
17893           process_pre_rbk_upfront_tax(
17894                             p_api_version     =>   p_api_version,
17895                             p_init_msg_list   =>   OKL_API.G_FALSE,
17896                             x_return_status   =>   x_return_status,
17897                             x_msg_count       =>   x_msg_count,
17898                             x_msg_data        =>   x_msg_data,
17899                             p_source_trx_id   =>   p_source_trx_id,
17900                             p_source_trx_name =>   p_source_trx_name,
17901                             p_source_table    =>   l_source_table,
17902                             p_tax_call_type   =>   p_tax_call_type);
17903 
17904           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17905             OKL_API.set_message( p_app_name      => 'OKL',
17906                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17907                                  p_token1        => 'TRX_TYPE',
17908                                  p_token1_value  => p_source_trx_name);
17909 
17910             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17911               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17912             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17913               RAISE OKL_API.G_EXCEPTION_ERROR;
17914             END IF;
17915           END IF;
17916         --ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17917         --  OKL_API.set_message(   p_app_name      => 'OKL',
17918         --                         p_msg_name      => 'OKL_TX_OU_NO_TAX',
17919         --                        p_token1        => 'TAX_CALL_TYPE',
17920         --                         p_token1_value  => 'Upfront Tax');
17921         END IF;
17922 
17923       ELSIF  p_source_trx_name = 'Rebook' AND p_tax_call_type = G_ACTUAL_CALL_TYPE THEN
17924 
17925         -- Commented for ER# 9327076 - Rebook activation upfront tax to be calculated only if
17926         -- prior upfront tax transactions exist. The tax decision will not be decided by l_ou_tax_upfront_yn
17927 	    -- anymore.
17928         --IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17929 		OPEN get_rbk_act_khr(p_source_trx_id);
17930 		  FETCH get_rbk_act_khr INTO l_chr_id;
17931 		CLOSE get_rbk_act_khr;
17932 
17933                 -- 16522428 15/03/13
17934                 -- getting rebbok contract id
17935 		OPEN get_rbk_khr_id(l_chr_id);
17936 		  FETCH get_rbk_khr_id INTO l_rbk_chr_id;
17937 		CLOSE get_rbk_khr_id;
17938                 -- 16522428 15/03/13
17939 
17940 	  IF (OKL_LA_SALES_TAX_PVT.check_prior_upfront_tax(l_chr_id)
17941 	       OR OKL_LA_SALES_TAX_PVT.check_prior_upfront_tax(l_rbk_chr_id)) THEN    -- 16522428 15-03-13 - additional condition
17942 
17943           process_rebook_upfront_tax(
17944                             p_api_version       =>   p_api_version,
17945                             p_init_msg_list     =>   OKL_API.G_FALSE,
17946                             x_return_status     =>   x_return_status,
17947                             x_msg_count         =>   x_msg_count,
17948                             x_msg_data          =>   x_msg_data,
17949                             p_source_trx_id     =>   p_source_trx_id,
17950                             p_source_trx_name   =>   p_source_trx_name,
17951                             p_source_table      =>   l_source_table);
17952 
17953           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17954             OKL_API.set_message( p_app_name      => 'OKL',
17955                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17956                                  p_token1        => 'TRX_TYPE',
17957                                  p_token1_value  => p_source_trx_name);
17958 
17959             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17960               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17961             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17962               RAISE OKL_API.G_EXCEPTION_ERROR;
17963             END IF;
17964           END IF;
17965 
17966         --ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17967         --  OKL_API.set_message(   p_app_name      => 'OKL',
17968         --                         p_msg_name      => 'OKL_TX_OU_NO_TAX',
17969         --                         p_token1        => 'TAX_CALL_TYPE',
17970         --                         p_token1_value  => 'Upfront Tax');
17971         END IF;
17972 
17973       ELSIF p_source_trx_name = 'Reverse' THEN
17974       -- No need to check "tax_upfront_yn" flag in case of contract reversal
17975         process_contract_reversal_tax(
17976                             p_api_version     =>   p_api_version,
17977                             p_init_msg_list   =>   OKL_API.G_FALSE,
17978                             x_return_status   =>   x_return_status,
17979                             x_msg_count       =>   x_msg_count,
17980                             x_msg_data        =>   x_msg_data,
17981                             p_source_trx_id   =>   p_source_trx_id,
17982                             p_source_trx_name =>   p_source_trx_name,
17983                             p_source_table    =>   l_source_table);
17984 
17985         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17986           OKL_API.set_message(   p_app_name      => 'OKL',
17987                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17988                                  p_token1        => 'TRX_TYPE',
17989                                  p_token1_value  => p_source_trx_name);
17990 
17991           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17992             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17993           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17994             RAISE OKL_API.G_EXCEPTION_ERROR;
17995           END IF;
17996         END IF;
17997 
17998       ELSIF  p_source_trx_name = 'Sales Quote'  THEN
17999         IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
18000           process_quoting_upfront_tax(
18001                             p_api_version     =>   p_api_version,
18002                             p_init_msg_list   =>   OKL_API.G_FALSE,
18003                             x_return_status   =>   x_return_status,
18004                             x_msg_count       =>   x_msg_count,
18005                             x_msg_data        =>   x_msg_data,
18006                             p_source_trx_id   =>   p_source_trx_id,
18007                             p_source_trx_name =>   p_source_trx_name,
18008                             p_source_table    =>   l_source_table);
18009 
18010           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
18011             OKL_API.set_message( p_app_name      => 'OKL',
18012                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
18013                                  p_token1        => 'TRX_TYPE',
18014                                  p_token1_value  => p_source_trx_name);
18015 
18016             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18017               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18018             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18019               RAISE OKL_API.G_EXCEPTION_ERROR;
18020             END IF;
18021           END IF;
18022         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
18023           OKL_API.set_message(   p_app_name      => 'OKL',
18024                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
18025                                  p_token1        => 'TAX_CALL_TYPE',
18026                                  p_token1_value  => 'Upfront Tax');
18027         END IF;
18028 
18029       ELSE
18030         OKC_API.set_message( p_app_name      => 'OKC',
18031                              p_msg_name      => G_INVALID_VALUE,
18032                              p_token1        => G_COL_NAME_TOKEN,
18033                              p_token1_value  => 'Transaction Type');
18034         RAISE OKL_API.G_EXCEPTION_ERROR;
18035       END IF;
18036 
18037       x_return_status := l_return_status; -- added for 12.0 since the above code that sets
18038                                          -- x_return_status is commented
18039       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18040         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ','End(-)');
18041       END IF;
18042 
18043       -- End the transaction
18044       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18045 
18046     EXCEPTION
18047       WHEN OKL_API.G_EXCEPTION_ERROR THEN
18048 
18049         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18050           FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ',
18051                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18052         END IF;
18053 
18054         IF l_systemparams_csr%ISOPEN THEN
18055           CLOSE l_systemparams_csr;
18056         END IF;
18057 
18058         IF l_tax_schedule_csr%ISOPEN THEN
18059           CLOSE l_tax_schedule_csr;
18060         END IF;
18061 
18062         x_return_status := OKL_API.HANDLE_EXCEPTIONS
18063         (
18064           l_api_name,
18065           G_PKG_NAME,
18066           'OKL_API.G_RET_STS_ERROR',
18067           x_msg_count,
18068           x_msg_data,
18069           '_PVT'
18070         );
18071       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
18072         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18073           FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ',
18074                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
18075         END IF;
18076 
18077         IF l_systemparams_csr%ISOPEN THEN
18078           CLOSE l_systemparams_csr;
18079         END IF;
18080 
18081         IF l_tax_schedule_csr%ISOPEN THEN
18082           CLOSE l_tax_schedule_csr;
18083         END IF;
18084 
18085         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18086         (
18087           l_api_name,
18088           G_PKG_NAME,
18089           'OKL_API.G_RET_STS_UNEXP_ERROR',
18090           x_msg_count,
18091           x_msg_data,
18092           '_PVT'
18093         );
18094       WHEN OTHERS THEN
18095 
18096         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18097           FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ',
18098                     'EXCEPTION :'||sqlerrm);
18099         END IF;
18100 
18101         IF l_systemparams_csr%ISOPEN THEN
18102           CLOSE l_systemparams_csr;
18103         END IF;
18104 
18105         IF l_tax_schedule_csr%ISOPEN THEN
18106           CLOSE l_tax_schedule_csr;
18107         END IF;
18108 
18109         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18110         (
18111           l_api_name,
18112           G_PKG_NAME,
18113           'OTHERS',
18114           x_msg_count,
18115           x_msg_data,
18116           '_PVT'
18117         );
18118 
18119         x_return_status := l_return_status; -- added for 12.0 since the above code that sets
18120         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18121           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ','End(-)');
18122         END IF;
18123 
18124         -- end the transaction
18125         OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18126 
18127     END calculate_sales_tax;
18128 
18129 /*========================================================================
18130  | PUBLIC PROCEDURE set_tax_security_context
18131  |
18132  | DESCRIPTION
18133  |    This procedure is called by update tax common components for setting the
18134  |    tax security context before invoking Tax Determinant Lov's
18135  |
18136  | CALLED FROM                                  Tax Common components
18137  |
18138  |
18139  | CALLS PROCEDURES/FUNCTIONS
18140  |     OKL_TAX_INTERFACE_PVT.set_tax_security_context
18141  |
18142  |
18143  | PARAMETERS
18144  |      p_internal_org_id               -- Operatng Unit Identifier
18145  |      p_legal_entity_id       -- Legal Entity Identifier
18146  |      p_transaction_date      -- Transaction Date
18147  |
18148  | KNOWN ISSUES
18149  |
18150  | NOTES
18151  |
18152  |
18153  | MODIFICATION HISTORY
18154  | Date          Author     Description of Changes
18155  | 24-JAN-07    RRAVIKIR      Created
18156  *=======================================================================*/
18157   PROCEDURE set_tax_security_context(
18158     p_api_version                       IN  NUMBER,
18159     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18160     x_return_status                     OUT NOCOPY VARCHAR2,
18161     x_msg_count                         OUT NOCOPY NUMBER,
18162     x_msg_data                          OUT NOCOPY VARCHAR2,
18163     p_internal_org_id                           IN  NUMBER,
18164     p_legal_entity_id               IN  NUMBER,
18165     p_transaction_date              IN  DATE) IS
18166 
18167     l_api_version            CONSTANT NUMBER := 1;
18168     l_api_name               CONSTANT VARCHAR2(30) := 'set_tax_security_context';
18169     l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
18170 
18171     x_effective_date         DATE;
18172 
18173   BEGIN
18174 
18175     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18176         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context','Begin(+)');
18177     END IF;
18178 
18179     --Print Input Variables
18180     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18181          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18182               'p_init_msg_list :'||p_init_msg_list);
18183          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18184               'p_internal_org_id :'||to_char(p_internal_org_id));
18185          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18186               'p_legal_entity_id :'||p_legal_entity_id);
18187          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18188               'p_transaction_date :'||p_transaction_date);
18189     END IF;
18190 
18191     --Check API version, initialize message list and create savepoint.
18192     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
18193                                               G_PKG_NAME,
18194                                               p_init_msg_list,
18195                                               l_api_version,
18196                                               p_api_version,
18197                                               '_PVT',
18198                                               x_return_status);
18199 
18200     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18201       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18202     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18203       RAISE OKL_API.G_EXCEPTION_ERROR;
18204     END IF;
18205 
18206     -- Required Values
18207     IF p_internal_org_id IS NULL THEN
18208        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18209                             p_token1        => G_COL_NAME_TOKEN,
18210                             p_token1_value  => 'INTERNAL_ORG_ID');
18211        RAISE OKL_API.G_EXCEPTION_ERROR;
18212     END IF;
18213 
18214     IF p_legal_entity_id IS NULL THEN
18215        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18216                             p_token1        => G_COL_NAME_TOKEN,
18217                             p_token1_value  => 'LEGAL_ENTITY_ID');
18218        RAISE OKL_API.G_EXCEPTION_ERROR;
18219     END IF;
18220 
18221     IF p_transaction_date IS NULL THEN
18222        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18223                             p_token1        => G_COL_NAME_TOKEN,
18224                             p_token1_value  => 'TRANSACTION_DATE');
18225        RAISE OKL_API.G_EXCEPTION_ERROR;
18226     END IF;
18227 
18228     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18229          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18230               'Calling OKL_TAX_INTERFACE_PVT.set_tax_security_context');
18231     END IF;
18232 
18233     -- Set Tax Security Context
18234     OKL_TAX_INTERFACE_PVT.set_tax_security_context(p_api_version           => p_api_version,
18235                                                    p_init_msg_list         => p_init_msg_list,
18236                                                    x_return_status         => l_return_status,
18237                                                    x_msg_count             => x_msg_count,
18238                                                    x_msg_data              => x_msg_data,
18239                                                    p_internal_org_id       => p_internal_org_id,
18240                                                    p_legal_entity_id       => p_legal_entity_id,
18241                                                    p_transaction_date      => p_transaction_date);
18242 
18243     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18244          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18245               'Return Status' || l_return_status);
18246     END IF;
18247 
18248     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18249       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18250     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18251       RAISE OKL_API.G_EXCEPTION_ERROR;
18252     END IF;
18253 
18254     x_return_status := l_return_status;
18255 
18256     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18257       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ','End(-)');
18258     END IF;
18259 
18260     -- end the transaction
18261     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18262 
18263 
18264    EXCEPTION
18265     WHEN OKL_API.G_EXCEPTION_ERROR THEN
18266 
18267       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18268          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ',
18269                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18270       END IF;
18271 
18272       x_return_status := OKL_API.HANDLE_EXCEPTIONS
18273       (
18274         l_api_name,
18275         G_PKG_NAME,
18276         'OKL_API.G_RET_STS_ERROR',
18277         x_msg_count,
18278         x_msg_data,
18279         '_PVT'
18280       );
18281     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
18282       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18283          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ',
18284                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
18285       END IF;
18286 
18287       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18288       (
18289         l_api_name,
18290         G_PKG_NAME,
18291         'OKL_API.G_RET_STS_UNEXP_ERROR',
18292         x_msg_count,
18293         x_msg_data,
18294         '_PVT'
18295       );
18296     WHEN OTHERS THEN
18297 
18298       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18299          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ',
18300                   'EXCEPTION :'||sqlerrm);
18301       END IF;
18302 
18303       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18304       (
18305         l_api_name,
18306         G_PKG_NAME,
18307         'OTHERS',
18308         x_msg_count,
18309         x_msg_data,
18310         '_PVT'
18311       );
18312   END set_tax_security_context;
18313 
18314 /*========================================================================
18315  | PUBLIC PROCEDURE process_tax_determ_override
18316  |
18317  | DESCRIPTION
18318  |    This procedure is called by 'BOOKING', 'REBOOK' and 'ASSET LOCATION
18319  |    CHANGE' transactions to override tax determinants
18320  |
18321  | CALLED FROM                                  OLM Tax Events
18322  |
18323  |
18324  | CALLS PROCEDURES/FUNCTIONS
18325  |
18326  |
18327  | PARAMETERS
18328  |      p_trx_id                     -- Transaction Identifier
18329  |      p_tax_sources_id                 -- Tax Sources table unique Identifier
18330  |      p_trx_business_category      -- Transaction Business Category (Tax Determinant)
18331  |      p_product_category           -- Product Category (Tax Determinant)
18332  |      p_user_defined_fisc_class    -- User defined fiscal class (Tax Determinant)
18333  |      p_line_intended_use          -- Line intended use (Tax Determinant)
18334  |
18335  | KNOWN ISSUES
18336  |
18337  | NOTES
18338  |
18339  |
18340  | MODIFICATION HISTORY
18341  | Date          Author     Description of Changes
18342  | 01-FEB-07    RRAVIKIR      Created
18343  | 05-Jun-08    SECHAWLA      6844953  : Added nvl to the IF condition that
18344  |                                       checks whether determinants need
18345  |                                       to be modified
18346  |
18347  *=======================================================================*/
18348   PROCEDURE process_tax_determ_override(
18349     p_api_version                       IN  NUMBER,
18350     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18351     x_return_status                     OUT NOCOPY VARCHAR2,
18352     x_msg_count                         OUT NOCOPY NUMBER,
18353     x_msg_data                          OUT NOCOPY VARCHAR2,
18354     p_trx_id                        IN  NUMBER,
18355     p_tax_sources_id                IN  NUMBER,
18356     p_trx_business_category         IN  VARCHAR2,
18357     p_product_category                          IN  VARCHAR2,
18358     p_user_defined_fisc_class       IN  VARCHAR2,
18359     p_line_intended_use             IN  VARCHAR2,
18360     p_request_id                    IN  NUMBER DEFAULT NULL,
18361     p_asset_id                      IN  NUMBER DEFAULT NULL) IS
18362 
18363     -- Local variables
18364     l_api_version                   CONSTANT NUMBER := 1;
18365     l_api_name                      CONSTANT VARCHAR2(30) := 'process_tax_determ';
18366     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
18367     lx_doc_level_recalc_flag        VARCHAR2(1);
18368     l_total_tax_amount              NUMBER;
18369 
18370     -- Local data structure
18371     l_txsv_rec                    txsv_rec_type;
18372     lx_txsv_rec                   txsv_rec_type;
18373 
18374     l_transaction_rec             transaction_rec_type;
18375 
18376     -- Cursors
18377     CURSOR l_taxsources_csr(cp_tax_sources_id IN NUMBER) IS
18378     SELECT org_id, trx_line_id, application_id, event_class_code,
18379            entity_code, trx_level_type, khr_id, product_category, user_defined_fisc_class,
18380            trx_business_category, line_intended_use, alc_serialized_yn
18381     FROM  okl_tax_sources
18382     WHERE id = cp_tax_sources_id;
18383 
18384     CURSOR l_zxlinestotaltax_csr(cp_trx_id  IN NUMBER, cp_trx_line_id   IN NUMBER,
18385                                  cp_application_id  IN NUMBER, cp_event_class_code IN VARCHAR2,
18386                                  cp_entity_code  IN VARCHAR2, cp_trx_level_type  IN VARCHAR2) IS
18387     SELECT  SUM(zx_lines.tax_amt) total_tax
18388     FROM    zx_lines
18389     WHERE   trx_id = cp_trx_id
18390     AND     trx_line_id = cp_trx_line_id
18391     AND     application_id = cp_application_id
18392     AND     event_class_code = cp_event_class_code
18393     AND     entity_code = cp_entity_code
18394     AND     trx_level_type = cp_trx_level_type
18395     AND     nvl(cancel_flag, 'N') <> 'Y';
18396 
18397     -- Cursor Records
18398     l_taxsources_rec         l_taxsources_csr%ROWTYPE;
18399 
18400     l_values_changed         BOOLEAN := FALSE;
18401     l_alc_event              BOOLEAN := FALSE;
18402 
18403   BEGIN
18404     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18405         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override','Begin(+)');
18406     END IF;
18407 
18408     --Print Input Variables
18409     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18410          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18411               'p_init_msg_list :'||p_init_msg_list);
18412          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18413               'p_trx_id :'||p_trx_id);
18414          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18415               'p_tax_sources_id :'||p_tax_sources_id);
18416          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18417               'p_trx_business_category :'||p_trx_business_category);
18418          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18419               'p_product_category :'||p_product_category);
18420          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18421               'p_user_defined_fisc_class :'||p_user_defined_fisc_class);
18422          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18423               'p_line_intended_use :'||p_line_intended_use);
18424     END IF;
18425 
18426     --Check API version, initialize message list and create savepoint.
18427     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
18428                                               G_PKG_NAME,
18429                                               p_init_msg_list,
18430                                               l_api_version,
18431                                               p_api_version,
18432                                               '_PVT',
18433                                               x_return_status);
18434 
18435     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18436       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18437     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18438       RAISE OKL_API.G_EXCEPTION_ERROR;
18439     END IF;
18440 
18441     -- Required Values
18442     IF p_tax_sources_id IS NULL THEN
18443        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18444                             p_token1        => G_COL_NAME_TOKEN,
18445                             p_token1_value  => 'TAX_SOURCES_ID');
18446        RAISE OKL_API.G_EXCEPTION_ERROR;
18447     END IF;
18448 
18449     IF p_trx_business_category IS NULL THEN
18450        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18451                             p_token1        => G_COL_NAME_TOKEN,
18452                             p_token1_value  => 'TRX_BUSINESS_CATEGORY');
18453        RAISE OKL_API.G_EXCEPTION_ERROR;
18454     END IF;
18455 
18456     IF p_trx_id IS NULL THEN
18457        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18458                             p_token1        => G_COL_NAME_TOKEN,
18459                             p_token1_value  => 'TRX_ID');
18460        RAISE OKL_API.G_EXCEPTION_ERROR;
18461     END IF;
18462     -- End required values
18463 
18464     -- Fetch Tax Sources details
18465     OPEN l_taxsources_csr(cp_tax_sources_id  =>  p_tax_sources_id);
18466     FETCH l_taxsources_csr INTO l_taxsources_rec;
18467     CLOSE l_taxsources_csr;
18468 
18469     -- Check if the tax determinant values are changed
18470     -- SECHAWLA 05-Jun-08 6844953 : Added nvl
18471     IF (nvl(l_taxsources_rec.trx_business_category,'XYZ') <> nvl(p_trx_business_category,'XYZ') OR
18472         nvl(l_taxsources_rec.product_category,'XYZ') <> nvl(p_product_category,'XYZ') OR
18473         nvl(l_taxsources_rec.user_defined_fisc_class,'XYZ') <> nvl(p_user_defined_fisc_class,'XYZ') OR
18474         nvl(l_taxsources_rec.line_intended_use,'XYZ') <> nvl(p_line_intended_use,'XYZ')) THEN
18475       l_values_changed := TRUE;
18476     END IF;
18477 
18478     IF (l_values_changed) THEN
18479       -- Populate Tax Sources data structure and update tax determinants
18480       l_txsv_rec.id := p_tax_sources_id;
18481       l_txsv_rec.trx_business_category := p_trx_business_category;
18482       l_txsv_rec.product_category := p_product_category;
18483       l_txsv_rec.user_defined_fisc_class := p_user_defined_fisc_class;
18484       l_txsv_rec.line_intended_use := p_line_intended_use;
18485 
18486       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18487          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18488               'Calling okl_tax_sources_pub.update_tax_sources for Updating Tax determinants');
18489       END IF;
18490 
18491       okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
18492                                             ,p_init_msg_list   => p_init_msg_list
18493                                             ,x_return_status   => l_return_status
18494                                             ,x_msg_count       => x_msg_count
18495                                             ,x_msg_data        => x_msg_data
18496                                             ,p_txsv_rec        => l_txsv_rec
18497                                             ,x_txsv_rec        => lx_txsv_rec);
18498 
18499       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18500         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18501               'Return Status' || l_return_status);
18502       END IF;
18503 
18504       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18505         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18506       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18507         RAISE OKL_API.G_EXCEPTION_ERROR;
18508       END IF;
18509       -- End tax determinants update
18510 
18511       -- Recalculate Tax based on modified determinants
18512       -- Populate transaction record
18513       l_transaction_rec.trx_id := p_trx_id;
18514       l_transaction_rec.application_id           := l_taxsources_rec.application_id;
18515       l_transaction_rec.internal_organization_id := l_taxsources_rec.org_id;
18516       l_transaction_rec.entity_code              := l_taxsources_rec.entity_code ;
18517       l_transaction_rec.event_class_code         := l_taxsources_rec.event_class_code ;
18518 
18519       IF l_taxsources_rec.event_class_code = 'BOOKING' THEN
18520         l_transaction_rec.event_type_code       := G_BOOK_UPD_EVENT_CODE;
18521       ELSIF l_taxsources_rec.event_class_code = 'ASSET_RELOCATION' THEN
18522         l_transaction_rec.event_type_code       := G_ALC_UPD_EVENT_CODE;
18523         l_alc_event := TRUE;
18524           END IF;
18525 
18526       -- Recalculate tax with new determinants
18527       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18528         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18529               'Calling OKL_TAX_INTERFACE_PVT.process_tax_determ_override');
18530       END IF;
18531 
18532       OKL_TAX_INTERFACE_PVT.process_tax_determ_override(p_api_version             => p_api_version,
18533                                                         p_init_msg_list           => p_init_msg_list,
18534                                                         x_return_status           => l_return_status,
18535                                                         x_msg_count               => x_msg_count,
18536                                                         x_msg_data                => x_msg_data,
18537                                                         p_trx_id                  => p_trx_id,
18538                                                         p_tax_sources_id          => p_tax_sources_id,
18539                                                         p_trx_business_category   => p_trx_business_category,
18540                                                         p_product_category                => p_product_category,
18541                                                         p_user_defined_fisc_class => p_user_defined_fisc_class,
18542                                                         p_line_intended_use       => p_line_intended_use,
18543                                                         p_transaction_rec         => l_transaction_rec,
18544                                                         x_doc_level_recalc_flag   => lx_doc_level_recalc_flag);
18545 
18546       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18547         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18548               'Return Status' || l_return_status);
18549       END IF;
18550 
18551       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18552         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18553       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18554         RAISE OKL_API.G_EXCEPTION_ERROR;
18555       END IF;
18556 
18557       -- Action based on return status
18558       IF (lx_doc_level_recalc_flag = 'Y') THEN
18559         -- Recalculation of tax for this particular taxable line has changed the tax
18560         -- for other taxable lines as well, so update the total_tax column for all
18561         -- the transaction lines including the one for which tax call was made
18562 
18563         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18564           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18565             'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
18566         END IF;
18567 
18568         IF (l_alc_event) THEN
18569           update_tax_sources_total(p_api_version    => p_api_version,
18570                                    p_init_msg_list  => p_init_msg_list,
18571                                    x_return_status  => l_return_status,
18572                                    x_msg_count      => x_msg_count,
18573                                    x_msg_data       => x_msg_data,
18574                                    p_source_trx_id  => p_trx_id,
18575                                    p_source_trx_name => 'Asset Relocation');
18576 
18577           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18578             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18579           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18580             RAISE OKL_API.G_EXCEPTION_ERROR;
18581           END IF;
18582 
18583         ELSE
18584           update_tax_sources_total(p_api_version    => p_api_version,
18585                                    p_init_msg_list  => p_init_msg_list,
18586                                    x_return_status  => l_return_status,
18587                                    x_msg_count      => x_msg_count,
18588                                    x_msg_data       => x_msg_data,
18589                                    p_source_trx_id  => p_trx_id);
18590           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18591             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18592           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18593             RAISE OKL_API.G_EXCEPTION_ERROR;
18594           END IF;
18595 
18596         END IF;
18597 
18598         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18599           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18600             'Return Status' || l_return_status);
18601         END IF;
18602 
18603         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18604           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18605         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18606           RAISE OKL_API.G_EXCEPTION_ERROR;
18607         END IF;
18608 
18609       ELSIF (lx_doc_level_recalc_flag = 'N') THEN
18610 
18611         -- Recalculation of tax for this particular taxable line has not changed the
18612         -- tax for other taxable lines, so update the total_tax column for this
18613         -- transaction line only
18614         OPEN l_zxlinestotaltax_csr(cp_trx_id           => p_trx_id,
18615                                    cp_trx_line_id      => l_taxsources_rec.trx_line_id,
18616                                    cp_application_id   => l_taxsources_rec.application_id,
18617                                    cp_event_class_code => l_taxsources_rec.event_class_code,
18618                                    cp_entity_code      => l_taxsources_rec.entity_code,
18619                                    cp_trx_level_type   => l_taxsources_rec.trx_level_type);
18620         FETCH l_zxlinestotaltax_csr INTO l_total_tax_amount;
18621         CLOSE l_zxlinestotaltax_csr;
18622 
18623         -- Populate Tax Sources data structure and update total tax
18624         l_txsv_rec.id := p_tax_sources_id;
18625         l_txsv_rec.total_tax := l_total_tax_amount;
18626 
18627         IF (l_alc_event) THEN
18628           l_txsv_rec.alc_serialized_total_tax := l_total_tax_amount;
18629         END IF;
18630 
18631         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18632           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18633               'Calling okl_tax_sources_pub.update_tax_sources for updating Total Tax for current line in Tax Sources');
18634         END IF;
18635 
18636         okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
18637                                               ,p_init_msg_list   => p_init_msg_list
18638                                               ,x_return_status   => l_return_status
18639                                               ,x_msg_count       => x_msg_count
18640                                               ,x_msg_data        => x_msg_data
18641                                               ,p_txsv_rec        => l_txsv_rec
18642                                               ,x_txsv_rec        => lx_txsv_rec);
18643 
18644         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18645           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18646             'Return Status' || l_return_status);
18647         END IF;
18648 
18649         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18650          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18651         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18652           RAISE OKL_API.G_EXCEPTION_ERROR;
18653         END IF;
18654       END IF;
18655       -- End actions based on return status
18656       -- End Recalculate tax
18657 
18658       -- Condition to populate 'ALC_SERIALIZED_TOTAL_TAX' column of tax sources
18659       IF (l_alc_event AND l_taxsources_rec.alc_serialized_yn = 'Y') THEN
18660         populate_alc_total_tax(p_api_version    => p_api_version,
18661                                p_init_msg_list  => p_init_msg_list,
18662                                x_return_status  => l_return_status,
18663                                x_msg_count      => x_msg_count,
18664                                x_msg_data       => x_msg_data,
18665                                p_asset_id       => p_asset_id,
18666                                p_request_id     => p_request_id);
18667 
18668         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18669           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18670         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18671           RAISE OKL_API.G_EXCEPTION_ERROR;
18672         END IF;
18673       END IF;
18674 
18675       -- Call Authoring package to sync tax values for 'BOOKING' and 'REBOOK' transactions
18676       IF (l_taxsources_rec.event_class_code = 'BOOKING' OR
18677           l_taxsources_rec.event_class_code = 'REBOOK') THEN
18678         OKL_LA_SALES_TAX_PVT.process_tax_override(
18679                                               p_api_version      => p_api_version,
18680                                               p_init_msg_list    => p_init_msg_list,
18681                                               p_chr_id           => l_taxsources_rec.khr_id,
18682                                               p_transaction_id   => p_trx_id,
18683                                               x_return_status    => l_return_status,
18684                                               x_msg_count        => x_msg_count,
18685                                               x_msg_data         => x_msg_data );
18686         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18687           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18688         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18689           RAISE OKL_API.G_EXCEPTION_ERROR;
18690         END IF;
18691       END IF;
18692       -- End call to Authoring package
18693 
18694     END IF;
18695 
18696     x_return_status := l_return_status;
18697 
18698     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18699       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ','End(-)');
18700     END IF;
18701 
18702     -- end the transaction
18703     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18704 
18705   EXCEPTION
18706 
18707     WHEN OKL_API.G_EXCEPTION_ERROR THEN
18708 
18709       IF (l_zxlinestotaltax_csr%ISOPEN) THEN
18710         CLOSE l_zxlinestotaltax_csr;
18711       END IF;
18712 
18713       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18714          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ',
18715                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18716       END IF;
18717 
18718       x_return_status := OKL_API.HANDLE_EXCEPTIONS
18719       (
18720         l_api_name,
18721         G_PKG_NAME,
18722         'OKL_API.G_RET_STS_ERROR',
18723         x_msg_count,
18724         x_msg_data,
18725         '_PVT'
18726       );
18727     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
18728 
18729       IF (l_zxlinestotaltax_csr%ISOPEN) THEN
18730         CLOSE l_zxlinestotaltax_csr;
18731       END IF;
18732 
18733       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18734          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ',
18735                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
18736       END IF;
18737 
18738       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18739       (
18740         l_api_name,
18741         G_PKG_NAME,
18742         'OKL_API.G_RET_STS_UNEXP_ERROR',
18743         x_msg_count,
18744         x_msg_data,
18745         '_PVT'
18746       );
18747     WHEN OTHERS THEN
18748 
18749       IF (l_zxlinestotaltax_csr%ISOPEN) THEN
18750         CLOSE l_zxlinestotaltax_csr;
18751       END IF;
18752 
18753       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18754          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ',
18755                   'EXCEPTION :'||sqlerrm);
18756       END IF;
18757 
18758       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18759       (
18760         l_api_name,
18761         G_PKG_NAME,
18762         'OTHERS',
18763         x_msg_count,
18764         x_msg_data,
18765         '_PVT'
18766       );
18767   END process_tax_determ_override;
18768 
18769 /*========================================================================
18770  | PUBLIC PROCEDURE process_tax_details_override
18771  |
18772  | DESCRIPTION
18773  |    This procedure is called by 'BOOKING', 'REBOOK' and 'ASSET LOCATION
18774  |    CHANGE' transactions to override tax details
18775  |
18776  | CALLED FROM                                  OLM Tax Events
18777  |
18778  |
18779  | CALLS PROCEDURES/FUNCTIONS
18780  |
18781  |
18782  | PARAMETERS
18783  |      p_event_id                               -- Tax Lines window will return an event id
18784  |                                      when there are any user overrides. It is
18785  |                                      this event id value that needs to be passed
18786  |                                      by OA Tax Override and Forms Tax Override Uis,
18787  |                                      to this API
18788  |      p_internal_organization_id   -- Organization Identifier
18789  |      p_trx_id                     -- Transaction Identifier
18790  |      p_application_id             -- Application Identifier
18791  |      p_entity_code                -- Entity code
18792  |      p_event_class_code           -- Event class code
18793  |
18794  | KNOWN ISSUES
18795  |
18796  | NOTES
18797  |
18798  |
18799  | MODIFICATION HISTORY
18800  | Date          Author     Description of Changes
18801  | 22-FEB-07    RRAVIKIR      Created
18802  |
18803  *=======================================================================*/
18804   PROCEDURE process_tax_details_override(
18805     p_api_version                       IN  NUMBER,
18806     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18807     x_return_status                     OUT NOCOPY VARCHAR2,
18808     x_msg_count                         OUT NOCOPY NUMBER,
18809     x_msg_data                          OUT NOCOPY VARCHAR2,
18810     p_event_id                      IN  NUMBER,
18811     p_internal_organization_id      IN  NUMBER,
18812     p_trx_id                        IN  NUMBER,
18813     p_application_id                IN  NUMBER,
18814     p_entity_code                                   IN  VARCHAR2,
18815     p_event_class_code              IN  VARCHAR2) IS
18816 
18817     -- Local variables
18818     l_api_version                   CONSTANT NUMBER := 1;
18819     l_api_name                      CONSTANT VARCHAR2(30) := 'process_tax_details';
18820     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
18821     l_total_tax_amount              NUMBER;
18822 
18823     -- Local data structure
18824     l_txsv_rec                    txsv_rec_type;
18825     lx_txsv_rec                   txsv_rec_type;
18826     l_transaction_rec             transaction_rec_type;
18827 
18828     -- Cursors
18829   BEGIN
18830 
18831     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18832         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override','Begin(+)');
18833     END IF;
18834 
18835     --Print Input Variables
18836     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18837          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18838               'p_init_msg_list :'||p_init_msg_list);
18839          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18840               'p_trx_id :'||p_trx_id);
18841          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18842               'p_event_id :'||p_event_id);
18843          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18844               'p_internal_organization_id :'||p_internal_organization_id);
18845          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18846               'p_application_id :'||p_application_id);
18847          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18848               'p_entity_code :'||p_entity_code);
18849          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18850               'p_event_class_code :'||p_event_class_code);
18851     END IF;
18852 
18853     --Check API version, initialize message list and create savepoint.
18854     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
18855                                               G_PKG_NAME,
18856                                               p_init_msg_list,
18857                                               l_api_version,
18858                                               p_api_version,
18859                                               '_PVT',
18860                                               x_return_status);
18861 
18862     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18863       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18864     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18865       RAISE OKL_API.G_EXCEPTION_ERROR;
18866     END IF;
18867 
18868     -- Required Values
18869     IF p_application_id IS NULL THEN
18870        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18871                             p_token1        => G_COL_NAME_TOKEN,
18872                             p_token1_value  => 'APPLICATION_ID');
18873        RAISE OKL_API.G_EXCEPTION_ERROR;
18874     END IF;
18875 
18876     IF p_entity_code IS NULL THEN
18877        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18878                             p_token1        => G_COL_NAME_TOKEN,
18879                             p_token1_value  => 'ENTITY_CODE');
18880        RAISE OKL_API.G_EXCEPTION_ERROR;
18881     END IF;
18882 
18883     IF p_event_class_code IS NULL THEN
18884        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18885                             p_token1        => G_COL_NAME_TOKEN,
18886                             p_token1_value  => 'EVENT_CLASS_CODE');
18887        RAISE OKL_API.G_EXCEPTION_ERROR;
18888     END IF;
18889 
18890     IF p_internal_organization_id IS NULL THEN
18891        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18892                             p_token1        => G_COL_NAME_TOKEN,
18893                             p_token1_value  => 'INTERNAL_ORGANIZATION_ID');
18894        RAISE OKL_API.G_EXCEPTION_ERROR;
18895     END IF;
18896 
18897     IF p_trx_id IS NULL THEN
18898        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18899                             p_token1        => G_COL_NAME_TOKEN,
18900                             p_token1_value  => 'TRX_ID');
18901        RAISE OKL_API.G_EXCEPTION_ERROR;
18902     END IF;
18903     -- End required values
18904 
18905     -- Populate Transaction record
18906     l_transaction_rec.application_id    := p_application_id;
18907     l_transaction_rec.entity_code       := p_entity_code;
18908     l_transaction_rec.event_class_code  := p_event_class_code;
18909 
18910     IF  p_event_class_code = 'BOOKING' THEN
18911       l_transaction_rec.event_type_code  := G_BOOK_OVERRIDE_EVENT;
18912     ELSIF p_event_class_code = 'ASSET_RELOCATION' THEN
18913       l_transaction_rec.event_type_code  := G_ALC_OVERRIDE_EVENT;
18914     END IF;
18915 
18916     l_transaction_rec.trx_id  := p_trx_id;
18917     l_transaction_rec.internal_organization_id := p_internal_organization_id;
18918 
18919     -- Override tax with new values
18920     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18921          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18922               'Calling OKL_TAX_INTERFACE_PVT.process_tax_details_override');
18923     END IF;
18924 
18925     OKL_TAX_INTERFACE_PVT.process_tax_details_override
18926         (p_api_version           => p_api_version,
18927          p_init_msg_list         => p_init_msg_list,
18928          x_return_status         => l_return_status,
18929          x_msg_count             => x_msg_count,
18930          x_msg_data              => x_msg_data,
18931          p_transaction_rec       => l_transaction_rec,
18932          p_override_level        => G_OVERRIDE_LEVEL,
18933          p_event_id              => p_event_id);
18934 
18935     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18936          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18937               'Return Status' || l_return_status);
18938     END IF;
18939 
18940     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18941       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18942     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18943       RAISE OKL_API.G_EXCEPTION_ERROR;
18944     END IF;
18945 
18946     -- Overriding a tax line can impact the tax lines of other transaction lines
18947     -- Get the modified tax lines from zx_lines, sum up the total tax amount
18948     -- and store in total_tax column of okl_tax_sources
18949 
18950     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18951       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18952           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
18953     END IF;
18954 
18955     update_tax_sources_total(p_api_version    => p_api_version,
18956                              p_init_msg_list  => p_init_msg_list,
18957                              x_return_status  => l_return_status,
18958                              x_msg_count      => x_msg_count,
18959                              x_msg_data       => x_msg_data,
18960                              p_source_trx_id  => p_trx_id);
18961 
18962     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18963       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18964           'Return Status' || l_return_status);
18965     END IF;
18966 
18967     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18968       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18969     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18970       RAISE OKL_API.G_EXCEPTION_ERROR;
18971     END IF;
18972 
18973     x_return_status := l_return_status;
18974 
18975     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18976       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ','End(-)');
18977     END IF;
18978 
18979     -- end the transaction
18980     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18981 
18982   EXCEPTION
18983     WHEN OKL_API.G_EXCEPTION_ERROR THEN
18984 
18985       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18986          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ',
18987                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18988       END IF;
18989 
18990       x_return_status := OKL_API.HANDLE_EXCEPTIONS
18991       (
18992         l_api_name,
18993         G_PKG_NAME,
18994         'OKL_API.G_RET_STS_ERROR',
18995         x_msg_count,
18996         x_msg_data,
18997         '_PVT'
18998       );
18999     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
19000       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19001          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ',
19002                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
19003       END IF;
19004 
19005       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
19006       (
19007         l_api_name,
19008         G_PKG_NAME,
19009         'OKL_API.G_RET_STS_UNEXP_ERROR',
19010         x_msg_count,
19011         x_msg_data,
19012         '_PVT'
19013       );
19014     WHEN OTHERS THEN
19015 
19016       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19017          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ',
19018                   'EXCEPTION :'||sqlerrm);
19019       END IF;
19020 
19021       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
19022       (
19023         l_api_name,
19024         G_PKG_NAME,
19025         'OTHERS',
19026         x_msg_count,
19027         x_msg_data,
19028         '_PVT'
19029       );
19030   END process_tax_details_override;
19031 
19032   /*========================================================================
19033    | PUBLIC PROCEDURE get_tax_determinants
19034    |
19035    | DESCRIPTION
19036    |    This procedure will be called by Billing and P2P transactions to derive
19037    |    tax determinants. Billing -  Invoice tax is to be reported from AR. Pass
19038    |    reporting flag as 'Y' in autoinvoice interface P2P - PRODUCT_CATEGORY,
19039    |    LINE_INTENDED_USE, USER_DEFINED_FISC_CLASS are not applicable in case of
19040    |    P2P, hence the out parameters will be null in this case. Tax reporting
19041    |    flag not in AP interface table - Not applicable
19042    |
19043    | CALLED FROM          OLM Billing and Disbursement Modules
19044    |
19045    |
19046    | CALLS PROCEDURES/FUNCTIONS
19047    |       okl_am_util_pvt.get_formula_value()
19048    |
19049    | PARAMETERS
19050    |   - Billing
19051    |      p_source_trx_id   -- OKL_TXD_AR_LN_DTLS_B.ID
19052    |      p_source_trx_name   -- Billing / Credit Memo transaction
19053    |      p_source_table      -- OKL_TXD_AR_LN_DTLS_B
19054    |   - P2P
19055    |      p_source_trx_id   -- OKL_TXL_AP_INV_LNS_ALL_B.ID
19056    |      p_source_trx_name   -- Funding / Disbursements transaction
19057    |      p_source_table      -- OKL_TXL_AP_INV_LNS_ALL_B
19058    |
19059    | KNOWN ISSUES
19060    |
19061    | NOTES
19062    |
19063    |
19064    | MODIFICATION HISTORY
19065    | Date          Author   Description of Changes
19066    | 01-MAR-07    RRAVIKIR  Created
19067    | 04-Jan-08    SECHAWLA  6651621 Added 3 additional parameters to taxable basis override formula -
19068  |                            'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
19069    |
19070    *=======================================================================*/
19071     PROCEDURE get_tax_determinants(
19072       p_api_version                   IN  NUMBER,
19073       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
19074       x_return_status                 OUT NOCOPY VARCHAR2,
19075       x_msg_count                     OUT NOCOPY NUMBER,
19076       x_msg_data                      OUT NOCOPY VARCHAR2,
19077       p_source_trx_id                 IN  NUMBER,
19078       p_source_trx_name               IN  VARCHAR2,
19079       p_source_table                  IN  VARCHAR2,
19080       x_tax_det_rec                   OUT NOCOPY tax_det_rec_type) IS
19081 
19082       -- Billing / Credit Memo Cursors
19083       -- Get the billing details
19084           CURSOR l_billingdtls_csr(cp_det_line_id IN NUMBER) IS
19085           SELECT hdr.id hdr_id, hdr.khr_id, hdr.date_invoiced, hdr.try_id try_id,
19086              hdr.qte_id, hdr.ibt_id , hdr.legal_entity_id, line.id line_id, line.kle_id,
19087              line.isl_id, det.sty_id, det.amount
19088       FROM   okl_trx_ar_invoices_b hdr, okl_txl_ar_inv_lns_b line,
19089              okl_txd_ar_ln_dtls_b det
19090       WHERE  det.id = cp_det_line_id
19091       AND    det.til_id_details = line.id
19092       AND    line.tai_id = hdr.id;
19093 
19094       --13-Jun-11  sechawla 12653340 : added : begin
19095       CURSOR l_trxtypename_csr(cp_try_id IN NUMBER) IS
19096       SELECT name
19097       FROM   okl_trx_types_v
19098       WHERE  id = cp_try_id;
19099 
19100       CURSOR l_trxtypeid_csr(cp_trx_type_name IN VARCHAR2) IS
19101       SELECT id
19102       FROM   okl_trx_types_v
19103       WHERE  name = cp_trx_type_name;
19104 
19105       l_trx_type_name   VARCHAR2(150);
19106       l_trx_type_id     NUMBER;
19107       --13-Jun-11  sechawla 12653340 : added : end
19108 
19109 
19110       -- Get the quote details
19111       CURSOR l_trxquotes_csr(cp_qte_id IN NUMBER) IS
19112       SELECT qtp_code, qrs_code, early_termination_yn
19113       FROM   okl_trx_quotes_b
19114       WHERE  id = cp_qte_id;
19115 
19116       -- Get stream type purpose for a given stream type id
19117       CURSOR l_strmtype_csr(cp_sty_id IN NUMBER) IS
19118       SELECT stream_type_purpose
19119       FROM   okl_strm_type_b
19120       WHERE  id = cp_sty_id;
19121 
19122       -- Get the line type
19123       CURSOR l_okclinestyle_csr(cp_kle_id IN NUMBER) IS
19124       SELECT lse.lty_code
19125           FROM   okc_k_lines_b line, okc_line_styles_b lse
19126           WHERE  line.lse_id = lse.id
19127           AND    line.id = cp_kle_id;
19128 
19129       -- Get line name
19130           CURSOR l_okclines_csr(cp_line_id IN NUMBER) IS
19131           SELECT name
19132           FROM   okc_k_lines_v
19133           WHERE  id = cp_line_id;
19134 
19135       -- Get the financial asset associated with a given subline
19136       CURSOR l_finasset_csr(cp_fee_serviced_asset_line_id IN NUMBER, cp_line_type IN VARCHAR2) IS
19137       SELECT cim.object1_id1
19138       FROM   okc_k_lines_b cle, okc_line_styles_b lse, okc_k_items cim
19139       WHERE  cle.lse_id = lse.id
19140       AND    lse.lty_code = cp_line_type
19141       AND    cim.cle_id = cle.id
19142       AND    cle.id = cp_fee_serviced_asset_line_id;
19143 
19144       -- get the inventory item from the sales order
19145       CURSOR l_oeorderlines_csr(cp_line_id IN NUMBER) IS
19146       SELECT inventory_item_id, ship_from_org_id, ship_to_org_id
19147       FROM   oe_order_lines_all
19148       WHERE  line_id = cp_line_id;
19149 
19150       -- get the inventory item id and inventory item org for a financial asset
19151       CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
19152       SELECT cim_model.object1_id1,
19153              cim_model.object1_id2
19154       FROM   okc_k_items cim_model,
19155              okc_k_lines_b cleb_model,
19156              okc_line_styles_b lseb_model
19157       WHERE  cim_model.cle_id    = cleb_model.id
19158       AND    cleb_model.cle_id   = cp_fin_asset_id
19159       AND    lseb_model.id       = cleb_model.lse_id
19160       AND    lseb_model.lty_code = 'ITEM';
19161 
19162       CURSOR c_get_set_of_books_id(cp_org_id IN NUMBER) IS
19163       SELECT set_of_books_id
19164       FROM   ar_system_parameters_all
19165       WHERE  org_id = cp_org_id;
19166 
19167       -- Check if tax basis override formula exists
19168       CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
19169       SELECT fma_id
19170       FROM   okl_tax_basis_override
19171       WHERE  try_id = cp_try_id
19172       AND    org_id = MO_GLOBAL.get_current_org_id;
19173 
19174       -- get formula name
19175       CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
19176       SELECT name
19177       FROM   okl_formulae_b
19178       WHERE  id = cp_fma_id;
19179 
19180       -- Funding / Debit Memo / Disbursement Cursors
19181           CURSOR l_disbdtls_csr(cp_line_id IN NUMBER) IS
19182           SELECT hdr.id hdr_id, line.khr_id, hdr.date_invoiced, hdr.try_id try_id,
19183              hdr.qte_id, hdr.legal_entity_id, line.id line_id, line.kle_id,
19184              line.sty_id, line.amount, hdr.ipvs_id
19185       FROM   okl_trx_ap_invoices_b hdr, okl_txl_ap_inv_lns_b line
19186       WHERE  line.id = cp_line_id
19187       AND    line.tap_id = hdr.id;
19188 
19189       CURSOR l_get_vendor_csr(cp_vendor_site_id IN NUMBER) IS
19190       SELECT vendor_id
19191       FROM   po_vendor_sites
19192       WHERE  vendor_site_id = cp_vendor_site_id;
19193 
19194       -- Record types
19195       l_billingdtls_rec               l_billingdtls_csr%ROWTYPE;
19196       l_disbdtls_rec                  l_disbdtls_csr%ROWTYPE;
19197       l_add_params                                        okl_execute_formula_pub.ctxt_val_tbl_type;
19198 
19199       -- Local variables
19200       l_api_version                   CONSTANT NUMBER := 1;
19201       l_api_name                      CONSTANT VARCHAR2(30) := 'get_tax_determinants';
19202 
19203       l_qtp_code                      okl_trx_quotes_b.qtp_code%TYPE;
19204       l_qte_reason                    okl_trx_quotes_b.qrs_code%TYPE;
19205       l_early_term_yn                 okl_trx_quotes_b.early_termination_yn%TYPE;
19206       l_purpose_code                  okl_strm_type_b.stream_type_purpose%TYPE;
19207       l_product_type                  VARCHAR2(30);
19208       l_def_tax_country               VARCHAR2(2);
19209       l_reporting_flag                VARCHAR2(1);
19210 
19211       lx_cust_acct_id                 NUMBER;
19212       lx_currency_code                VARCHAR2(15);
19213       lx_precision                    NUMBER;
19214       lx_minimum_accountable_unit     NUMBER;
19215       lx_cust_trx_type_id             NUMBER;
19216 
19217       lx_pb_prch_opt_det              VARCHAR2(450);
19218       lx_pb_fin_prod_id_det           NUMBER;
19219       lx_pb_int_disclosed_det         VARCHAR2(30);
19220       lx_bill_to_party_site_id        NUMBER;
19221       lx_bill_to_location_id          NUMBER;
19222       lx_bill_to_party_id             NUMBER;
19223       lx_bill_to_siteuseid            NUMBER;
19224       lx_ship_to_party_site_id        NUMBER;
19225       lx_ship_to_location_id          NUMBER;
19226       lx_ship_to_party_id             NUMBER;
19227       lx_ship_to_siteuseid            NUMBER;
19228 
19229       lx_org_id                       NUMBER;
19230       lx_book_class_code              VARCHAR2(30);
19231       lx_currency_conversion_type     VARCHAR2(30);
19232       lx_currency_conversion_rate     NUMBER;
19233       lx_currency_conversion_date     DATE;
19234       lx_contract_start_date          DATE;
19235       lx_transfer_of_title            VARCHAR2(30);
19236       lx_sale_lease_back              VARCHAR2(30);
19237       lx_purchase_of_lease            VARCHAR2(30);
19238       lx_usage_of_equipment           VARCHAR2(450);
19239       lx_age_of_equipment             NUMBER;
19240       lx_vendor_site_id               NUMBER;
19241       lx_tbc_code                     VARCHAR2(240);
19242       lx_pc_code                      VARCHAR2(240);
19243       lx_ufc_code                     VARCHAR2(240);
19244       lx_tax_classification_code      VARCHAR2(50);
19245       lx_assessable_value             NUMBER;
19246 
19247       l_line_type                     VARCHAR2(100);
19248       l_fin_asset_id                  NUMBER;
19249       l_inv_item_id                   NUMBER;
19250       l_inv_item_org_id               NUMBER;
19251       l_name                          VARCHAR2(30);
19252       l_set_of_books_id               NUMBER;
19253       l_fma_id                        NUMBER;
19254       l_formula_name                  VARCHAR2(150);
19255       l_event_class_code              VARCHAR2(30);
19256       l_asset_exists                  BOOLEAN := FALSE;
19257       l_vendor_id                     NUMBER;
19258       lx_tax_valid_code               VARCHAR2(1);
19259 
19260     BEGIN
19261 
19262       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19263         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants','Begin(+)');
19264       END IF;
19265 
19266       --Print Input Variables
19267       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19268         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19269                 'p_init_msg_list :'||p_init_msg_list);
19270         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19271                 'p_source_trx_id :'||p_source_trx_id);
19272         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19273                 'p_source_trx_name :'||p_source_trx_name);
19274         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19275                 'p_source_table :'||p_source_table);
19276       END IF;
19277 
19278       --Check API version, initialize message list and create savepoint.
19279       x_return_status := OKL_API.START_ACTIVITY(l_api_name,
19280                                                 G_PKG_NAME,
19281                                                 p_init_msg_list,
19282                                                 l_api_version,
19283                                                 p_api_version,
19284                                                 '_PVT',
19285                                                 x_return_status);
19286       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19287         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19288       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19289         RAISE OKL_API.G_EXCEPTION_ERROR;
19290       END IF;
19291 
19292       IF p_source_trx_name IN ('Billing', 'Credit Memo', 'Rollover Billing',
19293                                'Rollover Credit Memo', 'Release Billing',
19294                                'Release Credit Memo') THEN
19295 
19296         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19297           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19298                   'Call to (Billing, Credit Memo, Rollover Billing, Rollover Credit Memo,
19299                             Release Billing, Release Credit Memo) .. ');
19300         END IF;
19301 
19302         -- Validate source trx id
19303         OPEN  l_billingdtls_csr(p_source_trx_id);
19304         FETCH l_billingdtls_csr INTO l_billingdtls_rec;
19305         IF l_billingdtls_csr %NOTFOUND THEN
19306           OKC_API.set_message( p_app_name      => 'OKC',
19307                                p_msg_name      => G_INVALID_VALUE,
19308                                p_token1        => G_COL_NAME_TOKEN,
19309                                p_token1_value  => 'SOURCE_TRX_ID');
19310           RAISE OKL_API.G_EXCEPTION_ERROR;
19311         END IF;
19312         CLOSE l_billingdtls_csr;
19313 
19314         --13-Jun-11  sechawla 12653340 : begin
19315         --Use 'Billing' transaction type to fetch tax determinants for 'Evergreen' Billing
19316         OPEN  l_trxtypename_csr(l_billingdtls_rec.try_id);
19317         FETCH l_trxtypename_csr into l_trx_type_name;
19318         CLOSE l_trxtypename_csr;
19319 
19320         IF l_trx_type_name = 'Evergreen' THEN
19321            OPEN  l_trxtypeid_csr('Billing');
19322            FETCH l_trxtypeid_csr into l_trx_type_id;
19323            IF l_trxtypeid_csr%FOUND THEN
19324               l_billingdtls_rec.try_id := l_trx_type_id;
19325            END IF;
19326            CLOSE l_trxtypeid_csr;
19327         END IF;
19328         --13-Jun-11  sechawla 12653340 : end
19329 
19330         IF l_billingdtls_rec.qte_id IS NOT NULL THEN  -- Invoice created for a quote
19331           OPEN  l_trxquotes_csr(l_billingdtls_rec.qte_id);
19332           FETCH l_trxquotes_csr INTO l_qtp_code, l_qte_reason, l_early_term_yn;
19333           CLOSE l_trxquotes_csr;
19334         END IF;
19335 
19336         IF l_billingdtls_rec.sty_id IS NOT NULL THEN
19337           OPEN  l_strmtype_csr(l_billingdtls_rec.sty_id);
19338           FETCH l_strmtype_csr INTO l_purpose_code;
19339           CLOSE l_strmtype_csr;
19340         END IF;
19341 
19342         l_product_type := G_SERVICES;
19343         l_def_tax_country := get_default_taxation_country(x_return_status     => x_return_status,
19344                                                           x_msg_count         => x_msg_count,
19345                                                           x_msg_data          => x_msg_data,
19346                                                           p_legal_entity_id   => l_billingdtls_rec.legal_entity_id);
19347             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19348           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19349         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19350           RAISE OKL_API.G_EXCEPTION_ERROR;
19351         END IF;
19352 
19353         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19354           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19355                 ' l_qtp_code :'||l_qtp_code);
19356           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19357                 ' l_qte_reason :'||l_qte_reason);
19358           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19359                 ' l_early_term_yn :'||l_early_term_yn);
19360           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19361                 ' l_purpose_code :'||l_purpose_code);
19362           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19363                 ' l_def_tax_country :'||l_def_tax_country);
19364         END IF;
19365 
19366         l_reporting_flag := 'Y';
19367 
19368         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19369           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19370                   'Call to (Billing, Credit Memo, Rollover Billing, Rollover Credit Memo,
19371                             Release Billing, Release Credit Memo) .. ');
19372         END IF;
19373         -- get header level tax parameters
19374         get_k_hdr_tax_params( p_api_version                  => p_api_version,
19375                               p_init_msg_list                => p_init_msg_list,
19376                               x_return_status                => x_return_status,
19377                               x_msg_count                    => x_msg_count,
19378                               x_msg_data                     => x_msg_data,
19379                               p_khr_id                       => l_billingdtls_rec.khr_id,
19380                               p_source_trx_name              => p_source_trx_name,
19381                               p_source_table                 => p_source_table,
19382                               x_cust_acct_id                 => lx_cust_acct_id,
19383                               x_bill_to_siteuseid            => lx_bill_to_siteuseid,
19384                               x_currency_code                => lx_currency_code,
19385                               x_cust_trx_type_id             => lx_cust_trx_type_id,
19386                               x_precision                    => lx_precision,
19387                               x_minimum_accountable_unit     => lx_minimum_accountable_unit,
19388                               x_prch_opt_det                 => lx_pb_prch_opt_det,
19389                               x_fin_prod_id_det              => lx_pb_fin_prod_id_det,
19390                               x_int_disclosed_det            => lx_pb_int_disclosed_det,
19391                               x_org_id                       => lx_org_id,
19392                               x_book_class_code              => lx_book_class_code,
19393                               x_bill_to_party_site_id        => lx_bill_to_party_site_id,
19394                               x_bill_to_party_id             => lx_bill_to_party_id,
19395                               x_bill_to_location_id          => lx_bill_to_location_id,
19396                               x_currency_conversion_type     => lx_currency_conversion_type,
19397                               x_currency_conversion_rate     => lx_currency_conversion_rate,
19398                               x_currency_conversion_date     => lx_currency_conversion_date,
19399                               x_contract_start_date          => lx_contract_start_date);
19400         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19401           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19402         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19403           RAISE OKL_API.G_EXCEPTION_ERROR;
19404         END IF;
19405 
19406         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19407           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19408                 ' l_billingdtls_rec.khr_id :'||l_billingdtls_rec.khr_id);
19409           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19410                 ' lx_cust_acct_id :'||lx_cust_acct_id);
19411           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19412                 ' lx_bill_to_siteuseid :'||lx_bill_to_siteuseid);
19413           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19414                 ' lx_currency_code :'||lx_currency_code);
19415           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19416                 ' lx_cust_trx_type_id :'||lx_cust_trx_type_id);
19417           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19418                 ' lx_precision :'||lx_precision);
19419           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19420                 ' lx_minimum_accountable_unit :'||lx_minimum_accountable_unit);
19421           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19422                 ' lx_pb_prch_opt_det :'||lx_pb_prch_opt_det);
19423           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19424                 ' lx_pb_fin_prod_id_det :'||lx_pb_fin_prod_id_det);
19425           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19426                 ' lx_pb_int_disclosed_det :'||lx_pb_int_disclosed_det);
19427           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19428                 ' lx_org_id :'||lx_org_id);
19429           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19430                 ' lx_book_class_code :'||lx_book_class_code);
19431           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19432                 ' lx_bill_to_party_site_id :'||lx_bill_to_party_site_id);
19433           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19434                 ' lx_bill_to_party_id :'||lx_bill_to_party_id);
19435           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19436                 ' lx_bill_to_location_id :'||l_def_tax_country);
19437           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19438                 ' lx_currency_conversion_type :'||lx_currency_conversion_type);
19439           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19440                 ' lx_currency_conversion_rate :'||lx_currency_conversion_rate);
19441           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19442                 ' lx_currency_conversion_date :'||lx_currency_conversion_date);
19443           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19444                 ' lx_contract_start_date :'||lx_contract_start_date);
19445         END IF;
19446 
19447         -- Line level Invoice
19448         IF l_billingdtls_rec.kle_id IS NOT NULL THEN
19449 
19450           OPEN  l_okclinestyle_csr(l_billingdtls_rec.kle_id);
19451           FETCH l_okclinestyle_csr INTO l_line_type;
19452           CLOSE l_okclinestyle_csr;
19453 
19454           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19455             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants',
19456                   'line level inv '||' l_line_type = '||l_line_type);
19457           END IF;
19458 
19459           IF l_line_type IN ('FREE_FORM1','LINK_SERV_ASSET','LINK_FEE_ASSET') THEN
19460 
19461             l_asset_exists := TRUE;
19462 
19463             -- For regular stream billing, l_line_type can have any of the above 3 values
19464             -- For transaction billing, l_line_type can only be FREE_FORM1
19465             OPEN  l_okclines_csr(l_billingdtls_rec.kle_id);
19466             FETCH l_okclines_csr INTO l_name;
19467             CLOSE l_okclines_csr;
19468 
19469             IF l_line_type = 'FREE_FORM1' THEN
19470               l_fin_asset_id := l_billingdtls_rec.kle_id;
19471             ELSE
19472               -- If subline level, get the attached fin asset id
19473                   OPEN  l_finasset_csr(l_billingdtls_rec.kle_id, l_line_type);
19474                   FETCH l_finasset_csr INTO l_fin_asset_id;
19475                   CLOSE l_finasset_csr;
19476             END IF;
19477 
19478             -- Get the asset level determinants
19479             get_asset_tax_params(
19480                                 p_api_version                  => p_api_version,
19481                         p_init_msg_list                => p_init_msg_list,
19482                         x_return_status                => x_return_status,
19483                         x_msg_count                    => x_msg_count,
19484                         x_msg_data                     => x_msg_data,
19485                         p_khr_id                       => l_billingdtls_rec.khr_id,
19486                         p_kle_id                       => l_fin_asset_id,
19487                         p_source_trx_name              => p_source_trx_name,
19488                         p_source_table                 => p_source_table,
19489                         p_qtp_code                     => l_qtp_code,
19490                         p_purpose_code                 => l_purpose_code,
19491                         x_transfer_of_title                        => lx_transfer_of_title,
19492                         x_sale_lease_back                          => lx_sale_lease_back,
19493                         x_purchase_of_lease                        => lx_purchase_of_lease,
19494                         x_usage_of_equipment               => lx_usage_of_equipment,
19495                                 x_age_of_equipment                         => lx_age_of_equipment,
19496                                 x_vendor_site_id                       => lx_vendor_site_id);
19497                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19498                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19499             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19500                   RAISE OKL_API.G_EXCEPTION_ERROR;
19501             END IF;
19502 
19503             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19504               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19505                 ' l_fin_asset_id :'||l_fin_asset_id);
19506               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19507                 ' lx_transfer_of_title :'||lx_transfer_of_title);
19508               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19509                 ' lx_sale_lease_back :'||lx_sale_lease_back);
19510               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19511                 ' lx_purchase_of_lease :'||lx_purchase_of_lease);
19512               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19513                 ' lx_usage_of_equipment :'||lx_usage_of_equipment);
19514               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19515                 ' lx_age_of_equipment :'||lx_age_of_equipment);
19516               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19517                 ' lx_vendor_site_id :'||lx_vendor_site_id);
19518               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19519                 ' l_billingdtls_rec.qte_id :'||l_billingdtls_rec.qte_id);
19520             END IF;
19521 
19522             -- Equipment Type(inventory item id)
19523             -- Get the inventory item id
19524             IF l_billingdtls_rec.qte_id IS NULL AND l_purpose_code = 'AMBSPR' THEN -- Remarketing billing
19525               l_product_type := G_GOODS;
19526 
19527               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19528                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19529                   ' AMBSPR ');
19530               END IF;
19531 
19532               OPEN  l_oeorderlines_csr(l_billingdtls_rec.isl_id);
19533                   FETCH l_oeorderlines_csr INTO l_inv_item_id, l_inv_item_org_id, lx_ship_to_siteuseid;
19534                   -- ship_to_org_id from oe_order_lines_all is the site_use_id value from hz_cust_site_uses_all
19535                   -- which is the ship_to_site_use_id
19536                   IF l_oeorderlines_csr%NOTFOUND THEN
19537                     OKC_API.set_message( p_app_name      => 'OKC',
19538                                      p_msg_name      => G_INVALID_VALUE,
19539                                      p_token1        => G_COL_NAME_TOKEN,
19540                                      p_token1_value  => 'ISL_ID');
19541                 RAISE OKL_API.G_EXCEPTION_ERROR;
19542               END IF;
19543               CLOSE l_oeorderlines_csr;
19544 
19545             ELSIF l_purpose_code = 'CURE' THEN -- vendor cure billing
19546 
19547               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19548                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19549                   ' CURE ');
19550               END IF;
19551 
19552                   l_inv_item_id := NULL;
19553                   l_inv_item_org_id := NULL;
19554 
19555             ELSE
19556                           OPEN  l_invitem_csr(l_fin_asset_id);
19557                           FETCH l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
19558                           IF l_invitem_csr%NOTFOUND THEN
19559                             OKL_API.set_message(
19560                                              p_app_name      => 'OKL',
19561                          p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
19562                                  p_token1        => 'ASSET_NUMBER',
19563                                                  p_token1_value  => l_name);
19564 
19565                             RAISE OKL_API.G_EXCEPTION_ERROR;
19566                           END IF;
19567                           CLOSE l_invitem_csr;
19568             END IF;
19569 
19570             -- At this point l_bill_to_siteuseid has Bill To of the K (derived in
19571             -- call to get_k_hdr_tax_params above)
19572             -- l_bill_to_siteuseid will be overridden below depending upon the
19573             -- type of invoice
19574             IF l_qtp_code LIKE 'REP%' OR l_purpose_code IN ('CURE','REPAIR_CHARGE') THEN
19575               -- Ship to is not applicable for Repurchase quote billing, vendor
19576               -- cure billing and asset repair billing
19577               lx_ship_to_siteuseid := NULL;
19578               IF l_qtp_code LIKE 'REP%' OR l_purpose_code = 'CURE' THEN
19579                 IF l_billingdtls_rec.ibt_id IS NULL THEN
19580                   OKL_API.set_message(  p_app_name      => 'OKL',
19581                                             p_msg_name      => 'OKL_TX_NO_INV_BILL_TO');
19582 
19583                       RAISE OKL_API.G_EXCEPTION_ERROR;
19584 
19585                 ELSE
19586                   lx_bill_to_siteuseid := l_billingdtls_rec.ibt_id;
19587                 END IF;
19588               ELSE -- asset repair invoice
19589                 IF l_billingdtls_rec.ibt_id IS NOT NULL THEN
19590                   -- ibt_id is populated if asset repair is billed to vendor
19591                   -- If billed to lessee, ibt_id will be null. So use bill to from K
19592                   lx_bill_to_siteuseid := l_billingdtls_rec.ibt_id;
19593                 END IF;
19594               END IF;
19595 
19596             ELSIF l_purpose_code = 'AMBSPR' THEN -- Remarketing billing
19597               IF l_billingdtls_rec.ibt_id IS NULL THEN
19598                 OKL_API.set_message(    p_app_name      => 'OKL',
19599                                             p_msg_name      => 'OKL_TX_NO_INV_BILL_TO');
19600 
19601                         RAISE OKL_API.G_EXCEPTION_ERROR;
19602               ELSE
19603                 lx_bill_to_siteuseid := l_billingdtls_rec.ibt_id;
19604               END IF;
19605               --ship to (lx_ship_to_siteuseid) is already derived above for Remarketing billing
19606 
19607             ELSE
19608 
19609                           -- get the Location Party ID's
19610                           get_location_party_ids(
19611                                                                         p_api_version                  => p_api_version,
19612                                                                 p_init_msg_list                => p_init_msg_list,
19613                                                                 x_return_status                => x_return_status,
19614                                                                 x_msg_count                    => x_msg_count,
19615                                                                 x_msg_data                     => x_msg_data,
19616                                                                 p_cust_acct_id                 => lx_cust_acct_id,
19617                                                                 p_fin_asset_id                 => l_fin_asset_id,
19618                                     p_khr_id                       => l_billingdtls_rec.khr_id,
19619                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
19620                                     x_bill_to_location_id          => lx_bill_to_location_id,
19621                                     x_bill_to_party_id             => lx_bill_to_party_id,
19622                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
19623                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
19624                                     x_ship_to_location_id          => lx_ship_to_location_id,
19625                                     x_ship_to_party_id             => lx_ship_to_party_id,
19626                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
19627 
19628                           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19629                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19630                           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19631                 RAISE OKL_API.G_EXCEPTION_ERROR;
19632                           END IF;
19633 
19634               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19635                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19636                 ' lx_bill_to_party_site_id :'||lx_bill_to_party_site_id);
19637                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19638                 ' lx_bill_to_location_id :'||lx_bill_to_location_id);
19639                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19640                 ' lx_bill_to_party_id :'||lx_bill_to_party_id);
19641                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19642                 ' lx_bill_to_siteuseid :'||lx_bill_to_siteuseid);
19643                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19644                 ' lx_ship_to_party_site_id :'||lx_ship_to_party_site_id);
19645                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19646                 ' lx_ship_to_location_id :'||lx_ship_to_location_id);
19647                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19648                 ' lx_ship_to_party_id :'||lx_ship_to_party_id);
19649                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19650                 ' lx_ship_to_siteuseid :'||lx_ship_to_siteuseid);
19651               END IF;
19652 
19653                         END IF;
19654 
19655               END IF;
19656         END IF;
19657 
19658         -- Asset doesn't exist
19659         IF (NOT l_asset_exists) THEN
19660           lx_transfer_of_title      := null;
19661           lx_sale_lease_back        := null;
19662           lx_purchase_of_lease      := null;
19663           lx_usage_of_equipment     := null;
19664                   lx_age_of_equipment       := null;
19665                   lx_vendor_site_id         := null;
19666           lx_ship_to_party_site_id  := null;
19667           lx_ship_to_location_id    := null;
19668           lx_ship_to_party_id       := null;
19669           lx_ship_to_siteuseid      := null;
19670           l_inv_item_id             := null;
19671           l_inv_item_org_id         := null;
19672           l_fin_asset_id            := null;
19673         END IF;
19674 
19675         -- Get TBC code
19676         get_tbc_code(p_api_version                 => p_api_version,
19677                      p_init_msg_list               => p_init_msg_list,
19678                      x_return_status               => x_return_status,
19679                      x_msg_count                   => x_msg_count,
19680                      x_msg_data                    => x_msg_data,
19681                      p_sty_id                      => l_billingdtls_rec.sty_id,
19682                      p_try_id                      => l_billingdtls_rec.try_id,
19683                      p_book_class_code             => lx_book_class_code,
19684                      p_tax_country_code            => l_def_tax_country,
19685                      x_tbc_code                    => lx_tbc_code);
19686 
19687         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19688           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19689         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19690           RAISE OKL_API.G_EXCEPTION_ERROR;
19691         END IF;
19692 
19693         -- Validate TBC Code
19694         IF lx_tbc_code IS NOT NULL THEN
19695           validate_tax_code(
19696             p_api_version     => p_api_version,
19697             p_init_msg_list   => p_init_msg_list,
19698             x_return_status   => x_return_status,
19699             x_msg_count       => x_msg_count,
19700             x_msg_data        => x_msg_data,
19701             p_trx_date        => l_billingdtls_rec.date_invoiced,
19702             p_tbc_code        => lx_tbc_code,
19703             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
19704 
19705           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19706             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19707           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19708             RAISE OKL_API.G_EXCEPTION_ERROR;
19709           END IF;
19710         END IF;
19711 
19712         IF (lx_tbc_code IS NULL OR lx_tax_valid_code = 'F') THEN
19713           lx_tbc_code := 'SALES_TRANSACTION';
19714         END IF;
19715 
19716         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19717           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19718               'lx_tbc_code '||lx_tbc_code);
19719         END IF;
19720 
19721         -- Get PC code
19722         get_pc_code(p_api_version                 => p_api_version,
19723                     p_init_msg_list               => p_init_msg_list,
19724                     x_return_status               => x_return_status,
19725                     x_msg_count                   => x_msg_count,
19726                     x_msg_data                    => x_msg_data,
19727                     p_sty_id                      => l_billingdtls_rec.sty_id,
19728                     p_purchase_option_code        => lx_pb_prch_opt_det,
19729                     p_int_disclosed_code          => lx_pb_int_disclosed_det,
19730                     p_title_trnsfr_code           => lx_transfer_of_title,
19731                     p_sale_lease_back_code        => lx_sale_lease_back,
19732                     p_lease_purchased_code        => lx_purchase_of_lease,
19733                     p_tax_country_code            => l_def_tax_country,
19734                     x_pc_code                     => lx_pc_code);
19735         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19736           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19737         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19738           RAISE OKL_API.G_EXCEPTION_ERROR;
19739         END IF;
19740 
19741         -- Validate PC Code
19742         IF lx_pc_code IS NOT NULL THEN
19743           validate_tax_code(
19744             p_api_version     => p_api_version,
19745             p_init_msg_list   => p_init_msg_list,
19746             x_return_status   => x_return_status,
19747             x_msg_count       => x_msg_count,
19748             x_msg_data        => x_msg_data,
19749             p_trx_date        => l_billingdtls_rec.date_invoiced,
19750             p_pc_code         => lx_pc_code,
19751             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
19752 
19753           IF (lx_tax_valid_code = 'F') THEN
19754             lx_pc_code := null;
19755           END IF;
19756 
19757           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19758             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19759           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19760             RAISE OKL_API.G_EXCEPTION_ERROR;
19761           END IF;
19762         END IF;
19763 
19764         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19765           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19766                   'lx_pc_code '||lx_pc_code);
19767         END IF;
19768 
19769         -- Get UFC code
19770         get_ufc_code(p_api_version                 => p_api_version,
19771                      p_init_msg_list               => p_init_msg_list,
19772                      x_return_status               => x_return_status,
19773                      x_msg_count                   => x_msg_count,
19774                      x_msg_data                    => x_msg_data,
19775                      p_purchase_option             => lx_pb_prch_opt_det,
19776                      p_fin_product_id              => lx_pb_fin_prod_id_det,
19777                      p_try_id                      => l_billingdtls_rec.try_id,
19778                      p_sty_id                      => l_billingdtls_rec.sty_id,
19779                      p_int_disclosed_code          => lx_pb_int_disclosed_det,
19780                      p_title_trnsfr_code           => lx_transfer_of_title,
19781                      p_sale_lease_back_code        => lx_sale_lease_back,
19782                      p_lease_purchased_code        => lx_purchase_of_lease,
19783                      p_equip_usage_code            => lx_usage_of_equipment ,
19784                      p_vendor_site_id              => lx_vendor_site_id,
19785                      p_age_of_equip                => lx_age_of_equipment,
19786                      p_term_quote_type_code        => null,
19787                      p_term_quote_reason_code      => null,
19788                      p_tax_country_code            => l_def_tax_country,
19789                      x_ufc_code                    => lx_ufc_code);
19790         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19791           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19792         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19793           RAISE OKL_API.G_EXCEPTION_ERROR;
19794         END IF;
19795 
19796         -- Validate UFC Code
19797         IF lx_ufc_code IS NOT NULL THEN
19798           validate_tax_code(
19799             p_api_version     => p_api_version,
19800             p_init_msg_list   => p_init_msg_list,
19801             x_return_status   => x_return_status,
19802             x_msg_count       => x_msg_count,
19803             x_msg_data        => x_msg_data,
19804             p_trx_date        => l_billingdtls_rec.date_invoiced,
19805             p_ufc_code        => lx_ufc_code,
19806             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
19807 
19808           IF (lx_tax_valid_code = 'F') THEN
19809             lx_ufc_code := null;
19810           END IF;
19811 
19812           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19813             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19814           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19815             RAISE OKL_API.G_EXCEPTION_ERROR;
19816           END IF;
19817         END IF;
19818 
19819         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19820           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19821                   'lx_ufc_code '||lx_ufc_code);
19822         END IF;
19823 
19824         -- Get the tax classification code
19825         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19826           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19827                   'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
19828         END IF;
19829 
19830         -- Get Set of Books ID
19831         OPEN c_get_set_of_books_id(cp_org_id  =>  lx_org_id);
19832         FETCH c_get_set_of_books_id INTO l_set_of_books_id;
19833         CLOSE c_get_set_of_books_id;
19834 
19835         IF p_source_trx_name IN ('Billing', 'Rollover Billing', 'Release Billing') THEN
19836           l_event_class_code := G_INVOICE_EVENT_CLASS_CODE;
19837         ELSIF p_source_trx_name IN ('Credit Memo', 'Rollover Credit Memo', 'Release Credit Memo') THEN
19838           l_event_class_code := G_CRE_MEM_EVENT_CLASS_CODE;
19839         END IF;
19840 
19841         OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
19842                         x_return_status                 =>  x_return_status,
19843                         p_ship_to_site_use_id           =>  lx_ship_to_siteuseid,
19844                         p_bill_to_site_use_id           =>  lx_bill_to_siteuseid,
19845                         p_inventory_item_id             =>  l_inv_item_id,
19846                         p_organization_id               =>  lx_org_id,
19847                         p_set_of_books_id               =>  l_set_of_books_id,
19848                         p_trx_date                      =>  l_billingdtls_rec.date_invoiced,
19849                         p_trx_type_id                   =>  null,
19850                         p_entity_code                   =>  G_AR_ENTITY_CODE,
19851                         p_event_class_code              =>  l_event_class_code,
19852                         p_application_id                =>  G_AR_APPLICATION_ID,
19853                         p_internal_organization_id      =>  lx_org_id,
19854                         x_tax_classification_code       =>  lx_tax_classification_code );
19855 
19856         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19857           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19858                 'Return Status '|| x_return_status);
19859 
19860           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19861                 'lx_tax_classification_code '|| lx_tax_classification_code);
19862         END IF;
19863 
19864         -- Check if taxable basis override applies to Billing / Credit Memo
19865         OPEN  l_txbasisoverride_csr(l_billingdtls_rec.try_id);
19866         FETCH l_txbasisoverride_csr INTO l_fma_id;
19867         CLOSE l_txbasisoverride_csr;
19868 
19869         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19870           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19871                 ' l_fma_id :'||l_fma_id);
19872         END IF;
19873 
19874         IF l_fma_id IS NOT NULL THEN
19875           OPEN  l_formulae_csr(l_fma_id);
19876           FETCH l_formulae_csr INTO l_formula_name;
19877 
19878           IF l_formulae_csr%NOTFOUND THEN
19879             OKC_API.set_message( p_app_name      => 'OKC',
19880                                  p_msg_name      => G_INVALID_VALUE,
19881                                  p_token1        => G_COL_NAME_TOKEN,
19882                                  p_token1_value  => 'FMA_ID');
19883             RAISE OKL_API.G_EXCEPTION_ERROR;
19884           END IF;
19885           CLOSE l_formulae_csr;
19886 
19887           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19888             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19889                     'l_formula_name '||l_formula_name );
19890           END IF;
19891 
19892           -- execute tax basis override formula, pass tax determinants
19893           l_add_params(1).name  := 'PURCHASE_OPTION';
19894           l_add_params(1).value := lx_pb_prch_opt_det;
19895 
19896           l_add_params(2).name  := 'FINANCIAL_PRODUCT_ID';
19897           l_add_params(2).value := lx_pb_fin_prod_id_det;
19898 
19899           l_add_params(3).name  := 'TRX_TYPE_ID';
19900           l_add_params(3).value := l_billingdtls_rec.try_id;
19901 
19902           l_add_params(4).name  := 'STREAM_TYPE_ID';
19903           l_add_params(4).value := l_billingdtls_rec.sty_id;
19904 
19905           l_add_params(5).name  := 'INTEREST_DISCLOSED';
19906           l_add_params(5).value := lx_pb_int_disclosed_det;
19907 
19908           l_add_params(6).name  := 'TRANSFER_OF_TITLE';
19909           l_add_params(6).value := lx_transfer_of_title;
19910 
19911           l_add_params(7).name  := 'SALE_LEASE_BACK';
19912           l_add_params(7).value := lx_sale_lease_back;
19913 
19914           l_add_params(8).name  := 'PURCHASE_OF_LEASE';
19915           l_add_params(8).value := lx_purchase_of_lease;
19916 
19917           l_add_params(9).name  := 'USAGE_OF_EQUIPMENT';
19918           l_add_params(9).value := lx_usage_of_equipment;
19919 
19920           l_add_params(10).name := 'VENDOR_SITE_ID';
19921           l_add_params(10).value := lx_vendor_site_id;
19922 
19923           l_add_params(11).name := 'AGE_OF_EQUIPMENT';
19924           l_add_params(11).value  := lx_age_of_equipment;
19925 
19926           l_add_params(12).name := 'BOOK_CLASS';
19927           l_add_params(12).value  := lx_book_class_code;
19928 
19929           l_add_params(13).name := 'BILL_TO_PARTY_SITE_ID';
19930           l_add_params(13).value  := lx_bill_to_party_site_id;
19931 
19932           l_add_params(14).name := 'BILL_TO_LOCATION_ID';
19933           l_add_params(14).value  := lx_bill_to_location_id;
19934 
19935           l_add_params(15).name := 'BILL_TO_PARTY_ID';
19936           l_add_params(15).value  := lx_bill_to_party_id;
19937 
19938           l_add_params(16).name := 'SHIP_TO_PARTY_SITE_ID';
19939           l_add_params(16).value  :=  null;
19940 
19941           l_add_params(17).name := 'SHIP_TO_LOCATION_ID';
19942           l_add_params(17).value  :=  null;
19943 
19944           l_add_params(18).name := 'SHIP_TO_PARTY_ID';
19945           l_add_params(18).value  :=  null;
19946 
19947           l_add_params(19).name := 'BILL_TO_SITE_USE_ID';
19948           l_add_params(19).value  :=  lx_bill_to_siteuseid;
19949 
19950           l_add_params(20).name := 'INVENTORY_ITEM_ID';
19951           l_add_params(20).value  := l_inv_item_id;
19952 
19953           l_add_params(21).name := 'SHIP_TO_SITE_USE_ID';
19954           l_add_params(21).value  := lx_ship_to_siteuseid;
19955 
19956           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - begin
19957           --'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
19958           l_add_params(22).name := 'LINE_NAME';
19959           l_add_params(22).value  := Null; -- Line name is not relevant for billing and disbursement type of calls
19960 
19961           l_add_params(23).name := 'SOURCE_TRX_NAME';
19962           l_add_params(23).value  := p_source_trx_name;
19963 
19964           l_add_params(24).name := 'DEFAULT_TAXABLE_BASIS';
19965           l_add_params(24).value  := l_billingdtls_rec.amount;
19966           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - end
19967 
19968           okl_am_util_pvt.get_formula_value( p_formula_name           => l_formula_name,
19969                                              p_chr_id                 => l_billingdtls_rec.khr_id,
19970                                              p_cle_id                 => l_fin_asset_id,
19971                                              p_additional_parameters  => l_add_params,
19972                                              x_formula_value          => lx_assessable_value,
19973                                              x_return_status          => x_return_status);
19974 
19975           IF (x_return_status IN (OKL_API.G_RET_STS_UNEXP_ERROR, OKL_API.G_RET_STS_ERROR)) THEN
19976             OKL_API.init_msg_list('T');
19977             OKL_API.set_message(p_app_name      => 'OKL',
19978                                 p_msg_name      => 'OKL_TX_FRM_TXN_ERR',
19979                                 p_token1        => 'FMA_NAME',
19980                                 p_token1_value  => l_formula_name,
19981                                 p_token2        => 'TRX_NAME ',
19982                                                             p_token2_value  => p_source_trx_name);
19983             RAISE OKL_API.G_EXCEPTION_ERROR;
19984           END IF;
19985 
19986           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19987             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19988                 'calculated l_assessable_value '||lx_assessable_value);
19989           END IF;
19990 
19991         ELSE
19992           lx_assessable_value := l_billingdtls_rec.amount;
19993         END IF; --IF l_fma_id IS NOT NULL THEN
19994 
19995         x_tax_det_rec.x_tax_code                   :=  lx_tax_classification_code;
19996         x_tax_det_rec.x_trx_business_category      :=  lx_tbc_code;
19997         x_tax_det_rec.x_product_category           :=  lx_pc_code;
19998         x_tax_det_rec.x_product_type               :=  l_product_type;
19999         x_tax_det_rec.x_line_intended_use          :=  lx_usage_of_equipment;
20000         x_tax_det_rec.x_user_defined_fisc_class    :=  lx_ufc_code;
20001         x_tax_det_rec.x_assessable_value           :=  lx_assessable_value;
20002         x_tax_det_rec.x_default_taxation_country   :=  l_def_tax_country;
20003         x_tax_det_rec.x_upstream_trx_reported_flag :=  l_reporting_flag;
20004 
20005       ELSIF p_source_trx_name IN ('Funding', 'Disbursement', 'Debit Memo') THEN
20006 
20007         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20008           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20009                   'Call to (Funding, Disbursement, Debit Memo) .. ');
20010         END IF;
20011 
20012         -- Validate source trx id
20013         OPEN  l_disbdtls_csr(p_source_trx_id);
20014         FETCH l_disbdtls_csr INTO l_disbdtls_rec;
20015         IF l_disbdtls_csr %NOTFOUND THEN
20016           OKC_API.set_message( p_app_name      => 'OKC',
20017                                p_msg_name      => G_INVALID_VALUE,
20018                                p_token1        => G_COL_NAME_TOKEN,
20019                                p_token1_value  => 'SOURCE_TRX_ID');
20020           RAISE OKL_API.G_EXCEPTION_ERROR;
20021         END IF;
20022         CLOSE l_disbdtls_csr;
20023 
20024         IF (l_disbdtls_rec.ipvs_id IS NOT NULL) THEN
20025           OPEN  l_get_vendor_csr(l_disbdtls_rec.ipvs_id);
20026           FETCH l_get_vendor_csr INTO l_vendor_id;
20027           CLOSE l_get_vendor_csr;
20028         END IF;
20029 
20030         IF l_disbdtls_rec.qte_id IS NOT NULL THEN  -- Invoice created for a quote
20031           OPEN  l_trxquotes_csr(l_disbdtls_rec.qte_id);
20032           FETCH l_trxquotes_csr INTO l_qtp_code, l_qte_reason, l_early_term_yn;
20033           CLOSE l_trxquotes_csr;
20034         END IF;
20035 
20036         IF l_disbdtls_rec.sty_id IS NOT NULL THEN
20037           OPEN  l_strmtype_csr(l_disbdtls_rec.sty_id);
20038           FETCH l_strmtype_csr INTO l_purpose_code;
20039           CLOSE l_strmtype_csr;
20040         END IF;
20041 
20042         l_product_type := G_SERVICES;
20043         l_def_tax_country := get_default_taxation_country(x_return_status     => x_return_status,
20044                                                           x_msg_count         => x_msg_count,
20045                                                           x_msg_data          => x_msg_data,
20046                                                           p_legal_entity_id   => l_disbdtls_rec.legal_entity_id);
20047             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20048           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20049         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20050           RAISE OKL_API.G_EXCEPTION_ERROR;
20051         END IF;
20052 
20053         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20054           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20055                 ' l_qtp_code :'||l_qtp_code);
20056           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20057                 ' l_qte_reason :'||l_qte_reason);
20058           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20059                 ' l_early_term_yn :'||l_early_term_yn);
20060           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20061                 ' l_purpose_code :'||l_purpose_code);
20062           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20063                 ' l_def_tax_country :'||l_def_tax_country);
20064         END IF;
20065 
20066         -- get header level tax parameters
20067         get_k_hdr_tax_params( p_api_version                  => p_api_version,
20068                               p_init_msg_list                => p_init_msg_list,
20069                               x_return_status                => x_return_status,
20070                               x_msg_count                    => x_msg_count,
20071                               x_msg_data                     => x_msg_data,
20072                               p_khr_id                       => l_disbdtls_rec.khr_id,
20073                               p_source_trx_name              => p_source_trx_name,
20074                               p_source_table                 => p_source_table,
20075                               x_cust_acct_id                 => lx_cust_acct_id,
20076                               x_bill_to_siteuseid            => lx_bill_to_siteuseid,
20077                               x_currency_code                => lx_currency_code,
20078                               x_cust_trx_type_id             => lx_cust_trx_type_id,
20079                               x_precision                    => lx_precision,
20080                               x_minimum_accountable_unit     => lx_minimum_accountable_unit,
20081                               x_prch_opt_det                 => lx_pb_prch_opt_det,
20082                               x_fin_prod_id_det              => lx_pb_fin_prod_id_det,
20083                               x_int_disclosed_det            => lx_pb_int_disclosed_det,
20084                               x_org_id                       => lx_org_id,
20085                               x_book_class_code              => lx_book_class_code,
20086                               x_bill_to_party_site_id        => lx_bill_to_party_site_id,
20087                               x_bill_to_party_id             => lx_bill_to_party_id,
20088                               x_bill_to_location_id          => lx_bill_to_location_id,
20089                               x_currency_conversion_type     => lx_currency_conversion_type,
20090                               x_currency_conversion_rate     => lx_currency_conversion_rate,
20091                               x_currency_conversion_date     => lx_currency_conversion_date,
20092                               x_contract_start_date          => lx_contract_start_date);
20093         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20094           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20095         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20096           RAISE OKL_API.G_EXCEPTION_ERROR;
20097         END IF;
20098 
20099         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20100           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20101                 ' l_billingdtls_rec.khr_id :'||l_billingdtls_rec.khr_id);
20102           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20103                 ' lx_cust_acct_id :'||lx_cust_acct_id);
20104           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20105                 ' lx_bill_to_siteuseid :'||lx_bill_to_siteuseid);
20106           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20107                 ' lx_currency_code :'||lx_currency_code);
20108           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20109                 ' lx_cust_trx_type_id :'||lx_cust_trx_type_id);
20110           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20111                 ' lx_precision :'||lx_precision);
20112           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20113                 ' lx_minimum_accountable_unit :'||lx_minimum_accountable_unit);
20114           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20115                 ' lx_pb_prch_opt_det :'||lx_pb_prch_opt_det);
20116           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20117                 ' lx_pb_fin_prod_id_det :'||lx_pb_fin_prod_id_det);
20118           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20119                 ' lx_pb_int_disclosed_det :'||lx_pb_int_disclosed_det);
20120           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20121                 ' lx_org_id :'||lx_org_id);
20122           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20123                 ' lx_book_class_code :'||lx_book_class_code);
20124           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20125                 ' lx_bill_to_party_site_id :'||lx_bill_to_party_site_id);
20126           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20127                 ' lx_bill_to_party_id :'||lx_bill_to_party_id);
20128           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20129                 ' lx_bill_to_location_id :'||l_def_tax_country);
20130           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20131                 ' lx_currency_conversion_type :'||lx_currency_conversion_type);
20132           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20133                 ' lx_currency_conversion_rate :'||lx_currency_conversion_rate);
20134           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20135                 ' lx_currency_conversion_date :'||lx_currency_conversion_date);
20136           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20137                 ' lx_contract_start_date :'||lx_contract_start_date);
20138         END IF;
20139 
20140         -- Line level Invoice
20141         IF l_disbdtls_rec.kle_id IS NOT NULL THEN
20142 
20143           OPEN  l_okclinestyle_csr(l_disbdtls_rec.kle_id);
20144           FETCH l_okclinestyle_csr INTO l_line_type;
20145           CLOSE l_okclinestyle_csr;
20146 
20147           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20148             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants',
20149                   'line level inv '||' l_line_type = '||l_line_type);
20150           END IF;
20151 
20152           IF l_line_type IN ('FREE_FORM1','LINK_SERV_ASSET','LINK_FEE_ASSET') THEN
20153 
20154             l_asset_exists := TRUE;
20155 
20156             -- For regular stream billing, l_line_type can have any of the above 3 values
20157             -- For transaction billing, l_line_type can only be FREE_FORM1
20158             OPEN  l_okclines_csr(l_disbdtls_rec.kle_id);
20159             FETCH l_okclines_csr INTO l_name;
20160             CLOSE l_okclines_csr;
20161 
20162             IF l_line_type = 'FREE_FORM1' THEN
20163               l_fin_asset_id := l_disbdtls_rec.kle_id;
20164             ELSE
20165               -- If subline level, get the attached fin asset id
20166                   OPEN  l_finasset_csr(l_disbdtls_rec.kle_id, l_line_type);
20167                   FETCH l_finasset_csr INTO l_fin_asset_id;
20168                   CLOSE l_finasset_csr;
20169             END IF;
20170 
20171             -- Get the asset level determinants
20172             get_asset_tax_params(
20173                                 p_api_version                  => p_api_version,
20174                         p_init_msg_list                => p_init_msg_list,
20175                         x_return_status                => x_return_status,
20176                         x_msg_count                    => x_msg_count,
20177                         x_msg_data                     => x_msg_data,
20178                         p_khr_id                       => l_disbdtls_rec.khr_id,
20179                         p_kle_id                       => l_fin_asset_id,
20180                         p_source_trx_name              => p_source_trx_name,
20181                         p_source_table                 => p_source_table,
20182                         p_qtp_code                     => l_qtp_code,
20183                         p_purpose_code                 => l_purpose_code,
20184                         x_transfer_of_title                        => lx_transfer_of_title,
20185                         x_sale_lease_back                          => lx_sale_lease_back,
20186                         x_purchase_of_lease                        => lx_purchase_of_lease,
20187                         x_usage_of_equipment               => lx_usage_of_equipment,
20188                                 x_age_of_equipment                         => lx_age_of_equipment,
20189                                 x_vendor_site_id                       => lx_vendor_site_id);
20190                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20191                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20192             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20193                   RAISE OKL_API.G_EXCEPTION_ERROR;
20194             END IF;
20195 
20196             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20197               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20198                 ' l_fin_asset_id :'||l_fin_asset_id);
20199               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20200                 ' lx_transfer_of_title :'||lx_transfer_of_title);
20201               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20202                 ' lx_sale_lease_back :'||lx_sale_lease_back);
20203               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20204                 ' lx_purchase_of_lease :'||lx_purchase_of_lease);
20205               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20206                 ' lx_usage_of_equipment :'||lx_usage_of_equipment);
20207               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20208                 ' lx_age_of_equipment :'||lx_age_of_equipment);
20209               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20210                 ' lx_vendor_site_id :'||lx_vendor_site_id);
20211               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20212                 ' l_billingdtls_rec.qte_id :'||l_billingdtls_rec.qte_id);
20213             END IF;
20214 
20215             -- Get the inventory item id
20216                         OPEN  l_invitem_csr(l_fin_asset_id);
20217                 FETCH l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
20218                         IF l_invitem_csr%NOTFOUND THEN
20219                           OKL_API.set_message(
20220                                              p_app_name      => 'OKL',
20221                          p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
20222                                  p_token1        => 'ASSET_NUMBER',
20223                                                  p_token1_value  => l_name);
20224 
20225                           RAISE OKL_API.G_EXCEPTION_ERROR;
20226                         END IF;
20227                         CLOSE l_invitem_csr;
20228 
20229           END IF;
20230         END IF;
20231 
20232         -- Asset doesn't exist
20233         IF (NOT l_asset_exists) THEN
20234           lx_transfer_of_title      := null;
20235           lx_sale_lease_back        := null;
20236           lx_purchase_of_lease      := null;
20237           lx_usage_of_equipment     := null;
20238                   lx_age_of_equipment       := null;
20239                   lx_vendor_site_id         := null;
20240           lx_ship_to_party_site_id  := null;
20241           lx_ship_to_location_id    := null;
20242           lx_ship_to_party_id       := null;
20243           lx_ship_to_siteuseid      := null;
20244           l_inv_item_id             := null;
20245           l_inv_item_org_id         := null;
20246           l_fin_asset_id            := null;
20247         END IF;
20248 
20249         -- Get TBC code
20250         get_tbc_code(p_api_version                 => p_api_version,
20251                      p_init_msg_list               => p_init_msg_list,
20252                      x_return_status               => x_return_status,
20253                      x_msg_count                   => x_msg_count,
20254                      x_msg_data                    => x_msg_data,
20255                      p_sty_id                      => l_disbdtls_rec.sty_id,
20256                      p_try_id                      => l_disbdtls_rec.try_id,
20257                      p_book_class_code             => lx_book_class_code,
20258                      p_tax_country_code            => l_def_tax_country,
20259                      x_tbc_code                    => lx_tbc_code);
20260 
20261         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20262           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20263         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20264           RAISE OKL_API.G_EXCEPTION_ERROR;
20265         END IF;
20266 
20267         -- Validate TBC Code
20268         IF lx_tbc_code IS NOT NULL THEN
20269           validate_tax_code(
20270             p_api_version     => p_api_version,
20271             p_init_msg_list   => p_init_msg_list,
20272             x_return_status   => x_return_status,
20273             x_msg_count       => x_msg_count,
20274             x_msg_data        => x_msg_data,
20275             p_trx_date        => l_disbdtls_rec.date_invoiced,
20276             p_tbc_code        => lx_tbc_code,
20277             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
20278 
20279           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20280             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20281           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20282             RAISE OKL_API.G_EXCEPTION_ERROR;
20283           END IF;
20284         END IF;
20285 
20286         IF (lx_tbc_code IS NULL OR lx_tax_valid_code = 'F') THEN
20287           lx_tbc_code := 'PURCHASE_TRANSACTION';
20288         END IF;
20289 
20290         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20291           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20292               'lx_tbc_code '||lx_tbc_code);
20293         END IF;
20294 
20295         -- Get the tax classification code
20296         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20297           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20298                'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
20299         END IF;
20300 
20301         -- Get Set of Books ID
20302         OPEN c_get_set_of_books_id(cp_org_id  =>  lx_org_id);
20303         FETCH c_get_set_of_books_id INTO l_set_of_books_id;
20304         CLOSE c_get_set_of_books_id;
20305 
20306         OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
20307                         x_return_status                 =>  x_return_status,
20308                         p_ship_to_site_use_id           =>  lx_ship_to_siteuseid,
20309                         p_bill_to_site_use_id           =>  lx_bill_to_siteuseid,
20310                         p_inventory_item_id             =>  l_inv_item_id,
20311                         p_organization_id               =>  lx_org_id,
20312                         p_set_of_books_id               =>  l_set_of_books_id,
20313                         p_trx_date                      =>  l_disbdtls_rec.date_invoiced,
20314                         p_trx_type_id                   =>  null,
20315                         p_entity_code                   =>  G_AP_ENTITY_CODE,
20316                         p_event_class_code              =>  G_AP_EVENT_CLASS_CODE,
20317                         p_application_id                =>  G_AP_APPLICATION_ID,
20318                         p_internal_organization_id      =>  lx_org_id,
20319                         p_vendor_id                                 =>  l_vendor_id,
20320                         p_vendor_site_id                        =>  l_disbdtls_rec.ipvs_id,
20321                         x_tax_classification_code       =>  lx_tax_classification_code );
20322 
20323         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20324           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20325                 'Return Status '|| x_return_status);
20326           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20327                 'lx_tax_classification_code = '|| lx_tax_classification_code);
20328         END IF;
20329 
20330         OPEN  l_txbasisoverride_csr(l_disbdtls_rec.try_id);
20331         FETCH l_txbasisoverride_csr INTO l_fma_id;
20332         CLOSE l_txbasisoverride_csr;
20333 
20334         IF l_fma_id IS NOT NULL THEN
20335           OPEN  l_formulae_csr(l_fma_id);
20336           FETCH l_formulae_csr INTO l_formula_name;
20337 
20338           IF l_formulae_csr%NOTFOUND THEN
20339             OKC_API.set_message( p_app_name      => 'OKC',
20340                                  p_msg_name      => G_INVALID_VALUE,
20341                                  p_token1        => G_COL_NAME_TOKEN,
20342                                  p_token1_value  => 'FMA_ID');
20343             RAISE OKL_API.G_EXCEPTION_ERROR;
20344           END IF;
20345           CLOSE l_formulae_csr;
20346 
20347           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20348             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20349                 'l_formula_name '||l_formula_name );
20350           END IF;
20351 
20352           -- execute tax basis override formula, pass tax determinants
20353           l_add_params(1).name  := 'PURCHASE_OPTION';
20354           l_add_params(1).value := lx_pb_prch_opt_det;
20355 
20356           l_add_params(2).name  := 'FINANCIAL_PRODUCT_ID';
20357           l_add_params(2).value := lx_pb_fin_prod_id_det;
20358 
20359           l_add_params(3).name  := 'TRX_TYPE_ID';
20360           l_add_params(3).value := l_disbdtls_rec.try_id;
20361 
20362           l_add_params(4).name  := 'STREAM_TYPE_ID';
20363           l_add_params(4).value := l_disbdtls_rec.sty_id;
20364 
20365           l_add_params(5).name  := 'INTEREST_DISCLOSED';
20366           l_add_params(5).value := lx_pb_int_disclosed_det;
20367 
20368           l_add_params(6).name  := 'TRANSFER_OF_TITLE';
20369           l_add_params(6).value := lx_transfer_of_title;
20370 
20371           l_add_params(7).name  := 'SALE_LEASE_BACK';
20372           l_add_params(7).value := lx_sale_lease_back;
20373 
20374           l_add_params(8).name  := 'PURCHASE_OF_LEASE';
20375           l_add_params(8).value := lx_purchase_of_lease;
20376 
20377           l_add_params(9).name  := 'USAGE_OF_EQUIPMENT';
20378           l_add_params(9).value := lx_usage_of_equipment;
20379 
20380           l_add_params(10).name := 'VENDOR_SITE_ID';
20381           l_add_params(10).value := lx_vendor_site_id;
20382 
20383           l_add_params(11).name := 'AGE_OF_EQUIPMENT';
20384           l_add_params(11).value  := lx_age_of_equipment;
20385 
20386           l_add_params(12).name := 'BOOK_CLASS';
20387           l_add_params(12).value  := lx_book_class_code;
20388 
20389           l_add_params(13).name := 'BILL_TO_PARTY_SITE_ID';
20390           l_add_params(13).value  := lx_bill_to_party_site_id;
20391 
20392           l_add_params(14).name := 'BILL_TO_LOCATION_ID';
20393           l_add_params(14).value  := lx_bill_to_location_id;
20394 
20395           l_add_params(15).name := 'BILL_TO_PARTY_ID';
20396           l_add_params(15).value  := lx_bill_to_party_id;
20397 
20398           l_add_params(16).name := 'SHIP_TO_PARTY_SITE_ID';
20399           l_add_params(16).value  :=  null;
20400 
20401           l_add_params(17).name := 'SHIP_TO_LOCATION_ID';
20402           l_add_params(17).value  :=  null;
20403 
20404           l_add_params(18).name := 'SHIP_TO_PARTY_ID';
20405           l_add_params(18).value  :=  null;
20406 
20407               -- Directly Mapped
20408           l_add_params(19).name := 'BILL_TO_SITE_USE_ID';
20409           l_add_params(19).value  :=  lx_bill_to_siteuseid;
20410 
20411           l_add_params(20).name := 'INVENTORY_ITEM_ID';
20412           l_add_params(20).value  := l_inv_item_id;
20413 
20414           l_add_params(21).name := 'SHIP_TO_SITE_USE_ID';
20415           l_add_params(21).value  := lx_ship_to_siteuseid;
20416 
20417           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - begin
20418           --'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
20419           l_add_params(22).name := 'LINE_NAME';
20420           l_add_params(22).value  := Null; -- Line name is not relevant for billing and disbursement type of calls
20421 
20422           l_add_params(23).name := 'SOURCE_TRX_NAME';
20423           l_add_params(23).value  := p_source_trx_name;
20424 
20425           l_add_params(24).name := 'DEFAULT_TAXABLE_BASIS';
20426           l_add_params(24).value  := l_disbdtls_rec.amount;
20427           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - end
20428 
20429 
20430           okl_am_util_pvt.get_formula_value( p_formula_name           => l_formula_name,
20431                                              p_chr_id                 => l_disbdtls_rec.khr_id,
20432                                              p_cle_id                 => l_fin_asset_id,
20433                                              p_additional_parameters  => l_add_params,
20434                                              x_formula_value          => lx_assessable_value,
20435                                              x_return_status          => x_return_status);
20436 
20437           IF (x_return_status IN (OKL_API.G_RET_STS_UNEXP_ERROR, OKL_API.G_RET_STS_ERROR)) THEN
20438             OKL_API.init_msg_list('T');
20439             OKL_API.set_message(p_app_name      => 'OKL',
20440                                 p_msg_name      => 'OKL_TX_FRM_TXN_ERR',
20441                                 p_token1        => 'FMA_NAME',
20442                                 p_token1_value  => l_formula_name,
20443                                 p_token2        => 'TRX_NAME ',
20444                                                             p_token2_value  => p_source_trx_name);
20445             RAISE OKL_API.G_EXCEPTION_ERROR;
20446           END IF;
20447 
20448           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20449             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20450             'calculated l_assessable_value '||lx_assessable_value);
20451           END IF;
20452 
20453         ELSE
20454           lx_assessable_value := l_disbdtls_rec.amount;
20455         END IF; --IF l_fma_id IS NOT NULL THEN
20456 
20457         x_tax_det_rec.x_tax_code                   :=  lx_tax_classification_code;
20458         x_tax_det_rec.x_trx_business_category      :=  lx_tbc_code;
20459         x_tax_det_rec.x_product_type               :=  l_product_type;
20460         x_tax_det_rec.x_assessable_value           :=  lx_assessable_value;
20461         x_tax_det_rec.x_default_taxation_country   :=  l_def_tax_country;
20462         x_tax_det_rec.x_product_category           :=  null;
20463         x_tax_det_rec.x_line_intended_use          :=  null;
20464         x_tax_det_rec.x_user_defined_fisc_class    :=  null;
20465         x_tax_det_rec.x_upstream_trx_reported_flag :=  null;
20466 
20467       ELSE
20468         OKC_API.set_message( p_app_name      => 'OKC',
20469                              p_msg_name      => G_INVALID_VALUE,
20470                              p_token1        => G_COL_NAME_TOKEN,
20471                              p_token1_value  => 'SOURCE_TRX_NAME');
20472         RAISE OKL_API.G_EXCEPTION_ERROR;
20473       END IF;
20474 
20475       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20476         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ','End(-)');
20477       END IF;
20478 
20479       -- End the transaction
20480       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
20481 
20482     EXCEPTION
20483       WHEN OKL_API.G_EXCEPTION_ERROR THEN
20484 
20485         IF (l_billingdtls_csr%ISOPEN) THEN
20486           CLOSE l_billingdtls_csr;
20487         END IF;
20488 
20489         IF (l_trxquotes_csr%ISOPEN) THEN
20490           CLOSE l_trxquotes_csr;
20491         END IF;
20492 
20493         IF (l_strmtype_csr%ISOPEN) THEN
20494           CLOSE l_strmtype_csr;
20495         END IF;
20496 
20497         IF (l_okclinestyle_csr%ISOPEN) THEN
20498           CLOSE l_okclinestyle_csr;
20499         END IF;
20500 
20501         IF (l_okclines_csr%ISOPEN) THEN
20502           CLOSE l_okclines_csr;
20503         END IF;
20504 
20505         IF (l_finasset_csr%ISOPEN) THEN
20506           CLOSE l_finasset_csr;
20507         END IF;
20508 
20509         IF (l_oeorderlines_csr%ISOPEN) THEN
20510           CLOSE l_oeorderlines_csr;
20511         END IF;
20512 
20513         IF (l_invitem_csr%ISOPEN) THEN
20514           CLOSE l_invitem_csr;
20515         END IF;
20516 
20517         IF (c_get_set_of_books_id%ISOPEN) THEN
20518           CLOSE c_get_set_of_books_id;
20519         END IF;
20520 
20521         IF (l_txbasisoverride_csr%ISOPEN) THEN
20522           CLOSE l_txbasisoverride_csr;
20523         END IF;
20524 
20525         IF (l_formulae_csr%ISOPEN) THEN
20526           CLOSE l_formulae_csr;
20527         END IF;
20528 
20529         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20530            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ',
20531                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20532         END IF;
20533 
20534         x_return_status := OKL_API.HANDLE_EXCEPTIONS
20535         (
20536           l_api_name,
20537           G_PKG_NAME,
20538           'OKL_API.G_RET_STS_ERROR',
20539           x_msg_count,
20540           x_msg_data,
20541           '_PVT');
20542 
20543       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20544 
20545         IF (l_billingdtls_csr%ISOPEN) THEN
20546           CLOSE l_billingdtls_csr;
20547         END IF;
20548 
20549         IF (l_trxquotes_csr%ISOPEN) THEN
20550           CLOSE l_trxquotes_csr;
20551         END IF;
20552 
20553         IF (l_strmtype_csr%ISOPEN) THEN
20554           CLOSE l_strmtype_csr;
20555         END IF;
20556 
20557         IF (l_okclinestyle_csr%ISOPEN) THEN
20558           CLOSE l_okclinestyle_csr;
20559         END IF;
20560 
20561         IF (l_okclines_csr%ISOPEN) THEN
20562           CLOSE l_okclines_csr;
20563         END IF;
20564 
20565         IF (l_finasset_csr%ISOPEN) THEN
20566           CLOSE l_finasset_csr;
20567         END IF;
20568 
20569         IF (l_oeorderlines_csr%ISOPEN) THEN
20570           CLOSE l_oeorderlines_csr;
20571         END IF;
20572 
20573         IF (l_invitem_csr%ISOPEN) THEN
20574           CLOSE l_invitem_csr;
20575         END IF;
20576 
20577         IF (c_get_set_of_books_id%ISOPEN) THEN
20578           CLOSE c_get_set_of_books_id;
20579         END IF;
20580 
20581         IF (l_txbasisoverride_csr%ISOPEN) THEN
20582           CLOSE l_txbasisoverride_csr;
20583         END IF;
20584 
20585         IF (l_formulae_csr%ISOPEN) THEN
20586           CLOSE l_formulae_csr;
20587         END IF;
20588 
20589         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20590            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ',
20591                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20592         END IF;
20593 
20594         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
20595         (
20596           l_api_name,
20597           G_PKG_NAME,
20598           'OKL_API.G_RET_STS_UNEXP_ERROR',
20599           x_msg_count,
20600           x_msg_data,
20601           '_PVT');
20602 
20603       WHEN OTHERS THEN
20604 
20605         IF (l_billingdtls_csr%ISOPEN) THEN
20606           CLOSE l_billingdtls_csr;
20607         END IF;
20608 
20609         IF (l_trxquotes_csr%ISOPEN) THEN
20610           CLOSE l_trxquotes_csr;
20611         END IF;
20612 
20613         IF (l_strmtype_csr%ISOPEN) THEN
20614           CLOSE l_strmtype_csr;
20615         END IF;
20616 
20617         IF (l_okclinestyle_csr%ISOPEN) THEN
20618           CLOSE l_okclinestyle_csr;
20619         END IF;
20620 
20621         IF (l_okclines_csr%ISOPEN) THEN
20622           CLOSE l_okclines_csr;
20623         END IF;
20624 
20625         IF (l_finasset_csr%ISOPEN) THEN
20626           CLOSE l_finasset_csr;
20627         END IF;
20628 
20629         IF (l_oeorderlines_csr%ISOPEN) THEN
20630           CLOSE l_oeorderlines_csr;
20631         END IF;
20632 
20633         IF (l_invitem_csr%ISOPEN) THEN
20634           CLOSE l_invitem_csr;
20635         END IF;
20636 
20637         IF (c_get_set_of_books_id%ISOPEN) THEN
20638           CLOSE c_get_set_of_books_id;
20639         END IF;
20640 
20641         IF (l_txbasisoverride_csr%ISOPEN) THEN
20642           CLOSE l_txbasisoverride_csr;
20643         END IF;
20644 
20645         IF (l_formulae_csr%ISOPEN) THEN
20646           CLOSE l_formulae_csr;
20647         END IF;
20648 
20649         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20650            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ',
20651                     'EXCEPTION :'||sqlerrm);
20652         END IF;
20653 
20654         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
20655         (
20656           l_api_name,
20657           G_PKG_NAME,
20658           'OTHERS',
20659           x_msg_count,
20660           x_msg_data,
20661           '_PVT');
20662 
20663         -- End the transaction
20664         OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
20665 
20666     END get_tax_determinants;
20667 
20668 /*========================================================================
20669  | PUBLIC FUNCTION get_default_taxation_country
20670  |
20671  | DESCRIPTION
20672  |    This function is called by Tax component consumers to derive the default
20673  |    taxation country based on legal entity
20674  |
20675  | CALLED FROM                                  Tax consumers (Booking, Sales etc.,)
20676  |
20677  |
20678  | CALLS PROCEDURES/FUNCTIONS
20679  |
20680  |
20681  | PARAMETERS
20682  |      p_legal_entity_id            -- Legal Entity Identifier
20683  |
20684  | KNOWN ISSUES
20685  |
20686  | NOTES
20687  |
20688  |
20689  | MODIFICATION HISTORY
20690  | Date          Author     Description of Changes
20691  | 05-MAR-07    RRAVIKIR      Created
20692  |
20693  *=======================================================================*/
20694   FUNCTION get_default_taxation_country(x_return_status     OUT NOCOPY VARCHAR2,
20695                                         x_msg_count         OUT NOCOPY NUMBER,
20696                                         x_msg_data          OUT NOCOPY VARCHAR2,
20697                                         p_legal_entity_id   IN NUMBER)
20698     RETURN VARCHAR2 IS
20699 
20700     -- Local variables
20701     l_api_name                    CONSTANT VARCHAR2(30) := 'get_default_taxation_country';
20702     l_return_status               VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
20703 
20704     -- Local data structure
20705     lx_legal_entity_rec    legal_entity_rec_type;
20706 
20707   BEGIN
20708     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20709         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country','Begin(+)');
20710     END IF;
20711 
20712     --Print Input Variables
20713     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20714          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country.',
20715               'p_legal_entity_id :'||p_legal_entity_id);
20716     END IF;
20717 
20718     xle_utilities_grp.get_legalentity_info(x_return_status      => l_return_status,
20719                                                     x_msg_count             => x_msg_count,
20720                                                     x_msg_data              => x_msg_data,
20721                                                 p_party_id          => null,
20722                                                 p_legalentity_id        => p_legal_entity_id,
20723                                                 x_legalentity_info  => lx_legal_entity_rec);
20724     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20725       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20726     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20727       RAISE OKL_API.G_EXCEPTION_ERROR;
20728     END IF;
20729 
20730     x_return_status := l_return_status;
20731 
20732     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20733       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ','End(-)');
20734     END IF;
20735 
20736     RETURN lx_legal_entity_rec.country;
20737 
20738   EXCEPTION
20739     WHEN OKL_API.G_EXCEPTION_ERROR THEN
20740 
20741       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20742          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ',
20743                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20744       END IF;
20745 
20746       x_return_status := OKL_API.G_RET_STS_ERROR;
20747 
20748     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20749       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20750          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ',
20751                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20752       END IF;
20753 
20754       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
20755 
20756     WHEN OTHERS THEN
20757 
20758       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20759          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ',
20760                   'EXCEPTION :'||sqlerrm);
20761       END IF;
20762 
20763       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
20764       -- unexpected error
20765       OKL_API.set_message(p_app_name      => g_app_name,
20766                           p_msg_name      => g_unexpected_error,
20767                           p_token1        => g_sqlcode_token,
20768                           p_token1_value  => sqlcode,
20769                           p_token2        => g_sqlerrm_token,
20770                           p_token2_value  => sqlerrm);
20771 
20772   END get_default_taxation_country;
20773 
20774 /*========================================================================
20775  | PUBLIC FUNCTION get_line_intended_use_name
20776  |
20777  | DESCRIPTION
20778  |    This function derives the line intended use name basing on the code
20779  |
20780  | CALLED FROM                                  Sales objects
20781  |
20782  |
20783  | CALLS PROCEDURES/FUNCTIONS
20784  |
20785  |
20786  | PARAMETERS
20787  |      p_intend_use_code            -- Intended use for tax code
20788  |
20789  | KNOWN ISSUES
20790  |
20791  | NOTES
20792  |
20793  |
20794  | MODIFICATION HISTORY
20795  | Date          Author     Description of Changes
20796  | 05-MAR-07    RRAVIKIR      Created
20797  |
20798  *=======================================================================*/
20799   FUNCTION get_line_intended_use_name(p_intend_use_code   IN VARCHAR2)
20800     RETURN VARCHAR2 IS
20801 
20802     -- Local variables
20803     l_intend_use_name     VARCHAR2(240);
20804 
20805     -- Cursors
20806     CURSOR l_get_intend_use_name_csr IS
20807     SELECT classification_name
20808     FROM zx_fc_intended_use_v
20809     WHERE classification_code = p_intend_use_code;
20810   BEGIN
20811     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20812         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name','Begin(+)');
20813     END IF;
20814 
20815     --Print Input Variables
20816     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20817          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name.',
20818               'p_intend_use_code :'||p_intend_use_code);
20819     END IF;
20820 
20821     OPEN l_get_intend_use_name_csr;
20822     FETCH l_get_intend_use_name_csr INTO l_intend_use_name;
20823     CLOSE l_get_intend_use_name_csr;
20824 
20825     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20826       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ','End(-)');
20827     END IF;
20828 
20829     RETURN l_intend_use_name;
20830 
20831   EXCEPTION
20832     WHEN OKL_API.G_EXCEPTION_ERROR THEN
20833 
20834       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20835          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ',
20836                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20837       END IF;
20838 
20839       IF (l_get_intend_use_name_csr%ISOPEN) THEN
20840         CLOSE l_get_intend_use_name_csr;
20841       END IF;
20842 
20843     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20844       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20845          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ',
20846                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20847       END IF;
20848 
20849       IF (l_get_intend_use_name_csr%ISOPEN) THEN
20850         CLOSE l_get_intend_use_name_csr;
20851       END IF;
20852 
20853     WHEN OTHERS THEN
20854 
20855       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20856          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ',
20857                   'EXCEPTION :'||sqlerrm);
20858       END IF;
20859 
20860       IF (l_get_intend_use_name_csr%ISOPEN) THEN
20861         CLOSE l_get_intend_use_name_csr;
20862       END IF;
20863 
20864   END get_line_intended_use_name;
20865 
20866 /*========================================================================
20867  | PUBLIC PROCEDURE cancel_document_tax
20868  |
20869  | DESCRIPTION
20870  |    This procedure is called by 'Pre-Rebook' and 'Rebook' processes to cancel
20871  |    the tax
20872  |
20873  | CALLED FROM                                  OLM Rebook Module
20874  |
20875  |
20876  | CALLS PROCEDURES/FUNCTIONS
20877  |
20878  |
20879  | PARAMETERS
20880  |      p_source_trx_id         --  OKL_TRX_CONTRACTS.ID (ID of Pre-Rebook or Rebook transaction)
20881  |      p_source_trx_name   -- Pre-Rebook (used for upgrade) or Rebook
20882  |      p_source_table      -- OKL_TRX_CONTRACTS
20883  |
20884  | KNOWN ISSUES
20885  |
20886  | NOTES
20887  |
20888  |
20889  | MODIFICATION HISTORY
20890  | Date          Author     Description of Changes
20891  | 01-MAR-07    RRAVIKIR      Created
20892  |
20893  *=======================================================================*/
20894   PROCEDURE cancel_document_tax (
20895     p_api_version                   IN NUMBER,
20896     p_init_msg_list                 IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
20897     x_return_status                 OUT NOCOPY VARCHAR2,
20898     x_msg_count                     OUT NOCOPY NUMBER,
20899     x_msg_data                      OUT NOCOPY VARCHAR2,
20900     p_source_trx_id                 IN  NUMBER,
20901     p_source_trx_name               IN  VARCHAR2,
20902     p_source_table                  IN  VARCHAR2) IS
20903 
20904     -- Local variables
20905     l_api_version                   CONSTANT NUMBER := 1;
20906     l_api_name                      CONSTANT VARCHAR2(30) := 'cancel_document_tax';
20907     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
20908 
20909     l_internal_org_id               NUMBER;
20910     l_application_id                NUMBER;
20911     l_entity_code                   VARCHAR2(30);
20912     l_event_class_code              VARCHAR2(30);
20913     i                               NUMBER;
20914 
20915     -- Local record structure
20916     l_txsv_tbl                      txsv_tbl_type;
20917     lx_txsv_tbl                     txsv_tbl_type;
20918     l_transaction_rec               transaction_rec_type;
20919 
20920     -- Cursor
20921     -- This cursor wll pick all the tax sources coresponding to the Rebook validate transaction
20922     -- Rebook can be abandoned only prior to Rebook activation. Hence tax sources
20923     -- picked by this cursor will --be the ones created at the time of validation
20924     CURSOR l_taxsources_csr(cp_trx_id IN NUMBER) IS
20925     SELECT id, org_id, application_id, entity_code, event_class_code
20926     FROM okl_tax_sources
20927     WHERE trx_id = cp_trx_id
20928     AND application_id = G_OKL_APPLICATION_ID
20929     AND TAX_CALL_TYPE_CODE = G_UPFRONT_TAX
20930     AND TAX_LINE_STATUS_CODE = G_ACTIVE_STATUS;
20931 
20932     CURSOR l_taxsources_prbk_csr(cp_trx_id IN NUMBER) IS
20933     SELECT id, org_id, entity_code, event_class_code
20934     FROM okl_tax_sources
20935     WHERE trx_id = cp_trx_id
20936     AND TAX_CALL_TYPE_CODE = G_UPFRONT_TAX
20937     AND TAX_LINE_STATUS_CODE = G_ACTIVE_STATUS;
20938 
20939     CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
20940     SELECT '1'
20941     FROM   okl_trx_contracts a , okl_trx_types_tl b
20942     WHERE  a.id = cp_trx_id
20943     AND    a.try_id = b.id
20944     AND    b.name = cp_trx_type_name
20945     AND    language = 'US';
20946 
20947     CURSOR l_trxcontracts_base_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
20948     SELECT '1'
20949     FROM   okl_trx_contracts_all a , okl_trx_types_tl b
20950     WHERE  a.id = cp_trx_id
20951     AND    a.try_id = b.id
20952     AND    b.name = cp_trx_type_name
20953     AND    language = 'US';
20954 
20955   BEGIN
20956     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20957       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax','Begin(+)');
20958     END IF;
20959 
20960     --Print Input Variables
20961     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20962       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20963               'p_init_msg_list :'||p_init_msg_list);
20964       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20965               'p_source_trx_id :'||p_source_trx_id);
20966       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20967               'p_source_trx_name :'||p_source_trx_name);
20968       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20969               'p_source_table :'||p_source_table);
20970     END IF;
20971 
20972     --Check API version, initialize message list and create savepoint.
20973     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
20974                                               G_PKG_NAME,
20975                                               p_init_msg_list,
20976                                               l_api_version,
20977                                               p_api_version,
20978                                               '_PVT',
20979                                               x_return_status);
20980 
20981     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20982       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20983     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20984       RAISE OKL_API.G_EXCEPTION_ERROR;
20985     END IF;
20986 
20987     -- Required Values
20988     IF p_source_trx_id IS NULL THEN
20989        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
20990                             p_token1        => G_COL_NAME_TOKEN,
20991                             p_token1_value  => 'SOURCE_TRX_ID');
20992        RAISE OKL_API.G_EXCEPTION_ERROR;
20993     END IF;
20994 
20995     -- validate the source trx id
20996     IF (p_source_trx_name = 'Pre-Rebook') THEN
20997       OPEN  l_trxcontracts_base_csr(p_source_trx_id, p_source_trx_name);
20998       IF l_trxcontracts_base_csr%NOTFOUND THEN
20999         -- source trx id is invalid
21000         OKC_API.set_message( p_app_name      => 'OKC',
21001                              p_msg_name      => G_INVALID_VALUE,
21002                              p_token1        => G_COL_NAME_TOKEN,
21003                              p_token1_value  => 'SOURCE_TRX_ID');
21004         RAISE OKL_API.G_EXCEPTION_ERROR;
21005       END IF;
21006       CLOSE l_trxcontracts_base_csr;
21007     ELSIF (p_source_trx_name = 'Rebook') THEN
21008       OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
21009       IF l_trxcontracts_csr%NOTFOUND THEN
21010         -- source trx id is invalid
21011         OKC_API.set_message( p_app_name      => 'OKC',
21012                              p_msg_name      => G_INVALID_VALUE,
21013                              p_token1        => G_COL_NAME_TOKEN,
21014                              p_token1_value  => 'SOURCE_TRX_ID');
21015         RAISE OKL_API.G_EXCEPTION_ERROR;
21016       END IF;
21017       CLOSE l_trxcontracts_csr;
21018     END IF;
21019 
21020     IF (p_source_trx_name IN ('Pre-Rebook','Rebook')) THEN -- Main condition
21021       -- 'Pre-Rebook' condition is called as part of upgrade, to cancel pending
21022       -- rebook transactions cancel tax lines in OKL schema
21023 
21024       -- 'Rebook' condition is called after the upgrade to cancel tax lines,
21025       -- when a rebook is abandoned cancel tax lines in OKL and ebTax schema
21026           -- Rebook validation tax call would have been made using transaction type
21027       -- 'Rebook' and event class 'BOOKING'
21028 
21029       i := 1;
21030       IF (p_source_trx_name = 'Pre-Rebook') THEN
21031 
21032         FOR l_taxsources_prbk_rec in l_taxsources_prbk_csr(cp_trx_id  => p_source_trx_id) LOOP
21033 
21034           UPDATE okl_tax_sources SET tax_line_status_code = G_CANCELLED_STATUS
21035           WHERE id = l_taxsources_prbk_rec.id;
21036 
21037         END LOOP;
21038 
21039       ELSIF (p_source_trx_name = 'Rebook') THEN
21040 
21041         FOR l_taxsources_rec in l_taxsources_csr(cp_trx_id  => p_source_trx_id) LOOP
21042 
21043           l_txsv_tbl(i).id                   := l_taxsources_rec.id;
21044               l_txsv_tbl(i).tax_line_status_code := G_CANCELLED_STATUS;
21045 
21046           IF (i = 1) THEN
21047             l_internal_org_id   := l_taxsources_rec.org_id;
21048             l_application_id    := l_taxsources_rec.application_id;
21049             l_entity_code       := l_taxsources_rec.entity_code;
21050             l_event_class_code  := l_taxsources_rec.event_class_code;
21051           END IF;
21052 
21053           i := i + 1;
21054 
21055         END LOOP;
21056 
21057       END IF;
21058 
21059       IF (i > 1 AND p_source_trx_name = 'Rebook') THEN -- Update Tax Sources
21060 
21061         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21062           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
21063                'Calling OKL_TAX_SOURCES_PUB.update_tax_sources ');
21064         END IF;
21065 
21066         OKL_TAX_SOURCES_PUB.update_tax_sources(p_api_version     => p_api_version
21067                                               ,p_init_msg_list   => p_init_msg_list
21068                                               ,x_return_status   => l_return_status
21069                                               ,x_msg_count       => x_msg_count
21070                                               ,x_msg_data        => x_msg_data
21071                                               ,p_txsv_tbl        => l_txsv_tbl
21072                                               ,x_txsv_tbl        => lx_txsv_tbl);
21073 
21074         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21075           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
21076               'Return Status' || l_return_status);
21077         END IF;
21078 
21079         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21080           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21081         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21082           RAISE OKL_API.G_EXCEPTION_ERROR;
21083         END IF;
21084 
21085         -- 'Rebook' specific condition to cancel tax lines in ebTax schema
21086         l_transaction_rec.internal_organization_id := l_internal_org_id;
21087         l_transaction_rec.application_id           := l_application_id;
21088         l_transaction_rec.entity_code              := l_entity_code;
21089         l_transaction_rec.event_class_code         := l_event_class_code;
21090         l_transaction_rec.event_type_code          := G_BOOKING_CANCEL;
21091         l_transaction_rec.trx_id                   :=  p_source_trx_id;
21092 
21093         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21094           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
21095             'Calling  OKL_TAX_INTERFACE_PVT.cancel_document_tax ');
21096         END IF;
21097 
21098         OKL_TAX_INTERFACE_PVT.update_document(p_api_version     => p_api_version,
21099                                               p_init_msg_list   => p_init_msg_list,
21100                                               x_return_status   => l_return_status,
21101                                               x_msg_count       => x_msg_count,
21102                                               x_msg_data        => x_msg_data,
21103                                               p_transaction_rec => l_transaction_rec);
21104 
21105         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21106           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
21107             'Return Status' || l_return_status);
21108         END IF;
21109 
21110         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21111           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21112         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21113           RAISE OKL_API.G_EXCEPTION_ERROR;
21114         END IF;
21115 
21116       END IF; -- Update Tax Sources
21117 
21118     END IF; -- Main condition
21119 
21120     x_return_status := l_return_status;
21121 
21122     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21123       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ','End(-)');
21124     END IF;
21125 
21126     -- end the transaction
21127     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
21128   EXCEPTION
21129     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21130 
21131       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21132          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ',
21133                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
21134       END IF;
21135 
21136       IF (l_taxsources_csr%ISOPEN) THEN
21137         CLOSE l_taxsources_csr;
21138       END IF;
21139 
21140       IF (l_trxcontracts_csr%ISOPEN) THEN
21141         CLOSE l_trxcontracts_csr;
21142       END IF;
21143 
21144       IF (l_trxcontracts_base_csr%ISOPEN) THEN
21145         CLOSE l_trxcontracts_base_csr;
21146       END IF;
21147 
21148       IF (l_taxsources_prbk_csr%ISOPEN) THEN
21149         CLOSE l_taxsources_prbk_csr;
21150       END IF;
21151 
21152       x_return_status := OKL_API.HANDLE_EXCEPTIONS
21153       ( l_api_name,
21154         G_PKG_NAME,
21155         'OKL_API.G_RET_STS_ERROR',
21156         x_msg_count,
21157         x_msg_data,
21158         '_PVT');
21159     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
21160 
21161       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21162          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ',
21163                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
21164       END IF;
21165 
21166       IF (l_taxsources_csr%ISOPEN) THEN
21167         CLOSE l_taxsources_csr;
21168       END IF;
21169 
21170       IF (l_trxcontracts_csr%ISOPEN) THEN
21171         CLOSE l_trxcontracts_csr;
21172       END IF;
21173 
21174       IF (l_trxcontracts_base_csr%ISOPEN) THEN
21175         CLOSE l_trxcontracts_base_csr;
21176       END IF;
21177 
21178       IF (l_taxsources_prbk_csr%ISOPEN) THEN
21179         CLOSE l_taxsources_prbk_csr;
21180       END IF;
21181 
21182       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21183       ( l_api_name,
21184         G_PKG_NAME,
21185         'OKL_API.G_RET_STS_UNEXP_ERROR',
21186         x_msg_count,
21187         x_msg_data,
21188         '_PVT');
21189     WHEN OTHERS THEN
21190 
21191       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21192          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ',
21193                   'EXCEPTION :'||sqlerrm);
21194       END IF;
21195 
21196       IF (l_taxsources_csr%ISOPEN) THEN
21197         CLOSE l_taxsources_csr;
21198       END IF;
21199 
21200       IF (l_trxcontracts_csr%ISOPEN) THEN
21201         CLOSE l_trxcontracts_csr;
21202       END IF;
21203 
21204       IF (l_trxcontracts_base_csr%ISOPEN) THEN
21205         CLOSE l_trxcontracts_base_csr;
21206       END IF;
21207 
21208       IF (l_taxsources_prbk_csr%ISOPEN) THEN
21209         CLOSE l_taxsources_prbk_csr;
21210       END IF;
21211 
21212       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21213       ( l_api_name,
21214         G_PKG_NAME,
21215         'OTHERS',
21216         x_msg_count,
21217         x_msg_data,
21218         '_PVT');
21219   END cancel_document_tax;
21220 
21221 /*========================================================================
21222  | PUBLIC PROCEDURE copy_global_tax_data
21223  |
21224  | DESCRIPTION
21225  |    This procedure is called by tax module to populate tax data into ZX global
21226  |    session table. eBtax uses this table to show the tax data for Quote
21227  |    objects (Sales Quote, Lease Application and Termination Quote)
21228  |
21229  | CALLED FROM                                  OLM Tax Module
21230  |
21231  |
21232  | CALLS PROCEDURES/FUNCTIONS
21233  |     OKL_TAX_INTERFACE_PVT.copy_global_tax_data
21234  |
21235  | PARAMETERS
21236  |      p_trx_id                     -- Transaction Identifier
21237  |      p_trx_line_id                -- Transaction Line Identifier
21238  |      p_application_id             -- Application Identifier
21239  |      p_trx_level_type             -- Transaction level type
21240  |      p_entity_code                -- Entity code
21241  |      p_event_class_code           -- Event class code
21242  |
21243  | KNOWN ISSUES
21244  |
21245  | NOTES
21246  |
21247  |
21248  | MODIFICATION HISTORY
21249  | Date          Author     Description of Changes
21250  | 04-APR-07    RRAVIKIR      Created
21251  |
21252  *=======================================================================*/
21253   PROCEDURE copy_global_tax_data (
21254     p_api_version                   IN NUMBER,
21255     p_init_msg_list                 IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
21256     x_return_status                 OUT NOCOPY VARCHAR2,
21257     x_msg_count                     OUT NOCOPY NUMBER,
21258     x_msg_data                      OUT NOCOPY VARCHAR2,
21259     p_trx_id                        IN  NUMBER,
21260     p_trx_line_id                   IN  NUMBER,
21261     p_application_id                IN  NUMBER,
21262     p_trx_level_type                        IN  VARCHAR2,
21263     p_entity_code                                   IN  VARCHAR2,
21264     p_event_class_code              IN  VARCHAR2) IS
21265 
21266     -- Local variables
21267     l_api_version                   CONSTANT NUMBER := 1;
21268     l_api_name                      CONSTANT VARCHAR2(30) := 'copy_global_tax_data';
21269     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
21270 
21271   BEGIN
21272     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21273         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data','Begin(+)');
21274     END IF;
21275 
21276     --Print Input Variables
21277     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21278          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21279               'p_init_msg_list :'||p_init_msg_list);
21280          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21281               'p_trx_id :'||p_trx_id);
21282          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21283               'p_trx_line_id :'||p_trx_line_id);
21284          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21285               'p_application_id :'||p_application_id);
21286          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21287               'p_trx_level_type :'||p_trx_level_type);
21288          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21289               'p_entity_code :'||p_entity_code);
21290          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21291               'p_event_class_code :'||p_event_class_code);
21292     END IF;
21293 
21294     --Check API version, initialize message list and create savepoint.
21295     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
21296                                               G_PKG_NAME,
21297                                               p_init_msg_list,
21298                                               l_api_version,
21299                                               p_api_version,
21300                                               '_PVT',
21301                                               x_return_status);
21302 
21303     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21304       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21305     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21306       RAISE OKL_API.G_EXCEPTION_ERROR;
21307     END IF;
21308 
21309     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21310       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21311           'Calling OKL_TAX_INTERFACE_PVT.copy_global_tax_data');
21312     END IF;
21313 
21314     OKL_TAX_INTERFACE_PVT.copy_global_tax_data(p_api_version          => p_api_version,
21315                                                p_init_msg_list        => p_init_msg_list,
21316                                                x_return_status        => l_return_status,
21317                                                x_msg_count            => x_msg_count,
21318                                                x_msg_data             => x_msg_data,
21319                                                p_trx_id               => p_trx_id,
21320                                                p_trx_line_id          => p_trx_line_id,
21321                                                p_application_id       => p_application_id,
21322                                                p_trx_level_type           => p_trx_level_type,
21323                                                p_entity_code              => p_entity_code,
21324                                                p_event_class_code     => p_event_class_code);
21325 
21326     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21327       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21328           'After calling OKL_TAX_INTERFACE_PVT.copy_global_tax_data - Return Status ' || l_return_status);
21329     END IF;
21330 
21331     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21332       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21333     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21334       RAISE OKL_API.G_EXCEPTION_ERROR;
21335     END IF;
21336 
21337     x_return_status := l_return_status;
21338 
21339     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21340       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ','End(-)');
21341     END IF;
21342 
21343     -- end the transaction
21344     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
21345   EXCEPTION
21346     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21347 
21348       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21349          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ',
21350                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
21351       END IF;
21352 
21353       x_return_status := OKL_API.HANDLE_EXCEPTIONS
21354       (
21355         l_api_name,
21356         G_PKG_NAME,
21357         'OKL_API.G_RET_STS_ERROR',
21358         x_msg_count,
21359         x_msg_data,
21360         '_PVT'
21361       );
21362     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
21363       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21364          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ',
21365                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
21366       END IF;
21367 
21368       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21369       (
21370         l_api_name,
21371         G_PKG_NAME,
21372         'OKL_API.G_RET_STS_UNEXP_ERROR',
21373         x_msg_count,
21374         x_msg_data,
21375         '_PVT'
21376       );
21377     WHEN OTHERS THEN
21378 
21379       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21380          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ',
21381                   'EXCEPTION :'||sqlerrm);
21382       END IF;
21383 
21384       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21385       (
21386         l_api_name,
21387         G_PKG_NAME,
21388         'OTHERS',
21389         x_msg_count,
21390         x_msg_data,
21391         '_PVT'
21392       );
21393   END copy_global_tax_data;
21394 
21395 END OKL_PROCESS_SALES_TAX_PVT;