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.56 2008/06/06 06:53:06 sechawla noship $ */
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            = NVL(TO_NUMBER(SUBSTRB(USERENV('CLIENT_INFO'),1,10)),-99)
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                          VARCHAR2(30);
3399     selected_count                      NUMBER;
3400     det_match_cnt                       NUMBER;
3401     l_selected_tbc_pos          NUMBER;
3402 
3403   BEGIN
3404 
3405     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3406       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code','Begin(+)');
3407     END IF;
3408 
3409     --Print Input Variables
3410     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3411       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3412            'p_init_msg_list :'||p_init_msg_list);
3413       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3414            'p_sty_id :'||p_sty_id);
3415       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3416            'p_try_id :'||p_try_id);
3417       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3418            'p_book_class_code :'||p_book_class_code);
3419       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3420            'p_tax_country_code :'||p_tax_country_code);
3421     END IF;
3422 
3423 
3424     OPEN  l_tbcdef_csr(p_try_id);
3425     FETCH l_tbcdef_csr BULK COLLECT INTO l_tbcdefs_tbl;
3426     CLOSE l_tbcdef_csr;
3427 
3428     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3429       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3430       'l_tbcdefs_tbl.COUNT '||l_tbcdefs_tbl.COUNT);
3431     END IF;
3432 
3433     IF l_tbcdefs_tbl.COUNT > 0 THEN                -- MAIN END IF
3434       k := 1;
3435       FOR i IN 1 .. 3 LOOP -- determinant loop
3436         tbc_set_count := 0;
3437 
3438         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3439               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.', 'i '||i);
3440         END IF;
3441 
3442         FOR j IN  l_tbcdefs_tbl.FIRST .. l_tbcdefs_tbl.LAST LOOP
3443               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3444                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3445                    'j '||j||' l_tbcdefs_tbl(j).select_yn '||l_tbcdefs_tbl(j).select_yn );
3446               END IF;
3447 
3448                   IF l_tbcdefs_tbl(j).select_yn = 'Y' THEN
3449             IF i = 1 THEN   -- stream type
3450                           IF p_sty_id IS NULL THEN
3451                                 IF l_tbcdefs_tbl(j).sty_id IS NULL THEN
3452                                    tbc_set_count := tbc_set_count + 1;
3453                                 ELSE
3454                                    l_tbcdefs_tbl(j).select_yn := 'N';
3455                                 END IF;
3456                           ELSE
3457                                 IF l_tbcdefs_tbl(j).sty_id IS NULL OR l_tbcdefs_tbl(j).sty_id = p_sty_id THEN
3458                                   tbc_set_count := tbc_set_count + 1;
3459                                 ELSE
3460                                   l_tbcdefs_tbl(j).select_yn := 'N';
3461                                 END IF;
3462                           END IF
3463      ;
3464                     ELSIF i = 2 THEN -- book class code
3465                       IF p_book_class_code IS NULL THEN
3466                             IF l_tbcdefs_tbl(j).book_class_code IS NULL THEN
3467                                   tbc_set_count := tbc_set_count + 1;
3468                                 ELSE
3469                                   l_tbcdefs_tbl(j).select_yn := 'N';
3470                                 END IF;
3471                           ELSE
3472                                 IF l_tbcdefs_tbl(j).book_class_code IS NULL OR l_tbcdefs_tbl(j).book_class_code = p_book_class_code THEN
3473                                   tbc_set_count := tbc_set_count + 1;
3474                                 ELSE
3475                                   l_tbcdefs_tbl(j).select_yn := 'N';
3476                                 END IF;
3477                           END IF;
3478 
3479                     ELSIF i = 3 THEN -- tax country (last determinant)
3480                       IF p_tax_country_code IS NULL THEN
3481                             IF l_tbcdefs_tbl(j).tax_country_code IS NULL THEN
3482                                   tbc_set_count := tbc_set_count + 1;
3483                   l_tbcdefs_selected_tbl(k) := j;
3484                                 ELSE
3485                                   l_tbcdefs_tbl(j).select_yn := 'N';
3486                                 END IF;
3487                           ELSE
3488                                 IF l_tbcdefs_tbl(j).tax_country_code IS NULL OR l_tbcdefs_tbl(j).tax_country_code = p_tax_country_code THEN
3489                                   tbc_set_count := tbc_set_count + 1;
3490                   l_tbcdefs_selected_tbl(k) := j;
3491                                 ELSE
3492                                   l_tbcdefs_tbl(j).select_yn := 'N';
3493                                 END IF;
3494                           END IF;
3495 
3496               k := k + 1;
3497                         END IF;
3498 
3499                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3500                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3501                          'tbc_set_count '||tbc_set_count);
3502                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3503                          'l_tbcdefs_tbl(j).select_yn '||l_tbcdefs_tbl(j).select_yn);
3504                 END IF;
3505               END IF;
3506         END LOOP;
3507 
3508         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3509                FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3510                   'tbc_set_count '||tbc_set_count);
3511         END IF;
3512 
3513         IF tbc_set_count = 0 THEN
3514               EXIT;
3515         END IF;
3516       END LOOP;  -- determinant loop
3517 
3518       -- At this point l_tbcdefs_tbl has been scanned for all the determinants.
3519       -- select_yn flag in this table is set to 'Y' for TBCs that have either Null
3520       -- determinant value or value matching with the transaction. Table l_tbcdefs_selected_tbl
3521           -- holds those indexes of original table l_tbcdefs_tbl, that have seleted TBCs.
3522           -- At this point this table may contain more than 1 TBCs. If so, we need to further filter
3523           -- out TBCs from this table based upon the priority of the determinants.
3524           -- Following priority order is used :
3525       -- 1.  Transaction Type
3526       -- 2.  Stream Type
3527       -- 3.  Book Class
3528       -- 4.  Tax Country
3529 
3530       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3531             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3532                   'tbc_set_count outside first loop'||tbc_set_count);
3533       END IF;
3534 
3535       IF tbc_set_count = 1 THEN
3536         l_tbc_code := l_tbcdefs_tbl(l_tbcdefs_selected_tbl(1)).tbc_code;
3537       ELSIF tbc_set_count > 1 THEN
3538             -- There can be more than one selected TBCs at this point
3539             -- apply determinant priority logic to select 1 TBC
3540             selected_count := tbc_set_count;
3541 
3542             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3543               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3544                      'l_tbcdefs_selected_tbl.count '||l_tbcdefs_selected_tbl.count );
3545             END IF;
3546 
3547             FOR i IN 1 .. 4 LOOP  -- determinant loop
3548 
3549                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3550                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3551                       'i '||i||' selected_count '||selected_count );
3552               END IF;
3553 
3554                   j := 1;
3555                   det_match_cnt := 0;
3556                   l_det_null_tbl.DELETE;
3557 
3558                   IF selected_count > 1 THEN
3559                     FOR k IN l_tbcdefs_selected_tbl.FIRST .. l_tbcdefs_selected_tbl.LAST LOOP  -- finally selected indexes
3560                           -- At this point all the selecetd TBCs will either have Null determinant
3561               -- value or determinant value matching with the calling transaction
3562                       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3563                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',   'k '||k);
3564                           END IF;
3565 
3566                           IF i = 1 THEN -- transaction type
3567                             IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).try_id IS NULL THEN
3568                                   l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3569                                   j := j + 1;
3570                             ELSE
3571                                   det_match_cnt := det_match_cnt + 1;
3572                                   l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3573                                   -- l_selected_tbc_pos will be used as the index of the selected TBC,
3574                                   -- when only one TBC is left
3575                             END IF;
3576 
3577                             IF k = tbc_set_count THEN  -- last record
3578                                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3579                                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3580                                                 'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3581                                   END IF;
3582 
3583                                   IF det_match_cnt = selected_count THEN --k THEN
3584                                     NULL; -- all records have matching values, do nothing
3585                                   ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3586                                     NULL; -- keep all records selected. Don't exclude yet.
3587                                   ELSIF det_match_cnt = 1 THEN
3588                                     selected_count := 1;
3589                                   ELSE -- more than one but less than total selected  records have matching values
3590                                     FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3591                                           l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3592                                           selected_count := selected_count - 1;
3593                                     END LOOP;
3594                                   END IF;
3595                             END IF;
3596 
3597                           ELSIF i = 2 THEN -- stream type
3598                             IF p_sty_id IS NOT NULL THEN
3599                   -- IF p_sty_id is null then l_tbcdefs_tbl will have more than 1 TBCs with
3600                                   -- only NULL values for sty_id. So no need to filter further, move on to next determinant
3601                                   -- When system is processing a determinant, there will always be more than one selected TBCS
3602                                   -- This is because, at the end of processing each determinant, we check the selected count
3603                                   -- If selected count = 1 then we do not process next determinant and exit
3604                                   IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
3605                                     IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).sty_id IS NULL THEN
3606                                       l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3607                                           j := j + 1;
3608                                     ELSE
3609                                           det_match_cnt := det_match_cnt + 1;
3610                                           l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3611                                           -- l_selected_tbc_pos will be used as the index of the selected TBC,
3612                                           -- when only one TBC is left
3613                                     END IF;
3614                                   END IF;
3615 
3616                                   IF k = tbc_set_count THEN  -- last record
3617                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3618                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3619                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3620                                     END IF;
3621 
3622                                     IF det_match_cnt = selected_count THEN --k THEN
3623                                           NULL; -- all records have matching values, do nothing
3624                                     ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3625                                           NULL; -- keep all records selected. Don't exclude yet.
3626                                     ELSIF det_match_cnt = 1 THEN
3627                                           selected_count := 1;
3628                                     ELSE -- more than one but less than total selected  records have matching values
3629                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3630                                             l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3631                                             selected_count := selected_count - 1;
3632                                           END LOOP;
3633                                 END IF;
3634                                   END IF;
3635                             END IF;
3636 
3637                           ELSIF i = 3 THEN -- book class
3638                             IF p_book_class_code IS NOT NULL THEN
3639                                   -- IF p_book_class_code is null then l_tbcdefs_tbl will have more than 1 TBCs with
3640                                   -- only NULL values for book_class_code. So no need to filter further, move on to next determinant
3641                                   -- When system is processing a determinant, there will always be more than one selected TBCS
3642                                   -- This is because, at the end of processing each determinant, we check the selected count
3643                                   -- If selected count = 1 then we do not process next determinant and exit
3644                                   IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
3645                                     IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).book_class_code IS NULL THEN
3646                                       l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3647                                           j := j + 1;
3648                                     ELSE
3649                                       det_match_cnt := det_match_cnt + 1;
3650                                           l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3651                                           -- l_selected_tbc_pos will be used as the index of the selected TBC,
3652                                           -- when only one TBC is left
3653                                     END IF;
3654                                   END IF;
3655 
3656                                   IF k = tbc_set_count THEN  -- last record
3657                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3658                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3659                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3660                                     END IF;
3661 
3662                                     IF det_match_cnt = selected_count THEN --k THEN
3663                                           NULL; -- all records have matching values, do nothing
3664                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3665                                           NULL; -- keep all records selected. Don't exclude yet.
3666                                     ELSIF det_match_cnt = 1 THEN
3667                                           selected_count := 1;
3668                                     ELSE -- more than one but less than total selected  records have matching values
3669                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3670                                             l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3671                                             selected_count := selected_count - 1;
3672                                           END LOOP;
3673                                     END IF;
3674                                   END IF;
3675                             END IF;
3676 
3677                           ELSIF i = 4 THEN -- tax country
3678                             IF p_tax_country_code IS NOT NULL THEN
3679                                   -- IF p_tax_country_code is null then l_tbcdefs_tbl will have more than 1 TBCs with
3680                                   -- only NULL values for tax_country_code. So no need to filter further, move on to next determinant
3681                                   -- When system is processing a determinant, there will always be more than one selected TBCS
3682                                   -- This is because, at the end of processing each determinant, we check the selected count
3683                                   -- If selected count = 1 then we do not process next determinant and exit
3684                                   IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
3685                                     IF l_tbcdefs_tbl(l_tbcdefs_selected_tbl(k)).tax_country_code IS NULL THEN
3686                                       l_det_null_tbl(j) := l_tbcdefs_selected_tbl(k);
3687                                           j := j + 1;
3688                                     ELSE
3689                                       det_match_cnt := det_match_cnt + 1;
3690                                           l_selected_tbc_pos := l_tbcdefs_selected_tbl(k);
3691                                           -- l_selected_tbc_pos will be used as the index of the selected TBC,
3692                                           -- when only one TBC is left
3693                                     END IF;
3694                                   END IF;
3695 
3696                                   IF k = tbc_set_count THEN  -- last record
3697                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3698                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3699                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
3700                                     END IF;
3701 
3702                                     IF det_match_cnt = selected_count THEN --k THEN
3703                                           NULL; -- all records have matching values, do nothing
3704                                     ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
3705                                           NULL; -- keep all records selected. Don't exclude yet.
3706                                     ELSIF det_match_cnt = 1 THEN
3707                                           selected_count := 1;
3708                                     ELSE -- more than one but less than total selected  records have matching values
3709                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
3710                                             l_tbcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
3711                                             selected_count := selected_count - 1;
3712                                           END LOOP;
3713                                     END IF;
3714                                   END IF;
3715                             END IF;
3716                           END IF;
3717                     END LOOP;
3718                   ELSIF selected_count = 1 THEN
3719                     EXIT;
3720                   END IF;
3721             END LOOP; -- determinant loop
3722 
3723             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3724                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3725                                 'selected_count outside 2nd loop '||selected_count);
3726             END IF;
3727 
3728         IF selected_count = 1 THEN
3729                   l_tbc_code := l_tbcdefs_tbl(l_selected_tbc_pos).tbc_code;
3730             ELSIF selected_count > 1 THEN  -- still more than one TBCs are selected
3731                   l_tbc_code := NULL;
3732             END IF;
3733 
3734       ELSIF tbc_set_count = 0 THEN
3735             l_tbc_code := NULL;
3736       END IF;
3737 
3738     END IF;  -- MAIN END IF ends
3739 
3740     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3741           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code.',
3742                   'l_tbc_code '||l_tbc_code);
3743     END IF;
3744 
3745     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3746 
3747     -- TBC can be NULL
3748     x_tbc_code := l_tbc_code;
3749 
3750   EXCEPTION
3751     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3752 
3753       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3754         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code ',
3755                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
3756       END IF;
3757 
3758       IF l_tbcdef_csr%ISOPEN THEN
3759         CLOSE l_tbcdef_csr;
3760       END IF;
3761 
3762       x_return_status := OKL_API.G_RET_STS_ERROR;
3763     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3764 
3765       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3766         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code ',
3767                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
3768       END IF;
3769 
3770       IF l_tbcdef_csr%ISOPEN THEN
3771         CLOSE l_tbcdef_csr;
3772       END IF;
3773 
3774       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3775 
3776     WHEN OTHERS THEN
3777       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3778         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tbc_code ',
3779                   'EXCEPTION :'||sqlerrm);
3780       END IF;
3781 
3782       IF l_tbcdef_csr%ISOPEN THEN
3783         CLOSE l_tbcdef_csr;
3784       END IF;
3785 
3786       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3787       -- unexpected error
3788       OKL_API.set_message(p_app_name      => g_app_name,
3789                          p_msg_name          => g_unexpected_error,
3790                          p_token1            => g_sqlcode_token,
3791                          p_token1_value      => sqlcode,
3792                          p_token2            => g_sqlerrm_token,
3793                          p_token2_value      => sqlerrm);
3794 
3795   END get_tbc_code;
3796 
3797 /*========================================================================
3798  | PRIVATE PROCEDURE get_pc_code
3799  |
3800  | DESCRIPTION
3801  |    This procedure retrieves PC (Product Category) for tax call, based upon the
3802  |    contract and line level tax determinats
3803  |
3804  | CALLED FROM
3805  |
3806  |
3807  | CALLS PROCEDURES/FUNCTIONS
3808  |
3809  |
3810  | PARAMETERS
3811  |   Input Parameters
3812  |      p_sty_id                                   -- Stream Type ID
3813  |      p_purchase_option_code     -- Purchase option code
3814  |      p_int_disclosed_code       -- Interest disclosed code
3815  |      p_title_trnsfr_code                -- Transfer Of Title
3816  |      p_sale_lease_back_code     -- Sale and Lease Back
3817  |      p_lease_purchased_code     -- Purchase of Lease
3818  |      p_tax_country_code             -- Tax country code
3819  |  Output Parameters
3820  |      x_pc_code                                  -- PC Code
3821  |
3822  | KNOWN ISSUES
3823  |
3824  | NOTES
3825  |
3826  |
3827  | MODIFICATION HISTORY
3828  | Date                  Author    Description of Changes
3829  | 17-APR-07            RRAVIKIR   Created
3830  |
3831  *=======================================================================*/
3832   PROCEDURE get_pc_code(
3833     p_api_version            IN  NUMBER,
3834     p_init_msg_list          IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
3835     x_return_status          OUT NOCOPY VARCHAR2,
3836     x_msg_count              OUT NOCOPY NUMBER,
3837     x_msg_data               OUT NOCOPY VARCHAR2,
3838     p_sty_id                 IN  NUMBER,
3839     p_purchase_option_code   IN VARCHAR2,
3840     p_int_disclosed_code     IN VARCHAR2,
3841     p_title_trnsfr_code      IN VARCHAR2,
3842     p_sale_lease_back_code   IN VARCHAR2,
3843     p_lease_purchased_code   in varchar2,
3844     p_tax_country_code       IN VARCHAR2,
3845     x_pc_code                OUT NOCOPY VARCHAR2) IS
3846 
3847     -- Get all the PC definitions
3848     CURSOR  l_pcdef_csr IS
3849     SELECT      result_code pc_code,
3850             sty_id,
3851             purchase_option_code,
3852             int_disclosed_code,
3853             title_trnsfr_code,
3854             sale_lease_back_code,
3855             lease_purchased_code,
3856             tax_country_code,
3857                         'Y' select_yn      -- All PCs returned by this cursor are selected initially
3858     FROM    okl_tax_attr_definitions
3859     WHERE   (sty_id = p_sty_id OR sty_id IS NULL)
3860     AND     result_type_code = 'PC_CODE'
3861     AND     NVL(expire_flag, 'N') = 'N';
3862 
3863     TYPE pcdefs_tbl_type IS TABLE OF l_pcdef_csr%ROWTYPE INDEX BY BINARY_INTEGER;
3864     TYPE pcdefs_selected_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3865     TYPE det_null_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3866 
3867     l_pcdefs_tbl                        pcdefs_tbl_type;
3868     l_det_null_tbl                      det_null_tbl_type;
3869     l_pcdefs_selected_tbl       pcdefs_selected_tbl_type;
3870 
3871     i                                           NUMBER;
3872     j                                           NUMBER;
3873     k                                           NUMBER;
3874     pc_set_count                        NUMBER;
3875     l_pc_code                           VARCHAR2(30);
3876     selected_count                      NUMBER;
3877     det_match_cnt                       NUMBER;
3878     l_selected_pc_pos           NUMBER;
3879 
3880   BEGIN
3881 
3882     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3883       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code','Begin(+)');
3884     END IF;
3885 
3886     --Print Input Variables
3887     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3888       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3889            'p_init_msg_list :'||p_init_msg_list);
3890       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3891            'p_sty_id :'||p_sty_id);
3892       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3893            'p_purchase_option_code :'||p_purchase_option_code);
3894       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3895            'p_int_disclosed_code :'||p_int_disclosed_code);
3896       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3897            'p_title_trnsfr_code :'||p_title_trnsfr_code);
3898       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3899            'p_sale_lease_back_code :'||p_sale_lease_back_code);
3900       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3901            'p_lease_purchased_code :'||p_lease_purchased_code);
3902       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3903            'p_tax_country_code :'||p_tax_country_code);
3904     END IF;
3905 
3906     OPEN  l_pcdef_csr;
3907     FETCH l_pcdef_csr BULK COLLECT INTO l_pcdefs_tbl;
3908     CLOSE l_pcdef_csr;
3909 
3910     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3911       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3912       'l_pcdefs_tbl.COUNT '||l_pcdefs_tbl.COUNT);
3913     END IF;
3914 
3915     IF l_pcdefs_tbl.COUNT > 0 THEN               -- MAIN IF
3916       k := 1;
3917       FOR i IN 1 .. 6 LOOP -- determinant loop
3918         pc_set_count := 0;
3919 
3920         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3921               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',  'i '||i);
3922         END IF;
3923 
3924         FOR j IN  l_pcdefs_tbl.FIRST .. l_pcdefs_tbl.LAST LOOP
3925               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
3926                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
3927                    'j '||j||' l_pcdefs_tbl(j).select_yn '||l_pcdefs_tbl(j).select_yn );
3928               END IF;
3929 
3930                   IF l_pcdefs_tbl(j).select_yn = 'Y' THEN
3931                     IF i = 1 THEN -- purchase option
3932                       IF p_purchase_option_code IS NULL THEN
3933                             IF l_pcdefs_tbl(j).purchase_option_code IS NULL THEN
3934                                   pc_set_count := pc_set_count + 1;
3935                                 ELSE
3936                                   l_pcdefs_tbl(j).select_yn := 'N';
3937                                 END IF;
3938                           ELSE
3939                                 IF l_pcdefs_tbl(j).purchase_option_code IS NULL OR l_pcdefs_tbl(j).purchase_option_code = p_purchase_option_code THEN
3940                                   pc_set_count := pc_set_count + 1;
3941                                 ELSE
3942                                   l_pcdefs_tbl(j).select_yn := 'N';
3943                                 END IF;
3944                           END IF;
3945 
3946                     ELSIF i = 2 THEN -- Interest disclosed code
3947                       IF p_int_disclosed_code IS NULL OR p_int_disclosed_code = 'N' THEN
3948                 IF l_pcdefs_tbl(j).int_disclosed_code = 'N' THEN -- INT_DISCLOSED_CODE can not be null on DB
3949                                   pc_set_count := pc_set_count + 1;
3950                                 ELSE
3951                                   l_pcdefs_tbl(j).select_yn := 'N';
3952                                 END IF;
3953                           ELSE
3954                 pc_set_count := pc_set_count + 1;
3955                           END IF;
3956 
3957                     ELSIF i = 3 THEN -- Title transfer code
3958                       IF p_title_trnsfr_code IS NULL OR p_title_trnsfr_code = 'N' THEN
3959                 IF l_pcdefs_tbl(j).title_trnsfr_code = 'N' THEN -- TITLE_TRNSFR_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 = 4 THEN -- Sale lease back code
3969                       IF p_sale_lease_back_code IS NULL OR p_sale_lease_back_code = 'N' THEN
3970                 IF l_pcdefs_tbl(j).sale_lease_back_code = 'N' THEN --SALE_LEASE_BACK_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 = 5 THEN -- Lease purchased code
3980                       IF p_lease_purchased_code IS NULL OR p_lease_purchased_code = 'N' THEN
3981                 IF l_pcdefs_tbl(j).lease_purchased_code = 'N' THEN --LEASE_PURCHASED_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 = 6 THEN -- tax country (last determinant)
3991                       IF p_tax_country_code IS NULL THEN
3992                             IF l_pcdefs_tbl(j).tax_country_code IS NULL THEN
3993                                   pc_set_count := pc_set_count + 1;
3994                   l_pcdefs_selected_tbl(k) := j;
3995                                 ELSE
3996                                   l_pcdefs_tbl(j).select_yn := 'N';
3997                                 END IF;
3998                           ELSE
3999                                 IF l_pcdefs_tbl(j).tax_country_code IS NULL OR l_pcdefs_tbl(j).tax_country_code = p_tax_country_code THEN
4000                                   pc_set_count := pc_set_count + 1;
4001                   l_pcdefs_selected_tbl(k) := j;
4002                                 ELSE
4003                                   l_pcdefs_tbl(j).select_yn := 'N';
4004                                 END IF;
4005                           END IF;
4006 
4007               k := k + 1;
4008                         END IF;
4009 
4010                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4011                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4012                          'pc_set_count '||pc_set_count);
4013                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4014                          'l_pcdefs_tbl(j).select_yn '||l_pcdefs_tbl(j).select_yn);
4015                 END IF;
4016               END IF;
4017         END LOOP;
4018 
4019         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4020                FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4021                   'pc_set_count '||pc_set_count);
4022         END IF;
4023 
4024         IF pc_set_count = 0 THEN
4025               EXIT;
4026         END IF;
4027       END LOOP;  -- determinant loop
4028 
4029       -- At this point l_pcdefs_tbl has been scanned for all the determinants.
4030       -- select_yn flag in this table is set to 'Y' for PCs that have either Null
4031       -- determinnt value or value matching with the transaction. Table l_pcdefs_selected_tbl
4032           -- holds those indexes of original table l_pcdefs_tbl, that have seleted PCs.
4033           -- At this point this table may contain more than 1 PCs. If so, we need to further filter
4034           -- out PCs from this table based upon the priority of the determinants.
4035           -- Following priority order is used :
4036       -- 1.  Stream Type
4037       -- 2.  Purchase option
4038       -- 3.  Interest disclosed code
4039       -- 4.  Title transfer code
4040       -- 5.  Sale Lease back code
4041       -- 6.  Lease purchased code
4042       -- 7.  Tax Country
4043 
4044       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4045             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4046                   'pc_set_count outside first loop'||pc_set_count);
4047       END IF;
4048 
4049       IF pc_set_count = 1 THEN
4050         l_pc_code := l_pcdefs_tbl(l_pcdefs_selected_tbl(1)).pc_code;
4051       ELSIF pc_set_count > 1 THEN
4052             -- There can be more than one selected PCs at this point
4053             -- apply determinant priority logic to select 1 PC
4054             selected_count := pc_set_count;
4055 
4056             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4057               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4058                      'l_pcdefs_selected_tbl.count '||l_pcdefs_selected_tbl.count );
4059             END IF;
4060 
4061             FOR i IN 1 .. 7 LOOP  -- determinant loop
4062 
4063                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4064                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4065                       'i '||i||' selected_count '||selected_count );
4066               END IF;
4067 
4068                   j := 1;
4069                   det_match_cnt := 0;
4070                   l_det_null_tbl.DELETE;
4071 
4072                   IF selected_count > 1 THEN
4073                     FOR k IN l_pcdefs_selected_tbl.FIRST .. l_pcdefs_selected_tbl.LAST LOOP  -- finally selected indexes
4074                                         -- At this point all the selecetd PCs will either have Null determinant value or determinant value matching with the calling transaction
4075                       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4076                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',    'k '||k);
4077                           END IF;
4078 
4079                           IF i = 1 THEN -- Stream Type
4080                             IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).sty_id IS NULL THEN
4081                               l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4082                                   j := j + 1;
4083                             ELSE
4084                                   det_match_cnt := det_match_cnt + 1;
4085                                   l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4086                                   -- l_selected_pc_pos will be used as the index of the selected PC,
4087                                   -- when only one PC is left
4088                             END IF;
4089 
4090                             IF k = pc_set_count THEN  -- last record
4091                               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4092                                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4093                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4094                               END IF;
4095 
4096                               IF det_match_cnt = selected_count THEN --k THEN
4097                                     NULL; -- all records have matching values, do nothing
4098                               ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4099                                     NULL; -- keep all records selected. Don't exclude yet.
4100                               ELSIF det_match_cnt = 1 THEN
4101                                     selected_count := 1;
4102                               ELSE -- more than one but less than total selected  records have matching values
4103                                     FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4104                                       l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4105                                       selected_count := selected_count - 1;
4106                                     END LOOP;
4107                               END IF;
4108                             END IF;
4109 
4110                           ELSIF i = 2 THEN -- Purchase option
4111                             IF p_purchase_option_code IS NOT NULL THEN
4112                                   -- IF p_purchase_option_code is null then l_pcdefs_tbl will have more than 1 PCs with
4113                                   -- only NULL values for purchase_option_code. So no need to filter further, move on to next determinant
4114                                   -- When system is processing a determinant, there will always be more than one selected PCS
4115                                   -- This is because, at the end of processing each determinant, we check the selected count
4116                                   -- If selected count = 1 then we do not process next determinant and exit
4117                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4118                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).purchase_option_code IS NULL THEN
4119                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4120                                           j := j + 1;
4121                                     ELSE
4122                                           det_match_cnt := det_match_cnt + 1;
4123                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4124                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4125                                           -- when only one PC is left
4126                                     END IF;
4127                                   END IF;
4128 
4129                                   IF k = pc_set_count THEN  -- last record
4130                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4131                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4132                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4133                                         END IF;
4134 
4135                                         IF det_match_cnt = selected_count THEN --k THEN
4136                                           NULL; -- all records have matching values, do nothing
4137                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4138                                           NULL; -- keep all records selected. Don't exclude yet.
4139                                         ELSIF det_match_cnt = 1 THEN
4140                                           selected_count := 1;
4141                                         ELSE -- more than one but less than total selected  records have matching values
4142                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4143                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4144                                                 selected_count := selected_count - 1;
4145                                           END LOOP;
4146                                         END IF;
4147                                   END IF;
4148                                 END IF;
4149 
4150                           ELSIF i = 3 THEN -- Interest disclosed code
4151                 IF p_int_disclosed_code = 'Y' THEN
4152                   -- IF p_int_disclosed_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4153                                   -- INT_DISCLOSED_CODE. So no need to filter further
4154                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4155                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).int_disclosed_code = 'N' THEN
4156                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4157                                           j := j + 1;
4158                                     ELSE
4159                                           det_match_cnt := det_match_cnt + 1;
4160                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4161                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4162                                           -- when only one PC is left
4163                                     END IF;
4164                                   END IF;
4165 
4166                                   IF k = pc_set_count THEN  -- last record
4167                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4168                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4169                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4170                                         END IF;
4171 
4172                                         IF det_match_cnt = selected_count THEN --k THEN
4173                                           NULL; -- all records have matching values, do nothing
4174                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4175                                           NULL; -- keep all records selected. Don't exclude yet.
4176                                         ELSIF det_match_cnt = 1 THEN
4177                                           selected_count := 1;
4178                                         ELSE -- more than one but less than total selected  records have matching values
4179                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4180                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4181                                                 selected_count := selected_count - 1;
4182                                           END LOOP;
4183                                         END IF;
4184                                   END IF;
4185                                 END IF;
4186 
4187                           ELSIF i = 4 THEN -- Title transfer code
4188                             IF p_title_trnsfr_code = 'Y' THEN
4189                   -- IF p_title_trnsfr_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4190                                   -- title_trnsfr_code. So no need to filter further
4191                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4192                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).title_trnsfr_code = 'N' THEN
4193                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4194                                           j := j + 1;
4195                                     ELSE
4196                                           det_match_cnt := det_match_cnt + 1;
4197                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4198                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4199                                           -- when only one PC is left
4200                                     END IF;
4201                                   END IF;
4202 
4203                                   IF k = pc_set_count THEN  -- last record
4204                                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4205                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4206                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4207                                     END IF;
4208 
4209                                     IF det_match_cnt = selected_count THEN --k THEN
4210                                           NULL; -- all records have matching values, do nothing
4211                                     ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4212                                           NULL; -- keep all records selected. Don't exclude yet.
4213                                     ELSIF det_match_cnt = 1 THEN
4214                                           selected_count := 1;
4215                                     ELSE -- more than one but less than total selected  records have matching values
4216                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4217                                             l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4218                                             selected_count := selected_count - 1;
4219                                           END LOOP;
4220                                     END IF;
4221                                   END IF;
4222                             END IF;
4223 
4224                           ELSIF i = 5 THEN -- Sale Lease back code
4225                             IF p_sale_lease_back_code = 'Y' THEN
4226                   -- IF p_sale_lease_back_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4227                                   -- sale_lease_back_code. So no need to filter further
4228                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4229                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).sale_lease_back_code = 'N' THEN
4230                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4231                                           j := j + 1;
4232                                     ELSE
4233                                           det_match_cnt := det_match_cnt + 1;
4234                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4235                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4236                                           -- when only one PC is left
4237                                     END IF;
4238                                   END IF;
4239 
4240                                   IF k = pc_set_count THEN  -- last record
4241                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4242                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4243                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4244                                         END IF;
4245 
4246                                         IF det_match_cnt = selected_count THEN --k THEN
4247                                           NULL; -- all records have matching values, do nothing
4248                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4249                                           NULL; -- keep all records selected. Don't exclude yet.
4250                                         ELSIF det_match_cnt = 1 THEN
4251                                           selected_count := 1;
4252                                         ELSE -- more than one but less than total selected  records have matching values
4253                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4254                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4255                                                 selected_count := selected_count - 1;
4256                                           END LOOP;
4257                                         END IF;
4258                                   END IF;
4259                                 END IF;
4260 
4261                           ELSIF i = 6 THEN -- Lease purchased code
4262                             IF p_lease_purchased_code = 'Y' THEN
4263                   -- IF p_lease_purchased_code is null or 'N' then l_ufcdefs_tbl will have only 'N' values for
4264                                   -- lease_purchased_code. So no need to filter further
4265                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4266                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).lease_purchased_code = 'N' THEN
4267                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4268                                           j := j + 1;
4269                                     ELSE
4270                                           det_match_cnt := det_match_cnt + 1;
4271                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4272                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4273                                           -- when only one PC is left
4274                                     END IF;
4275                                   END IF;
4276 
4277                                   IF k = pc_set_count THEN  -- last record
4278                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4279                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4280                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4281                                         END IF;
4282 
4283                                         IF det_match_cnt = selected_count THEN --k THEN
4284                                           NULL; -- all records have matching values, do nothing
4285                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4286                                           NULL; -- keep all records selected. Don't exclude yet.
4287                                         ELSIF det_match_cnt = 1 THEN
4288                                           selected_count := 1;
4289                                         ELSE -- more than one but less than total selected  records have matching values
4290                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4291                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4292                                                 selected_count := selected_count - 1;
4293                                           END LOOP;
4294                                         END IF;
4295                                   END IF;
4296                                 END IF;
4297 
4298                           ELSIF i = 7 THEN -- Tax Country
4299                             IF p_tax_country_code IS NOT NULL THEN
4300                                   -- IF p_tax_country_code is null then l_pcdefs_tbl will have more than 1 PCs with
4301                                   -- only NULL values for tax_country_code. So no need to filter further, move on to next determinant
4302                                   -- When system is processing a determinant, there will always be more than one selected PCS
4303                                   -- This is because, at the end of processing each determinant, we check the selected count
4304                                   -- If selected count = 1 then we do not process next determinant and exit
4305                                   IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4306                                     IF l_pcdefs_tbl(l_pcdefs_selected_tbl(k)).tax_country_code IS NULL THEN
4307                                           l_det_null_tbl(j) := l_pcdefs_selected_tbl(k);
4308                                           j := j + 1;
4309                                     ELSE
4310                                           det_match_cnt := det_match_cnt + 1;
4311                                           l_selected_pc_pos := l_pcdefs_selected_tbl(k);
4312                                           -- l_selected_pc_pos will be used as the index of the selected PC,
4313                                           -- when only one PC is left
4314                                     END IF;
4315                                   END IF;
4316 
4317                                   IF k = pc_set_count THEN  -- last record
4318                                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4319                                            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4320                                                   'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4321                                         END IF;
4322 
4323                                         IF det_match_cnt = selected_count THEN --k THEN
4324                                           NULL; -- all records have matching values, do nothing
4325                                         ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4326                                           NULL; -- keep all records selected. Don't exclude yet.
4327                                         ELSIF det_match_cnt = 1 THEN
4328                                           selected_count := 1;
4329                                         ELSE -- more than one but less than total selected  records have matching values
4330                                           FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4331                                                 l_pcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4332                                                 selected_count := selected_count - 1;
4333                                           END LOOP;
4334                                         END IF;
4335                                   END IF;
4336 
4337                                 END IF;
4338                           END IF;
4339                     END LOOP;
4340                   ELSIF selected_count = 1 THEN
4341                     EXIT;
4342                   END IF;
4343             END LOOP; -- determinant loop
4344 
4345             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4346                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4347                                 'selected_count outside 2nd loop '||selected_count);
4348             END IF;
4349 
4350             IF selected_count = 1 THEN
4351                   l_pc_code := l_pcdefs_tbl(l_selected_pc_pos).pc_code;
4352             ELSIF selected_count > 1 THEN  -- still more than one PCs are selected
4353                   l_pc_code := NULL;
4354             END IF;
4355       ELSIF pc_set_count = 0 THEN
4356             l_pc_code := NULL;
4357       END IF;
4358 
4359     END IF;  -- MAIN IF ends
4360 
4361     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4362           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code.',
4363                   'l_pc_code '||l_pc_code);
4364     END IF;
4365 
4366     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4367 
4368     -- PC can be null
4369     x_pc_code := l_pc_code;
4370 
4371   EXCEPTION
4372     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4373 
4374       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4375         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code ',
4376                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
4377       END IF;
4378 
4379       IF l_pcdef_csr%ISOPEN THEN
4380         CLOSE l_pcdef_csr;
4381       END IF;
4382 
4383       x_return_status := OKL_API.G_RET_STS_ERROR;
4384     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4385 
4386       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4387         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code ',
4388                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
4389       END IF;
4390 
4391       IF l_pcdef_csr%ISOPEN THEN
4392         CLOSE l_pcdef_csr;
4393       END IF;
4394 
4395       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4396 
4397     WHEN OTHERS THEN
4398       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4399         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_pc_code ',
4400                   'EXCEPTION :'||sqlerrm);
4401       END IF;
4402 
4403       IF l_pcdef_csr%ISOPEN THEN
4404         CLOSE l_pcdef_csr;
4405       END IF;
4406 
4407       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4408       -- unexpected error
4409       OKL_API.set_message(p_app_name      => g_app_name,
4410                          p_msg_name          => g_unexpected_error,
4411                          p_token1            => g_sqlcode_token,
4412                          p_token1_value      => sqlcode,
4413                          p_token2            => g_sqlerrm_token,
4414                          p_token2_value      => sqlerrm);
4415 
4416   END get_pc_code;
4417 
4418 /*========================================================================
4419  | PRIVATE PROCEDURE get_ufc_code
4420  |
4421  | DESCRIPTION
4422  |    This procedure retrieves UFC (User Fiscal Classification) for tax call,
4423  |    based upon the contract and line level tax determinats
4424  |
4425  | CALLED FROM
4426  |
4427  |
4428  | CALLS PROCEDURES/FUNCTIONS
4429  |
4430  |
4431  | PARAMETERS
4432  |   Input Parameters
4433  |      p_purchase_option          -- Purchase option
4434  |      p_fin_product_id                   -- Financial Product
4435  |      p_try_id                                   -- Transaction Type ID
4436  |      p_sty_id                                   -- Stream Type ID
4437  |      p_int_disclosed_code       -- Interest Disclosed
4438  |      p_title_trnsfr_code                -- Transfer Of Title
4439  |      p_sale_lease_back_code     -- Sale and Lease Back
4440  |      p_lease_purchased_code     -- Purchase of Lease
4441  |      p_equip_usage_code                 -- Usage of Equipment
4442  |      p_vendor_site_id                   -- Vendor Site ID
4443  |      p_age_of_equip                     -- Age of Equipment
4444  |      p_term_quote_type_code     -- Termination quote type code
4445  |      p_term_quote_reason_code   -- Termination quote reason code
4446  |      p_tax_country_code         -- Tax country code
4447  |  Output Parameters
4448  |      x_ufc_code                                 -- UFC Code
4449  |
4450  | KNOWN ISSUES
4451  |
4452  | NOTES
4453  |
4454  |
4455  | MODIFICATION HISTORY
4456  | Date                  Author    Description of Changes
4457  | 08-APR-05            SECHAWLA   Created
4458  | 20-APR-07            RRAVIKIR   Modified
4459  |
4460  *=======================================================================*/
4461 
4462   PROCEDURE get_ufc_code(
4463         p_api_version                   IN  NUMBER,
4464     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
4465     x_return_status                     OUT NOCOPY VARCHAR2,
4466     x_msg_count                         OUT NOCOPY NUMBER,
4467     x_msg_data                          OUT NOCOPY VARCHAR2,
4468     p_purchase_option               IN  VARCHAR2,
4469     p_fin_product_id                            IN  VARCHAR2,
4470     p_try_id                                            IN  NUMBER,
4471     p_sty_id                                            IN  NUMBER,
4472     p_int_disclosed_code                        IN  VARCHAR2,
4473     p_title_trnsfr_code                         IN  VARCHAR2,
4474     p_sale_lease_back_code                      IN  VARCHAR2,
4475     p_lease_purchased_code                      IN  VARCHAR2,
4476     p_equip_usage_code                          IN  VARCHAR2,
4477     p_vendor_site_id                            IN  NUMBER,
4478     p_age_of_equip                                      IN  NUMBER,
4479     p_term_quote_type_code          IN  VARCHAR2 DEFAULT NULL,
4480     p_term_quote_reason_code        IN  VARCHAR2 DEFAULT NULL,
4481     p_tax_country_code              IN  VARCHAR2,
4482         x_ufc_code                      OUT NOCOPY VARCHAR2) IS
4483 
4484     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4485 
4486     -- Get all the UFC definitions applicable to a transaction type
4487     CURSOR  l_ufcdef_csr(cp_try_id IN NUMBER) IS
4488     SELECT      result_code ufc_code,
4489             try_id,
4490             sty_id ,
4491                         purchase_option_code,
4492                         equip_usage_code,
4493                         vendor_site_id,
4494                         age_of_equip_from,
4495                         age_of_equip_to,
4496                         pdt_id,
4497                         int_disclosed_code ,
4498                         title_trnsfr_code,
4499                         sale_lease_back_code,
4500                         lease_purchased_code,
4501             term_quote_type_code,
4502             term_quote_reason_code,
4503             tax_country_code,
4504                         'Y' select_yn      -- all ufcs returned by this cursor are selected initially
4505     FROM    okl_tax_attr_definitions
4506     WHERE   (try_id = cp_try_id OR try_id IS NULL)
4507     AND     RESULT_TYPE_CODE = 'UFC_CODE'
4508     AND     NVL(expire_flag, 'N') = 'N';
4509 
4510 
4511     TYPE ufcdefs_tbl_type IS TABLE OF l_ufcdef_csr%ROWTYPE INDEX BY BINARY_INTEGER;
4512     TYPE ufcdefs_selected_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4513     TYPE det_null_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4514 
4515     l_ufcdefs_tbl                       ufcdefs_tbl_type;
4516     l_det_null_tbl                      det_null_tbl_type;
4517     l_ufcdefs_selected_tbl      ufcdefs_selected_tbl_type;
4518 
4519     i                                           NUMBER;
4520     j                                           NUMBER;
4521     k                                           NUMBER;
4522     ufc_set_count                       NUMBER;
4523     l_ufc_code                          VARCHAR2(30);
4524     selected_count                      NUMBER;
4525     det_match_cnt                       NUMBER;
4526     l_selected_ufc_pos          NUMBER;
4527   BEGIN
4528 
4529     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4530       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code','Begin(+)');
4531     END IF;
4532 
4533     -- Print Input Variables
4534     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4535       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4536               'p_init_msg_list :'||p_init_msg_list);
4537       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4538               'p_purchase_option :'||p_purchase_option);
4539       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4540               'p_fin_product_id :'||p_fin_product_id);
4541       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4542               'p_try_id :'||p_try_id);
4543       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4544               'p_sty_id :'||p_sty_id);
4545       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4546               'p_int_disclosed_code :'||p_int_disclosed_code);
4547       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4548               'p_title_trnsfr_code :'||p_title_trnsfr_code);
4549       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4550               'p_sale_lease_back_code :'||p_sale_lease_back_code);
4551       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4552               'p_lease_purchased_code :'||p_lease_purchased_code);
4553       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4554               'p_equip_usage_code :'||p_equip_usage_code);
4555       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4556               'p_vendor_site_id :'||p_vendor_site_id);
4557       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4558               'p_age_of_equip :'||p_age_of_equip);
4559       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4560               'term_quote_type_code :'|| p_term_quote_type_code);
4561       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4562               'term_quote_reason_code :'|| p_term_quote_reason_code);
4563       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4564               'p_tax_country_code :'|| p_tax_country_code);
4565     END IF;
4566 
4567     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4568 
4569     OPEN  l_ufcdef_csr(p_try_id);
4570     FETCH l_ufcdef_csr BULK COLLECT INTO l_ufcdefs_tbl;
4571     CLOSE l_ufcdef_csr;
4572 
4573     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4574       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4575               'l_ufcdefs_tbl.COUNT '||l_ufcdefs_tbl.COUNT);
4576     END IF;
4577 
4578     IF l_ufcdefs_tbl.COUNT > 0 THEN  -- MAIN IF
4579       k := 1;
4580       FOR i IN 1 .. 13 LOOP -- determinant loop
4581         ufc_set_count := 0;
4582 
4583         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4584           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4585                      'i '||i);
4586         END IF;
4587 
4588         FOR j IN  l_ufcdefs_tbl.FIRST .. l_ufcdefs_tbl.LAST LOOP
4589 
4590           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4591             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4592                        'j '||j||' l_ufcdefs_tbl(j).select_yn '||l_ufcdefs_tbl(j).select_yn );
4593           END IF;
4594 
4595                   IF l_ufcdefs_tbl(j).select_yn = 'Y' THEN
4596                         IF i = 1 THEN   -- stream type
4597                           IF p_sty_id IS NULL THEN
4598                 IF l_ufcdefs_tbl(j).sty_id IS NULL THEN
4599                   ufc_set_count := ufc_set_count + 1;
4600                 ELSE
4601                   l_ufcdefs_tbl(j).select_yn := 'N';
4602                 END IF;
4603               ELSE
4604                                 IF l_ufcdefs_tbl(j).sty_id IS NULL OR l_ufcdefs_tbl(j).sty_id = p_sty_id THEN
4605                           ufc_set_count := ufc_set_count + 1;
4606                         ELSE
4607                           l_ufcdefs_tbl(j).select_yn := 'N';
4608                 END IF;
4609               END IF;
4610 
4611                         ELSIF i = 2 THEN   -- term quote type
4612                           IF p_term_quote_type_code IS NULL THEN
4613                 IF l_ufcdefs_tbl(j).term_quote_type_code IS NULL THEN
4614                   ufc_set_count := ufc_set_count + 1;
4615                 ELSE
4616                   l_ufcdefs_tbl(j).select_yn := 'N';
4617                 END IF;
4618               ELSE
4619                                 IF l_ufcdefs_tbl(j).term_quote_type_code IS NULL OR
4620                   l_ufcdefs_tbl(j).term_quote_type_code = p_term_quote_type_code THEN
4621                           ufc_set_count := ufc_set_count + 1;
4622                         ELSE
4623                           l_ufcdefs_tbl(j).select_yn := 'N';
4624                 END IF;
4625               END IF;
4626 
4627                         ELSIF i = 3 THEN   -- term quote reason
4628                           IF p_term_quote_reason_code IS NULL THEN
4629                 IF l_ufcdefs_tbl(j).term_quote_reason_code IS NULL THEN
4630                   ufc_set_count := ufc_set_count + 1;
4631                 ELSE
4632                   l_ufcdefs_tbl(j).select_yn := 'N';
4633                 END IF;
4634               ELSE
4635                                 IF l_ufcdefs_tbl(j).term_quote_reason_code IS NULL OR
4636                   l_ufcdefs_tbl(j).term_quote_reason_code = p_term_quote_reason_code THEN
4637                           ufc_set_count := ufc_set_count + 1;
4638                         ELSE
4639                           l_ufcdefs_tbl(j).select_yn := 'N';
4640                 END IF;
4641               END IF;
4642 
4643             ELSIF i = 4 THEN -- purchase option
4644               IF p_purchase_option IS NULL THEN
4645                 IF l_ufcdefs_tbl(j).purchase_option_code IS NULL THEN
4646                   ufc_set_count := ufc_set_count + 1;
4647                 ELSE
4648                   l_ufcdefs_tbl(j).select_yn := 'N';
4649                 END IF;
4650               ELSE
4651                                 IF l_ufcdefs_tbl(j).purchase_option_code IS NULL OR l_ufcdefs_tbl(j).purchase_option_code = p_purchase_option THEN
4652                           ufc_set_count := ufc_set_count + 1;
4653                         ELSE
4654                           l_ufcdefs_tbl(j).select_yn := 'N';
4655                 END IF;
4656               END IF;
4657 
4658                         ELSIF i = 5 THEN -- usage of equipment
4659                           IF p_equip_usage_code IS NULL THEN
4660                 IF l_ufcdefs_tbl(j).equip_usage_code IS NULL THEN
4661                   ufc_set_count := ufc_set_count + 1;
4662                 ELSE
4663                   l_ufcdefs_tbl(j).select_yn := 'N';
4664                 END IF;
4665               ELSE  -- 22-NOV-05 SECHAWLA 4742539 : fixed the parameter name in the following comparison
4666                                 IF l_ufcdefs_tbl(j).equip_usage_code IS NULL OR l_ufcdefs_tbl(j).equip_usage_code = p_equip_usage_code THEN
4667                           ufc_set_count := ufc_set_count + 1;
4668                         ELSE
4669                           l_ufcdefs_tbl(j).select_yn := 'N';
4670                 END IF;
4671               END IF;
4672 
4673                         ELSIF i = 6 THEN -- vendor location
4674                           IF p_VENDOR_SITE_ID IS NULL THEN
4675                 IF l_ufcdefs_tbl(j).VENDOR_SITE_ID IS NULL THEN
4676                   ufc_set_count := ufc_set_count + 1;
4677                 ELSE
4678                   l_ufcdefs_tbl(j).select_yn := 'N';
4679                 END IF;
4680               ELSE  -- 22-NOV-05 SECHAWLA 4742539 : fixed the parameter name in the following comparison
4681                                 IF l_ufcdefs_tbl(j).VENDOR_SITE_ID IS NULL OR l_ufcdefs_tbl(j).VENDOR_SITE_ID = p_VENDOR_SITE_ID THEN
4682                           ufc_set_count := ufc_set_count + 1;
4683                         ELSE
4684                           l_ufcdefs_tbl(j).select_yn := 'N';
4685                 END IF;
4686               END IF;
4687 
4688             ELSIF i = 7 THEN -- age of equipment
4689                           IF p_age_of_equip IS NULL THEN
4690                 IF l_ufcdefs_tbl(j).age_of_equip_from IS NULL AND l_ufcdefs_tbl(j).age_of_equip_to IS NULL THEN
4691                   ufc_set_count := ufc_set_count + 1;
4692                 ELSE
4693                   l_ufcdefs_tbl(j).select_yn := 'N';
4694                 END IF;
4695               ELSE
4696                                 IF ( (l_ufcdefs_tbl(j).age_of_equip_from IS NULL AND l_ufcdefs_tbl(j).age_of_equip_to IS NULL) OR
4697                                          ( (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
4698                                          ( l_ufcdefs_tbl(j).age_of_equip_to IS NULL AND l_ufcdefs_tbl(j).age_of_equip_from <= p_age_of_equip)
4699                                ) THEN
4700                                   ufc_set_count := ufc_set_count + 1;
4701                         ELSE
4702                           l_ufcdefs_tbl(j).select_yn := 'N';
4703                 END IF;
4704               END IF;
4705 
4706             ELSIF i = 8 THEN -- financial product
4707                           IF p_fin_product_id IS NULL THEN
4708                 IF l_ufcdefs_tbl(j).pdt_id IS NULL THEN
4709                   ufc_set_count := ufc_set_count + 1;
4710                 ELSE
4711                   l_ufcdefs_tbl(j).select_yn := 'N';
4712                 END IF;
4713               ELSE
4714                             IF l_ufcdefs_tbl(j).pdt_id IS NULL OR l_ufcdefs_tbl(j).pdt_id = p_fin_product_id THEN
4715                           ufc_set_count := ufc_set_count + 1;
4716                         ELSE
4717                           l_ufcdefs_tbl(j).select_yn := 'N';
4718                 END IF;
4719               END IF;
4720 
4721                         ELSIF i = 9 THEN -- interest disclosed
4722                           IF p_int_disclosed_code IS NULL OR p_int_disclosed_code = 'N' THEN
4723                 IF l_ufcdefs_tbl(j).int_disclosed_code = 'N' THEN -- INT_DISCLOSED_CODE can not be null on DB
4724                   ufc_set_count := ufc_set_count + 1;
4725                 ELSE
4726                   l_ufcdefs_tbl(j).select_yn := 'N';
4727                 END IF;
4728               ELSE
4729                                 ufc_set_count := ufc_set_count + 1;
4730               END IF;
4731 
4732             ELSIF i = 10 THEN -- transfer of Title
4733                           IF p_title_trnsfr_code IS NULL OR p_title_trnsfr_code = 'N' THEN
4734                 IF l_ufcdefs_tbl(j).title_trnsfr_code = 'N' THEN -- TITLE_TRNSFR_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 = 11 THEN -- sale and lease back
4744                           IF p_sale_lease_back_code IS NULL OR p_sale_lease_back_code = 'N' THEN
4745                 IF l_ufcdefs_tbl(j).sale_lease_back_code = 'N' THEN --SALE_LEASE_BACK_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 = 12 THEN -- purchase of lease
4755                           IF p_lease_purchased_code IS NULL OR p_lease_purchased_code = 'N' THEN
4756                 IF l_ufcdefs_tbl(j).lease_purchased_code = 'N' THEN --LEASE_PURCHASED_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 = 13 THEN --taxation country (last determinant)
4766                           IF p_tax_country_code IS NULL THEN
4767                 IF l_ufcdefs_tbl(j).tax_country_code IS NULL THEN
4768                   ufc_set_count := ufc_set_count + 1;
4769                   l_ufcdefs_selected_tbl(k) := j;
4770                 ELSE
4771                   l_ufcdefs_tbl(j).select_yn := 'N';
4772                 END IF;
4773               ELSE
4774                 IF l_ufcdefs_tbl(j).tax_country_code IS NULL OR
4775                   l_ufcdefs_tbl(j).tax_country_code = p_tax_country_code THEN
4776                                   ufc_set_count := ufc_set_count + 1;
4777                                   l_ufcdefs_selected_tbl(k) := j;
4778                 ELSE
4779                   l_ufcdefs_tbl(j).select_yn := 'N';
4780                 END IF;
4781               END IF;
4782 
4783               /*IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4784                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4785                                'k '||k||' l_ufcdefs_selected_tbl(k) '||l_ufcdefs_selected_tbl(k));
4786               END IF;*/
4787               k := k + 1;
4788                         END IF;
4789 
4790                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4791               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4792                           'ufc_set_count '||ufc_set_count);
4793               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4794                           'l_ufcdefs_tbl(j).select_yn '||l_ufcdefs_tbl(j).select_yn);
4795             END IF;
4796           END IF;
4797         END LOOP;
4798 
4799         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4800           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4801                           'ufc_set_count '||ufc_set_count);
4802         END IF;
4803 
4804         IF ufc_set_count = 0 THEN
4805           EXIT;
4806         END IF;
4807       END LOOP;
4808 
4809       -- At this point l_ufcdefs_tbl has been scanned for all the determinants.
4810       -- select_yn flag in this table is set to 'Y' for ufcs that have either Null
4811       -- determinnt value or value matching with the transaction. Table l_ufcdefs_selected_tbl
4812           -- holds those indexes of original table l_ufcdefs_tbl, that have seleted ufcs.
4813           -- At this point this table may contain more than 1 ufcs. If so, we need to further filter
4814           -- out ufcs from this table based upon the priority of the determinants.
4815           -- Following priority order is used :
4816       -- 1.  Transaction Type
4817       -- 2.  Stream Type
4818       -- 3.  Purchase Option
4819       -- 4.  Usage Of Equipment
4820       -- 5.  Vendor Location
4821       -- 6.  Age of Equipment
4822       -- 7.  Financial Product
4823       -- 8.  Interest Disclosed
4824       -- 9.  Transfer Of Title
4825       -- 10. Sale and Lease back
4826       -- 11. Purchase of Lease
4827 
4828       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4829         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4830                           'ufc_set_count outside first loop'||ufc_set_count);
4831       END IF;
4832 
4833       IF ufc_set_count = 1 THEN
4834         l_ufc_code := l_ufcdefs_tbl(l_ufcdefs_selected_tbl(1)).ufc_code;
4835 
4836       ELSIF ufc_set_count > 1 THEN
4837         -- There can be more than one selected ufcs at this point
4838         -- apply determinant priority logic to select 1 ufc
4839 
4840         selected_count := ufc_set_count;
4841 
4842         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4843           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4844                           'l_ufcdefs_selected_tbl.count '||l_ufcdefs_selected_tbl.count );
4845         END IF;
4846 
4847         FOR i IN 1..14 LOOP  -- determinant loop
4848 
4849           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4850             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4851                           'i '||i||' selected_count '||selected_count );
4852           END IF;
4853 
4854           j := 1;
4855           det_match_cnt := 0;
4856           l_det_null_tbl.DELETE;
4857 
4858           IF selected_count > 1 THEN
4859                 FOR k IN l_ufcdefs_selected_tbl.FIRST .. l_ufcdefs_selected_tbl.LAST LOOP  -- finally selected indexes
4860                   -- At this point all the selecetd ufcs will either have Null determinant value or determinant value matching with the calling transaction
4861               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4862                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.','k '||k);
4863                           END IF;
4864 
4865                   IF i = 1 THEN -- transaction type
4866                             IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).try_id IS NULL THEN
4867 
4868                           l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4869                           j := j + 1;
4870                         ELSE
4871                           det_match_cnt := det_match_cnt + 1;
4872                           l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4873                                 -- l_selected_ufc_pos will be used as the index of the selected ufc,
4874                                         -- when only one UFC is left
4875                         END IF;
4876 
4877                         IF k = ufc_set_count THEN  -- last record
4878                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4879                                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4880                                                         'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4881                           END IF;
4882 
4883                           IF det_match_cnt = selected_count THEN --k THEN
4884                                 NULL; -- all records have matching values, do nothing
4885                           ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4886                                 NULL; -- keep all records selected. Don't exclude yet.
4887                           ELSIF det_match_cnt = 1 THEN
4888                                 selected_count := 1;
4889                           ELSE -- more than one but less than total selected  records have matching values
4890                                 FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4891                                   l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4892                                   selected_count := selected_count - 1;
4893                                 END LOOP;
4894                           END IF;
4895                         END IF;
4896 
4897               ELSIF i = 2 THEN -- stream type
4898                 IF p_sty_id IS NOT NULL THEN
4899                   -- IF p_sty_id is null then l_ufcdefs_tbl will have more than 1 ufcs with
4900                                   -- only NULL values for sty_id. So no need to filter further, move on to next determinant
4901                                   -- When system is processing a determinant, there will always be more than one selected ufcS
4902                                   -- This is because, at the end of processing each determinant, we check the selected count
4903                                   -- If selected count = 1 then we do not process next determinant and exit
4904                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4905                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).sty_id IS NULL THEN
4906                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4907                                   j := j + 1;
4908                                 ELSE
4909                                   det_match_cnt := det_match_cnt + 1;
4910                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4911                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
4912                                       -- when only one UFC is left
4913                                 END IF;
4914                       END IF;
4915 
4916                           IF k = ufc_set_count THEN  -- last record
4917                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4918                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4919                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4920                                 END IF;
4921 
4922                                 IF det_match_cnt = selected_count THEN --k THEN
4923                                   NULL; -- all records have matching values, do nothing
4924                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4925                                   NULL; -- keep all records selected. Don't exclude yet.
4926                                 ELSIF det_match_cnt = 1 THEN
4927                                   selected_count := 1;
4928                                 ELSE -- more than one but less than total selected  records have matching values
4929                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4930                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4931                                     selected_count := selected_count - 1;
4932                                   END LOOP;
4933                                 END IF;
4934                           END IF;
4935                         END IF;
4936 
4937               ELSIF i = 3 THEN -- termination quote type
4938                 IF p_term_quote_type_code IS NOT NULL THEN
4939                   -- IF p_term_quote_type_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
4940                                   -- only NULL values for term_quote_type_code. So no need to filter further, move on to next determinant
4941                                   -- When system is processing a determinant, there will always be more than one selected ufcS
4942                                   -- This is because, at the end of processing each determinant, we check the selected count
4943                                   -- If selected count = 1 then we do not process next determinant and exit
4944                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4945                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).term_quote_type_code IS NULL THEN
4946                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4947                                   j := j + 1;
4948                                 ELSE
4949                                   det_match_cnt := det_match_cnt + 1;
4950                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4951                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
4952                                       -- when only one UFC is left
4953                                 END IF;
4954                       END IF;
4955 
4956                           IF k = ufc_set_count THEN  -- last record
4957                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4958                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4959                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
4960                                 END IF;
4961 
4962                                 IF det_match_cnt = selected_count THEN --k THEN
4963                                   NULL; -- all records have matching values, do nothing
4964                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
4965                                   NULL; -- keep all records selected. Don't exclude yet.
4966                                 ELSIF det_match_cnt = 1 THEN
4967                                   selected_count := 1;
4968                                 ELSE -- more than one but less than total selected  records have matching values
4969                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
4970                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
4971                                     selected_count := selected_count - 1;
4972                                   END LOOP;
4973                                 END IF;
4974                           END IF;
4975                         END IF;
4976 
4977               ELSIF i = 4 THEN -- termination quote reason
4978                 IF p_term_quote_reason_code IS NOT NULL THEN
4979                   -- IF p_term_quote_reason_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
4980                                   -- only NULL values for term_quote_reason_code. So no need to filter further, move on to next determinant
4981                                   -- When system is processing a determinant, there will always be more than one selected ufcS
4982                                   -- This is because, at the end of processing each determinant, we check the selected count
4983                                   -- If selected count = 1 then we do not process next determinant and exit
4984                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
4985                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).term_quote_reason_code IS NULL THEN
4986                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
4987                                   j := j + 1;
4988                                 ELSE
4989                                   det_match_cnt := det_match_cnt + 1;
4990                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
4991                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
4992                                       -- when only one UFC is left
4993                                 END IF;
4994                       END IF;
4995 
4996                           IF k = ufc_set_count THEN  -- last record
4997                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
4998                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
4999                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5000                                 END IF;
5001 
5002                                 IF det_match_cnt = selected_count THEN --k THEN
5003                                   NULL; -- all records have matching values, do nothing
5004                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5005                                   NULL; -- keep all records selected. Don't exclude yet.
5006                                 ELSIF det_match_cnt = 1 THEN
5007                                   selected_count := 1;
5008                                 ELSE -- more than one but less than total selected  records have matching values
5009                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5010                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5011                                     selected_count := selected_count - 1;
5012                                   END LOOP;
5013                                 END IF;
5014                           END IF;
5015                         END IF;
5016 
5017               ELSIF i = 5 THEN -- purchase option
5018                 IF p_purchase_option IS NOT NULL THEN
5019                   -- IF p_purchase_option is null then l_ufcdefs_tbl will have more than 1 ufcs with
5020                                   -- only NULL values for purchase_option. So no need to filter further, move on to next determinant
5021                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5022                                   -- This is because, at the end of processing each determinant, we check the selected count
5023                                   -- If selected count = 1 then we do not process next determinant and exit
5024                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5025                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).purchase_option_code IS NULL THEN
5026                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5027                                   j := j + 1;
5028                                 ELSE
5029                                   det_match_cnt := det_match_cnt + 1;
5030                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5031                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5032                                       -- when only one UFC is left
5033                                 END IF;
5034                       END IF;
5035 
5036                           IF k = ufc_set_count THEN  -- last record
5037                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5038                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5039                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5040                                 END IF;
5041 
5042                                 IF det_match_cnt = selected_count THEN --k THEN
5043                                   NULL; -- all records have matching values, do nothing
5044                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5045                                   NULL; -- keep all records selected. Don't exclude yet.
5046                                 ELSIF det_match_cnt = 1 THEN
5047                                   selected_count := 1;
5048                                 ELSE -- more than one but less than total selected  records have matching values
5049                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5050                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5051                                     selected_count := selected_count - 1;
5052                                   END LOOP;
5053                                 END IF;
5054                           END IF;
5055                         END IF;
5056 
5057               ELSIF i = 6 THEN --  usage of equipment
5058                 IF p_equip_usage_code IS NOT NULL THEN
5059                   -- IF p_equip_usage_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
5060                                   -- only NULL values for equip_usage_code. So no need to filter further, move on to next determinant
5061                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5062                                   -- This is because, at the end of processing each determinant, we check the selected count
5063                                   -- If selected count = 1 then we do not process next determinant and exit
5064                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5065                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).equip_usage_code IS NULL THEN
5066                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5067                                   j := j + 1;
5068                                 ELSE
5069                                   det_match_cnt := det_match_cnt + 1;
5070                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5071                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5072                                       -- when only one UFC is left
5073                                 END IF;
5074                       END IF;
5075 
5076                           IF k = ufc_set_count THEN  -- last record
5077                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5078                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5079                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5080                                 END IF;
5081 
5082                                 IF det_match_cnt = selected_count THEN --k THEN
5083                                   NULL; -- all records have matching values, do nothing
5084                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5085                                   NULL; -- keep all records selected. Don't exclude yet.
5086                                 ELSIF det_match_cnt = 1 THEN
5087                                   selected_count := 1;
5088                                 ELSE -- more than one but less than total selected  records have matching values
5089                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5090                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5091                                     selected_count := selected_count - 1;
5092                                   END LOOP;
5093                                 END IF;
5094                           END IF;
5095                         END IF;
5096 
5097               ELSIF i = 7 THEN -- vendor location
5098                 IF p_vendor_site_id IS NOT NULL THEN
5099                   -- IF p_vendor_site_id is null then l_ufcdefs_tbl will have more than 1 ufcs with
5100                                   -- only NULL values for vendor_site_id. So no need to filter further, move on to next determinant
5101                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5102                                   -- This is because, at the end of processing each determinant, we check the selected count
5103                                   -- If selected count = 1 then we do not process next determinant and exit
5104                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5105                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).vendor_site_id IS NULL THEN
5106                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5107                                   j := j + 1;
5108                                 ELSE
5109                                   det_match_cnt := det_match_cnt + 1;
5110                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5111                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5112                                       -- when only one UFC is left
5113                                 END IF;
5114                       END IF;
5115 
5116                           IF k = ufc_set_count THEN  -- last record
5117                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5118                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5119                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5120                                 END IF;
5121 
5122                                 IF det_match_cnt = selected_count THEN --k THEN
5123                                   NULL; -- all records have matching values, do nothing
5124                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5125                                   NULL; -- keep all records selected. Don't exclude yet.
5126                                 ELSIF det_match_cnt = 1 THEN
5127                                   selected_count := 1;
5128                                 ELSE -- more than one but less than total selected  records have matching values
5129                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5130                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5131                                     selected_count := selected_count - 1;
5132                                   END LOOP;
5133                                 END IF;
5134                           END IF;
5135                         END IF;
5136 
5137               ELSIF i = 8 THEN -- age of equipment
5138                 IF p_age_of_equip IS NOT NULL THEN
5139                   -- IF p_age_of_equip is null then l_ufcdefs_tbl will have more than 1 ufcs with
5140                                   -- only NULL values for age_of_equip. So no need to filter further, move on to next determinant
5141                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5142                                   -- This is because, at the end of processing each determinant, we check the selected count
5143                                   -- If selected count = 1 then we do not process next determinant and exit
5144                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5145                         IF  (l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).age_of_equip_from IS NULL AND
5146                                                  l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).age_of_equip_to IS NULL)  THEN
5147                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5148                                   j := j + 1;
5149                                 ELSE
5150                                   det_match_cnt := det_match_cnt + 1;
5151                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5152                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5153                                       -- when only one UFC is left
5154                                 END IF;
5155                       END IF;
5156 
5157                           IF k = ufc_set_count THEN  -- last record
5158                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5159                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5160                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5161                                 END IF;
5162 
5163                                 IF det_match_cnt = selected_count THEN --k THEN
5164                                   NULL; -- all records have matching values, do nothing
5165                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5166                                   NULL; -- keep all records selected. Don't exclude yet.
5167                                 ELSIF det_match_cnt = 1 THEN
5168                                   selected_count := 1;
5169                                 ELSE -- more than one but less than total selected  records have matching values
5170                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5171                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5172                                     selected_count := selected_count - 1;
5173                                   END LOOP;
5174                                 END IF;
5175                           END IF;
5176                         END IF;
5177 
5178               ELSIF i = 9 THEN -- financial product
5179                 IF p_fin_product_id IS NOT NULL THEN
5180                   -- IF p_fin_product_id is null then l_ufcdefs_tbl will have more than 1 ufcs with
5181                                   -- only NULL values for fin_product_id. So no need to filter further, move on to next determinant
5182                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5183                                   -- This is because, at the end of processing each determinant, we check the selected count
5184                                   -- If selected count = 1 then we do not process next determinant and exit
5185                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5186                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).pdt_id IS NULL THEN
5187                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5188                                   j := j + 1;
5189                                 ELSE
5190                                   det_match_cnt := det_match_cnt + 1;
5191                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5192                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5193                                       -- when only one UFC is left
5194                                 END IF;
5195                       END IF;
5196 
5197                           IF k = ufc_set_count THEN  -- last record
5198                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5199                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5200                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5201                                 END IF;
5202 
5203                                 IF det_match_cnt = selected_count THEN --k THEN
5204                                   NULL; -- all records have matching values, do nothing
5205                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5206                                   NULL; -- keep all records selected. Don't exclude yet.
5207                                 ELSIF det_match_cnt = 1 THEN
5208                                   selected_count := 1;
5209                                 ELSE -- more than one but less than total selected  records have matching values
5210                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5211                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5212                                     selected_count := selected_count - 1;
5213                                   END LOOP;
5214                                 END IF;
5215                           END IF;
5216                         END IF;
5217 
5218               ELSIF i = 10 THEN -- interest disclosed
5219                 IF p_int_disclosed_code = 'Y' THEN
5220                   -- IF p_int_disclosed_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5221                                   -- only NULL values for int_disclosed_code. So no need to filter further, move on to next determinant
5222                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5223                                   -- This is because, at the end of processing each determinant, we check the selected count
5224                                   -- If selected count = 1 then we do not process next determinant and exit
5225                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5226                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).int_disclosed_code = 'N' THEN
5227                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5228                                   j := j + 1;
5229                                 ELSE
5230                                   det_match_cnt := det_match_cnt + 1;
5231                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5232                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5233                                       -- when only one UFC is left
5234                                 END IF;
5235                       END IF;
5236 
5237                           IF k = ufc_set_count THEN  -- last record
5238                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5239                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5240                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5241                                 END IF;
5242 
5243                                 IF det_match_cnt = selected_count THEN --k THEN
5244                                   NULL; -- all records have matching values, do nothing
5245                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5246                                   NULL; -- keep all records selected. Don't exclude yet.
5247                                 ELSIF det_match_cnt = 1 THEN
5248                                   selected_count := 1;
5249                                 ELSE -- more than one but less than total selected  records have matching values
5250                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5251                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5252                                     selected_count := selected_count - 1;
5253                                   END LOOP;
5254                                 END IF;
5255                           END IF;
5256                         END IF;
5257 
5258               ELSIF i = 11 THEN -- transfer of title
5259                 IF p_title_trnsfr_code = 'Y' THEN
5260                   -- IF p_title_trnsfr_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5261                                   -- only NULL values for title_trnsfr_code. So no need to filter further, move on to next determinant
5262                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5263                                   -- This is because, at the end of processing each determinant, we check the selected count
5264                                   -- If selected count = 1 then we do not process next determinant and exit
5265                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5266                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).title_trnsfr_code = 'N' THEN
5267                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5268                                   j := j + 1;
5269                                 ELSE
5270                                   det_match_cnt := det_match_cnt + 1;
5271                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5272                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5273                                       -- when only one UFC is left
5274                                 END IF;
5275                       END IF;
5276 
5277                           IF k = ufc_set_count THEN  -- last record
5278                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5279                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5280                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5281                                 END IF;
5282 
5283                                 IF det_match_cnt = selected_count THEN --k THEN
5284                                   NULL; -- all records have matching values, do nothing
5285                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5286                                   NULL; -- keep all records selected. Don't exclude yet.
5287                                 ELSIF det_match_cnt = 1 THEN
5288                                   selected_count := 1;
5289                                 ELSE -- more than one but less than total selected  records have matching values
5290                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5291                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5292                                     selected_count := selected_count - 1;
5293                                   END LOOP;
5294                                 END IF;
5295                           END IF;
5296                         END IF;
5297 
5298               ELSIF i = 12 THEN -- sale and lease back
5299                 IF p_sale_lease_back_code = 'Y' THEN
5300                   -- IF p_sale_lease_back_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5301                                   -- only NULL values for sale_lease_back_code. So no need to filter further, move on to next determinant
5302                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5303                                   -- This is because, at the end of processing each determinant, we check the selected count
5304                                   -- If selected count = 1 then we do not process next determinant and exit
5305                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5306                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).sale_lease_back_code = 'N' THEN
5307                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5308                                   j := j + 1;
5309                                 ELSE
5310                                   det_match_cnt := det_match_cnt + 1;
5311                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5312                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5313                                       -- when only one UFC is left
5314                                 END IF;
5315                       END IF;
5316 
5317                           IF k = ufc_set_count THEN  -- last record
5318                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5319                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5320                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5321                                 END IF;
5322 
5323                                 IF det_match_cnt = selected_count THEN --k THEN
5324                                   NULL; -- all records have matching values, do nothing
5325                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5326                                   NULL; -- keep all records selected. Don't exclude yet.
5327                                 ELSIF det_match_cnt = 1 THEN
5328                                   selected_count := 1;
5329                                 ELSE -- more than one but less than total selected  records have matching values
5330                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5331                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5332                                     selected_count := selected_count - 1;
5333                                   END LOOP;
5334                                 END IF;
5335                           END IF;
5336                         END IF;
5337 
5338               ELSIF i = 13 THEN -- purchase of lease
5339                 IF p_lease_purchased_code = 'Y' THEN
5340                   -- IF p_lease_purchased_code is 'Y' then l_ufcdefs_tbl will have more than 1 ufcs with
5341                                   -- only NULL values for lease_purchased_code. So no need to filter further, move on to next determinant
5342                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5343                                   -- This is because, at the end of processing each determinant, we check the selected count
5344                                   -- If selected count = 1 then we do not process next determinant and exit
5345                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5346                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).lease_purchased_code = 'N' THEN
5347                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5348                                   j := j + 1;
5349                                 ELSE
5350                                   det_match_cnt := det_match_cnt + 1;
5351                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5352                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5353                                       -- when only one UFC is left
5354                                 END IF;
5355                       END IF;
5356 
5357                           IF k = ufc_set_count THEN  -- last record
5358                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5359                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5360                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5361                                 END IF;
5362 
5363                                 IF det_match_cnt = selected_count THEN --k THEN
5364                                   NULL; -- all records have matching values, do nothing
5365                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5366                                   NULL; -- keep all records selected. Don't exclude yet.
5367                                 ELSIF det_match_cnt = 1 THEN
5368                                   selected_count := 1;
5369                                 ELSE -- more than one but less than total selected  records have matching values
5370                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5371                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5372                                     selected_count := selected_count - 1;
5373                                   END LOOP;
5374                                 END IF;
5375                           END IF;
5376                         END IF;
5377 
5378               ELSIF i = 14 THEN -- tax country
5379                 IF p_tax_country_code IS NOT NULL THEN
5380                   -- IF p_tax_country_code is null then l_ufcdefs_tbl will have more than 1 ufcs with
5381                                   -- only NULL values for tax_country_code. So no need to filter further, move on to next determinant
5382                                   -- When system is processing a determinant, there will always be more than one selected ufcS
5383                                   -- This is because, at the end of processing each determinant, we check the selected count
5384                                   -- If selected count = 1 then we do not process next determinant and exit
5385                   IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).select_yn = 'Y' THEN -- if still selected
5386                     IF l_ufcdefs_tbl(l_ufcdefs_selected_tbl(k)).tax_country_code IS NULL THEN
5387                                   l_det_null_tbl(j) := l_ufcdefs_selected_tbl(k);
5388                                   j := j + 1;
5389                                 ELSE
5390                                   det_match_cnt := det_match_cnt + 1;
5391                                   l_selected_ufc_pos := l_ufcdefs_selected_tbl(k);
5392                                   -- l_selected_ufc_pos will be used as the index of the selected ufc,
5393                                       -- when only one UFC is left
5394                                 END IF;
5395                       END IF;
5396 
5397                           IF k = ufc_set_count THEN  -- last record
5398                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5399                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5400                                                                               'det_match_cnt '||det_match_cnt||' l_det_null_tbl.count '||l_det_null_tbl.count);
5401                                 END IF;
5402 
5403                                 IF det_match_cnt = selected_count THEN --k THEN
5404                                   NULL; -- all records have matching values, do nothing
5405                                 ELSIF det_match_cnt = 0  THEN -- ALL records have NULL try_id
5406                                   NULL; -- keep all records selected. Don't exclude yet.
5407                                 ELSIF det_match_cnt = 1 THEN
5408                                   selected_count := 1;
5409                                 ELSE -- more than one but less than total selected  records have matching values
5410                                   FOR p IN l_det_null_tbl.FIRST .. l_det_null_tbl.LAST LOOP
5411                                     l_ufcdefs_tbl(l_det_null_tbl(p)).select_yn := 'N';
5412                                     selected_count := selected_count - 1;
5413                                   END LOOP;
5414                                 END IF;
5415                           END IF;
5416                         END IF;
5417               END IF;
5418                 END LOOP;
5419           ELSIF selected_count = 1 THEN
5420                 EXIT;
5421           END IF;
5422         END LOOP; -- determinant loop
5423 
5424         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5425           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5426                                                     'selected_count outside 2nd loop '||selected_count);
5427         END IF;
5428 
5429         IF selected_count = 1 THEN
5430                   l_ufc_code := l_ufcdefs_tbl(l_selected_ufc_pos).ufc_code;
5431                 ELSIF selected_count > 1 THEN  -- still more than one ufcs are selected
5432           l_ufc_code := NULL;
5433         END IF;
5434 
5435       ELSIF ufc_set_count = 0 THEN
5436         l_ufc_code := NULL;
5437       END IF;
5438     END IF;  -- MAIN IF Ends
5439 
5440     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5441       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code.',
5442                           'l_ufc_code '||l_ufc_code);
5443     END IF;
5444 
5445     -- UFC can be NULL
5446     x_ufc_code := l_ufc_code;
5447 
5448   EXCEPTION
5449     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5450 
5451       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5452         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code ',
5453                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
5454       END IF;
5455 
5456       IF l_ufcdef_csr%ISOPEN THEN
5457         CLOSE l_ufcdef_csr;
5458       END IF;
5459 
5460       x_return_status := OKL_API.G_RET_STS_ERROR;
5461     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5462 
5463       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5464         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code ',
5465                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
5466       END IF;
5467 
5468       IF l_ufcdef_csr%ISOPEN THEN
5469         CLOSE l_ufcdef_csr;
5470       END IF;
5471 
5472       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5473 
5474     WHEN OTHERS THEN
5475       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5476         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_ufc_code ',
5477                   'EXCEPTION :'||sqlerrm);
5478       END IF;
5479 
5480           IF l_ufcdef_csr%ISOPEN THEN
5481         CLOSE l_ufcdef_csr;
5482       END IF;
5483 
5484 
5485       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5486       -- unexpected error
5487       OKL_API.set_message(p_app_name      => g_app_name,
5488                          p_msg_name      => g_unexpected_error,
5489                          p_token1        => g_sqlcode_token,
5490                          p_token1_value  => sqlcode,
5491                          p_token2        => g_sqlerrm_token,
5492                          p_token2_value  => sqlerrm);
5493 
5494   END get_ufc_code;
5495 
5496 /*========================================================================
5497  | PRIVATE PROCEDURE populate_tax_info
5498  |
5499  | DESCRIPTION
5500  |    This procedure derives the tax sources and tax details to populate ZX tables
5501  |
5502  | CALLED FROM
5503  |     process_booking_upfront_tax
5504  |     process_quote_tax
5505  |     process_asset_loc_tax
5506  |     process_quoting_upfront_tax
5507  |
5508  |
5509  | CALLS PROCEDURES/FUNCTIONS
5510  |     get_ufc_code()
5511  |     okl_am_util_pvt.get_formula_value()
5512  |
5513  | PARAMETERS
5514  |      p_prch_opt_det                  -- Purchase Option
5515  |      p_fin_prod_id_det               -- Financial product
5516  |      p_int_disclosed_det             -- Interest Disclosed
5517  |      -- asset level begin
5518  |      p_TITLE_TRNSFR_CODE             -- Transfer of Title
5519  |      p_SALE_LEASE_BACK_CODE  -- Sale and Lease Back
5520  |      p_LEASE_PURCHASED_CODE  -- Purchase of Lease
5521  |      p_EQUIP_USAGE_CODE              -- Usage Of Equipment
5522  |      p_VENDOR_SITE_ID                -- Vendor Site ID
5523  |      p_AGE_OF_EQUIP                  -- Age of Equipment
5524  |      p_kle_id                                -- Kle ID
5525  |      p_asset_number                  -- Asset Number
5526  |      p_ship_to_site_use_id   -- Ship to Site Use ID
5527  |      p_inventory_item_id             -- Inventory Item ID
5528  |     --asset level end
5529  |      p_sty_id                                -- Stream Type ID
5530  |      p_taxable_basis                 -- Taxable Basis Amount
5531  |      p_tax_call_cnt                  -- counter
5532  |      px_tax_sources_tbl              -- table used to store tax source transactions
5533  |      p_khr_id                                -- contract ID
5534  |      p_source_trx_id                 -- Source Trx ID
5535  |      p_source_table                  -- Source Table
5536  |      p_reported_yn                   -- reportable y/n
5537  |      p_fma_id                                -- formula ID
5538  |      p_formula_name                  -- formula name
5539  |      p_bill_to_siteuseid             -- Bill to site use id
5540  |      lx_trx_rec_tbl                  -- table used to store input data for the TAx Engine call
5541  |      p_k_start_date                  -- contract start date
5542  |      p_currency_code                 -- Currency Code
5543  |      p_cust_trx_type_id              -- AR customer trx type
5544  |      p_minimum_accountable_unit      -- Minimum accountable unit for currency
5545  |      p_precision                             -- currency precision
5546  |
5547  | KNOWN ISSUES
5548  |
5549  | NOTES
5550  |
5551  |
5552  | MODIFICATION HISTORY
5553  | Date           Author        Description of Changes
5554  | 08-APR-05      SECHAWLA      Created
5555  | 05-DEC-05      SECHAWLA      Use a different index p_trx_rec_tbl_cnt
5556  |                              to populate p_trx_rec_tbl. This happens
5557  |                              only for the 'Rebook' transaction
5558  | 04-Jan-08      SECHAWLA      6651621 Added 3 additional parameters to taxable basis override formula -
5559  |                              'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
5560  |
5561  *=======================================================================*/
5562 
5563   PROCEDURE populate_tax_info(
5564     p_api_version                       IN  NUMBER,
5565     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
5566     x_return_status                     OUT NOCOPY VARCHAR2,
5567     x_msg_count                         OUT NOCOPY NUMBER,
5568     x_msg_data                          OUT NOCOPY VARCHAR2,
5569     p_prch_opt_det                                      IN  VARCHAR2,
5570     p_fin_prod_id_det                           IN  NUMBER,
5571     p_int_disclosed_det                         IN  VARCHAR2,
5572     p_title_trnsfr_code                     IN  VARCHAR2,
5573     p_sale_lease_back_code                  IN  VARCHAR2,
5574     p_lease_purchased_code                  IN  VARCHAR2,
5575     p_equip_usage_code                      IN  VARCHAR2,
5576     p_vendor_site_id                        IN  NUMBER,
5577     p_age_of_equip                                      IN  NUMBER,
5578     p_source_trx_name               IN  VARCHAR2,
5579     p_cust_trx_type_id              IN  NUMBER,
5580     p_book_class_code               IN  VARCHAR2,
5581     p_tax_call_cnt                                      IN NUMBER,
5582     p_line_params_tbl_cnt           IN NUMBER DEFAULT NULL,
5583     p_fma_id                                            IN NUMBER,
5584     p_formula_name                                      IN VARCHAR2,
5585     p_minimum_accountable_unit          IN NUMBER,
5586     p_precision                                         IN NUMBER,
5587     p_sales_quote_id                IN NUMBER, -- Used only for Sales Quote tax call
5588     p_event_type_code               IN VARCHAR2,
5589     p_ledger_id                     IN NUMBER,
5590     p_line_level_action             IN VARCHAR2,
5591     p_tax_src_params_rec                    IN tax_src_params_rec_type,
5592     p_quote_flag                    IN VARCHAR2,
5593     p_rounding_ship_to_party_id     IN NUMBER,
5594     p_rounding_bill_to_party_id     IN NUMBER,
5595     p_line_amt_includes_tax_flag    IN VARCHAR2,
5596     p_term_quote_type_code          IN VARCHAR2,
5597     p_term_quote_reason_code        IN VARCHAR2,
5598     p_alc_ser_def_code              IN VARCHAR2 DEFAULT NULL,
5599     px_tax_sources_tbl                  IN OUT NOCOPY tax_sources_tbl_type,
5600     px_line_params_tbl                  IN OUT NOCOPY line_params_tbl_type) IS
5601 
5602     lx_tbc_code                                         VARCHAR2(30);
5603     lx_ufc_code                     VARCHAR2(30);
5604     lx_pc_code                      VARCHAR2(30);
5605     lx_tax_classification_code      VARCHAR2(50);
5606     l_assessable_value                          NUMBER;
5607     l_line_amt                                          NUMBER;
5608     l_add_params                                        okl_execute_formula_pub.ctxt_val_tbl_type;
5609     l_set_of_books_id               NUMBER;
5610     l_alc_fetch_code                BOOLEAN := FALSE;
5611 
5612     lx_tax_valid_code               VARCHAR2(1);
5613 
5614     CURSOR c_get_set_of_books_id(cp_org_id IN NUMBER) IS
5615     SELECT set_of_books_id
5616     FROM   ar_system_parameters_all
5617     WHERE  org_id = cp_org_id;
5618 
5619     l_next_index                    NUMBER;
5620 
5621   BEGIN
5622 
5623     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5624         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info','Begin(+)');
5625     END IF;
5626 
5627     --Print Input Variables
5628     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5629         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5630               'p_init_msg_list :'||p_init_msg_list);
5631         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5632               'p_prch_opt_det :'||p_prch_opt_det);
5633         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5634               'p_prch_opt_det :'||p_prch_opt_det);
5635         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5636               'p_fin_prod_id_det :'||p_fin_prod_id_det);
5637         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5638               'p_int_disclosed_det :'||p_int_disclosed_det);
5639         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5640               'p_title_trnsfr_code :'||p_title_trnsfr_code);
5641         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5642               'p_sale_lease_back_code :'||p_sale_lease_back_code);
5643         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5644               'p_lease_purchased_code :'||p_lease_purchased_code);
5645                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5646               'p_equip_usage_code :'||p_equip_usage_code);
5647                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5648               'p_vendor_site_id :'||p_vendor_site_id);
5649         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5650               'p_age_of_equip :'||p_age_of_equip);
5651                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5652               'p_tax_call_cnt :'||p_tax_call_cnt);
5653                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5654               'px_tax_sources_tbl.count :'||px_tax_sources_tbl.count);
5655                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5656               'p_fma_id :'||p_fma_id);
5657                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5658               'p_formula_name :'||p_formula_name);
5659                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5660               'p_cust_trx_type_id :'||p_cust_trx_type_id);
5661                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5662               'p_minimum_accountable_unit :'||p_minimum_accountable_unit);
5663                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5664               'p_precision :'||p_precision);
5665                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5666               'p_sales_quote_id :'||p_sales_quote_id);
5667                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5668               'p_event_type_code :'||p_event_type_code);
5669                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5670               'p_ledger_id :'||p_ledger_id);
5671                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5672               'p_quote_flag :'||p_quote_flag);
5673                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5674               'p_line_level_action :'||p_line_level_action);
5675                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5676               'p_rounding_ship_to_party_id :'||p_rounding_ship_to_party_id);
5677                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5678               'p_rounding_bill_to_party_id :'||p_rounding_bill_to_party_id);
5679                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5680               'p_line_amt_includes_tax_flag :'||p_line_amt_includes_tax_flag);
5681                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5682               'p_line_amt_includes_tax_flag :'||p_line_amt_includes_tax_flag);
5683                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5684               'p_line_amt_includes_tax_flag :'||p_line_amt_includes_tax_flag);
5685     END IF;
5686 
5687     IF (p_source_trx_name = 'Asset Relocation' AND
5688         p_tax_src_params_rec.alc_serialized_yn IN ('Y', 'L') AND
5689         p_alc_ser_def_code IN ('A', 'F')) THEN
5690       l_alc_fetch_code := TRUE;
5691     ELSIF (p_source_trx_name = 'Asset Relocation' AND
5692           (p_tax_src_params_rec.alc_serialized_yn IS NULL OR
5693            p_tax_src_params_rec.alc_serialized_yn = 'N')) THEN
5694       l_alc_fetch_code := TRUE;
5695     END IF;
5696 
5697     IF (l_alc_fetch_code OR p_source_trx_name <> 'Asset Relocation') THEN
5698     -- This processing will be done only once for Asset Relocation transaction for
5699     -- the Serialized/Non-Serialized asset. It will be processed as needed for
5700     -- other transactions
5701       -- Get TBC code
5702           get_tbc_code(p_api_version                 => p_api_version,
5703                            p_init_msg_list               => OKC_API.G_FALSE,
5704                            x_return_status               => x_return_status,
5705                            x_msg_count                   => x_msg_count,
5706                    x_msg_data                    => x_msg_data,
5707                    p_sty_id                                          => p_tax_src_params_rec.sty_id,  -- used if pymnts exist
5708                            p_try_id                                          => p_tax_src_params_rec.try_id,
5709                    p_book_class_code             => p_book_class_code,
5710                    p_tax_country_code            => p_tax_src_params_rec.default_taxation_country,
5711                    x_tbc_code                    => lx_tbc_code);
5712 
5713       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5714         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5715       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5716         RAISE OKL_API.G_EXCEPTION_ERROR;
5717       END IF;
5718 
5719       -- Validate TBC Code
5720       IF lx_tbc_code IS NOT NULL THEN
5721         validate_tax_code(
5722           p_api_version     => p_api_version,
5723           p_init_msg_list   => p_init_msg_list,
5724           x_return_status   => x_return_status,
5725           x_msg_count       => x_msg_count,
5726           x_msg_data        => x_msg_data,
5727           p_trx_date        => p_tax_src_params_rec.trx_date,
5728           p_tbc_code        => lx_tbc_code,
5729           x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
5730 
5731         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5732           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5733         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5734           RAISE OKL_API.G_EXCEPTION_ERROR;
5735         END IF;
5736       END IF;
5737 
5738       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5739         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5740                   'lx_tbc_code'||lx_tbc_code);
5741       END IF;
5742 
5743       -- Get the first level determinant for TBC basing on transaction, if the value is null
5744       IF lx_tbc_code IS NULL OR lx_tax_valid_code = 'F' THEN
5745         IF p_source_trx_name IN ('Tax Schedule', 'Estimated Billing') THEN
5746           lx_tbc_code := 'SALES_TRANSACTION';
5747         ELSE
5748           lx_tbc_code := 'BOOKING';
5749         END IF;
5750       END IF;
5751 
5752       IF (p_source_trx_name = 'Asset Relocation' AND
5753           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
5754           p_alc_ser_def_code = 'F') THEN
5755         G_TBC_CODE := lx_tbc_code;
5756       END IF;
5757 
5758       -- Get PC code
5759       get_pc_code(p_api_version                 => p_api_version,
5760                           p_init_msg_list               => OKC_API.G_FALSE,
5761                           x_return_status               => x_return_status,
5762                           x_msg_count                   => x_msg_count,
5763                   x_msg_data                    => x_msg_data,
5764                   p_sty_id                                          => p_tax_src_params_rec.sty_id,  -- used if pymnts exist
5765                   p_purchase_option_code        => p_prch_opt_det,
5766                   p_int_disclosed_code          => p_int_disclosed_det,
5767                   p_title_trnsfr_code           => p_title_trnsfr_code,
5768                   p_sale_lease_back_code        => p_sale_lease_back_code,
5769                   p_lease_purchased_code        => p_lease_purchased_code,
5770                   p_tax_country_code            => p_tax_src_params_rec.default_taxation_country,
5771                   x_pc_code                     => lx_pc_code);
5772 
5773       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5774         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5775       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5776         RAISE OKL_API.G_EXCEPTION_ERROR;
5777       END IF;
5778 
5779       -- Validate PC Code
5780       IF lx_pc_code IS NOT NULL THEN
5781         validate_tax_code(
5782             p_api_version     => p_api_version,
5783             p_init_msg_list   => p_init_msg_list,
5784             x_return_status   => x_return_status,
5785             x_msg_count       => x_msg_count,
5786             x_msg_data        => x_msg_data,
5787             p_trx_date        => p_tax_src_params_rec.trx_date,
5788             p_pc_code         => lx_pc_code,
5789             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
5790 
5791         IF (lx_tax_valid_code = 'F') THEN
5792           lx_pc_code := null;
5793         END IF;
5794 
5795         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5796           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5797         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5798           RAISE OKL_API.G_EXCEPTION_ERROR;
5799         END IF;
5800       END IF;
5801 
5802       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5803         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5804                   'lx_pc_code'||lx_pc_code);
5805       END IF;
5806 
5807       IF (p_source_trx_name = 'Asset Relocation' AND
5808           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
5809           p_alc_ser_def_code = 'F') THEN
5810         G_PC_CODE := lx_pc_code;
5811       END IF;
5812 
5813       -- contract level call begin
5814       -- Get UFC code
5815           get_ufc_code(p_api_version                 => p_api_version,
5816                            p_init_msg_list               => OKC_API.G_FALSE,
5817                            x_return_status               => x_return_status,
5818                            x_msg_count                   => x_msg_count,
5819                    x_msg_data                    => x_msg_data,
5820                            p_purchase_option             => p_prch_opt_det,
5821                                    p_fin_product_id                          => p_fin_prod_id_det,
5822                            p_try_id                                          => p_tax_src_params_rec.try_id,
5823                            p_sty_id                                          => p_tax_src_params_rec.sty_id,  -- used if pymnts exist
5824                            p_int_disclosed_code              => p_int_disclosed_det,
5825                            p_title_trnsfr_code               => p_title_trnsfr_code, -- asset level
5826                            p_sale_lease_back_code                => p_sale_lease_back_code, -- asset level
5827                            p_lease_purchased_code                => p_lease_purchased_code, -- asset level
5828                            p_equip_usage_code                    => p_equip_usage_code ,-- asset level
5829                            p_vendor_site_id                          => p_vendor_site_id, -- asset level
5830                            p_age_of_equip                                => p_age_of_equip, -- asset level
5831                    p_term_quote_type_code        => p_term_quote_type_code,
5832                    p_term_quote_reason_code      => p_term_quote_reason_code,
5833                    p_tax_country_code            => p_tax_src_params_rec.default_taxation_country,
5834                            x_ufc_code                    => lx_ufc_code);
5835 
5836       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5837         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5838       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5839         RAISE OKL_API.G_EXCEPTION_ERROR;
5840       END IF;
5841 
5842       -- Validate UFC Code
5843       IF lx_ufc_code IS NOT NULL THEN
5844         validate_tax_code(
5845             p_api_version     => p_api_version,
5846             p_init_msg_list   => p_init_msg_list,
5847             x_return_status   => x_return_status,
5848             x_msg_count       => x_msg_count,
5849             x_msg_data        => x_msg_data,
5850             p_trx_date        => p_tax_src_params_rec.trx_date,
5851             p_ufc_code        => lx_ufc_code,
5852             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
5853 
5854         IF (lx_tax_valid_code = 'F') THEN
5855           lx_ufc_code := null;
5856         END IF;
5857 
5858         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5859           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5860         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5861           RAISE OKL_API.G_EXCEPTION_ERROR;
5862         END IF;
5863       END IF;
5864 
5865       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5866         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5867                   'lx_ufc_code'||lx_ufc_code);
5868       END IF;
5869 
5870       IF (p_source_trx_name = 'Asset Relocation' AND
5871           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
5872           p_alc_ser_def_code = 'F') THEN
5873         G_UFC_CODE := lx_ufc_code;
5874       END IF;
5875 
5876     END IF;
5877 
5878         -- Check if taxable basis override applies
5879         IF p_fma_id IS NOT NULL THEN
5880           -- execute tax basis override formula, pass tax determinants
5881           l_add_params(1).name  := 'PURCHASE_OPTION';
5882           l_add_params(1).value := p_prch_opt_det;
5883 
5884           l_add_params(2).name      := 'FINANCIAL_PRODUCT_ID';
5885           l_add_params(2).value := p_fin_prod_id_det;
5886 
5887           l_add_params(3).name  := 'TRX_TYPE_ID';
5888           l_add_params(3).value := p_tax_src_params_rec.try_id;
5889 
5890           l_add_params(4).name  := 'STREAM_TYPE_ID';
5891           l_add_params(4).value := p_tax_src_params_rec.sty_id;
5892 
5893           l_add_params(5).name  := 'INTEREST_DISCLOSED';
5894           l_add_params(5).value := p_int_disclosed_det;
5895 
5896           l_add_params(6).name  := 'TRANSFER_OF_TITLE';
5897           l_add_params(6).value := p_title_trnsfr_code;
5898 
5899           l_add_params(7).name  := 'SALE_LEASE_BACK';
5900           l_add_params(7).value := p_sale_lease_back_code;
5901 
5902           l_add_params(8).name  := 'PURCHASE_OF_LEASE';
5903           l_add_params(8).value := p_lease_purchased_code;
5904 
5905           l_add_params(9).name  := 'USAGE_OF_EQUIPMENT';
5906           l_add_params(9).value := p_equip_usage_code;
5907 
5908           l_add_params(10).name := 'VENDOR_SITE_ID';
5909           l_add_params(10).value := p_vendor_site_id;
5910 
5911           l_add_params(11).name := 'AGE_OF_EQUIPMENT';
5912           l_add_params(11).value        := p_age_of_equip;
5913 
5914           l_add_params(12).name := 'BOOK_CLASS';
5915           l_add_params(12).value        := p_book_class_code;
5916 
5917           l_add_params(13).name := 'BILL_TO_PARTY_SITE_ID';
5918           l_add_params(13).value        := p_tax_src_params_rec.bill_to_party_site_id;
5919 
5920           l_add_params(14).name := 'BILL_TO_LOCATION_ID';
5921           l_add_params(14).value        := p_tax_src_params_rec.bill_to_location_id;
5922 
5923           l_add_params(15).name := 'BILL_TO_PARTY_ID';
5924           l_add_params(15).value        := p_tax_src_params_rec.bill_to_party_id;
5925 
5926           l_add_params(16).name := 'SHIP_TO_PARTY_SITE_ID';
5927           l_add_params(16).value        :=  p_tax_src_params_rec.ship_to_party_site_id;
5928 
5929           l_add_params(17).name := 'SHIP_TO_LOCATION_ID';
5930           l_add_params(17).value        :=  p_tax_src_params_rec.ship_to_location_id;
5931 
5932           l_add_params(18).name := 'SHIP_TO_PARTY_ID';
5933           l_add_params(18).value        :=  p_tax_src_params_rec.ship_to_party_id;
5934 
5935           -- Directly Mapped
5936           l_add_params(19).name := 'BILL_TO_SITE_USE_ID';
5937           l_add_params(19).value        :=  p_tax_src_params_rec.bill_to_cust_acct_site_use_id;
5938 
5939           l_add_params(20).name := 'INVENTORY_ITEM_ID';
5940           l_add_params(20).value        := p_tax_src_params_rec.inventory_item_id;
5941 
5942           l_add_params(21).name := 'SHIP_TO_SITE_USE_ID';
5943           l_add_params(21).value        := p_tax_src_params_rec.ship_to_cust_acct_site_use_id;
5944 
5945           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - begin
5946           --'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
5947           l_add_params(22).name := 'LINE_NAME';
5948           l_add_params(22).value  := p_tax_src_params_rec.line_name;
5949 
5950           l_add_params(23).name := 'SOURCE_TRX_NAME';
5951           l_add_params(23).value  := p_source_trx_name;
5952 
5953           l_add_params(24).name := 'DEFAULT_TAXABLE_BASIS';
5954           l_add_params(24).value  := p_tax_src_params_rec.line_amt;
5955           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - end
5956 
5957           l_next_index := 25;  --SECHAWLA 04-Jan-08 6651621 - Added
5958 
5959           IF p_sales_quote_id IS NOT NULL THEN
5960             l_add_params(l_next_index).name   := 'SALES_QUOTE_ID'; --SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5961             l_add_params(l_next_index).value      := p_sales_quote_id;--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5962             l_next_index := l_next_index + 1;
5963           END IF;
5964 
5965           IF (p_source_trx_name = 'Estimated Billing') THEN
5966             l_add_params(l_next_index).name   := 'TERM_QUOTE_TYPE_CODE';--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5967             l_add_params(l_next_index).value      := p_term_quote_type_code;--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5968 
5969             l_next_index := l_next_index + 1; --SECHAWLA 04-Jan-08 6651621 - Added
5970 
5971             l_add_params(l_next_index).name   := 'TERM_QUOTE_REASON_CODE';--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5972             l_add_params(l_next_index).value      := p_term_quote_reason_code;--SECHAWLA 04-Jan-08 6651621 Use l_next_index for conditional assignments
5973           END IF;
5974 
5975       okl_am_util_pvt.get_formula_value(
5976                             p_formula_name           => p_formula_name,
5977                             p_chr_id                 => p_tax_src_params_rec.khr_id,  -- will be NULL for sales Quote tax call
5978                             p_cle_id                 => p_tax_src_params_rec.kle_id,  -- will be NULL for sales Quote tax call
5979                             p_additional_parameters  => l_add_params,
5980                             x_formula_value          => l_assessable_value,  --OVERRIDEN TAXABLE BASIS
5981                             x_return_status          => x_return_status);
5982 
5983       IF (x_return_status IN (OKL_API.G_RET_STS_UNEXP_ERROR, OKL_API.G_RET_STS_ERROR)) THEN
5984         OKL_API.init_msg_list('T');
5985         OKL_API.set_message(p_app_name      => 'OKL',
5986                             p_msg_name      => 'OKL_TX_FRM_TXN_ERR',
5987                             p_token1        => 'FMA_NAME',
5988                             p_token1_value  => p_formula_name,
5989                             p_token2        => 'TRX_NAME ',
5990                                                         p_token2_value  => p_source_trx_name);
5991          RAISE OKL_API.G_EXCEPTION_ERROR;
5992       END IF;
5993 
5994       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
5995         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
5996                   'calculated l_assessable_value '||l_assessable_value);
5997       END IF;
5998         END IF;
5999 
6000     -- Populate the line_amt in l_assessable_value if null
6001     IF l_assessable_value IS NULL THEN
6002       l_assessable_value  := p_tax_src_params_rec.line_amt;
6003       l_line_amt                  := p_tax_src_params_rec.line_amt;
6004     ELSE
6005       l_line_amt                  := l_assessable_value;
6006     END IF;
6007 
6008     -- Get Set of Books ID
6009     OPEN c_get_set_of_books_id(cp_org_id  =>  p_tax_src_params_rec.org_id);
6010     FETCH c_get_set_of_books_id INTO l_set_of_books_id;
6011     CLOSE c_get_set_of_books_id;
6012 
6013     -- Get the tax classification code
6014     IF (l_alc_fetch_code OR p_source_trx_name <> 'Asset Relocation') THEN
6015           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6016         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6017                   'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
6018       END IF;
6019 
6020       OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
6021                       x_return_status                 =>  x_return_status,
6022                       p_ship_to_site_use_id           =>  p_tax_src_params_rec.ship_to_cust_acct_site_use_id,
6023                       p_bill_to_site_use_id           =>  p_tax_src_params_rec.bill_to_cust_acct_site_use_id,
6024                       p_inventory_item_id             =>  p_tax_src_params_rec.inventory_item_id,
6025                       p_organization_id               =>  p_tax_src_params_rec.org_id,
6026                       p_set_of_books_id               =>  l_set_of_books_id,
6027                       p_trx_date                      =>  p_tax_src_params_rec.trx_date,
6028                       p_trx_type_id                   =>  null,
6029                       p_entity_code                   =>  G_AR_ENTITY_CODE,
6030                       p_event_class_code              =>  G_INVOICE_EVENT_CLASS_CODE,
6031                       p_application_id                =>  G_AR_APPLICATION_ID,
6032                       p_internal_organization_id      =>  p_tax_src_params_rec.org_id,
6033                       x_tax_classification_code       =>  lx_tax_classification_code );
6034 
6035       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6036         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6037                   'Return Status '|| x_return_status);
6038       END IF;
6039 
6040       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6041         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6042       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6043         RAISE OKL_API.G_EXCEPTION_ERROR;
6044       END IF;
6045 
6046       IF (p_source_trx_name = 'Asset Relocation' AND
6047           p_tax_src_params_rec.alc_serialized_yn = 'Y' AND
6048           p_alc_ser_def_code = 'F') THEN
6049         G_TAX_CLASS_CODE := lx_tax_classification_code;
6050       END IF;
6051 
6052     END IF;
6053 
6054     IF (p_source_trx_name = 'Asset Relocation' AND
6055         p_tax_src_params_rec.alc_serialized_yn IN ('Y', 'L') AND
6056         p_alc_ser_def_code = 'N') THEN
6057       lx_ufc_code                := G_UFC_CODE;
6058       lx_tbc_code                := G_TBC_CODE;
6059       lx_pc_code                 := G_PC_CODE;
6060       lx_tax_classification_code := G_TAX_CLASS_CODE;
6061     END IF;
6062 
6063     -- populate okl_tax_sources pl/sql table
6064     px_tax_sources_tbl(p_tax_call_cnt).id                                  := get_seq_id;
6065     px_tax_sources_tbl(p_tax_call_cnt).khr_id                              := p_tax_src_params_rec.khr_id;
6066     px_tax_sources_tbl(p_tax_call_cnt).kle_id                              := p_tax_src_params_rec.kle_id;
6067         px_tax_sources_tbl(p_tax_call_cnt).sty_id                              := p_tax_src_params_rec.sty_id;
6068     px_tax_sources_tbl(p_tax_call_cnt).inventory_item_id                   := p_tax_src_params_rec.inventory_item_id;
6069     px_tax_sources_tbl(p_tax_call_cnt).legal_entity_id                     := p_tax_src_params_rec.legal_entity_id;
6070     px_tax_sources_tbl(p_tax_call_cnt).line_amt                            := l_line_amt;
6071     px_tax_sources_tbl(p_tax_call_cnt).line_name                           := p_tax_src_params_rec.line_name;
6072     px_tax_sources_tbl(p_tax_call_cnt).line_intended_use                   := p_tax_src_params_rec.line_intended_use;
6073     px_tax_sources_tbl(p_tax_call_cnt).org_id                              := p_tax_src_params_rec.org_id;
6074     px_tax_sources_tbl(p_tax_call_cnt).product_type                        := G_DEFAULT_PRODUCT_TYPE;
6075     px_tax_sources_tbl(p_tax_call_cnt).assessable_value                    := l_assessable_value;
6076     px_tax_sources_tbl(p_tax_call_cnt).asset_number                        := p_tax_src_params_rec.asset_number;
6077     px_tax_sources_tbl(p_tax_call_cnt).reported_yn                         := p_tax_src_params_rec.reported_yn;
6078 
6079     px_tax_sources_tbl(p_tax_call_cnt).trx_id                              := p_tax_src_params_rec.trx_id;
6080 
6081     IF (p_source_trx_name = 'Estimated Billing') THEN
6082       px_tax_sources_tbl(p_tax_call_cnt).trx_line_id                       := p_tax_src_params_rec.trx_line_id;
6083     ELSE
6084       px_tax_sources_tbl(p_tax_call_cnt).trx_line_id                       := px_tax_sources_tbl(p_tax_call_cnt).id;
6085     END IF;
6086 
6087     px_tax_sources_tbl(p_tax_call_cnt).trx_level_type                      := G_TRX_LEVEL_TYPE;
6088     px_tax_sources_tbl(p_tax_call_cnt).trx_currency_code                   := p_tax_src_params_rec.trx_currency_code;
6089     px_tax_sources_tbl(p_tax_call_cnt).trx_date                            := p_tax_src_params_rec.trx_date;
6090     px_tax_sources_tbl(p_tax_call_cnt).try_id                              := p_tax_src_params_rec.try_id;
6091 
6092     px_tax_sources_tbl(p_tax_call_cnt).entity_code      := p_tax_src_params_rec.entity_code;
6093     px_tax_sources_tbl(p_tax_call_cnt).event_class_code := p_tax_src_params_rec.event_class_code;
6094     px_tax_sources_tbl(p_tax_call_cnt).application_id   := G_OKL_APPLICATION_ID;
6095         px_tax_sources_tbl(p_tax_call_cnt).request_id       := null;
6096 
6097         px_tax_sources_tbl(p_tax_call_cnt).program_id             := null;
6098         px_tax_sources_tbl(p_tax_call_cnt).program_application_id := null;
6099         px_tax_sources_tbl(p_tax_call_cnt).program_update_date    := null;
6100 
6101         px_tax_sources_tbl(p_tax_call_cnt).attribute_category    := null;
6102         px_tax_sources_tbl(p_tax_call_cnt).attribute1            := null;
6103         px_tax_sources_tbl(p_tax_call_cnt).attribute2            := null;
6104         px_tax_sources_tbl(p_tax_call_cnt).attribute3            := null;
6105         px_tax_sources_tbl(p_tax_call_cnt).attribute4            := null;
6106         px_tax_sources_tbl(p_tax_call_cnt).attribute5            := null;
6107         px_tax_sources_tbl(p_tax_call_cnt).attribute6            := null;
6108         px_tax_sources_tbl(p_tax_call_cnt).attribute7            := null;
6109         px_tax_sources_tbl(p_tax_call_cnt).attribute8            := null;
6110         px_tax_sources_tbl(p_tax_call_cnt).attribute9            := null;
6111         px_tax_sources_tbl(p_tax_call_cnt).attribute10           := null;
6112         px_tax_sources_tbl(p_tax_call_cnt).attribute11           := null;
6113         px_tax_sources_tbl(p_tax_call_cnt).attribute12           := null;
6114         px_tax_sources_tbl(p_tax_call_cnt).attribute13           := null;
6115         px_tax_sources_tbl(p_tax_call_cnt).attribute14           := null;
6116         px_tax_sources_tbl(p_tax_call_cnt).attribute15           := null;
6117         px_tax_sources_tbl(p_tax_call_cnt).created_by            := G_USER_ID;
6118         px_tax_sources_tbl(p_tax_call_cnt).creation_date         := SYSDATE;
6119         px_tax_sources_tbl(p_tax_call_cnt).last_updated_by       := G_USER_ID;
6120         px_tax_sources_tbl(p_tax_call_cnt).last_update_date      := SYSDATE;
6121         px_tax_sources_tbl(p_tax_call_cnt).last_update_login     := G_LOGIN_ID;
6122         px_tax_sources_tbl(p_tax_call_cnt).object_version_number := null;
6123 
6124     px_tax_sources_tbl(p_tax_call_cnt).currency_conversion_date            := p_tax_src_params_rec.currency_conversion_date;
6125     px_tax_sources_tbl(p_tax_call_cnt).currency_conversion_rate            := p_tax_src_params_rec.currency_conversion_rate;
6126     px_tax_sources_tbl(p_tax_call_cnt).currency_conversion_type            := p_tax_src_params_rec.currency_conversion_type;
6127 
6128     px_tax_sources_tbl(p_tax_call_cnt).product_fisc_classification         := null;
6129     px_tax_sources_tbl(p_tax_call_cnt).product_category                    := lx_pc_code;
6130     px_tax_sources_tbl(p_tax_call_cnt).user_defined_fisc_class             := lx_ufc_code;
6131     px_tax_sources_tbl(p_tax_call_cnt).tax_classification_code             := lx_tax_classification_code;
6132     px_tax_sources_tbl(p_tax_call_cnt).tax_reporting_flag                  := p_tax_src_params_rec.tax_reporting_flag;
6133     px_tax_sources_tbl(p_tax_call_cnt).provnl_tax_determination_date       := null;
6134     px_tax_sources_tbl(p_tax_call_cnt).default_taxation_country            := p_tax_src_params_rec.default_taxation_country;
6135     px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_entity_code            := p_tax_src_params_rec.adjusted_doc_entity_code;
6136     px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_event_class_code       := p_tax_src_params_rec.adjusted_doc_event_class_code;
6137     px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_trx_id                 := p_tax_src_params_rec.adjusted_doc_trx_id;
6138         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_trx_line_id            := p_tax_src_params_rec.adjusted_doc_trx_line_id;
6139         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_trx_level_type         := p_tax_src_params_rec.adjusted_doc_trx_level_type;
6140         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_number                 := p_tax_src_params_rec.adjusted_doc_number;
6141         px_tax_sources_tbl(p_tax_call_cnt).adjusted_doc_date                   := p_tax_src_params_rec.adjusted_doc_date;
6142         px_tax_sources_tbl(p_tax_call_cnt).tax_call_type_code                  := p_tax_src_params_rec.tax_call_type_code;
6143         px_tax_sources_tbl(p_tax_call_cnt).trx_business_category               := lx_tbc_code;
6144         px_tax_sources_tbl(p_tax_call_cnt).tax_line_status_code                := p_tax_src_params_rec.tax_line_status_code;
6145 
6146     px_tax_sources_tbl(p_tax_call_cnt).ship_to_location_id                 := p_tax_src_params_rec.ship_to_location_id;
6147     px_tax_sources_tbl(p_tax_call_cnt).ship_to_party_site_id               := p_tax_src_params_rec.ship_to_party_site_id;
6148     px_tax_sources_tbl(p_tax_call_cnt).ship_to_party_id                    := p_tax_src_params_rec.ship_to_party_id;
6149     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;
6150     px_tax_sources_tbl(p_tax_call_cnt).bill_to_cust_acct_id                := p_tax_src_params_rec.bill_to_cust_acct_id;
6151     px_tax_sources_tbl(p_tax_call_cnt).bill_to_party_site_id               := p_tax_src_params_rec.bill_to_party_site_id;
6152     px_tax_sources_tbl(p_tax_call_cnt).bill_to_location_id                 := p_tax_src_params_rec.bill_to_location_id;
6153     px_tax_sources_tbl(p_tax_call_cnt).bill_to_party_id                    := p_tax_src_params_rec.bill_to_party_id;
6154     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;
6155 
6156     -- Populate ALC_SERIALIZED_YN for ALC transaction
6157     IF (p_source_trx_name = 'Asset Relocation') THEN
6158       IF (p_tax_src_params_rec.alc_serialized_yn IN ('Y', 'L')) THEN
6159         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_yn                 := p_tax_src_params_rec.alc_serialized_yn;
6160         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_total_line_amt     := p_tax_src_params_rec.alc_serialized_total_line_amt;
6161       ELSE
6162         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_yn                 := 'N';
6163         px_tax_sources_tbl(p_tax_call_cnt).alc_serialized_total_line_amt     := p_tax_src_params_rec.alc_serialized_total_line_amt;
6164       END IF;
6165     END IF;
6166 
6167         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6168          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info.',
6169                   'POPULATED px_tax_sources_tbl ');
6170     END IF;
6171 
6172     IF (p_line_params_tbl_cnt IS NULL) THEN
6173       px_line_params_tbl(p_tax_call_cnt).application_id                     := G_OKL_APPLICATION_ID;
6174       px_line_params_tbl(p_tax_call_cnt).trx_id                             := p_tax_src_params_rec.trx_id;
6175       px_line_params_tbl(p_tax_call_cnt).internal_organization_id           := p_tax_src_params_rec.org_id;
6176       px_line_params_tbl(p_tax_call_cnt).entity_code                        := p_tax_src_params_rec.entity_code;
6177       px_line_params_tbl(p_tax_call_cnt).event_class_code                   := p_tax_src_params_rec.event_class_code;
6178       px_line_params_tbl(p_tax_call_cnt).event_type_code                    := p_event_type_code;
6179       px_line_params_tbl(p_tax_call_cnt).trx_date                           := p_tax_src_params_rec.trx_date;
6180       px_line_params_tbl(p_tax_call_cnt).ledger_id                          := p_ledger_id;
6181       px_line_params_tbl(p_tax_call_cnt).legal_entity_id                    := p_tax_src_params_rec.legal_entity_id;
6182       px_line_params_tbl(p_tax_call_cnt).trx_level_type                     := p_tax_src_params_rec.trx_level_type;
6183       px_line_params_tbl(p_tax_call_cnt).line_level_action                  := p_line_level_action;
6184 
6185       IF (p_source_trx_name = 'Estimated Billing') THEN
6186         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := p_tax_src_params_rec.trx_line_id;
6187       ELSE
6188         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := px_tax_sources_tbl(p_tax_call_cnt).id;
6189       END IF;
6190 
6191       px_line_params_tbl(p_tax_call_cnt).line_amt                           := l_line_amt;
6192       px_line_params_tbl(p_tax_call_cnt).tax_reporting_flag                 := p_tax_src_params_rec.tax_reporting_flag;
6193       px_line_params_tbl(p_tax_call_cnt).default_taxation_country           := p_tax_src_params_rec.default_taxation_country;
6194       px_line_params_tbl(p_tax_call_cnt).product_type                       := p_tax_src_params_rec.product_type;
6195       px_line_params_tbl(p_tax_call_cnt).output_tax_classification_code     := p_tax_src_params_rec.tax_classification_code;
6196       px_line_params_tbl(p_tax_call_cnt).assessable_value                   := l_assessable_value;
6197       px_line_params_tbl(p_tax_call_cnt).receivables_trx_type_id            := p_cust_trx_type_id;
6198       px_line_params_tbl(p_tax_call_cnt).product_id                         := p_tax_src_params_rec.inventory_item_id;
6199       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_entity_code           := p_tax_src_params_rec.adjusted_doc_entity_code;
6200       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_event_class_code      := p_tax_src_params_rec.adjusted_doc_event_class_code;
6201       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_trx_id                := p_tax_src_params_rec.adjusted_doc_trx_id;
6202       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_line_id               := p_tax_src_params_rec.adjusted_doc_trx_line_id;
6203       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_trx_level_type        := p_tax_src_params_rec.adjusted_doc_trx_level_type;
6204       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_number                := p_tax_src_params_rec.adjusted_doc_number;
6205       px_line_params_tbl(p_tax_call_cnt).adjusted_doc_date                  := p_tax_src_params_rec.adjusted_doc_date;
6206       px_line_params_tbl(p_tax_call_cnt).line_amt_includes_tax_flag         := p_line_amt_includes_tax_flag;
6207 
6208       px_line_params_tbl(p_tax_call_cnt).trx_business_category              := lx_tbc_code;
6209       px_line_params_tbl(p_tax_call_cnt).product_category                   := lx_pc_code;
6210       px_line_params_tbl(p_tax_call_cnt).user_defined_fisc_class            := lx_ufc_code;
6211       px_line_params_tbl(p_tax_call_cnt).line_intended_use                  := p_tax_src_params_rec.line_intended_use;
6212       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;
6213       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;
6214       px_line_params_tbl(p_tax_call_cnt).bill_to_party_site_id              := p_tax_src_params_rec.bill_to_party_site_id;
6215       px_line_params_tbl(p_tax_call_cnt).bill_to_location_id                := p_tax_src_params_rec.bill_to_location_id;
6216       px_line_params_tbl(p_tax_call_cnt).bill_to_party_id                   := p_tax_src_params_rec.bill_to_party_id;
6217       px_line_params_tbl(p_tax_call_cnt).ship_to_party_site_id              := p_tax_src_params_rec.ship_to_party_site_id;
6218       px_line_params_tbl(p_tax_call_cnt).ship_to_location_id                := p_tax_src_params_rec.ship_to_location_id;
6219       px_line_params_tbl(p_tax_call_cnt).ship_to_party_id                   := p_tax_src_params_rec.ship_to_party_id;
6220       px_line_params_tbl(p_tax_call_cnt).rounding_ship_to_party_id          := p_rounding_ship_to_party_id;
6221       px_line_params_tbl(p_tax_call_cnt).rounding_bill_to_party_id          := p_rounding_bill_to_party_id;
6222       px_line_params_tbl(p_tax_call_cnt).trx_currency_code                  := p_tax_src_params_rec.trx_currency_code;
6223       px_line_params_tbl(p_tax_call_cnt).precision                          := p_precision;
6224       px_line_params_tbl(p_tax_call_cnt).minimum_accountable_unit           := p_minimum_accountable_unit;
6225       px_line_params_tbl(p_tax_call_cnt).currency_conversion_date           := p_tax_src_params_rec.currency_conversion_date;
6226       px_line_params_tbl(p_tax_call_cnt).currency_conversion_rate           := p_tax_src_params_rec.currency_conversion_rate;
6227       px_line_params_tbl(p_tax_call_cnt).currency_conversion_type               := p_tax_src_params_rec.currency_conversion_type;
6228     ELSE -- Applicable for 'Rebook' transaction only
6229       px_line_params_tbl(p_line_params_tbl_cnt).application_id              := G_OKL_APPLICATION_ID;
6230       px_line_params_tbl(p_line_params_tbl_cnt).trx_id                      := p_tax_src_params_rec.trx_id;
6231       px_line_params_tbl(p_line_params_tbl_cnt).internal_organization_id    := p_tax_src_params_rec.org_id;
6232       px_line_params_tbl(p_line_params_tbl_cnt).entity_code                 := p_tax_src_params_rec.entity_code;
6233       px_line_params_tbl(p_line_params_tbl_cnt).event_class_code            := p_tax_src_params_rec.event_class_code;
6234       px_line_params_tbl(p_line_params_tbl_cnt).event_type_code             := p_event_type_code;
6235       px_line_params_tbl(p_line_params_tbl_cnt).trx_date                    := p_tax_src_params_rec.trx_date;
6236       px_line_params_tbl(p_line_params_tbl_cnt).ledger_id                   := p_ledger_id;
6237       px_line_params_tbl(p_line_params_tbl_cnt).legal_entity_id             := p_tax_src_params_rec.legal_entity_id;
6238       px_line_params_tbl(p_line_params_tbl_cnt).trx_level_type              := p_tax_src_params_rec.trx_level_type;
6239       px_line_params_tbl(p_line_params_tbl_cnt).line_level_action           := p_line_level_action;
6240 
6241       IF (p_source_trx_name = 'Estimated Billing') THEN
6242         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := p_tax_src_params_rec.trx_line_id;
6243       ELSE
6244         px_line_params_tbl(p_tax_call_cnt).trx_line_id                      := px_tax_sources_tbl(p_tax_call_cnt).id;
6245       END IF;
6246 
6247       px_line_params_tbl(p_line_params_tbl_cnt).line_amt                    := l_line_amt;
6248       px_line_params_tbl(p_line_params_tbl_cnt).tax_reporting_flag          := p_tax_src_params_rec.tax_reporting_flag;
6249       px_line_params_tbl(p_line_params_tbl_cnt).default_taxation_country    := p_tax_src_params_rec.default_taxation_country;
6250       px_line_params_tbl(p_line_params_tbl_cnt).product_type                := p_tax_src_params_rec.product_type;
6251       px_line_params_tbl(p_line_params_tbl_cnt).output_tax_classification_code := p_tax_src_params_rec.tax_classification_code;
6252       px_line_params_tbl(p_line_params_tbl_cnt).assessable_value            := l_assessable_value;
6253       px_line_params_tbl(p_line_params_tbl_cnt).receivables_trx_type_id     := p_cust_trx_type_id;
6254       px_line_params_tbl(p_line_params_tbl_cnt).product_id                  := p_tax_src_params_rec.inventory_item_id;
6255       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_entity_code    := p_tax_src_params_rec.adjusted_doc_entity_code;
6256       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_event_class_code  := p_tax_src_params_rec.adjusted_doc_event_class_code;
6257       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_trx_id         := p_tax_src_params_rec.adjusted_doc_trx_id;
6258       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_line_id        := p_tax_src_params_rec.adjusted_doc_trx_line_id;
6259       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_trx_level_type := p_tax_src_params_rec.adjusted_doc_trx_level_type;
6260       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_number         := p_tax_src_params_rec.adjusted_doc_number;
6261       px_line_params_tbl(p_line_params_tbl_cnt).adjusted_doc_date           := p_tax_src_params_rec.adjusted_doc_date;
6262       px_line_params_tbl(p_line_params_tbl_cnt).line_amt_includes_tax_flag  := p_line_amt_includes_tax_flag;
6263 
6264       px_line_params_tbl(p_line_params_tbl_cnt).trx_business_category       := lx_tbc_code;
6265       px_line_params_tbl(p_line_params_tbl_cnt).product_category            := lx_pc_code;
6266       px_line_params_tbl(p_line_params_tbl_cnt).user_defined_fisc_class     := lx_ufc_code;
6267       px_line_params_tbl(p_line_params_tbl_cnt).line_intended_use           := p_tax_src_params_rec.line_intended_use;
6268       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;
6269       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;
6270       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_party_site_id       := p_tax_src_params_rec.bill_to_party_site_id;
6271       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_location_id         := p_tax_src_params_rec.bill_to_location_id;
6272       px_line_params_tbl(p_line_params_tbl_cnt).bill_to_party_id            := p_tax_src_params_rec.bill_to_party_id;
6273       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_party_site_id       := p_tax_src_params_rec.ship_to_party_site_id;
6274       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_location_id         := p_tax_src_params_rec.ship_to_location_id;
6275       px_line_params_tbl(p_line_params_tbl_cnt).ship_to_party_id            := p_tax_src_params_rec.ship_to_party_id;
6276       px_line_params_tbl(p_line_params_tbl_cnt).rounding_ship_to_party_id   := p_rounding_ship_to_party_id;
6277       px_line_params_tbl(p_line_params_tbl_cnt).rounding_bill_to_party_id   := p_rounding_bill_to_party_id;
6278       px_line_params_tbl(p_line_params_tbl_cnt).trx_currency_code           := p_tax_src_params_rec.trx_currency_code;
6279       px_line_params_tbl(p_line_params_tbl_cnt).precision                   := p_precision;
6280       px_line_params_tbl(p_line_params_tbl_cnt).minimum_accountable_unit    := p_minimum_accountable_unit;
6281       px_line_params_tbl(p_line_params_tbl_cnt).currency_conversion_date    := p_tax_src_params_rec.currency_conversion_date;
6282       px_line_params_tbl(p_line_params_tbl_cnt).currency_conversion_rate    := p_tax_src_params_rec.currency_conversion_rate;
6283       px_line_params_tbl(p_line_params_tbl_cnt).currency_conversion_type        := p_tax_src_params_rec.currency_conversion_type;
6284     END IF;
6285 
6286         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6287        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ','End(-)');
6288     END IF;
6289 
6290   EXCEPTION
6291     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6292          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6293                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ',
6294                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6295          END IF;
6296 
6297          IF (c_get_set_of_books_id%ISOPEN) THEN
6298            CLOSE c_get_set_of_books_id;
6299          END IF;
6300 
6301          x_return_status := OKL_API.G_RET_STS_ERROR;
6302     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6303          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6304                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ',
6305                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6306          END IF;
6307 
6308          IF (c_get_set_of_books_id%ISOPEN) THEN
6309            CLOSE c_get_set_of_books_id;
6310          END IF;
6311 
6312          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6313 
6314     WHEN OTHERS THEN
6315          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6316             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_info ',
6317                   'EXCEPTION :'||sqlerrm);
6318          END IF;
6319 
6320          IF (c_get_set_of_books_id%ISOPEN) THEN
6321            CLOSE c_get_set_of_books_id;
6322          END IF;
6323 
6324          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6325          -- unexpected error
6326          OKL_API.set_message(p_app_name  => g_app_name,
6327                          p_msg_name      => g_unexpected_error,
6328                          p_token1        => g_sqlcode_token,
6329                          p_token1_value  => sqlcode,
6330                          p_token2        => g_sqlerrm_token,
6331                          p_token2_value  => sqlerrm);
6332 
6333   END populate_tax_info;
6334 
6335 /*========================================================================
6336  | PRIVATE PROCEDURE populate_tax_codes
6337  |
6338  | DESCRIPTION
6339  |    This procedure derives the tax codes
6340  |
6341  | CALLED FROM
6342  |     process_tax_schedule_tax
6343  |
6344  |
6345  | CALLS PROCEDURES/FUNCTIONS
6346  |     get_ufc_code()
6347  |
6348  | PARAMETERS
6349  |
6350  | KNOWN ISSUES
6351  |
6352  | NOTES
6353  |
6354  |
6355  | MODIFICATION HISTORY
6356  | Date           Author        Description of Changes
6357  | 22-AUG-07      RRAVIKIR      Created
6358  *=======================================================================*/
6359  PROCEDURE populate_tax_codes(
6360     p_api_version                       IN  NUMBER,
6361     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6362     x_return_status                     OUT NOCOPY VARCHAR2,
6363     x_msg_count                         OUT NOCOPY NUMBER,
6364     x_msg_data                          OUT NOCOPY VARCHAR2,
6365     p_prch_opt_det                                      IN  VARCHAR2,
6366     p_fin_prod_id_det                           IN  NUMBER,
6367     p_int_disclosed_det                         IN  VARCHAR2,
6368     p_title_trnsfr_code                     IN  VARCHAR2,
6369     p_sale_lease_back_code                  IN  VARCHAR2,
6370     p_lease_purchased_code                  IN  VARCHAR2,
6371     p_equip_usage_code                      IN  VARCHAR2,
6372     p_vendor_site_id                        IN  NUMBER,
6373     p_age_of_equip                                      IN  NUMBER,
6374     p_source_trx_name               IN  VARCHAR2,
6375     p_book_class_code               IN  VARCHAR2,
6376     p_tax_code_cnt                  IN  NUMBER,
6377     p_sty_id                        IN  NUMBER,
6378     p_try_id                        IN  NUMBER,
6379     p_tax_country_code              IN  VARCHAR2,
6380     p_khr_id                        IN  NUMBER,
6381     p_kle_id                        IN  NUMBER,
6382     p_bill_to_party_site_id         IN  NUMBER,
6383     p_bill_to_location_id           IN  NUMBER,
6384     p_bill_to_party_id              IN  NUMBER,
6385     p_bill_to_cust_acct_site_id     IN  NUMBER,
6386     p_ship_to_party_site_id         IN  NUMBER DEFAULT NULL,
6387     p_ship_to_location_id           IN  NUMBER DEFAULT NULL,
6388     p_ship_to_party_id              IN  NUMBER DEFAULT NULL,
6389     p_ship_to_cust_acct_site_id     IN  NUMBER DEFAULT NULL,
6390     p_inventory_item_id             IN  NUMBER DEFAULT NULL,
6391     p_org_id                        IN  NUMBER,
6392     p_trx_date                      IN  DATE,
6393     px_tax_codes_tbl                IN  OUT NOCOPY tax_codes_tbl_type) IS
6394 
6395     lx_tbc_code                                         VARCHAR2(30);
6396     lx_ufc_code                     VARCHAR2(30);
6397     lx_pc_code                      VARCHAR2(30);
6398     lx_tax_classification_code      VARCHAR2(50);
6399     l_set_of_books_id               NUMBER;
6400     lx_tax_valid_code               VARCHAR2(1);
6401 
6402     CURSOR c_get_set_of_books_id(cp_org_id IN NUMBER) IS
6403     SELECT set_of_books_id
6404     FROM   ar_system_parameters_all
6405     WHERE  org_id = cp_org_id;
6406 
6407   BEGIN
6408 
6409     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6410         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes','Begin(+)');
6411     END IF;
6412 
6413     --Print Input Variables
6414     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6415         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6416               'p_init_msg_list :'||p_init_msg_list);
6417         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6418               'p_prch_opt_det :'||p_prch_opt_det);
6419         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6420               'p_prch_opt_det :'||p_prch_opt_det);
6421         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6422               'p_fin_prod_id_det :'||p_fin_prod_id_det);
6423         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6424               'p_int_disclosed_det :'||p_int_disclosed_det);
6425         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6426               'p_title_trnsfr_code :'||p_title_trnsfr_code);
6427         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6428               'p_sale_lease_back_code :'||p_sale_lease_back_code);
6429         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6430               'p_lease_purchased_code :'||p_lease_purchased_code);
6431                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6432               'p_equip_usage_code :'||p_equip_usage_code);
6433                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6434               'p_vendor_site_id :'||p_vendor_site_id);
6435         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6436               'p_age_of_equip :'||p_age_of_equip);
6437     END IF;
6438 
6439     -- Get TBC code
6440     get_tbc_code(p_api_version                   => p_api_version,
6441                            p_init_msg_list               => OKC_API.G_FALSE,
6442                            x_return_status               => x_return_status,
6443                            x_msg_count                   => x_msg_count,
6444                    x_msg_data                    => x_msg_data,
6445                    p_sty_id                                          => p_sty_id,  -- used if pymnts exist
6446                            p_try_id                                          => p_try_id,
6447                    p_book_class_code             => p_book_class_code,
6448                    p_tax_country_code            => p_tax_country_code,
6449                    x_tbc_code                    => lx_tbc_code);
6450 
6451     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6452       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6453     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6454       RAISE OKL_API.G_EXCEPTION_ERROR;
6455     END IF;
6456 
6457     -- Validate TBC Code
6458     IF lx_tbc_code IS NOT NULL THEN
6459       validate_tax_code(
6460           p_api_version     => p_api_version,
6461           p_init_msg_list   => p_init_msg_list,
6462           x_return_status   => x_return_status,
6463           x_msg_count       => x_msg_count,
6464           x_msg_data        => x_msg_data,
6465           p_trx_date        => p_trx_date,
6466           p_tbc_code        => lx_tbc_code,
6467           x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
6468 
6469       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6470         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6471       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6472         RAISE OKL_API.G_EXCEPTION_ERROR;
6473       END IF;
6474     END IF;
6475 
6476     -- Get the first level determinant for TBC basing on transaction, if the value is null
6477     IF ((lx_tbc_code IS NULL OR lx_tax_valid_code = 'F')AND p_source_trx_name = 'Tax Schedule') THEN
6478       lx_tbc_code := 'SALES_TRANSACTION';
6479     END IF;
6480 
6481     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6482       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6483                   'lx_tbc_code'||lx_tbc_code);
6484     END IF;
6485 
6486     -- Get PC code
6487     get_pc_code(p_api_version                   => p_api_version,
6488                           p_init_msg_list               => OKC_API.G_FALSE,
6489                           x_return_status               => x_return_status,
6490                           x_msg_count                   => x_msg_count,
6491                   x_msg_data                    => x_msg_data,
6492                   p_sty_id                                          => p_sty_id,
6493                   p_purchase_option_code        => p_prch_opt_det,
6494                   p_int_disclosed_code          => p_int_disclosed_det,
6495                   p_title_trnsfr_code           => p_title_trnsfr_code,
6496                   p_sale_lease_back_code        => p_sale_lease_back_code,
6497                   p_lease_purchased_code        => p_lease_purchased_code,
6498                   p_tax_country_code            => p_tax_country_code,
6499                   x_pc_code                     => lx_pc_code);
6500 
6501     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6502       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6503     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6504       RAISE OKL_API.G_EXCEPTION_ERROR;
6505     END IF;
6506 
6507     -- Validate PC Code
6508     IF lx_pc_code IS NOT NULL THEN
6509       validate_tax_code(
6510             p_api_version     => p_api_version,
6511             p_init_msg_list   => p_init_msg_list,
6512             x_return_status   => x_return_status,
6513             x_msg_count       => x_msg_count,
6514             x_msg_data        => x_msg_data,
6515             p_trx_date        => p_trx_date,
6516             p_pc_code         => lx_pc_code,
6517             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
6518 
6519       IF (lx_tax_valid_code = 'F') THEN
6520         lx_pc_code := null;
6521       END IF;
6522 
6523       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6524         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6525       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6526         RAISE OKL_API.G_EXCEPTION_ERROR;
6527       END IF;
6528     END IF;
6529 
6530     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6531       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6532                   'lx_pc_code'||lx_pc_code);
6533     END IF;
6534 
6535     -- Get UFC code
6536     get_ufc_code(p_api_version                   => p_api_version,
6537                            p_init_msg_list               => OKC_API.G_FALSE,
6538                            x_return_status               => x_return_status,
6539                            x_msg_count                   => x_msg_count,
6540                    x_msg_data                    => x_msg_data,
6541                            p_purchase_option             => p_prch_opt_det,
6542                                    p_fin_product_id                          => p_fin_prod_id_det,
6543                            p_try_id                                          => p_try_id,
6544                            p_sty_id                                          => p_sty_id,  -- used if pymnts exist
6545                            p_int_disclosed_code              => p_int_disclosed_det,
6546                            p_title_trnsfr_code               => p_title_trnsfr_code, -- asset level
6547                            p_sale_lease_back_code                => p_sale_lease_back_code, -- asset level
6548                            p_lease_purchased_code                => p_lease_purchased_code, -- asset level
6549                            p_equip_usage_code                    => p_equip_usage_code ,-- asset level
6550                            p_vendor_site_id                          => p_vendor_site_id, -- asset level
6551                            p_age_of_equip                                => p_age_of_equip, -- asset level
6552                    p_term_quote_type_code        => null,
6553                    p_term_quote_reason_code      => null,
6554                    p_tax_country_code            => p_tax_country_code,
6555                            x_ufc_code                    => lx_ufc_code);
6556 
6557     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6558       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6559     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6560       RAISE OKL_API.G_EXCEPTION_ERROR;
6561     END IF;
6562 
6563     -- Validate UFC Code
6564     IF lx_ufc_code IS NOT NULL THEN
6565       validate_tax_code(
6566             p_api_version     => p_api_version,
6567             p_init_msg_list   => p_init_msg_list,
6568             x_return_status   => x_return_status,
6569             x_msg_count       => x_msg_count,
6570             x_msg_data        => x_msg_data,
6571             p_trx_date        => p_trx_date,
6572             p_ufc_code        => lx_ufc_code,
6573             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
6574 
6575       IF (lx_tax_valid_code = 'F') THEN
6576         lx_ufc_code := null;
6577       END IF;
6578 
6579       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6580         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6581       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6582         RAISE OKL_API.G_EXCEPTION_ERROR;
6583       END IF;
6584     END IF;
6585 
6586     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6587       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6588                   'lx_ufc_code'||lx_ufc_code);
6589     END IF;
6590 
6591     -- Get Set of Books ID
6592     OPEN c_get_set_of_books_id(cp_org_id  =>  p_org_id);
6593     FETCH c_get_set_of_books_id INTO l_set_of_books_id;
6594     CLOSE c_get_set_of_books_id;
6595 
6596     -- Get the tax classification code
6597     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6598       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6599                   'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
6600     END IF;
6601 
6602     OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
6603                       x_return_status                 =>  x_return_status,
6604                       p_ship_to_site_use_id           =>  p_ship_to_cust_acct_site_id,
6605                       p_bill_to_site_use_id           =>  p_bill_to_cust_acct_site_id,
6606                       p_inventory_item_id             =>  p_inventory_item_id,
6607                       p_organization_id               =>  p_org_id,
6608                       p_set_of_books_id               =>  l_set_of_books_id,
6609                       p_trx_date                      =>  p_trx_date,
6610                       p_trx_type_id                   =>  null,
6611                       p_entity_code                   =>  G_AR_ENTITY_CODE,
6612                       p_event_class_code              =>  G_INVOICE_EVENT_CLASS_CODE,
6613                       p_application_id                =>  G_AR_APPLICATION_ID,
6614                       p_internal_organization_id      =>  p_org_id,
6615                       x_tax_classification_code       =>  lx_tax_classification_code );
6616 
6617     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6618       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes.',
6619                   'Return Status '|| x_return_status);
6620     END IF;
6621 
6622     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6623       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6624     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6625       RAISE OKL_API.G_EXCEPTION_ERROR;
6626     END IF;
6627 
6628     px_tax_codes_tbl(p_tax_code_cnt).khr_id          := p_khr_id;
6629     px_tax_codes_tbl(p_tax_code_cnt).kle_id          := p_kle_id;
6630     px_tax_codes_tbl(p_tax_code_cnt).sty_id          := p_sty_id;
6631     px_tax_codes_tbl(p_tax_code_cnt).tbc_code        := lx_tbc_code;
6632     px_tax_codes_tbl(p_tax_code_cnt).pc_code         := lx_pc_code;
6633     px_tax_codes_tbl(p_tax_code_cnt).ufc_code        := lx_ufc_code;
6634     px_tax_codes_tbl(p_tax_code_cnt).tax_class_code  := lx_tax_classification_code;
6635 
6636         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6637        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ','End(-)');
6638     END IF;
6639 
6640   EXCEPTION
6641     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6642       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6643         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ',
6644                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6645       END IF;
6646 
6647       IF (c_get_set_of_books_id%ISOPEN) THEN
6648         CLOSE c_get_set_of_books_id;
6649       END IF;
6650 
6651       x_return_status := OKL_API.G_RET_STS_ERROR;
6652 
6653     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6654       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6655         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ',
6656                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6657       END IF;
6658 
6659       IF (c_get_set_of_books_id%ISOPEN) THEN
6660         CLOSE c_get_set_of_books_id;
6661       END IF;
6662 
6663       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6664 
6665     WHEN OTHERS THEN
6666 
6667       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6668         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.populate_tax_codes ',
6669                   'EXCEPTION :'||sqlerrm);
6670       END IF;
6671 
6672       IF (c_get_set_of_books_id%ISOPEN) THEN
6673         CLOSE c_get_set_of_books_id;
6674       END IF;
6675 
6676       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6677 
6678       OKL_API.set_message(p_app_name  => g_app_name,
6679                          p_msg_name      => g_unexpected_error,
6680                          p_token1        => g_sqlcode_token,
6681                          p_token1_value  => sqlcode,
6682                          p_token2        => g_sqlerrm_token,
6683                          p_token2_value  => sqlerrm);
6684 
6685   END populate_tax_codes;
6686 
6687 /*========================================================================
6688  | PUBLIC PROCEDURE get_billing_stream_types
6689  |
6690  | DESCRIPTION
6691  |    This procedure is called by the Tax Calculation Setup Screen to derive
6692  |    List of Values for the screen LOV field "Stream Type For Billing"
6693  |
6694  | CALLED FROM
6695  |    Tax Calculation Setup Screen
6696  |
6697  | CALLS PROCEDURES/FUNCTIONS
6698  |
6699  |
6700  | PARAMETERS
6701  |  Input Parameters
6702  |      p_org_id                        -- org ID
6703  |      p_sty_code              -- Stream Type Code
6704  |  Output Parameters
6705  |      x_sty_id_tbl        -- Table of Billing Stream Types
6706  |
6707  | KNOWN ISSUES
6708  |
6709  | NOTES
6710  |
6711  |
6712  | MODIFICATION HISTORY
6713  | Date                  Author            Description of Changes
6714  | 08-APR-05            SECHAWLA           Created
6715  |
6716  *=======================================================================*/
6717 
6718 
6719   PROCEDURE get_billing_stream_types(
6720     p_api_version                       IN  NUMBER,
6721     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6722     x_return_status                     OUT NOCOPY VARCHAR2,
6723     x_msg_count                         OUT NOCOPY NUMBER,
6724     x_msg_data                          OUT NOCOPY VARCHAR2,
6725     p_org_id                                            IN  NUMBER,
6726     p_sty_code                                          IN  VARCHAR2,
6727         x_sty_id_tbl                                    OUT NOCOPY sty_id_tbl_type) IS
6728 
6729   -- get all the Billable, enabled streams of purpose FEE_PAYMENT
6730   CURSOR l_strmtype_csr(cp_sty_code IN VARCHAR2) IS
6731   SELECT a.id, a.code, a.stream_type_purpose, b.meaning
6732   FROM   okl_strm_type_b a, fnd_lookups b
6733   WHERE  a.stream_type_purpose = 'FEE_PAYMENT'
6734   AND    a.billable_yn = 'Y'
6735   AND    a.stream_type_purpose = b.lookup_code
6736   AND    b.lookup_type = 'OKL_STREAM_TYPE_PURPOSE'
6737   AND    b.enabled_flag = 'Y'
6738   AND    upper(a.code) like decode(cp_sty_code, NULL, a.code, '%', a.code, upper(cp_sty_code)||'%');
6739 
6740   -- get all the SGT sets for a given OU
6741   CURSOR l_stgentmptsets_csr(cp_org_id IN NUMBER) IS
6742   SELECT id
6743   FROM   okl_st_gen_tmpt_sets
6744   WHERE  org_id = cp_org_id
6745   --asawanka bug fix 4659674 start
6746   AND    product_type = 'FINANCIAL';
6747   --asawanka bug fix 4659674 end
6748 
6749   -- Get all SGTs for a given SGT Set
6750   CURSOR l_stgentemplates_csr(cp_gts_id IN NUMBER) IS
6751   SELECT id
6752   FROM   okl_st_gen_templates
6753   WHERE  gts_id = cp_gts_id
6754   AND    tmpt_status = G_ACTIVE_STATUS;
6755 
6756   -- Get all the SGT Lines for a given SGT
6757   CURSOR l_stgentmptlns_csr(cp_gtt_id IN NUMBER) IS
6758   SELECT primary_sty_id
6759   FROM   okl_st_gen_tmpt_lns
6760   WHERE  gtt_id = cp_gtt_id
6761   AND    primary_yn = 'Y';
6762 
6763   l_sty_id_tbl                          sty_id_tbl_type;
6764 
6765   l_stream_type_found           VARCHAR2(1);
6766   sty_id_tbl_cnt                        NUMBER := 0;
6767   l_sgt_set_found                       VARCHAR2(1) := 'N';
6768   l_strm_type_cnt                       NUMBER := 0;
6769   l_any_active_sgt_found        VARCHAR2(1);
6770   l_active_sgt_found        VARCHAR2(1);
6771   l_id                                          NUMBER;
6772 
6773   BEGIN
6774 
6775    IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6776         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types','Begin(+)');
6777    END IF;
6778 
6779    --Print Input Variables
6780    IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6781          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6782               'p_init_msg_list :'||p_init_msg_list);
6783          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6784               'p_org_id :'||p_org_id);
6785          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6786               'p_sty_code :'||p_sty_code);
6787    END IF;
6788 
6789    x_return_status := OKL_API.G_RET_STS_SUCCESS;
6790 
6791    -- Check if any stream generation template set exists for this OU
6792    OPEN  l_stgentmptsets_csr(p_org_id);
6793    FETCH l_stgentmptsets_csr INTO l_id;
6794    IF l_stgentmptsets_csr%FOUND THEN
6795                 l_sgt_set_found := 'Y';
6796    END IF;
6797    CLOSE l_stgentmptsets_csr;
6798 
6799    IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6800           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6801               'l_sgt_set_found'||l_sgt_set_found);
6802    END IF;
6803 
6804    l_any_active_sgt_found := 'N'; -- Flag to indicate if any ACTIVE SGT exists across all SGT Sets
6805 
6806    FOR l_strmtype_rec IN l_strmtype_csr(p_sty_code) LOOP -- All/User selected billable stream types of purpose 'FEE_PAYMENT'
6807         l_strm_type_cnt := l_strm_type_cnt + 1;
6808 
6809         IF l_sgt_set_found = 'Y' THEN -- If there are any SGT sets for this OU
6810 
6811                 l_stream_type_found := 'N';
6812 
6813                 IF l_strm_type_cnt = 1 OR l_any_active_sgt_found = 'Y' THEN
6814 
6815 
6816 
6817                     -- When the following piece of code is executed for the first stream type, it sets the flag
6818                                 -- l_any_active_sgt_found (along with other processing logic) to 'Y' if any ACTIVE SGT
6819                                 -- is found across all SGT sets. If there are no ACTIVE SGTs across all the SGT sets, then
6820                                 -- this piece of code is not executed for the remaining stream types
6821                                 FOR l_stgentmptsets_rec IN l_stgentmptsets_csr(p_org_id) LOOP -- all SGT sets for a given org
6822 
6823 
6824                                 l_active_sgt_found := 'N';
6825                                 FOR l_stgentemplates_rec IN l_stgentemplates_csr(l_stgentmptsets_rec.id) LOOP -- all ACTIVE versions of a given SGT
6826                                         l_active_sgt_found := 'Y';
6827                                         l_any_active_sgt_found := 'Y';
6828                                         FOR l_stgentmptlns_rec IN l_stgentmptlns_csr(l_stgentemplates_rec.id) LOOP -- all lines (stream types) in a given version
6829                                         IF l_stgentmptlns_rec.primary_sty_id = l_strmtype_rec.id THEN
6830                                                 l_stream_type_found := 'Y';
6831                                                 EXIT;
6832                                         ELSE
6833                                                 l_stream_type_found := 'N';
6834                                         END IF;
6835                                         END LOOP;
6836                                         --IF l_stream_type_found = 'N' THEN
6837 					--dcshanmu bug 6667098 start
6838 					IF l_stream_type_found = 'Y' THEN
6839 					--dcshanmu bug 6667098 end
6840                                                 EXIT;
6841                                         END IF;
6842                                 END LOOP;
6843                                 --IF l_active_sgt_found = 'Y' AND l_stream_type_found = 'N' THEN
6844 				--dcshanmu bug 6667098 start
6845 				IF l_active_sgt_found = 'Y' AND l_stream_type_found = 'Y' THEN
6846 				--dcshanmu bug 6667098 end
6847                                         EXIT;
6848                                 END IF;
6849                                 END LOOP;
6850 
6851                 END IF; -- IF l_strm_type_cnt = 1 OR l_any_active_sgt_found = 'Y' THEN
6852 
6853 
6854             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6855                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6856                   'l_any_active_sgt_found'||l_any_active_sgt_found);
6857                     END IF;
6858 
6859                     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6860                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6861                   'l_stream_type_found'||l_stream_type_found);
6862                     END IF;
6863 
6864                 -- If there are no ACTIVE SGTs across all SGT sets OR stream type found under ACTIVE SGTs,
6865                 -- then consider stream type for the LOV
6866                 IF l_any_active_sgt_found = 'N' OR l_stream_type_found = 'Y' THEN
6867                         sty_id_tbl_cnt := sty_id_tbl_cnt + 1;
6868 
6869                                 l_sty_id_tbl(sty_id_tbl_cnt).sty_id  := l_strmtype_rec.id;
6870                                 l_sty_id_tbl(sty_id_tbl_cnt).sty_code := l_strmtype_rec.code;
6871                                 l_sty_id_tbl(sty_id_tbl_cnt).sty_purpose := l_strmtype_rec.meaning;
6872 
6873                         END IF;
6874 
6875 
6876                 ELSE -- there are no SGT sets existing for this OU, so consider stream type for the LOV
6877 
6878             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6879                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types.',
6880                   'There are no SGT sets existing for this OU');
6881                     END IF;
6882 
6883                 sty_id_tbl_cnt := sty_id_tbl_cnt + 1;
6884 
6885                         l_sty_id_tbl(sty_id_tbl_cnt).sty_id  := l_strmtype_rec.id;
6886                         l_sty_id_tbl(sty_id_tbl_cnt).sty_code := l_strmtype_rec.code;
6887                         l_sty_id_tbl(sty_id_tbl_cnt).sty_purpose := l_strmtype_rec.meaning;
6888 
6889                 END IF;
6890         END LOOP;
6891 
6892         x_sty_id_tbl := l_sty_id_tbl;
6893 
6894 
6895     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6896        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ','End(-)');
6897     END IF;
6898 
6899 
6900   EXCEPTION
6901     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6902          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6903                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ',
6904                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6905          END IF;
6906 
6907 
6908                  IF l_strmtype_csr%ISOPEN THEN
6909                     CLOSE l_strmtype_csr;
6910                  END IF;
6911 
6912                  IF l_stgentmptsets_csr%ISOPEN THEN
6913                     CLOSE l_stgentmptsets_csr;
6914                  END IF;
6915 
6916                  IF l_stgentemplates_csr%ISOPEN THEN
6917                     CLOSE l_stgentemplates_csr;
6918                  END IF;
6919 
6920                  IF l_stgentmptlns_csr%ISOPEN THEN
6921                     CLOSE l_stgentmptlns_csr;
6922                  END IF;
6923 
6924          x_return_status := OKL_API.G_RET_STS_ERROR;
6925     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6926          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6927                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ',
6928                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6929          END IF;
6930 
6931          IF l_strmtype_csr%ISOPEN THEN
6932                     CLOSE l_strmtype_csr;
6933                  END IF;
6934 
6935                  IF l_stgentmptsets_csr%ISOPEN THEN
6936                     CLOSE l_stgentmptsets_csr;
6937                  END IF;
6938 
6939                  IF l_stgentemplates_csr%ISOPEN THEN
6940                     CLOSE l_stgentemplates_csr;
6941                  END IF;
6942 
6943                  IF l_stgentmptlns_csr%ISOPEN THEN
6944                     CLOSE l_stgentmptlns_csr;
6945                  END IF;
6946 
6947          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6948 
6949     WHEN OTHERS THEN
6950          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
6951             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_billing_stream_types ',
6952                   'EXCEPTION :'||sqlerrm);
6953          END IF;
6954 
6955          IF l_strmtype_csr%ISOPEN THEN
6956                     CLOSE l_strmtype_csr;
6957                  END IF;
6958 
6959                  IF l_stgentmptsets_csr%ISOPEN THEN
6960                     CLOSE l_stgentmptsets_csr;
6961                  END IF;
6962 
6963                  IF l_stgentemplates_csr%ISOPEN THEN
6964                     CLOSE l_stgentemplates_csr;
6965                  END IF;
6966 
6967                  IF l_stgentmptlns_csr%ISOPEN THEN
6968                     CLOSE l_stgentmptlns_csr;
6969                  END IF;
6970 
6971          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6972          -- unexpected error
6973          OKL_API.set_message(p_app_name      => g_app_name,
6974                          p_msg_name      => g_unexpected_error,
6975                          p_token1        => g_sqlcode_token,
6976                          p_token1_value  => sqlcode,
6977                          p_token2        => g_sqlerrm_token,
6978                          p_token2_value  => sqlerrm);
6979 
6980   END get_billing_stream_types;
6981 
6982 /*========================================================================
6983  | PRIVATE PROCEDURE get_k_hdr_tax_params
6984  |
6985  | DESCRIPTION
6986  |    This procedure is called by other procedures in this API to derive
6987  |    contract level tax determinats
6988  |
6989  | CALLED FROM
6990  |
6991  |
6992  | CALLS PROCEDURES/FUNCTIONS
6993  |     okl_am_util_pvt.get_rule_record
6994  |
6995  |
6996  | PARAMETERS
6997  |  Input parameters
6998  |      p_khr_id                                -- Contract ID
6999  |      p_source_trx_name           -- Source Transaction
7000  |      p_source_table                          -- Source Trx Table
7001  |      p_qtp_code                  -- Quote Type (Termination / Repurchase)
7002  |      p_early_term_yn                         -- Early termination yn
7003  |      p_purpose_code              -- Stream Type purpose
7004  |  Output Parameters
7005  |      x_cust_acct_id                          -- Customer A/c ID
7006  |      x_bill_to_siteuseid             -- Bill To Site Use ID
7007  |      x_currency_code                         -- Curency Code
7008  |      x_cust_trx_type_id              -- Customer Trx Type ID
7009  |      x_precision                                     -- Currency Precision
7010  |      x_minimum_accountable_unit  -- Currncy Min accountable unit
7011  |              x_prch_opt_det                          -- Purchase Option
7012  |              x_fin_prod_id_det                       -- Financial Product ID
7013  |              x_int_disclosed_det                     -- Interest Disclosed
7014  |
7015  | KNOWN ISSUES
7016  |
7017  | NOTES
7018  |
7019  |
7020  | MODIFICATION HISTORY
7021  | Date            Author         Description of Changes
7022  | 08-APR-05       SECHAWLA        Created
7023  | 23-NOV-05       SECHAWLA        4742539 System picking wrong TBC
7024  |
7025  *=======================================================================*/
7026 
7027   PROCEDURE get_k_hdr_tax_params(
7028         p_api_version                   IN  NUMBER,
7029     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7030     x_return_status                     OUT NOCOPY VARCHAR2,
7031     x_msg_count                         OUT NOCOPY NUMBER,
7032     x_msg_data                          OUT NOCOPY VARCHAR2,
7033     p_khr_id                        IN  NUMBER,
7034     p_source_trx_name               IN  VARCHAR2,
7035     p_source_table                                      IN  VARCHAR2,
7036     p_qtp_code                      IN  VARCHAR2 DEFAULT NULL, -- Used only for termination/repurchase quote
7037     p_early_term_yn                                 IN  VARCHAR2 DEFAULT NULL, -- Used only for termination/repurchase quote
7038     p_purpose_code                  IN  VARCHAR2 DEFAULT NULL, -- Used only in process_invoice_tax to identify remk,asset repair,vendor cure invoices
7039     x_cust_acct_id                                      OUT NOCOPY  NUMBER,
7040         x_bill_to_siteuseid             OUT NOCOPY  NUMBER,
7041         x_currency_code                                 OUT NOCOPY  VARCHAR2,
7042     x_cust_trx_type_id              OUT NOCOPY  NUMBER,
7043     x_precision                                     OUT NOCOPY  NUMBER,
7044         x_minimum_accountable_unit      OUT NOCOPY  NUMBER,
7045         x_prch_opt_det                              OUT NOCOPY  VARCHAR2,
7046         x_fin_prod_id_det                           OUT NOCOPY  NUMBER,
7047         x_int_disclosed_det                             OUT NOCOPY  VARCHAR2,
7048     x_org_id                        OUT NOCOPY  NUMBER,
7049     x_book_class_code               OUT NOCOPY  VARCHAR2,
7050     x_bill_to_party_site_id         OUT NOCOPY  NUMBER,
7051     x_bill_to_party_id              OUT NOCOPY  NUMBER,
7052     x_bill_to_location_id           OUT NOCOPY  NUMBER,
7053     x_currency_conversion_type      OUT NOCOPY  VARCHAR2,
7054     x_currency_conversion_rate      OUT NOCOPY  NUMBER,
7055     x_currency_conversion_date      OUT NOCOPY  DATE,
7056     x_contract_start_date           OUT NOCOPY  DATE ) IS
7057 
7058     --Cursor to get the customer_account_id for the customer
7059     CURSOR c_get_contractinfo_csr(cp_khr_id IN NUMBER) IS
7060     SELECT cust_acct_id, bill_to_site_use_id, currency_code, org_id,
7061            conversion_type, conversion_rate, conversion_rate_date, start_date
7062     FROM   okc_k_headers_b
7063     WHERE  id = cp_khr_id;
7064 
7065     --get currency attributes
7066     CURSOR l_fndcurrency_csr(cp_currency_code IN VARCHAR2) IS
7067     SELECT precision, minimum_accountable_unit
7068     FROM   fnd_currencies
7069     WHERE  currency_code = cp_currency_code
7070         AND    enabled_flag = 'Y'
7071     AND    NVL(start_date_active, sysdate) <= sysdate
7072     AND    NVL(end_date_active, sysdate) >= sysdate;
7073 
7074     --Get the AR customer transaction type used by OKL
7075     CURSOR l_racusttrxtypes_csr IS
7076     SELECT cust_trx_type_id
7077         FROM   ra_cust_trx_types_all
7078         WHERE  name = 'Invoice-OKL';
7079 
7080         -- get the financial product
7081     CURSOR l_oklkheaders_csr(cp_khr_id IN NUMBER) IS
7082     SELECT pdt_id, deal_type
7083     FROM   okl_k_headers
7084     WHERE  id = cp_khr_id;
7085 
7086     l_cust_trx_type_id                          NUMBER;
7087 
7088     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7089         l_precision                             NUMBER;
7090         l_minimum_accountable_unit              NUMBER;
7091 
7092         l_rulv_rec                      okl_rule_pub.rulv_rec_type;
7093         l_rulv_empty_rec                                okl_rule_pub.rulv_rec_type;
7094 
7095         l_prch_opt_det                              VARCHAR2(450);
7096         l_fin_prod_id_det                           NUMBER;
7097         l_int_disclosed_det                         VARCHAR2(30);
7098         l_purpose_code                                  VARCHAR2(30);
7099     l_book_class_code               VARCHAR2(30);
7100 
7101     lx_bill_to_party_site_id        NUMBER;
7102     lx_bill_to_location_id          NUMBER;
7103     lx_bill_to_party_id             NUMBER;
7104     lx_bill_to_siteuseid            NUMBER;
7105     lx_ship_to_party_site_id        NUMBER;
7106     lx_ship_to_location_id          NUMBER;
7107     lx_ship_to_party_id             NUMBER;
7108     lx_ship_to_siteuseid                NUMBER;
7109 
7110     l_get_contractinfo_rec            c_get_contractinfo_csr%ROWTYPE;
7111 
7112   BEGIN
7113 
7114     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7115         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params','Begin(+)');
7116     END IF;
7117 
7118     --Print Input Variables
7119     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7120          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7121               'p_init_msg_list :'||p_init_msg_list);
7122          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7123               'p_khr_id :'||p_khr_id);
7124          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7125               'p_source_trx_name :'||p_source_trx_name);
7126          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7127               'p_source_table :'||p_source_table);
7128          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7129               'p_qtp_code :'||p_qtp_code);
7130          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7131               'p_early_term_yn :'||p_early_term_yn);
7132          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7133               'p_purpose_code :'||p_purpose_code);
7134     END IF;
7135 
7136     OPEN  c_get_contractinfo_csr(p_khr_id);
7137     FETCH c_get_contractinfo_csr INTO l_get_contractinfo_rec;
7138     IF c_get_contractinfo_csr%NOTFOUND THEN
7139         -- KHR ID is invalid
7140         OKC_API.set_message( p_app_name      => 'OKC',
7141                              p_msg_name      => G_INVALID_VALUE,
7142                              p_token1        => G_COL_NAME_TOKEN,
7143                              p_token1_value  => 'KHR_ID');
7144         RAISE OKL_API.G_EXCEPTION_ERROR;
7145         END IF;
7146         CLOSE c_get_contractinfo_csr;
7147 
7148         IF l_get_contractinfo_rec.currency_code IS NULL THEN
7149            OKC_API.set_message( p_app_name      => 'OKC',
7150                              p_msg_name      => G_REQUIRED_VALUE,
7151                              p_token1        => G_COL_NAME_TOKEN,
7152                              p_token1_value  => 'CURRENCY_CODE');
7153 
7154         RAISE OKL_API.G_EXCEPTION_ERROR;
7155         END IF;
7156 
7157         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7158                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7159                   'l_get_custacctid_rec.cust_acct_id'||l_get_contractinfo_rec.cust_acct_id);
7160 
7161               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7162                   'l_get_custacctid_rec.bill_to_site_use_id'||l_get_contractinfo_rec.bill_to_site_use_id);
7163 
7164               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7165                   'l_get_custacctid_rec.currency_code'||l_get_contractinfo_rec.currency_code);
7166     END IF;
7167 
7168 
7169         OPEN  l_fndcurrency_csr(l_get_contractinfo_rec.currency_code);
7170     FETCH l_fndcurrency_csr INTO l_precision, l_minimum_accountable_unit;  -- l_minimum_accountable_unit is optional in fnd_currencies
7171                                                                                                                                                                    -- but mandatory for tax team
7172                                                                                                                                                                    -- check with Nilesh
7173     IF l_fndcurrency_csr%NOTFOUND THEN
7174        -- currency code is invalid
7175        OKC_API.set_message( p_app_name      => 'OKC',
7176                             p_msg_name      => G_INVALID_VALUE,
7177                             p_token1        => G_COL_NAME_TOKEN,
7178                             p_token1_value  => 'CURRENCY_CODE');
7179 
7180        RAISE OKL_API.G_EXCEPTION_ERROR;
7181     END IF;
7182     CLOSE l_fndcurrency_csr;
7183 
7184     -- get the AR cust trx type ID
7185     OPEN  l_racusttrxtypes_csr;
7186     FETCH l_racusttrxtypes_csr INTO l_cust_trx_type_id;
7187     IF l_racusttrxtypes_csr%NOTFOUND THEN
7188        -- cust trx tyep id is required
7189        OKC_API.set_message( p_app_name      => 'OKC',
7190                             p_msg_name      => G_REQUIRED_VALUE,
7191                             p_token1        => G_COL_NAME_TOKEN,
7192                             p_token1_value  => 'CUST_TRX_TYPE_ID');
7193 
7194        RAISE OKL_API.G_EXCEPTION_ERROR;
7195     END IF;
7196     CLOSE l_racusttrxtypes_csr;
7197 
7198 
7199 
7200     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7201         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7202                   'l_precision'||l_precision);
7203 
7204         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7205                   'l_minimum_accountable_unit'||l_minimum_accountable_unit);
7206 
7207         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7208                   'l_cust_trx_type_id'||l_cust_trx_type_id);
7209 
7210 
7211     END IF;
7212      ----------- Identify the determinants : TBC and directly mapped  START ---------------------
7213 
7214      -- Financial Product - K level
7215          OPEN  l_oklkheaders_csr(p_khr_id);
7216      FETCH l_oklkheaders_csr INTO l_fin_prod_id_det, l_book_class_code;
7217      CLOSE l_oklkheaders_csr;
7218 
7219      IF l_fin_prod_id_det IS NULL THEN -- financial product is mandatory on the contract
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  => 'Financial Product');
7224        RAISE OKL_API.G_EXCEPTION_ERROR;
7225      END IF;
7226 
7227          IF p_source_trx_name = 'Estimated Billing' AND p_source_table = 'OKL_TRX_QUOTES_B' THEN -- Termination/Repurchase quote creation/updation
7228             IF p_qtp_code LIKE 'TER%' THEN
7229                IF p_early_term_yn = 'Y' THEN
7230                     -- get Early term purchase option - K level
7231 
7232                         l_rulv_rec := l_rulv_empty_rec ;
7233                         okl_am_util_pvt.get_rule_record(
7234                                                       p_rgd_code         => 'AMTEOC'
7235                                      ,p_rdf_code         => 'AMBPOC'
7236                                      ,p_chr_id           => p_khr_id
7237                                      ,p_cle_id           => NULL
7238                                      ,p_message_yn       => FALSE
7239                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7240                                      ,x_return_status    => x_return_status
7241                                      ,x_msg_count        => x_msg_count
7242                                      ,x_msg_data         => x_msg_data);
7243 
7244                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7245                                 -- Rule instance is found
7246                                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7247 
7248                                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7249 
7250                                 END IF;
7251 
7252 
7253                         END IF;
7254                         ---
7255                ELSE
7256                         -- EOT Purchase Option - K level
7257                         l_rulv_rec := l_rulv_empty_rec ;
7258                         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTFOC'
7259                                      ,p_rdf_code         => 'AMBPOC'
7260                                      ,p_chr_id           => p_khr_id
7261                                      ,p_cle_id           => NULL
7262                                      ,p_message_yn       => FALSE
7263                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7264                                      ,x_return_status    => x_return_status
7265                                      ,x_msg_count        => x_msg_count
7266                                      ,x_msg_data         => x_msg_data);
7267 
7268                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7269                                 -- Rule instance is found
7270                                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7271 
7272                                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7273 
7274                                 END IF;
7275 
7276                         END IF;
7277 
7278         -----
7279                END IF;
7280 
7281            -- Interest Disclosed - K Level
7282            l_rulv_rec := l_rulv_empty_rec ;
7283            okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7284                                      ,p_rdf_code         => 'LASTCL'
7285                                      ,p_chr_id           => p_khr_id
7286                                      ,p_cle_id           => NULL
7287                                      ,p_message_yn       => FALSE
7288                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7289                                      ,x_return_status    => x_return_status
7290                                      ,x_msg_count        => x_msg_count
7291                                      ,x_msg_data         => x_msg_data);
7292 
7293            IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7294                         -- Rule instance is found
7295                         IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7296 
7297                                 l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7298                         ELSE -- interest diclosed is optional on the contract
7299 
7300                                 l_int_disclosed_det  := 'N';
7301                         END IF;
7302 
7303                    ELSE -- interest diclosed is optional on the contract
7304 
7305                         l_int_disclosed_det  := 'N';
7306                         x_return_status := OKL_API.G_RET_STS_SUCCESS;
7307                    END IF;
7308                         ----
7309 
7310             ELSE -- repurchase quote creation / updation
7311                l_prch_opt_det := NULL; -- Purchase option is not applicable for Repurcsae Quote creation, updation
7312                l_fin_prod_id_det := NULL; -- financial product is NA for repurchase quote creation, updation
7313                l_int_disclosed_det  := 'N';
7314             END IF;
7315          ELSIF (  (p_source_trx_name = 'Billing' OR p_source_trx_name = 'Credit Memo')
7316                    AND p_source_table = 'OKL_TXD_AR_LN_DTLS_B'
7317                ) THEN -- Billing from other transactions (not stream biling)
7318                IF p_qtp_code LIKE 'TER%' THEN  -- termination quote billing
7319                         IF p_early_term_yn = 'Y' THEN
7320                                 -- get Early term purchase option
7321                                 l_rulv_rec := l_rulv_empty_rec ;
7322                                 okl_am_util_pvt.get_rule_record(
7323                                                       p_rgd_code         => 'AMTEOC'
7324                                      ,p_rdf_code         => 'AMBPOC'
7325                                      ,p_chr_id           => p_khr_id
7326                                      ,p_cle_id           => NULL
7327                                      ,p_message_yn       => FALSE
7328                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7329                                      ,x_return_status    => x_return_status
7330                                      ,x_msg_count        => x_msg_count
7331                                      ,x_msg_data         => x_msg_data);
7332 
7333                                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7334                                         -- Rule instance is found
7335                                         IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7336 
7337                                         l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7338 
7339                                         END IF;
7340 
7341                                 END IF;
7342                                 ---
7343                         ELSE
7344                                 -- get EOT purchase option
7345                                 l_rulv_rec := l_rulv_empty_rec ;
7346                                 okl_am_util_pvt.get_rule_record(
7347                                                       p_rgd_code         => 'AMTFOC'
7348                                      ,p_rdf_code         => 'AMBPOC'
7349                                      ,p_chr_id           => p_khr_id
7350                                      ,p_cle_id           => NULL
7351                                      ,p_message_yn       => FALSE
7352                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7353                                      ,x_return_status    => x_return_status
7354                                      ,x_msg_count        => x_msg_count
7355                                      ,x_msg_data         => x_msg_data);
7356 
7357                                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7358                                         -- Rule instance is found
7359                                         IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7360 
7361                                         l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7362 
7363                                         END IF;
7364 
7365                                 END IF;
7366                                 ---
7367                         END IF;
7368 
7369                         -- Interest Disclosed - K Level
7370                         l_rulv_rec := l_rulv_empty_rec ;
7371                         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7372                                      ,p_rdf_code         => 'LASTCL'
7373                                      ,p_chr_id           => p_khr_id
7374                                      ,p_cle_id           => NULL
7375                                      ,p_message_yn       => FALSE
7376                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7377                                      ,x_return_status    => x_return_status
7378                                      ,x_msg_count        => x_msg_count
7379                                      ,x_msg_data         => x_msg_data);
7380 
7381                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7382                                 -- Rule instance is found
7383                                 IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7384 
7385                                         l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7386                                 ELSE -- interest diclosed is optional on the contract
7387 
7388                                         l_int_disclosed_det  := 'N';
7389                                 END IF;
7390 
7391                                 ELSE -- interest diclosed is optional on the contract
7392 
7393                                 l_int_disclosed_det  := 'N';
7394                                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7395                                 END IF;
7396                                 ----
7397                ELSIF p_qtp_code LIKE 'REP%' OR p_purpose_code IN ('AMBSPR','CURE','REPAIR_CHARGE') THEN
7398                          -- Repurchase quote billing  OR  Remk,asset repair or vendor cure billing
7399 
7400                          l_prch_opt_det := NULL; -- Purchase option is not applicable for Repurcsae Quote billing
7401                          l_fin_prod_id_det := NULL; -- Fin product is NA for repurchase quote billing
7402                          l_int_disclosed_det  := 'N';
7403 
7404                -- SECHAWLA 23-NOV-05 4742539 : added the following piece of code : begin
7405                ELSE
7406                      -- EOT Purchase Option - K level
7407                          l_rulv_rec := l_rulv_empty_rec ;
7408                          okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTFOC'
7409                                      ,p_rdf_code         => 'AMBPOC'
7410                                      ,p_chr_id           => p_khr_id
7411                                      ,p_cle_id           => NULL
7412                                      ,p_message_yn       => FALSE
7413                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7414                                      ,x_return_status    => x_return_status
7415                                      ,x_msg_count        => x_msg_count
7416                                      ,x_msg_data         => x_msg_data);
7417 
7418                          IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7419                                 -- Rule instance is found
7420                                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7421 
7422                                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7423 
7424                                 END IF;
7425 
7426                         END IF;
7427 
7428                         -- Interest Disclosed - K Level
7429                         l_rulv_rec := l_rulv_empty_rec ;
7430                         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7431                                      ,p_rdf_code         => 'LASTCL'
7432                                      ,p_chr_id           => p_khr_id
7433                                      ,p_cle_id           => NULL
7434                                      ,p_message_yn       => FALSE
7435                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7436                                      ,x_return_status    => x_return_status
7437                                      ,x_msg_count        => x_msg_count
7438                                      ,x_msg_data         => x_msg_data);
7439 
7440                         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7441                                 -- Rule instance is found
7442                                 IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7443 
7444                                         l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7445                                 ELSE -- interest diclosed is optional on the contract
7446 
7447                                         l_int_disclosed_det  := 'N';
7448                                 END IF;
7449 
7450                                 ELSE -- interest diclosed is optional on the contract
7451 
7452                                 l_int_disclosed_det  := 'N';
7453                                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7454                                 END IF;
7455                         -- SECHAWLA 23-NOV-05 4742539 : end
7456 
7457                END IF;
7458 
7459 
7460          ELSE  -- for all other cases, use EOT purchase option
7461 
7462         -- EOT Purchase Option - K level
7463         l_rulv_rec := l_rulv_empty_rec ;
7464         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTFOC'
7465                                      ,p_rdf_code         => 'AMBPOC'
7466                                      ,p_chr_id           => p_khr_id
7467                                      ,p_cle_id           => NULL
7468                                      ,p_message_yn       => FALSE
7469                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7470                                      ,x_return_status    => x_return_status
7471                                      ,x_msg_count        => x_msg_count
7472                                      ,x_msg_data         => x_msg_data);
7473 
7474         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7475                 -- Rule instance is found
7476                 IF (l_rulv_rec.rule_information11 IS NOT NULL) AND (l_rulv_rec.rule_information11 <> OKL_API.G_MISS_CHAR) THEN
7477 
7478                 l_prch_opt_det  :=  l_rulv_rec.rule_information11;  -- It can have a value 'NONE' which is OK
7479 
7480                 END IF;
7481 
7482         END IF;
7483 
7484         -- Interest Disclosed - K Level
7485         l_rulv_rec := l_rulv_empty_rec ;
7486         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAHDTX'
7487                                      ,p_rdf_code         => 'LASTCL'
7488                                      ,p_chr_id           => p_khr_id
7489                                      ,p_cle_id           => NULL
7490                                      ,p_message_yn       => FALSE
7491                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7492                                      ,x_return_status    => x_return_status
7493                                      ,x_msg_count        => x_msg_count
7494                                      ,x_msg_data         => x_msg_data);
7495 
7496         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7497                 -- Rule instance is found
7498                 IF (l_rulv_rec.rule_information2 IS NOT NULL) AND (l_rulv_rec.rule_information2 <> OKL_API.G_MISS_CHAR) THEN
7499 
7500                         l_int_disclosed_det  :=  l_rulv_rec.rule_information2;
7501                 ELSE -- interest diclosed is optional on the contract
7502 
7503                         l_int_disclosed_det  := 'N';
7504                 END IF;
7505 
7506                 ELSE -- interest diclosed is optional on the contract
7507 
7508                 l_int_disclosed_det  := 'N';
7509                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7510                 END IF;
7511     END IF;
7512 
7513 
7514         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7515                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7516                   'l_prch_opt_det'||l_prch_opt_det);
7517     END IF;
7518 
7519 
7520     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7521                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7522                   'l_int_disclosed_det'||l_int_disclosed_det);
7523     END IF;
7524 
7525     -- get the 'bill_to' identifiers -- start
7526     IF p_source_trx_name NOT IN ('Funding', 'Disbursement', 'Debit Memo') THEN
7527       get_location_party_ids( p_api_version                  => p_api_version,
7528                                                   p_init_msg_list                => p_init_msg_list,
7529                                                   x_return_status                => x_return_status,
7530                                                   x_msg_count                    => x_msg_count,
7531                                                   x_msg_data                     => x_msg_data,
7532                                                   p_cust_acct_id                 => l_get_contractinfo_rec.cust_acct_id,
7533                                                   p_fin_asset_id                 => null,
7534                               p_khr_id                       => p_khr_id,
7535                               x_bill_to_party_site_id        => lx_bill_to_party_site_id,
7536                               x_bill_to_location_id          => lx_bill_to_location_id,
7537                               x_bill_to_party_id                 => lx_bill_to_party_id,
7538                               x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
7539                               x_ship_to_party_site_id        => lx_ship_to_party_site_id,
7540                               x_ship_to_location_id          => lx_ship_to_location_id,
7541                               x_ship_to_party_id             => lx_ship_to_party_id,
7542                               x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
7543     END IF;
7544 
7545     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7546       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7547     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7548       RAISE OKL_API.G_EXCEPTION_ERROR;
7549     END IF;
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                   'lx_bill_to_party_site_id'||lx_bill_to_party_site_id);
7554     END IF;
7555 
7556         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7557                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7558                   'lx_bill_to_location_id'||lx_bill_to_location_id);
7559     END IF;
7560 
7561         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7562                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params.',
7563                   'lx_bill_to_party_id'||lx_bill_to_party_id);
7564     END IF;
7565      -- get the 'bill_to' identifiers -- end
7566 
7567     x_cust_acct_id                                      := l_get_contractinfo_rec.cust_acct_id;
7568     x_bill_to_siteuseid             := l_get_contractinfo_rec.bill_to_site_use_id;
7569         x_currency_code                                 := l_get_contractinfo_rec.currency_code;
7570     x_org_id                        := l_get_contractinfo_rec.org_id;
7571     x_currency_conversion_type      := l_get_contractinfo_rec.conversion_type;
7572     x_currency_conversion_rate      := l_get_contractinfo_rec.conversion_rate;
7573     x_currency_conversion_date      := l_get_contractinfo_rec.conversion_rate_date;
7574     x_contract_start_date           := l_get_contractinfo_rec.start_date;
7575 
7576     x_bill_to_party_site_id         := lx_bill_to_party_site_id;
7577     x_bill_to_party_id              := lx_bill_to_party_id;
7578     x_bill_to_location_id           := lx_bill_to_location_id;
7579 
7580     x_book_class_code               := l_book_class_code;
7581     x_cust_trx_type_id              := l_cust_trx_type_id;
7582     x_precision                                     := l_precision;
7583         x_minimum_accountable_unit      := l_minimum_accountable_unit;
7584         x_prch_opt_det                              := l_prch_opt_det;
7585         x_fin_prod_id_det                           := l_fin_prod_id_det;
7586         x_int_disclosed_det             := l_int_disclosed_det;
7587 
7588 
7589     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7590        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ','End(-)');
7591     END IF;
7592 
7593   EXCEPTION
7594     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7595          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7596                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ',
7597                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
7598          END IF;
7599 
7600          IF c_get_contractinfo_csr%ISOPEN THEN
7601             CLOSE c_get_contractinfo_csr;
7602          END IF;
7603 
7604                  IF l_fndcurrency_csr%ISOPEN THEN
7605                     CLOSE l_fndcurrency_csr;
7606                  END IF;
7607 
7608                  IF l_racusttrxtypes_csr%ISOPEN THEN
7609                     CLOSE l_racusttrxtypes_csr;
7610                  END IF;
7611 
7612                  IF l_oklkheaders_csr%ISOPEN THEN
7613                     CLOSE l_oklkheaders_csr;
7614                  END IF;
7615 
7616          x_return_status := OKL_API.G_RET_STS_ERROR;
7617     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7618          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7619                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ',
7620                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
7621          END IF;
7622 
7623          IF c_get_contractinfo_csr%ISOPEN THEN
7624             CLOSE c_get_contractinfo_csr;
7625          END IF;
7626 
7627                  IF l_fndcurrency_csr%ISOPEN THEN
7628                     CLOSE l_fndcurrency_csr;
7629                  END IF;
7630 
7631                  IF l_racusttrxtypes_csr%ISOPEN THEN
7632                     CLOSE l_racusttrxtypes_csr;
7633                  END IF;
7634 
7635                  IF l_oklkheaders_csr%ISOPEN THEN
7636                     CLOSE l_oklkheaders_csr;
7637                  END IF;
7638 
7639          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
7640 
7641     WHEN OTHERS THEN
7642          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7643             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_k_hdr_tax_params ',
7644                   'EXCEPTION :'||sqlerrm);
7645          END IF;
7646 
7647          IF c_get_contractinfo_csr%ISOPEN THEN
7648             CLOSE c_get_contractinfo_csr;
7649          END IF;
7650 
7651                  IF l_fndcurrency_csr%ISOPEN THEN
7652                     CLOSE l_fndcurrency_csr;
7653                  END IF;
7654 
7655                  IF l_racusttrxtypes_csr%ISOPEN THEN
7656                     CLOSE l_racusttrxtypes_csr;
7657                  END IF;
7658 
7659                  IF l_oklkheaders_csr%ISOPEN THEN
7660                     CLOSE l_oklkheaders_csr;
7661                  END IF;
7662 
7663          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
7664          -- unexpected error
7665          OKL_API.set_message(p_app_name      => g_app_name,
7666                          p_msg_name      => g_unexpected_error,
7667                          p_token1        => g_sqlcode_token,
7668                          p_token1_value  => sqlcode,
7669                          p_token2        => g_sqlerrm_token,
7670                          p_token2_value  => sqlerrm);
7671 
7672   END get_k_hdr_tax_params;
7673 
7674 /*========================================================================
7675  | PRIVATE PROCEDURE get_asset_tax_params
7676  |
7677  | DESCRIPTION
7678  |    This procedure is called by other procedures in this API to derive
7679  |    asset level tax determinats
7680  |
7681  | CALLED FROM
7682  |
7683  |
7684  | CALLS PROCEDURES/FUNCTIONS
7685  |     okl_am_util_pvt.get_rule_record
7686  |
7687  |
7688  | PARAMETERS
7689  |  Input parameters
7690  |      p_khr_id                        -- Contract ID
7691  |      p_kle_id                        -- Financial Asset ID
7692  |      p_source_trx_name       -- Source Transaction Name
7693  |      p_source_table              -- Source Transaction Table
7694  |      p_qtp_code              -- Quote Type
7695  |      p_purpose_code          -- Stream Type Purpose
7696  |  Output Parameters
7697  |      x_transfer_of_title             -- Transfer of Title
7698  |      x_sale_lease_back               -- Sale and Lease Back
7699  |              x_purchase_of_lease             -- Purchase of Lease
7700  |          x_usage_of_equipment        -- Usage of Equipment
7701  |              x_age_of_equipment              -- Age of Equipment
7702  |              x_vendor_site_id                -- Vendor Site ID
7703  |
7704  | KNOWN ISSUES
7705  |
7706  | NOTES
7707  |
7708  |
7709  | MODIFICATION HISTORY
7710  | Date                  Author            Description of Changes
7711  | 08-APR-05            SECHAWLA           Created
7712  |
7713  *=======================================================================*/
7714 
7715   PROCEDURE get_asset_tax_params(
7716         p_api_version                   IN  NUMBER,
7717     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7718     x_return_status                     OUT NOCOPY VARCHAR2,
7719     x_msg_count                         OUT NOCOPY NUMBER,
7720     x_msg_data                          OUT NOCOPY VARCHAR2,
7721     p_khr_id                        IN  NUMBER,
7722     p_kle_id                        IN  NUMBER,  -- financial asset id
7723     p_source_trx_name               IN  VARCHAR2,
7724     p_source_table                                      IN  VARCHAR2,
7725     p_qtp_code                      IN  VARCHAR2 DEFAULT NULL, -- Used only for term / repurchase quote
7726     p_purpose_code                  IN  VARCHAR2 DEFAULT NULL, -- Used only in process_invoice_tax to identify remk,asset repair,vendor cure invoices
7727     x_transfer_of_title                         OUT NOCOPY VARCHAR2,
7728     x_sale_lease_back                           OUT NOCOPY VARCHAR2,
7729     x_purchase_of_lease                         OUT NOCOPY VARCHAR2,
7730     x_usage_of_equipment                        OUT NOCOPY VARCHAR2,
7731         x_age_of_equipment                              OUT NOCOPY NUMBER,
7732         x_vendor_site_id                                OUT NOCOPY NUMBER
7733         ) IS
7734 
7735     --get the asset number
7736     CURSOR l_okclines_csr(cp_fin_asset_id IN NUMBER) IS
7737     SELECT name
7738     FROM   OKC_K_LINES_v
7739     WHERE  id = cp_fin_asset_id;
7740 
7741     -- get the model line id (ITEM) for a financial asset id
7742     CURSOR l_modelline_csr(cp_fin_asset_id IN NUMBER) IS
7743     SELECT id
7744     FROM   okc_k_lines_b
7745     WHERE  cle_id   = cp_fin_asset_id
7746     AND    lse_id = 34 ; -- model line LSE ID
7747 
7748     -- Get the vendor for asset/service/fee line
7749     CURSOR l_partyroles_csr(cp_line_id IN NUMBER) IS
7750     SELECT object1_id1  --is fk to po_vendors.vendor_id
7751         FROM   okc_k_party_roles_b
7752     WHERE  cle_id = cp_line_id  --fee/service top line id for fee and service, model line id for asset line
7753     AND    rle_code = 'OKL_VENDOR';
7754 
7755     -- get the primary pay vendor location for the vendor
7756     CURSOR l_povendorsites_csr(cp_vendor_id IN NUMBER) IS
7757     SELECT vendor_site_id
7758     FROM   po_vendor_sites
7759     WHERE  vendor_id = cp_vendor_id
7760     AND    primary_pay_site_flag = 'Y';
7761 
7762 
7763     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7764 
7765         l_rulv_rec                      okl_rule_pub.rulv_rec_type;
7766         l_rulv_empty_rec                                okl_rule_pub.rulv_rec_type;
7767         l_name                                                  VARCHAR2(150);
7768 
7769         l_transfer_of_title                             VARCHAR2(30);
7770         l_sale_lease_back                               VARCHAR2(30);
7771         l_purchase_of_lease                             VARCHAR2(30);
7772         l_usage_of_equipment                    VARCHAR2(450);
7773         l_age_of_equipment                              NUMBER;
7774         l_vendor_site_id                NUMBER;
7775         l_model_line_id                                 NUMBER;
7776     l_vendor_id                                         NUMBER;
7777     l_vndr_cnt                                          NUMBER;
7778     l_purpose_code                                      VARCHAR2(30);
7779 
7780   BEGIN
7781 
7782     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7783         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params','Begin(+)');
7784     END IF;
7785 
7786     --Print Input Variables
7787     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7788          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7789               'p_init_msg_list :'||p_init_msg_list);
7790          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7791               'p_khr_id :'||to_char(p_khr_id));
7792          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7793               'p_kle_id :'||to_char(p_kle_id));
7794          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7795               'p_source_trx_name :'||p_source_trx_name);
7796          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7797               'p_source_table :'||p_source_table);
7798          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7799               'p_qtp_code :'||p_qtp_code);
7800          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7801               'p_purpose_code :'||p_purpose_code);
7802 
7803     END IF;
7804 
7805 
7806     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
7807              OR
7808                  (      (    p_source_trx_name = 'Billing' OR p_source_trx_name = 'Credit Memo' )
7809                AND (    p_source_table = 'OKL_TXD_AR_LN_DTLS_B' )
7810                AND (    p_qtp_code LIKE 'REP%' OR p_purpose_code IN ('AMBSPR','CURE','REPAIR_CHARGE')  )
7811          ) -- Repurchase quote billing OR  Remk,asset repair or vendor cure  billing
7812            ) THEN
7813 
7814            l_transfer_of_title  := 'N';
7815            l_sale_lease_back := 'N';
7816            l_purchase_of_lease := 'N';
7817            l_usage_of_equipment  := NULL;
7818            l_age_of_equipment := NULL;
7819            l_vendor_site_id := NULL;
7820 
7821         ELSE
7822         -- get transfer of title  -- financial Asset level
7823         l_rulv_rec := l_rulv_empty_rec ;
7824         okl_am_util_pvt.get_rule_record(  p_rgd_code         => 'LAASTX'
7825                                      ,p_rdf_code         => 'LAASTX'
7826                                      ,p_chr_id           => p_khr_id
7827                                      ,p_cle_id           => p_kle_id
7828                                      ,p_message_yn       => FALSE
7829                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7830                                      ,x_return_status    => x_return_status
7831                                      ,x_msg_count        => x_msg_count
7832                                      ,x_msg_data         => x_msg_data);
7833 
7834         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7835                 -- Rule instance is found
7836                 IF (l_rulv_rec.rule_information6 IS NOT NULL) AND (l_rulv_rec.rule_information6 <> OKL_API.G_MISS_CHAR) THEN
7837 
7838                         l_transfer_of_title  :=  l_rulv_rec.rule_information6;
7839                 ELSE -- transfer of title is optional on the contract
7840 
7841                         l_transfer_of_title  := 'N';
7842                 END IF;
7843                 ELSE -- transfer of title is optional on the contract
7844 
7845                 l_transfer_of_title  := 'N';
7846                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7847                 END IF;
7848                 -- get transfer of title : end
7849 
7850                 -- get sale_lease_back -- financial Asset level
7851                 l_rulv_rec := l_rulv_empty_rec ;
7852                 okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7853                                      ,p_rdf_code         => 'LAASTX'
7854                                      ,p_chr_id           => p_khr_id
7855                                      ,p_cle_id           => p_kle_id
7856                                      ,p_message_yn       => FALSE
7857                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7858                                      ,x_return_status    => x_return_status
7859                                      ,x_msg_count        => x_msg_count
7860                                      ,x_msg_data         => x_msg_data);
7861 
7862                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7863                 -- Rule instance is found
7864                 IF (l_rulv_rec.rule_information7 IS NOT NULL) AND (l_rulv_rec.rule_information7 <> OKL_API.G_MISS_CHAR) THEN
7865 
7866                         l_sale_lease_back  :=  l_rulv_rec.rule_information7;
7867                 ELSE -- sale and lease back is optional on the contract
7868 
7869                         l_sale_lease_back := 'N';
7870                 END IF;
7871                 ELSE -- sale and lease back is optional on the contract
7872 
7873                 l_sale_lease_back := 'N';
7874                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7875                 END IF;
7876                 -- get sale_lease_back : end
7877 
7878 
7879                 -- get purchase_of_lease -- financial Asset level
7880                 l_rulv_rec := l_rulv_empty_rec ;
7881                 okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7882                                      ,p_rdf_code         => 'LAASTX'
7883                                      ,p_chr_id           => p_khr_id
7884                                      ,p_cle_id           => p_kle_id
7885                                      ,p_message_yn       => FALSE
7886                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7887                                      ,x_return_status    => x_return_status
7888                                      ,x_msg_count        => x_msg_count
7889                                      ,x_msg_data         => x_msg_data);
7890 
7891         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7892                 -- Rule instance is found
7893                 IF (l_rulv_rec.rule_information8 IS NOT NULL) AND (l_rulv_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
7894 
7895                         l_purchase_of_lease  :=  l_rulv_rec.rule_information8;
7896                 ELSE -- purchase of lease is optional on the contract
7897 
7898                         l_purchase_of_lease := 'N';
7899                 END IF;
7900         ELSE -- purchase of lease is optional on the contract
7901 
7902                 l_purchase_of_lease := 'N';
7903                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7904         END IF;
7905         -- get purchase_of_lease : end
7906 
7907 
7908         -- get usage_of_equipment -- financial Asset level
7909         l_rulv_rec := l_rulv_empty_rec ;
7910         okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7911                                      ,p_rdf_code         => 'LAASTX'
7912                                      ,p_chr_id           => p_khr_id
7913                                      ,p_cle_id           => p_kle_id
7914                                      ,p_message_yn       => FALSE
7915                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7916                                      ,x_return_status    => x_return_status
7917                                      ,x_msg_count        => x_msg_count
7918                                      ,x_msg_data         => x_msg_data);
7919 
7920         IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7921                 -- Rule instance is found
7922                 IF (l_rulv_rec.rule_information9 IS NOT NULL) AND (l_rulv_rec.rule_information9 <> OKL_API.G_MISS_CHAR) THEN
7923 
7924                         l_usage_of_equipment  :=  l_rulv_rec.rule_information9;
7925 
7926                 END IF;
7927                 ELSE
7928                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7929                 END IF;
7930                 -- get usage_of_equipment : end
7931 
7932 
7933                 -- get age_of_equipment  -- financial Asset level
7934                 l_rulv_rec := l_rulv_empty_rec ;
7935                 okl_am_util_pvt.get_rule_record( p_rgd_code         => 'LAASTX'
7936                                      ,p_rdf_code         => 'LAASTX'
7937                                      ,p_chr_id           => p_khr_id
7938                                      ,p_cle_id           => p_kle_id
7939                                      ,p_message_yn       => FALSE
7940                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
7941                                      ,x_return_status    => x_return_status
7942                                      ,x_msg_count        => x_msg_count
7943                                      ,x_msg_data         => x_msg_data);
7944 
7945                 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
7946                 -- Rule instance is found
7947                 IF (l_rulv_rec.rule_information10 IS NOT NULL) AND (l_rulv_rec.rule_information10 <> OKL_API.G_MISS_CHAR) THEN
7948 
7949                         l_age_of_equipment  :=  to_number(l_rulv_rec.rule_information10);
7950 
7951                 END IF;
7952                 ELSE
7953                 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7954                 END IF;
7955                 -- get age_of_equipment : end
7956 
7957 
7958                 -- get Vendor site
7959 
7960                 -- Get the Model line for the financial asset line
7961                 OPEN  l_modelline_csr(p_kle_id);
7962                 FETCH l_modelline_csr INTO l_model_line_id;
7963                 CLOSE l_modelline_csr;
7964 
7965                 -- get the asset line Vendor
7966                 -- Check if multiple vendors exist.  If so, vendor location is not a determinant
7967                 l_vndr_cnt := 0;
7968                 FOR l_partyroles_rec in l_partyroles_csr(l_model_line_id) LOOP
7969                 l_vndr_cnt := l_vndr_cnt + 1;
7970                 l_vendor_id := l_partyroles_rec.object1_id1;  -- vendor is optional
7971                 END LOOP;
7972 
7973 
7974                 IF l_vndr_cnt =  1 AND l_vendor_id IS NOT NULL THEN
7975                 -- get the primary vendor site (if defined) from AP
7976                 -- vendor site is applicable for fin asset / service / fee lines / sublines
7977                 OPEN   l_povendorsites_csr(l_vendor_id);
7978                 FETCH  l_povendorsites_csr INTO l_vendor_site_id; -- will be null if none of the sites are checked as primary
7979                 CLOSE  l_povendorsites_csr;
7980 
7981                 END IF;
7982                 -- get Vendor site  : end
7983         END IF;
7984 
7985     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
7986           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7987               'l_transfer_of_title'||l_transfer_of_title);
7988           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7989               'l_sale_lease_back'||l_sale_lease_back);
7990           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7991               'l_purchase_of_lease'||l_purchase_of_lease);
7992           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7993               'l_usage_of_equipment'||l_usage_of_equipment);
7994           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7995               'l_age_of_equipment'||l_age_of_equipment);
7996           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params.',
7997               'l_vendor_site_id'||l_vendor_site_id);
7998     END IF;
7999 
8000     x_transfer_of_title  := l_transfer_of_title;
8001     x_sale_lease_back    := l_sale_lease_back;
8002     x_purchase_of_lease  := l_purchase_of_lease;
8003     x_usage_of_equipment := l_usage_of_equipment;
8004         x_age_of_equipment       := l_age_of_equipment;
8005         x_vendor_site_id         := l_vendor_site_id;
8006 
8007     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8008        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ','End(-)');
8009     END IF;
8010 
8011   EXCEPTION
8012     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8013 
8014       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8015          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ',
8016                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
8017       END IF;
8018 
8019       IF l_okclines_csr%ISOPEN THEN
8020          CLOSE l_okclines_csr;
8021       END IF;
8022 
8023           IF l_modelline_csr%ISOPEN THEN
8024              CLOSE l_modelline_csr;
8025           END IF;
8026 
8027           IF l_partyroles_csr%ISOPEN THEN
8028              CLOSE l_partyroles_csr;
8029           END IF;
8030 
8031           IF l_povendorsites_csr%ISOPEN THEN
8032              CLOSE l_povendorsites_csr;
8033           END IF;
8034 
8035           x_return_status := OKL_API.G_RET_STS_ERROR;
8036     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8037       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8038          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ',
8039                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
8040       END IF;
8041 
8042       IF l_okclines_csr%ISOPEN THEN
8043          CLOSE l_okclines_csr;
8044       END IF;
8045 
8046           IF l_modelline_csr%ISOPEN THEN
8047              CLOSE l_modelline_csr;
8048           END IF;
8049 
8050           IF l_partyroles_csr%ISOPEN THEN
8051              CLOSE l_partyroles_csr;
8052           END IF;
8053 
8054           IF l_povendorsites_csr%ISOPEN THEN
8055              CLOSE l_povendorsites_csr;
8056           END IF;
8057 
8058 
8059       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8060 
8061     WHEN OTHERS THEN
8062       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8063          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_asset_tax_params ',
8064                   'EXCEPTION :'||sqlerrm);
8065       END IF;
8066 
8067           IF l_okclines_csr%ISOPEN THEN
8068          CLOSE l_okclines_csr;
8069       END IF;
8070 
8071           IF l_modelline_csr%ISOPEN THEN
8072              CLOSE l_modelline_csr;
8073           END IF;
8074 
8075           IF l_partyroles_csr%ISOPEN THEN
8076              CLOSE l_partyroles_csr;
8077           END IF;
8078 
8079           IF l_povendorsites_csr%ISOPEN THEN
8080              CLOSE l_povendorsites_csr;
8081           END IF;
8082 
8083 
8084       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8085          -- unexpected error
8086       OKL_API.set_message(p_app_name      => g_app_name,
8087                          p_msg_name      => g_unexpected_error,
8088                          p_token1        => g_sqlcode_token,
8089                          p_token1_value  => sqlcode,
8090                          p_token2        => g_sqlerrm_token,
8091                          p_token2_value  => sqlerrm);
8092 
8093   END get_asset_tax_params;
8094 
8095 /*========================================================================
8096  | PRIVATE PROCEDURE process_tax_schedule_tax
8097  |
8098  | DESCRIPTION
8099  |    This procedure is called from calculate_sales_tax procedure to calculate
8100  |    tax schedule for customer requests, booking and rebooking
8101  |
8102  | CALLED FROM                                  calculate_sales_tax()
8103  |
8104  |
8105  | CALLS PROCEDURES/FUNCTIONS
8106  |     get_k_hdr_tax_params()
8107  |     get_asset_tax_params()
8108  |     get_location_party_ids()
8109  |     get_ufc_code()
8110  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
8111  |
8112  |
8113  | PARAMETERS
8114  |      p_source_trx_id                 -- Source transaction ID
8115  |      p_source_trx_name       -- Source transaction Name
8116  |      p_source_table          -- Source table
8117  |
8118  | KNOWN ISSUES
8119  |
8120  | NOTES
8121  |
8122  |
8123  | MODIFICATION HISTORY
8124  | Date                  Author            Description of Changes
8125  | 08-APR-05            SECHAWLA           Created
8126  | 22-APR-08            SECHAWLA 6975983   Do not error out if there is no tax in eBTax for
8127  |                                         the Billed stream elements. Create taxable line
8128  |                                         in okl_tax_sources. There won't be aby tax lines
8129  |                                         in okl_tax_trx_details.
8130  |
8131  *=======================================================================*/
8132   PROCEDURE process_tax_schedule_tax(
8133         p_api_version                   IN  NUMBER,
8134     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
8135     x_return_status                     OUT NOCOPY VARCHAR2,
8136     x_msg_count                         OUT NOCOPY NUMBER,
8137     x_msg_data                          OUT NOCOPY VARCHAR2,
8138     p_source_trx_id                                     IN  NUMBER,
8139     p_source_trx_name               IN  VARCHAR2,
8140     p_source_table                  IN  VARCHAR2) IS
8141 
8142         l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8143         i                                                        NUMBER;
8144 
8145         -- get the tax schedule request details
8146    CURSOR  l_trxrequests_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
8147    SELECT  a.dnz_khr_id, a.start_date, a.end_date, a.try_id, a.legal_entity_id, a.org_id
8148    FROM    okl_trx_requests a, okl_trx_types_tl b
8149    WHERE   a.id = cp_trx_id
8150    AND     a.try_id = b.id
8151    AND     b.name = cp_trx_type_name
8152    AND     language = 'US';
8153 
8154    --Cursor to get all the streams / stream elements associated with the contract
8155    -- This cursor picks up the K, asset, service, fee , service subline, fee subline level payments
8156    -- We are excluding Insurance streams. Usage lines do not have payments / streams
8157    CURSOR c_k_unbilled_streams_csr(cp_contract_id IN NUMBER,
8158                                    cp_date_from   IN DATE,
8159                                    cp_date_to     IN DATE) IS
8160    SELECT strm.khr_id,
8161           strm.kle_id, -- can be null for K level streams
8162           lse.lty_code,
8163           NULL asset_number,
8164           NULL trx_id,
8165           NULL trx_line_id,
8166           NULL entity_code,
8167           NULL event_class_code,
8168           NULL trx_level_type,
8169           NULL adjusted_doc_entity_code,
8170           NULL adjusted_doc_event_class_code,
8171           NULL adjusted_doc_trx_id,
8172           NULL adjusted_doc_trx_line_id,
8173           NULL adjusted_doc_trx_level_type,
8174           NULL adjusted_doc_number,
8175           NULL adjusted_doc_date,
8176           G_TAX_SCHEDULE tax_call_type_code,
8177           strm.sty_id stream_type_id,
8178           NULL trx_business_category,
8179           'ACTIVE' tax_line_status_code,
8180           selm.id sel_id,
8181           'N' reported_yn,
8182           typ.code Stream_Type,
8183           typ.billable_yn Billable,
8184           strm.id stream_id,
8185           strm.transaction_number,
8186           selm.amount,
8187           selm.stream_element_date stream_element_date,
8188           NULL tax_sources_id,
8189           NULL asset_line_id,
8190           NULL ship_to_siteuseid,
8191           NULL inventory_item_id
8192     FROM  okl_strm_type_b typ,
8193           okl_streams strm,
8194           okl_strm_elements selm,
8195           okc_k_lines_b lines,
8196           okc_line_styles_b lse
8197     WHERE  strm.sty_id = typ.id
8198     AND    strm.id = selm.stm_id
8199     AND    typ.billable_yn = 'Y'
8200     AND    strm.say_code ='CURR'
8201     AND    strm.active_yn = 'Y'
8202     AND    strm.purpose_code IS NULL
8203     AND    strm.khr_id = cp_contract_id
8204     AND    selm.stream_element_date BETWEEN cp_date_from AND cp_date_to
8205     AND    strm.kle_id = lines.id(+)
8206     AND    lines.lse_id = lse.id (+)
8207     AND    lse.lty_code (+) <> 'INSURANCE'
8208     AND  NOT EXISTS -- tax lines don't exist in AR ( This condition is added to pick up stream elements billed under
8209                     -- old solution : date_billed may not be null but billing may not have been run completely, so tax
8210                     -- may not have been calculated in AR
8211          (SELECT NULL
8212           FROM  okl_bpd_tld_ar_lines_v cnsld
8213           WHERE cnsld.sel_id = selm.id)
8214     ORDER  BY  strm.kle_id, strm.sty_id;
8215 
8216     -- get Billed stream elements
8217     CURSOR c_k_billed_streams_csr(cp_contract_id IN NUMBER,
8218                                   cp_date_from   IN DATE,
8219                                   cp_date_to     IN DATE) IS
8220     SELECT strm.khr_id,
8221            strm.kle_id, -- can be null for K level streams
8222            strm.sty_id stream_type_id,
8223            selm.id sel_id,
8224            selm.stream_element_date stream_element_date,
8225            cnsld.customer_trx_id,
8226            cnsld.customer_trx_line_id,
8227            selm.amount --SECHAWLA 22-APR-08 6975983 : added
8228      FROM  okl_strm_type_b typ,
8229            okl_streams strm,
8230            okl_strm_elements selm,
8231            okc_k_lines_b lines,
8232            okc_line_styles_b lse,
8233            okl_bpd_tld_ar_lines_v cnsld
8234     WHERE  strm.sty_id = typ.id
8235     AND    strm.id = selm.stm_id
8236     AND    typ.billable_yn = 'Y'
8237     AND    strm.say_code ='CURR'
8238     AND    strm.active_yn = 'Y'
8239     AND    strm.purpose_code IS NULL
8240     AND    strm.khr_id = cp_contract_id
8241     AND    selm.stream_element_date BETWEEN cp_date_from AND cp_date_to
8242     AND    selm.date_billed IS NOT NULL  -- pick billed stream elements
8243     AND    strm.kle_id = lines.id(+)
8244     AND    lines.lse_id = lse.id (+)
8245     AND    lse.lty_code (+) <> 'INSURANCE'
8246     AND    cnsld.sel_id = selm.id
8247     AND    cnsld.khr_id = strm.khr_id;
8248     --  ORDER  BY  strm.kle_id, strm.sty_id;
8249 
8250     -- get the billing line details
8251     CURSOR l_txdarlndtls_csr(cp_sel_id IN NUMBER, cp_sty_id IN NUMBER) IS
8252     SELECT hdr.id trx_id, det.id trx_line_id
8253     FROM   okl_trx_ar_invoices_b hdr, okl_txl_ar_inv_lns_b line, okl_txd_ar_ln_dtls_b det
8254     WHERE  det.sel_id = cp_sel_id
8255     AND    det.sty_id = cp_sty_id
8256     AND    det.til_id_details = line.id
8257     AND    line.tai_id = hdr.id;
8258 
8259     -- get all the financial asset lines for the contract
8260     CURSOR l_finassets_csr(CP_KHR_ID IN NUMBER) IS
8261     SELECT DISTINCT strm.kle_id fin_asset_id -- is DISTINCT req ? can an asset line have more than one stream types ?
8262     FROM   okl_strm_type_b typ,
8263            okl_streams strm,
8264            okc_k_lines_b lines,
8265            okc_line_styles_b sty
8266     WHERE  strm.sty_id = typ.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_KHR_ID
8272     AND    strm.kle_id = lines.id
8273     AND    lines.lse_id = sty.id
8274     AND    sty.lty_code = 'FREE_FORM1';
8275 
8276     --get the asset number
8277     CURSOR l_okclines_csr(cp_fin_asset_id IN NUMBER) IS
8278     SELECT name, lse_id
8279     FROM   OKC_K_LINES_v
8280     WHERE  id = cp_fin_asset_id;
8281 
8282     -- get contract/line stream types (K1-A1-ST1, K1-A1-ST2, K1-S1-ST3, K1-ST4...)
8283     CURSOR l_kstreamtypes_csr(cp_khr_id IN NUMBER) IS
8284     SELECT typ.code Stream_Type,
8285            strm.id stream_id,
8286            strm.kle_id line_id,
8287                    strm.sty_id stream_type_id,
8288            sty.lty_code
8289     FROM   okl_strm_type_b typ,
8290            okl_streams strm,
8291            okc_k_lines_b lines,
8292            okc_line_styles_b sty
8293     WHERE  strm.sty_id = typ.id
8294     AND    typ.billable_yn = 'Y'
8295     AND    strm.say_code ='CURR'
8296     AND    strm.active_yn = 'Y'
8297     AND    strm.purpose_code IS NULL
8298     AND    strm.khr_id = cp_khr_id
8299     AND    strm.kle_id = lines.id(+)
8300     AND    lines.lse_id = sty.id (+)
8301     AND    sty.lty_code (+) <> 'INSURANCE';
8302 
8303     -- Get the financial asset associated with a given subline
8304     CURSOR l_finasset_csr(cp_fee_serviced_asset_line_id IN NUMBER, cp_line_type IN VARCHAR2) IS
8305     SELECT cim.object1_id1
8306     FROM   okc_k_lines_b cle, okc_line_styles_b lse, okc_k_items cim
8307     WHERE  cle.lse_id = lse.id
8308     AND    lse.lty_code = cp_line_type
8309     AND    cim.cle_id = cle.id
8310     AND    cle.id = cp_fee_serviced_asset_line_id;
8311 
8312         -- get the inventory item id and inventory item org for a financial asset
8313         CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
8314         SELECT cim_model.object1_id1,
8315            cim_model.object1_id2
8316     FROM   okc_k_items cim_model,
8317            okc_k_lines_b cleb_model,
8318            okc_line_styles_b lseb_model
8319     WHERE  cim_model.cle_id    = cleb_model.id
8320     AND    cleb_model.cle_id   = cp_fin_asset_id
8321     AND    lseb_model.id       = cleb_model.lse_id
8322     AND    lseb_model.lty_code = 'ITEM';
8323 
8324     -- get the tax lines corresponding to billing tax source ID
8325     CURSOR l_taxtrxdetails_csr(cp_txs_id IN NUMBER) IS
8326     SELECT *
8327     FROM   okl_tax_trx_details
8328     WHERE  txs_id = cp_txs_id;
8329 
8330     -- Get the vendor for asset/service/fee line
8331     CURSOR l_partyroles_csr(cp_line_id IN NUMBER) IS
8332     SELECT object1_id1  --is fk to po_vendors.vendor_id
8333         FROM   okc_k_party_roles_b
8334     WHERE  cle_id = cp_line_id  --fee/service top line id for fee and service, model line id for asset line
8335     AND    rle_code = 'OKL_VENDOR';
8336 
8337     -- get the primary pay vendor location for the vendor
8338     CURSOR l_povendorsites_csr(cp_vendor_id IN NUMBER) IS
8339     SELECT vendor_site_id
8340     FROM   po_vendor_sites
8341     WHERE  vendor_id = cp_vendor_id
8342     AND    primary_pay_site_flag = 'Y';
8343 
8344     -- check if stream element is billed in AR
8345     -- Get total tax for a taxable line
8346     CURSOR l_get_zx_total_tax(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
8347     SELECT SUM(zx.tax_amt)  tax_amt
8348     FROM zx_lines zx
8349     WHERE zx.trx_id                     = cp_trx_id
8350     AND   zx.trx_line_id                = cp_trx_line_id
8351     AND   zx.entity_code                = G_AR_ENTITY_CODE
8352     AND   zx.event_class_code           = G_INVOICE_EVENT_CLASS_CODE
8353     AND   zx.application_id             = G_AR_APPLICATION_ID;
8354 
8355     -- Get tax values for a taxable line
8356     CURSOR l_get_zx_taxable_line_info(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
8357     SELECT zx.line_amt,
8358            zx.taxable_amt,
8359            zx.trx_date,
8360            zx.tax_determine_date,
8361            zx.trx_currency_code,
8362            zx.currency_conversion_type,
8363            zx.currency_conversion_rate,
8364            zx.currency_conversion_date,
8365            zxdet.product_category,
8366            zxdet.trx_business_category,
8367            zxdet.product_fisc_classification,
8368            zxdet.user_defined_fisc_class,
8369            zxdet.product_type,
8370            zxdet.internal_organization_id,
8371            zxdet.input_tax_classification_code,
8372            zx.legal_entity_id,
8373            zxdet.line_intended_use
8374     FROM   zx_lines zx,
8375            zx_lines_det_factors zxdet
8376     WHERE  zx.trx_line_id                = cp_trx_line_id
8377     AND    zx.trx_id                     = cp_trx_id
8378     AND    zx.internal_organization_id   = MO_GLOBAL.get_current_org_id
8379     AND    zx.entity_code                = G_AR_ENTITY_CODE
8380     AND    zx.event_class_code           = G_INVOICE_EVENT_CLASS_CODE
8381     AND    zx.application_id             = G_AR_APPLICATION_ID
8382     AND    zx.trx_line_id                = zxdet.trx_line_id
8383     AND    zx.trx_id                     = zxdet.trx_id
8384     AND    zx.internal_organization_id   = zxdet.internal_organization_id
8385     AND    zx.entity_code                = zxdet.entity_code
8386     AND    zx.event_class_code           = zxdet.event_class_code
8387     AND    zx.application_id             = zxdet.application_id
8388     AND    ROWNUM = 1;
8389 
8390     -- get tax lines from eBTax
8391     CURSOR l_get_zx_tax_lines(cp_trx_id IN NUMBER, cp_trx_line_id IN NUMBER) IS
8392     SELECT zx.tax_rate_id,
8393            zx.tax_rate_code,
8394            zx.tax_exemption_id,
8395            zx.tax_rate,
8396            zx.tax_date,
8397            zx.line_amt,
8398            zx.internal_organization_id,
8399            zx.application_id,
8400            zx.entity_code,
8401            zx.event_class_code,
8402            zx.event_type_code,
8403            zx.trx_id,
8404            zx.trx_line_id,
8405            zx.trx_level_type,
8406            zx.trx_line_number,
8407            zx.tax_line_number,
8408            zx.tax_regime_id,
8409            zx.tax_regime_code,
8410            zx.tax_id,
8411            zx.tax,
8412            zx.tax_status_id,
8413            zx.tax_status_code,
8414            zx.tax_apportionment_line_number,
8415            zx.legal_entity_id,
8416            zx.trx_number,
8417            zx.trx_date,
8418            zx.tax_jurisdiction_id,
8419            zx.tax_jurisdiction_code,
8420            zx.tax_type_code,
8421            zx.tax_currency_code,
8422            zx.taxable_amt_tax_curr,
8423            zx.trx_currency_code,
8424            zx.minimum_accountable_unit,
8425            zx.precision,
8426            zx.currency_conversion_type,
8427            zx.currency_conversion_rate,
8428            zx.currency_conversion_date,
8429            zx.tax_determine_date,
8430            zx.taxable_amt,
8431            zx.tax_amt,
8432            zxdet.product_category,
8433            zxdet.trx_business_category,
8434            zxdet.product_fisc_classification,
8435            zxdet.user_defined_fisc_class,
8436            zxdet.product_type
8437     FROM zx_lines zx,
8438          zx_lines_det_factors zxdet
8439     WHERE  zx.trx_id                     = cp_trx_id
8440     AND    zx.trx_line_id                = cp_trx_line_id
8441     AND    zx.internal_organization_id   = MO_GLOBAL.get_current_org_id
8442     AND    zx.entity_code                = G_AR_ENTITY_CODE
8443     AND    zx.event_class_code           = G_INVOICE_EVENT_CLASS_CODE
8444     AND    zx.application_id             = G_AR_APPLICATION_ID
8445     AND    zx.trx_line_id                = zxdet.trx_line_id
8446     AND    zx.trx_id                     = zxdet.trx_id
8447     AND    zx.internal_organization_id   = zxdet.internal_organization_id
8448     AND    zx.entity_code                = zxdet.entity_code
8449     AND    zx.event_class_code           = zxdet.event_class_code
8450     AND    zx.application_id             = zxdet.application_id;
8451 
8452     -- Local Record Structures
8453         TYPE contract_streams_rec_type IS RECORD (
8454           khr_id                                                        NUMBER,
8455           kle_id                                                        NUMBER,
8456                   lty_code                          VARCHAR2(30),
8457           asset_number                                          VARCHAR2(15),
8458           trx_id                                                        NUMBER,
8459           trx_line_id                                           NUMBER,
8460           entity_code                                           VARCHAR2(30),
8461           event_class_code                                      VARCHAR2(30),
8462           trx_level_type                                        VARCHAR2(30),
8463           adjusted_doc_entity_code                      VARCHAR2(30),
8464           adjusted_doc_event_class_code         VARCHAR2(30),
8465           adjusted_doc_trx_id                           NUMBER,
8466           adjusted_doc_trx_line_id                      NUMBER,
8467           adjusted_doc_trx_level_type           VARCHAR2(30),
8468           adjusted_doc_number                           VARCHAR2(150),
8469           adjusted_doc_date                                     DATE,
8470           tax_call_type_code                            VARCHAR2(30),
8471           stream_type_id                                        NUMBER,
8472           trx_business_category                         VARCHAR2(30),
8473           tax_line_status_code                          VARCHAR2(30),
8474           sel_id                                                        NUMBER,
8475           reported_yn                                           VARCHAR2(1),
8476           Stream_Type                                           VARCHAR2(150),
8477           Billable                                                      VARCHAR2(1),
8478           stream_id                                                     NUMBER,
8479           transaction_number                    NUMBER,
8480           amount                                                        NUMBER,
8481           stream_element_date                           DATE,
8482           tax_sources_id                    NUMBER,
8483           asset_line_id                     NUMBER,
8484           ship_to_siteuseid                 NUMBER,
8485           inventory_item_id                 NUMBER );
8486 
8487     TYPE bill_ts_tx_src_rec_type IS RECORD (
8488                 BILL_ID                                         NUMBER,
8489                         TS_KHR_ID                                       NUMBER,
8490                         TS_KLE_ID                                       NUMBER,
8491                         BILL_ASSET_NUMBER               VARCHAR2(15),
8492                         BILL_TRX_ID                                     NUMBER ,
8493                         BILL_TRX_LINE_ID                                NUMBER ,
8494                         TS_TRX_ID                                               NUMBER,
8495                         TS_TRX_LINE_ID                                  NUMBER,
8496                         TS_STY_ID                                               NUMBER,
8497                         BILL_TRX_BUSINESS_CATEGORY              VARCHAR2(30),
8498                         TS_SEL_ID                                               NUMBER,
8499                         TS_SEL_DATE                                             DATE);
8500 
8501         TYPE asset_level_det_rec_type IS RECORD
8502         (fin_asset_id                           NUMBER,
8503          transfer_of_title                      VARCHAR2(30),
8504          sale_lease_back                        VARCHAR2(30),
8505          purchase_of_lease                      VARCHAR2(30),
8506          usage_of_equipment                     VARCHAR2(30),
8507          vendor_site_id                         NUMBER,
8508          age_of_equipment                       NUMBER);
8509 
8510         TYPE k_billed_streams_rec_type IS RECORD (
8511            khr_id                  NUMBER,
8512            kle_id                  NUMBER,
8513            sty_id                  NUMBER,
8514            sel_id                  NUMBER,
8515            sel_date                DATE,
8516            customer_trx_id         NUMBER,
8517            customer_trx_line_id    NUMBER,
8518 	       sel_amount              NUMBER); --SECHAWLA 22-APR-08 6975983 : added;
8519 
8520     TYPE contract_streams_tbl_type IS TABLE OF contract_streams_rec_type INDEX BY BINARY_INTEGER;
8521     TYPE bill_ts_tx_src_tbl_type IS TABLE OF bill_ts_tx_src_rec_type INDEX BY BINARY_INTEGER;
8522         TYPE asset_level_det_tbl_type IS TABLE OF asset_level_det_rec_type INDEX BY BINARY_INTEGER;
8523         TYPE finassets_tbl_type IS TABLE OF l_finassets_csr%ROWTYPE INDEX BY BINARY_INTEGER;
8524         TYPE kstreamtypes_tbl_type IS TABLE OF l_kstreamtypes_csr%ROWTYPE  INDEX BY BINARY_INTEGER;
8525         TYPE k_billed_streams_tbl_type IS TABLE OF k_billed_streams_rec_type INDEX BY BINARY_INTEGER;
8526 
8527     l_get_zx_taxable_line_info_rec  l_get_zx_taxable_line_info%ROWTYPE;
8528     l_ts_asset_level_det_tbl            asset_level_det_tbl_type;
8529     l_kstreamtypes_tbl              kstreamtypes_tbl_type;
8530     l_finassets_tbl                             finassets_tbl_type;
8531         l_contract_streams_tbl          contract_streams_tbl_type;
8532         l_tax_sources_tbl               tax_sources_tbl_type;
8533         l_tax_trx_details_tbl           tax_lines_tbl_type;
8534         l_K_unbilled_streams_rec        contract_streams_rec_type;
8535         l_bill_ts_tx_src_tbl            bill_ts_tx_src_tbl_type;
8536         l_k_billed_streams_tbl                  k_billed_streams_tbl_type;
8537     lx_tax_codes_tbl                tax_codes_tbl_type;
8538     lx_line_params_tbl              line_params_tbl_type;
8539     lp_hdr_params_rec               hdr_params_rec_type;
8540 
8541         l_fetch_size                    NUMBER := 10000;
8542 
8543         l_ts_trx_type_id_det            NUMBER;
8544         l_asset_number                  VARCHAR2(150);
8545 
8546         l_tax_sources_id                NUMBER;
8547 
8548         l_ts_prch_opt_det                               VARCHAR2(450);
8549         l_ts_fin_prod_id_det                    NUMBER;
8550         l_ts_int_disclosed_det                  VARCHAR2(30);
8551 
8552         l_ts_transfer_of_title                  VARCHAR2(30);
8553         l_ts_sale_lease_back                    VARCHAR2(30);
8554         l_ts_purchase_of_lease                  VARCHAR2(30);
8555         l_ts_usage_of_equipment                 VARCHAR2(450);
8556         l_ts_age_of_equipment                   NUMBER;
8557         l_ts_vendor_site_id             NUMBER;
8558 
8559         l_fin_asset_id                                  NUMBER;
8560         ind                                                     NUMBER;
8561         l_asset_line_id                                 NUMBER;
8562         l_inv_item_org_id                               NUMBER;
8563         l_contract_streams_tbc                  VARCHAR2(30);
8564         l_unbilled_strms_exist                  BOOLEAN := FALSE;
8565         l_bill_ts_tx_src_cnt                    NUMBER;
8566 
8567     j                                                           NUMBER;
8568     l_cust_trx_type_id                          NUMBER;
8569     l_vendor_id                                         NUMBER;
8570     l_vndr_cnt                                          NUMBER;
8571     l_dummy                                                     VARCHAR2(1);
8572         l_ts_khr_id                                             NUMBER;
8573     l_ts_start_date                                     DATE;
8574     l_ts_end_date                                       DATE;
8575 
8576     l_cust_acct_id                                      NUMBER;
8577     l_bill_to_siteuseid                 NUMBER;
8578         l_currency_code                                 VARCHAR2(15);
8579         l_precision                             NUMBER;
8580         l_minimum_accountable_unit              NUMBER;
8581 
8582     lx_bill_to_party_site_id        NUMBER;
8583     lx_bill_to_location_id          NUMBER;
8584     lx_bill_to_party_id             NUMBER;
8585     lx_bill_to_siteuseid            NUMBER;
8586     lx_ship_to_party_site_id        NUMBER;
8587     lx_ship_to_location_id          NUMBER;
8588     lx_ship_to_party_id             NUMBER;
8589     lx_ship_to_siteuseid                NUMBER;
8590 
8591     lx_org_id                       NUMBER;
8592     lx_book_class_code              VARCHAR2(30);
8593     lx_currency_conversion_type     VARCHAR2(30);
8594     lx_currency_conversion_rate     NUMBER;
8595     lx_currency_conversion_date     DATE;
8596     lx_contract_start_date          DATE;
8597 
8598         l_name                                                  VARCHAR2(150);
8599     l_lse_id                        NUMBER;
8600     l_tax_code_count                NUMBER;
8601     l_taxation_country              VARCHAR2(2);
8602     l_ledger_id                     NUMBER;
8603     l_legal_entity_id               NUMBER;
8604     l_inv_item_id                   NUMBER;
8605     l_inv_org_id                    NUMBER;
8606     l_org_id                        NUMBER;
8607     l_value_fetched                 BOOLEAN;
8608 
8609     l_tbc_code                      VARCHAR2(240);
8610     l_ufc_code                      VARCHAR2(240);
8611     l_pc_code                       VARCHAR2(240);
8612     l_tax_class_code                VARCHAR2(50);
8613     l_total_tax                     NUMBER;
8614 
8615   BEGIN
8616     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8617           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax','Begin(+)');
8618         END IF;
8619 
8620         -- Print Input Variables
8621         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8622       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8623                   'p_init_msg_list :'||p_init_msg_list);
8624           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8625                   'p_source_trx_id :'||p_source_trx_id);
8626       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8627                   'p_source_trx_name :'||p_source_trx_name);
8628       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8629                   'p_source_table :'||p_source_table);
8630         END IF;
8631 
8632     x_return_status := OKL_API.G_RET_STS_SUCCESS;
8633 
8634     OPEN  l_trxrequests_csr(p_source_trx_id, p_source_trx_name);
8635         FETCH l_trxrequests_csr INTO l_ts_khr_id, l_ts_start_date, l_ts_end_date,
8636                                  l_ts_trx_type_id_det, l_legal_entity_id, l_org_id;
8637     IF l_trxrequests_csr%NOTFOUND THEN
8638       -- source trx id is invalid
8639       OKC_API.set_message( p_app_name      => 'OKC',
8640                            p_msg_name      => G_INVALID_VALUE,
8641                            p_token1        => G_COL_NAME_TOKEN,
8642                            p_token1_value  => 'SOURCE_TRX_ID');
8643       RAISE OKL_API.G_EXCEPTION_ERROR;
8644     END IF;
8645     CLOSE l_trxrequests_csr;
8646 
8647     -- Fetch the Ledger info
8648     l_ledger_id := okl_accounting_util.get_set_of_books_id;
8649 
8650     -- Fetch the Tax country
8651     l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
8652                                                        x_msg_count         => x_msg_count,
8653                                                        x_msg_data          => x_msg_data,
8654                                                        p_legal_entity_id   => l_legal_entity_id);
8655 
8656     -- Get K header level tax parameters
8657     get_k_hdr_tax_params(
8658                                         p_api_version                  => p_api_version,
8659                                 p_init_msg_list                => OKC_API.G_FALSE,
8660                                 x_return_status                => x_return_status,
8661                                 x_msg_count                    => x_msg_count,
8662                                 x_msg_data                     => x_msg_data,
8663                                 p_khr_id                       => l_ts_khr_id,
8664                                 p_source_trx_name              => p_source_trx_name,
8665                             p_source_table                                 => p_source_table,
8666                                 x_cust_acct_id                             => l_cust_acct_id,
8667                                         x_bill_to_siteuseid            => lx_bill_to_siteuseid,
8668                                         x_currency_code                            => l_currency_code,
8669                                 x_cust_trx_type_id             => l_cust_trx_type_id,
8670                                 x_precision                                        => l_precision,
8671                                         x_minimum_accountable_unit     => l_minimum_accountable_unit,
8672                                         x_prch_opt_det                             => l_ts_prch_opt_det,
8673                                         x_fin_prod_id_det                          => l_ts_fin_prod_id_det,
8674                                         x_int_disclosed_det                        => l_ts_int_disclosed_det,
8675                     x_org_id                       => lx_org_id,
8676                     x_book_class_code              => lx_book_class_code,
8677                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
8678                     x_bill_to_party_id             => lx_bill_to_party_id,
8679                     x_bill_to_location_id          => lx_bill_to_location_id,
8680                     x_currency_conversion_type     => lx_currency_conversion_type,
8681                     x_currency_conversion_rate     => lx_currency_conversion_rate,
8682                     x_currency_conversion_date     => lx_currency_conversion_date,
8683                     x_contract_start_date          => lx_contract_start_date);
8684 
8685     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8686       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8687     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8688       RAISE OKL_API.G_EXCEPTION_ERROR;
8689     END IF;
8690 
8691     --------------- Process Billed Stream elements - Start -------------------
8692 
8693     -- Check if any of the stream elements between the given date range are
8694     -- billed (under old/new solution) If so, insert already calculated tax
8695     -- lines into tax sources and tax trx details with trx type of
8696     -- 'Tax Schedule'  If Billed under new solution, then tax would have been
8697     -- calculated under 'Billing' transaction type and tax lines inserted into
8698     -- okl_tax_sources/okl_tax_trx_detials. Insert these tax lines back into tax
8699     -- sources/tax trx details with transaction type of 'Tax Schedule'
8700 
8701     l_bill_ts_tx_src_cnt := 0;
8702     l_bill_ts_tx_src_tbl.DELETE;
8703     OPEN  c_k_billed_streams_csr(l_ts_khr_id, l_ts_start_date, l_ts_end_date);
8704     LOOP
8705       l_k_billed_streams_tbl.DELETE;
8706       FETCH c_k_billed_streams_csr BULK COLLECT INTO l_k_billed_streams_tbl LIMIT l_fetch_size;
8707 
8708           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8709         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8710                               'l_k_billed_streams_tbl.COUNT '||l_k_billed_streams_tbl.COUNT);
8711           END IF;
8712 
8713           IF l_k_billed_streams_tbl.COUNT > 0 THEN
8714 
8715         l_tax_sources_tbl.DELETE;
8716                 l_tax_trx_details_tbl.DELETE;
8717                 i := 1;
8718         FOR k IN l_k_billed_streams_tbl.FIRST..l_k_billed_streams_tbl.LAST LOOP
8719 
8720           l_total_tax := 0;
8721 
8722           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);
8723           FETCH l_get_zx_taxable_line_info INTO l_get_zx_taxable_line_info_rec;
8724           IF l_get_zx_taxable_line_info%NOTFOUND THEN  -- data should exist in the billing tables
8725             --SECHAWLA 22-APR-08 6975983 : begin
8726             --SECHAWLA 22-APR-08 6975983 : shouldn't fail if no tax calculated in eBTax for AR Invoice
8727             /*
8728 			OKL_API.set_message( p_app_name      => 'OKL',
8729                                  p_msg_name      => 'OKL_TX_NO_BILLING_INFO');
8730             RAISE OKL_API.G_EXCEPTION_ERROR;
8731             */
8732             -- In scenario where there is no tax in eBTax for billed AR invoices (stream elements),
8733 			-- Tax determinants can not be derived. Tax determinants are passed to AR through Ar Interface
8734 			-- But these are not stored in actual AR tables. When AR makes tax call to eBTax, these determinants
8735 			-- are passed to ebTax and stored in eBTax. Since in this case, there is no data in eBTax tables,
8736 			-- it is not possible to derive these values. Hence storing Null values
8737             l_get_zx_taxable_line_info_rec.trx_business_category := NULL;
8738             l_get_zx_taxable_line_info_rec.product_category := NULL;
8739             l_get_zx_taxable_line_info_rec.user_defined_fisc_class := NULL;
8740             l_get_zx_taxable_line_info_rec.line_intended_use := NULL;
8741             l_get_zx_taxable_line_info_rec.input_tax_classification_code := NULL;
8742             l_get_zx_taxable_line_info_rec.product_type := NULL;
8743             l_get_zx_taxable_line_info_rec.product_fisc_classification := NULL;
8744 
8745 
8746             l_get_zx_taxable_line_info_rec.internal_organization_id := l_org_id;
8747             l_get_zx_taxable_line_info_rec.legal_entity_id := l_legal_entity_id;
8748 
8749             l_get_zx_taxable_line_info_rec.line_amt  := l_k_billed_streams_tbl(k).sel_amount;
8750             l_get_zx_taxable_line_info_rec.taxable_amt := l_k_billed_streams_tbl(k).sel_amount;
8751 
8752             l_get_zx_taxable_line_info_rec.trx_date := l_k_billed_streams_tbl(k).sel_date;
8753 
8754             l_get_zx_taxable_line_info_rec.tax_determine_date := NULL;
8755 
8756             l_get_zx_taxable_line_info_rec.trx_currency_code := l_currency_code;
8757             l_get_zx_taxable_line_info_rec.currency_conversion_type := NULL;
8758             l_get_zx_taxable_line_info_rec.currency_conversion_rate := NULL;
8759             l_get_zx_taxable_line_info_rec.currency_conversion_date := NULL;
8760             --SECHAWLA 22-APR-08 6975983 : end
8761           END IF;
8762           CLOSE l_get_zx_taxable_line_info;
8763 
8764           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);
8765           FETCH l_get_zx_total_tax INTO l_total_tax;
8766           CLOSE l_get_zx_total_tax;
8767 
8768           IF (l_k_billed_streams_tbl(k).kle_id IS NOT NULL) THEN
8769                 OPEN  l_okclines_csr(l_k_billed_streams_tbl(k).kle_id);
8770                     FETCH l_okclines_csr INTO l_name, l_lse_id;
8771                     CLOSE l_okclines_csr;
8772           END IF;
8773 
8774           -- populate tax sources table with transaction type of 'Tax Schedule'
8775           l_tax_sources_tbl(k).id                               := get_seq_id;
8776           l_tax_sources_tbl(k).kle_id                           := l_k_billed_streams_tbl(k).kle_id;
8777           l_tax_sources_tbl(k).khr_id                           := l_ts_khr_id;
8778 
8779           IF (l_lse_id = 33) THEN
8780             l_tax_sources_tbl(k).asset_number                   := l_name;
8781           END IF;
8782 
8783           l_tax_sources_tbl(k).trx_id                           := p_source_trx_id;
8784           l_tax_sources_tbl(k).trx_line_id                      := l_tax_sources_tbl(k).id;
8785           l_tax_sources_tbl(k).entity_code                      := G_TAX_SCH_ENTITY_CODE;
8786           l_tax_sources_tbl(k).event_class_code                 := G_TAX_SCHEDULE;
8787           l_tax_sources_tbl(k).trx_level_type                   := G_TRX_LEVEL_TYPE;
8788           l_tax_sources_tbl(k).adjusted_doc_entity_code         := null;
8789           l_tax_sources_tbl(k).adjusted_doc_event_class_code    := null;
8790           l_tax_sources_tbl(k).adjusted_doc_trx_id              := null;
8791           l_tax_sources_tbl(k).adjusted_doc_trx_line_id         := null;
8792           l_tax_sources_tbl(k).adjusted_doc_trx_level_type      := null;
8793           l_tax_sources_tbl(k).adjusted_doc_number              := null;
8794           l_tax_sources_tbl(k).adjusted_doc_date                := null;
8795           l_tax_sources_tbl(k).tax_call_type_code               := G_TAX_SCHEDULE;
8796           l_tax_sources_tbl(k).sty_id                           := l_k_billed_streams_tbl(k).sty_id;
8797           l_tax_sources_tbl(k).trx_business_category            := l_get_zx_taxable_line_info_rec.trx_business_category;
8798           l_tax_sources_tbl(k).tax_line_status_code             := G_ACTIVE_STATUS;
8799           l_tax_sources_tbl(k).sel_id                           := l_k_billed_streams_tbl(k).sel_id;
8800           l_tax_sources_tbl(k).reported_yn                      := 'Y';
8801                   l_tax_sources_tbl(k).program_id                       := null;
8802                   l_tax_sources_tbl(k).request_id                       := null;
8803                   l_tax_sources_tbl(k).program_application_id           := null;
8804                   l_tax_sources_tbl(k).program_update_date              := null;
8805                   l_tax_sources_tbl(k).attribute_category               := null;
8806 
8807                   l_tax_sources_tbl(k).attribute1                    := null;
8808                   l_tax_sources_tbl(k).attribute2                    := null;
8809                   l_tax_sources_tbl(k).attribute3                    := null;
8810                   l_tax_sources_tbl(k).attribute4                    := null;
8811                   l_tax_sources_tbl(k).attribute5                    := null;
8812                   l_tax_sources_tbl(k).attribute6                    := null;
8813                   l_tax_sources_tbl(k).attribute7                    := null;
8814                   l_tax_sources_tbl(k).attribute8                    := null;
8815                   l_tax_sources_tbl(k).attribute9                    := null;
8816                   l_tax_sources_tbl(k).attribute10                   := null;
8817                   l_tax_sources_tbl(k).attribute11                   := null;
8818                   l_tax_sources_tbl(k).attribute12                   := null;
8819                   l_tax_sources_tbl(k).attribute13                   := null;
8820                   l_tax_sources_tbl(k).attribute14                   := null;
8821                   l_tax_sources_tbl(k).attribute15                   := null;
8822                   l_tax_sources_tbl(k).created_by                    := G_USER_ID;
8823                   l_tax_sources_tbl(k).creation_date                 := SYSDATE;
8824                   l_tax_sources_tbl(k).last_updated_by               := G_USER_ID;
8825                   l_tax_sources_tbl(k).last_update_date              := SYSDATE;
8826                   l_tax_sources_tbl(k).last_update_login             := G_LOGIN_ID;
8827                   l_tax_sources_tbl(k).object_version_number         := null;
8828 
8829           l_tax_sources_tbl(k).line_name                 := l_name;
8830           l_tax_sources_tbl(k).application_id            := G_OKL_APPLICATION_ID;
8831           l_tax_sources_tbl(k).tax_reporting_flag        := 'Y';
8832           l_tax_sources_tbl(k).default_taxation_country  := l_taxation_country;
8833           l_tax_sources_tbl(k).product_category          := l_get_zx_taxable_line_info_rec.product_category;
8834           l_tax_sources_tbl(k).user_defined_fisc_class   := l_get_zx_taxable_line_info_rec.user_defined_fisc_class;
8835           l_tax_sources_tbl(k).line_intended_use         := l_get_zx_taxable_line_info_rec.line_intended_use;
8836           l_tax_sources_tbl(k).tax_classification_code   := l_get_zx_taxable_line_info_rec.input_tax_classification_code;
8837           l_tax_sources_tbl(k).inventory_item_id         := null;
8838           l_tax_sources_tbl(k).bill_to_cust_acct_id      := l_cust_acct_id;
8839           l_tax_sources_tbl(k).org_id                    := l_get_zx_taxable_line_info_rec.internal_organization_id;
8840           l_tax_sources_tbl(k).legal_entity_id           := l_get_zx_taxable_line_info_rec.legal_entity_id;
8841           l_tax_sources_tbl(k).line_amt                  := l_get_zx_taxable_line_info_rec.line_amt;
8842           l_tax_sources_tbl(k).assessable_value          := l_get_zx_taxable_line_info_rec.taxable_amt;
8843 
8844           l_tax_sources_tbl(k).total_tax                 := l_total_tax;
8845           l_tax_sources_tbl(k).trx_date                  := l_get_zx_taxable_line_info_rec.trx_date;
8846           l_tax_sources_tbl(k).try_id                    := l_ts_trx_type_id_det ; --SECHAWLA 22-APR-08 6975983 --null;
8847 
8848           l_tax_sources_tbl(k).product_type                    := l_get_zx_taxable_line_info_rec.product_type;
8849           l_tax_sources_tbl(k).product_fisc_classification     := l_get_zx_taxable_line_info_rec.product_fisc_classification;
8850           l_tax_sources_tbl(k).provnl_tax_determination_date   := l_get_zx_taxable_line_info_rec.tax_determine_date;
8851           l_tax_sources_tbl(k).ship_to_location_id             := null;
8852           l_tax_sources_tbl(k).ship_to_party_site_id           := null;
8853           l_tax_sources_tbl(k).ship_to_party_id                := null;
8854           l_tax_sources_tbl(k).bill_to_party_site_id           := null;
8855           l_tax_sources_tbl(k).bill_to_location_id             := null;
8856           l_tax_sources_tbl(k).bill_to_party_id                := null;
8857           l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id   := null;
8858           l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id   := null;
8859           l_tax_sources_tbl(k).trx_currency_code               := l_get_zx_taxable_line_info_rec.trx_currency_code;
8860           l_tax_sources_tbl(k).currency_conversion_type        := l_get_zx_taxable_line_info_rec.currency_conversion_type;
8861           l_tax_sources_tbl(k).currency_conversion_rate        := l_get_zx_taxable_line_info_rec.currency_conversion_rate;
8862           l_tax_sources_tbl(k).currency_conversion_date        := l_get_zx_taxable_line_info_rec.currency_conversion_date;
8863 
8864           -- Populate Tax trx details for each tax source
8865           FOR l_get_zx_tax_lines_rec IN l_get_zx_tax_lines(l_k_billed_streams_tbl(k).customer_trx_id,
8866                                                            l_k_billed_streams_tbl(k).customer_trx_line_id) LOOP
8867 
8868             l_tax_trx_details_tbl(i).id                           := get_seq_id;
8869             l_tax_trx_details_tbl(i).txs_id                       := l_tax_sources_tbl(k).id;
8870                 l_tax_trx_details_tbl(i).tax_determination_date       := l_get_zx_tax_lines_rec.tax_determine_date;
8871                 l_tax_trx_details_tbl(i).tax_rate_id                  := l_get_zx_tax_lines_rec.tax_rate_id;
8872                 l_tax_trx_details_tbl(i).tax_rate_code                := l_get_zx_tax_lines_rec.tax_rate_code;
8873                 l_tax_trx_details_tbl(i).taxable_amount               := l_get_zx_tax_lines_rec.taxable_amt;
8874                 l_tax_trx_details_tbl(i).tax_exemption_id             := l_get_zx_tax_lines_rec.tax_exemption_id;
8875                 l_tax_trx_details_tbl(i).tax_rate                     := l_get_zx_tax_lines_rec.tax_rate;
8876                 l_tax_trx_details_tbl(i).tax_amount                   := l_get_zx_tax_lines_rec.tax_amt;
8877 
8878             l_tax_trx_details_tbl(i).tax_date                     := l_get_zx_tax_lines_rec.tax_date;
8879             l_tax_trx_details_tbl(i).line_amt                     := l_get_zx_tax_lines_rec.line_amt;
8880             l_tax_trx_details_tbl(i).internal_organization_id     := l_get_zx_tax_lines_rec.internal_organization_id;
8881             l_tax_trx_details_tbl(i).application_id               := l_get_zx_tax_lines_rec.application_id;
8882             l_tax_trx_details_tbl(i).entity_code                  := l_get_zx_tax_lines_rec.entity_code;
8883             l_tax_trx_details_tbl(i).event_class_code             := l_get_zx_tax_lines_rec.event_class_code;
8884             l_tax_trx_details_tbl(i).event_type_code              := l_get_zx_tax_lines_rec.event_type_code;
8885             l_tax_trx_details_tbl(i).trx_id                       := l_tax_sources_tbl(k).trx_id;
8886             l_tax_trx_details_tbl(i).trx_line_id                  := l_tax_sources_tbl(k).trx_line_id;
8887             l_tax_trx_details_tbl(i).trx_level_type               := l_get_zx_tax_lines_rec.trx_level_type;
8888             l_tax_trx_details_tbl(i).trx_line_number              := l_get_zx_tax_lines_rec.trx_line_number;
8889             l_tax_trx_details_tbl(i).tax_line_number              := l_get_zx_tax_lines_rec.tax_line_number;
8890             l_tax_trx_details_tbl(i).tax_regime_id                := l_get_zx_tax_lines_rec.tax_regime_id;
8891             l_tax_trx_details_tbl(i).tax_regime_code              := l_get_zx_tax_lines_rec.tax_regime_code;
8892             l_tax_trx_details_tbl(i).tax_id                       := l_get_zx_tax_lines_rec.tax_id;
8893             l_tax_trx_details_tbl(i).tax                          := l_get_zx_tax_lines_rec.tax;
8894             l_tax_trx_details_tbl(i).tax_status_id                := l_get_zx_tax_lines_rec.tax_status_id;
8895             l_tax_trx_details_tbl(i).tax_status_code              := l_get_zx_tax_lines_rec.tax_status_code;
8896             l_tax_trx_details_tbl(i).tax_apportionment_line_number := l_get_zx_tax_lines_rec.tax_apportionment_line_number;
8897             l_tax_trx_details_tbl(i).legal_entity_id              := l_get_zx_tax_lines_rec.legal_entity_id;
8898             l_tax_trx_details_tbl(i).trx_number                   := l_get_zx_tax_lines_rec.trx_number;
8899             l_tax_trx_details_tbl(i).trx_date                     := l_get_zx_tax_lines_rec.trx_date;
8900             l_tax_trx_details_tbl(i).tax_jurisdiction_id          := l_get_zx_tax_lines_rec.tax_jurisdiction_id;
8901             l_tax_trx_details_tbl(i).tax_jurisdiction_code        := l_get_zx_tax_lines_rec.tax_jurisdiction_code;
8902             l_tax_trx_details_tbl(i).tax_type_code                := l_get_zx_tax_lines_rec.tax_type_code;
8903             l_tax_trx_details_tbl(i).tax_currency_code            := l_get_zx_tax_lines_rec.tax_currency_code;
8904             l_tax_trx_details_tbl(i).taxable_amt_tax_curr         := l_get_zx_tax_lines_rec.taxable_amt_tax_curr;
8905             l_tax_trx_details_tbl(i).trx_currency_code            := l_get_zx_tax_lines_rec.trx_currency_code;
8906             l_tax_trx_details_tbl(i).minimum_accountable_unit     := l_get_zx_tax_lines_rec.minimum_accountable_unit;
8907             l_tax_trx_details_tbl(i).precision                    := l_get_zx_tax_lines_rec.precision;
8908             l_tax_trx_details_tbl(i).currency_conversion_type     := l_get_zx_tax_lines_rec.currency_conversion_type;
8909             l_tax_trx_details_tbl(i).currency_conversion_rate     := l_get_zx_tax_lines_rec.currency_conversion_rate;
8910             l_tax_trx_details_tbl(i).currency_conversion_date     := l_get_zx_tax_lines_rec.currency_conversion_date;
8911 
8912             -- columns for backward compatibility
8913             l_tax_trx_details_tbl(i).tax_determine_date           := l_get_zx_tax_lines_rec.tax_determine_date;
8914             l_tax_trx_details_tbl(i).taxable_amt                  := l_get_zx_tax_lines_rec.taxable_amt;
8915             l_tax_trx_details_tbl(i).tax_amt                      := l_get_zx_tax_lines_rec.tax_amt;
8916                 l_tax_trx_details_tbl(i).billed_yn                    := 'Y'; -- tax lines calculated by tax engine are not billed
8917                 l_tax_trx_details_tbl(i).tax_call_type_code           := G_TAX_SCHEDULE;
8918 
8919                 l_tax_trx_details_tbl(i).program_id                   := null;
8920                 l_tax_trx_details_tbl(i).request_id                   := null;
8921                 l_tax_trx_details_tbl(i).program_application_id       := null;
8922                 l_tax_trx_details_tbl(i).program_update_date          := null;
8923                 l_tax_trx_details_tbl(i).attribute_category           := null;
8924                 l_tax_trx_details_tbl(i).attribute1                   := null;
8925                 l_tax_trx_details_tbl(i).attribute2                   := null;
8926                 l_tax_trx_details_tbl(i).attribute3                   := null;
8927                 l_tax_trx_details_tbl(i).attribute4                   := null;
8928                 l_tax_trx_details_tbl(i).attribute5                   := null;
8929                 l_tax_trx_details_tbl(i).attribute6                   := null;
8930                 l_tax_trx_details_tbl(i).attribute7                   := null;
8931                 l_tax_trx_details_tbl(i).attribute8                   := null;
8932                 l_tax_trx_details_tbl(i).attribute9                   := null;
8933                 l_tax_trx_details_tbl(i).attribute10                  := null;
8934                 l_tax_trx_details_tbl(i).attribute11                  := null;
8935                 l_tax_trx_details_tbl(i).attribute12                  := null;
8936                 l_tax_trx_details_tbl(i).attribute13                  := null;
8937                 l_tax_trx_details_tbl(i).attribute14                  := null;
8938                 l_tax_trx_details_tbl(i).attribute15                  := null;
8939                 l_tax_trx_details_tbl(i).created_by                   := G_USER_ID;
8940                 l_tax_trx_details_tbl(i).creation_date                := SYSDATE;
8941                 l_tax_trx_details_tbl(i).last_updated_by              := G_USER_ID;
8942                 l_tax_trx_details_tbl(i).last_update_date             := SYSDATE;
8943                 l_tax_trx_details_tbl(i).last_update_login            := G_LOGIN_ID;
8944                 l_tax_trx_details_tbl(i).object_version_number        := null;
8945 
8946             i := i + 1;
8947           END LOOP;
8948 
8949         END LOOP;
8950       END IF;
8951       EXIT WHEN c_k_billed_streams_csr%NOTFOUND;
8952     END LOOP;
8953     CLOSE c_k_billed_streams_csr;
8954 
8955         -- At this point l_tax_sources_tbl and l_tax_trx_details_tbl tables have
8956         -- all the data for the billed stream elements
8957 
8958     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8959       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8960                                           'before Insert into okl_tax_sources ');
8961     END IF;
8962 
8963     ---- Insert into okl_tax_sources begin -----
8964     BEGIN
8965       IF l_tax_sources_tbl.COUNT > 0 THEN
8966         FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
8967         -- SAVE EXCEPTIONS
8968         INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
8969       END IF;
8970     EXCEPTION
8971       WHEN OTHERS THEN
8972         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
8973                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
8974                         OKL_API.set_message(p_app_name      => 'OKL',
8975                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
8976                                 p_token1        => 'TABLE_NAME',
8977                                 p_token1_value  => 'OKL_TAX_SOURCES',
8978                                 p_token2        => 'ERROR_CODE',
8979                                                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
8980                                                                 p_token3        => 'ITERATION',
8981                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
8982                   END LOOP;
8983                   RAISE OKL_API.G_EXCEPTION_ERROR;
8984                 END IF;
8985     END;
8986     ---- Insert into okl_tax_sources end -----
8987 
8988     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
8989       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
8990                                           'before Insert into okl_tax_trx_details ');
8991     END IF;
8992 
8993         ---- Insert into okl_tax_trx_details begin -----
8994     BEGIN
8995       IF l_tax_trx_details_tbl.COUNT > 0 THEN
8996         FORALL indx IN l_tax_trx_details_tbl.FIRST..l_tax_trx_details_tbl.LAST
8997         -- SAVE EXCEPTIONS
8998           INSERT INTO okl_tax_trx_details VALUES l_tax_trx_details_tbl(indx);
8999       END IF;
9000     EXCEPTION
9001       WHEN OTHERS THEN
9002         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
9003                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
9004                         OKL_API.set_message(p_app_name      => 'OKL',
9005                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
9006                                 p_token1        => 'TABLE_NAME',
9007                                 p_token1_value  => 'OKL_TAX_TRX_DETAILS',
9008                                 p_token2        => 'ERROR_CODE',
9009                                                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
9010                                                                 p_token3        => 'ITERATION',
9011                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
9012                   END LOOP;
9013                   RAISE OKL_API.G_EXCEPTION_ERROR;
9014                 END IF;
9015     END;
9016 
9017         ---- Insert into okl_tax_trx_details end -----
9018 
9019         -- At this point tax sources and tax trx details have been created for the already billed
9020         -- and taxed stream elements under transaction type 'Tax Schedule'
9021 
9022         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9023       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9024                                           'Process Billed Stream elements end ');
9025     END IF;
9026     --------------- Process Billed Stream elements - End -------------------
9027 
9028     -----------------Process Unbilled Stream elements - Start --------------
9029     OPEN  c_k_unbilled_streams_csr(l_ts_khr_id, l_ts_start_date, l_ts_end_date);
9030     FETCH c_k_unbilled_streams_csr INTO l_K_unbilled_streams_rec;
9031     IF c_k_unbilled_streams_csr%FOUND THEN
9032       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9033         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9034                                           'l_unbilled_strms_exist = TRUE ');
9035       END IF;
9036 
9037       l_unbilled_strms_exist := TRUE;
9038     END IF;
9039     CLOSE c_k_unbilled_streams_csr;
9040 
9041     IF (l_unbilled_strms_exist) THEN -- Processing for Unbilled streams - Start
9042 
9043           -------------- Get financial asset line level TBC Determinants ---------------
9044       i := 0;
9045       OPEN l_finassets_csr(l_ts_khr_id);
9046       LOOP
9047         l_finassets_tbl.DELETE;
9048         FETCH l_finassets_csr BULK COLLECT INTO l_finassets_tbl LIMIT l_fetch_size;
9049 
9050         IF l_finassets_tbl.COUNT > 0 THEN
9051           FOR K IN l_finassets_tbl.FIRST..l_finassets_tbl.LAST LOOP
9052 
9053                 get_asset_tax_params(
9054                                                                 p_api_version                  => p_api_version,
9055                                                         p_init_msg_list                => OKC_API.G_FALSE,
9056                                                         x_return_status                => x_return_status,
9057                                                         x_msg_count                    => x_msg_count,
9058                                                         x_msg_data                     => x_msg_data,
9059                                                         p_khr_id                       => l_ts_khr_id,
9060                                                         p_kle_id                       => l_finassets_tbl(k).fin_asset_id,
9061                                                         p_source_trx_name              => p_source_trx_name,
9062                                                 p_source_table                             => p_source_table,
9063                                                         x_transfer_of_title                        => l_ts_transfer_of_title,
9064                                                         x_sale_lease_back                          => l_ts_sale_lease_back,
9065                                                         x_purchase_of_lease                        => l_ts_purchase_of_lease,
9066                                                         x_usage_of_equipment               => l_ts_usage_of_equipment,
9067                                                                 x_age_of_equipment                         => l_ts_age_of_equipment,
9068                                                                 x_vendor_site_id                       => l_ts_vendor_site_id);
9069 
9070             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9071                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9072                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9073                   RAISE OKL_API.G_EXCEPTION_ERROR;
9074                 END IF;
9075 
9076                 l_ts_asset_level_det_tbl(i).fin_asset_id := l_finassets_tbl(k).fin_asset_id;
9077                 l_ts_asset_level_det_tbl(i).transfer_of_title := l_ts_transfer_of_title;
9078                 l_ts_asset_level_det_tbl(i).sale_lease_back := l_ts_sale_lease_back;
9079                 l_ts_asset_level_det_tbl(i).purchase_of_lease := l_ts_purchase_of_lease;
9080                 l_ts_asset_level_det_tbl(i).usage_of_equipment  := l_ts_usage_of_equipment;
9081                 l_ts_asset_level_det_tbl(i).vendor_site_id      := l_ts_vendor_site_id;
9082                 l_ts_asset_level_det_tbl(i).age_of_equipment := l_ts_age_of_equipment;
9083 
9084                 i := i + 1;
9085           END LOOP;
9086         END IF;
9087         EXIT WHEN l_finassets_csr%NOTFOUND;
9088       END LOOP;
9089       CLOSE l_finassets_csr;
9090 
9091       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9092         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9093                                           'after hdr level and asset level determinant fetch ');
9094       END IF;
9095 
9096       -------- Get all codes at stream type level (for each unique combination of K/Line and stream type) -----------
9097 
9098       OPEN l_kstreamtypes_csr(l_ts_khr_id);
9099       LOOP
9100         l_kstreamtypes_tbl.DELETE;
9101         FETCH l_kstreamtypes_csr BULK COLLECT INTO l_kstreamtypes_tbl LIMIT l_fetch_size;
9102 
9103         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9104           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9105                                                           'l_kstreamtypes_tbl.COUNT '||l_kstreamtypes_tbl.COUNT);
9106         END IF;
9107 
9108         IF l_kstreamtypes_tbl.COUNT > 0 THEN
9109 
9110           l_tax_code_count := 1;
9111           lx_tax_codes_tbl.DELETE;
9112           FOR K IN l_kstreamtypes_tbl.FIRST..l_kstreamtypes_tbl.LAST LOOP
9113 
9114                 IF (l_kstreamtypes_tbl(k).line_id IS NULL OR
9115                 l_kstreamtypes_tbl(k).lty_code IN ('SOLD_SERVICE', 'FEE')) THEN
9116 
9117               -- K level stream or service/fee line level stream
9118               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9119                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9120                                                                           'hdr level OR Service/Fee Line level ');
9121                   END IF;
9122 
9123               l_vendor_id := NULL;
9124               l_ts_vendor_site_id := NULL;
9125 
9126               -- Vendor site is applicable for fin asset / service / fee lines / sublines
9127               -- Vendor site is not applicable at the K level
9128               IF l_kstreamtypes_tbl(k).line_id IS NOT NULL THEN -- service or fee line
9129                 -- Check if multiple vendors exist.  If so, vendor location is
9130                 -- not a determinant, get the service / fee line Vendor
9131                         l_vndr_cnt := 0;
9132 
9133                 FOR l_partyroles_rec IN l_partyroles_csr(l_kstreamtypes_tbl(k).line_id) LOOP -- pass top service/fee line id
9134                           l_vndr_cnt := l_vndr_cnt + 1;
9135                           l_vendor_id := l_partyroles_rec.object1_id1;  -- vendor is optional
9136                         END LOOP;
9137 
9138                         IF l_vndr_cnt =  1 AND l_vendor_id IS NOT NULL THEN
9139                           -- get the primary pay vendor site (if defined) from AP
9140                           OPEN   l_povendorsites_csr(l_vendor_id);
9141                           FETCH  l_povendorsites_csr INTO l_ts_vendor_site_id; -- will be null if none of the sites are checked as primary
9142                           CLOSE  l_povendorsites_csr;
9143                         END IF;
9144                   END IF;
9145 
9146               populate_tax_codes( p_api_version                  => p_api_version,
9147                                   p_init_msg_list                => OKC_API.G_FALSE,
9148                                   x_return_status                => x_return_status,
9149                                   x_msg_count                    => x_msg_count,
9150                                   x_msg_data                     => x_msg_data,
9151                                   p_prch_opt_det                                 =>     l_ts_prch_opt_det,
9152                                   p_fin_prod_id_det                              =>     l_ts_fin_prod_id_det,
9153                                   p_int_disclosed_det                    =>     l_ts_int_disclosed_det,
9154                                   p_title_trnsfr_code                    =>     null,
9155                                   p_sale_lease_back_code                 =>     null,
9156                                   p_lease_purchased_code                 =>     null,
9157                                   p_equip_usage_code                     =>     null,
9158                                   p_vendor_site_id                           => l_ts_vendor_site_id,
9159                                   p_age_of_equip                                 =>     null,
9160                                   p_source_trx_name              => p_source_trx_name,
9161                                   p_book_class_code              => lx_book_class_code,
9162                                   p_tax_code_cnt                 => l_tax_code_count,
9163                                   p_sty_id                       => l_kstreamtypes_tbl(k).stream_type_id,
9164                                   p_try_id                       => l_ts_trx_type_id_det,
9165                                   p_tax_country_code             => l_taxation_country,
9166                                   p_khr_id                       => l_ts_khr_id,
9167                                   p_kle_id                       => l_kstreamtypes_tbl(k).line_id,
9168                                   p_bill_to_party_site_id        => lx_bill_to_party_site_id,
9169                                   p_bill_to_location_id          => lx_bill_to_location_id,
9170                                   p_bill_to_party_id             => lx_bill_to_party_id,
9171                                   p_bill_to_cust_acct_site_id    => lx_bill_to_siteuseid,
9172                                   p_org_id                       => l_org_id,
9173                                   p_trx_date                     => l_ts_start_date,
9174                                   px_tax_codes_tbl               => lx_tax_codes_tbl);
9175 
9176               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9177                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9178                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9179                         RAISE OKL_API.G_EXCEPTION_ERROR;
9180                   END IF;
9181 
9182               l_tax_code_count := l_tax_code_count + 1;
9183 
9184             ELSIF l_kstreamtypes_tbl(k).lty_code IN ('FREE_FORM1','LINK_SERV_ASSET','LINK_FEE_ASSET') THEN
9185                   -- Asset level stream or service/fee sub line level stream
9186 
9187                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9188                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9189                                                                           'asset / service subline / fee subline level ');
9190                   END IF;
9191 
9192                   IF l_kstreamtypes_tbl(k).lty_code = 'FREE_FORM1' THEN
9193                         l_fin_asset_id := l_kstreamtypes_tbl(k).line_id;
9194                   ELSE
9195                         -- If subline level, get the attached fin asset id
9196                         OPEN  l_finasset_csr(l_kstreamtypes_tbl(k).line_id, l_kstreamtypes_tbl(k).lty_code);
9197                         FETCH l_finasset_csr INTO l_fin_asset_id;
9198                         CLOSE l_finasset_csr;
9199                   END IF;
9200 
9201                   IF l_ts_asset_level_det_tbl.count > 0 THEN
9202                         ind := l_ts_asset_level_det_tbl.FIRST;
9203                         LOOP
9204 
9205                           IF l_ts_asset_level_det_tbl(ind).fin_asset_id = l_fin_asset_id THEN
9206 
9207                         -- Equipment Type(inventory item id)
9208                                 -- get the inventory item id
9209                                 OPEN   l_invitem_csr(l_fin_asset_id);
9210                                 FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_org_id;
9211                                 IF l_invitem_csr%NOTFOUND THEN
9212                                   OKL_API.set_message(
9213                                                      p_app_name      => 'OKL',
9214                              p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
9215                                                  p_token1        => 'ASSET_NUMBER',
9216                                                          p_token1_value  => 'FIN_ASSET_ID');
9217 
9218                                   RAISE OKL_API.G_EXCEPTION_ERROR;
9219                                 END IF;
9220                                 CLOSE  l_invitem_csr;
9221 
9222                                 -- get the Location Party ID's
9223                                 get_location_party_ids(
9224                                                                         p_api_version                  => p_api_version,
9225                                                                 p_init_msg_list                => OKC_API.G_FALSE,
9226                                                                 x_return_status                => x_return_status,
9227                                                                 x_msg_count                    => x_msg_count,
9228                                                                 x_msg_data                     => x_msg_data,
9229                                                                 p_cust_acct_id                 => l_cust_acct_id,
9230                                                                 p_fin_asset_id                 => l_fin_asset_id,
9231                                     p_khr_id                       => l_ts_khr_id,
9232                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
9233                                     x_bill_to_location_id          => lx_bill_to_location_id,
9234                                     x_bill_to_party_id             => lx_bill_to_party_id,
9235                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
9236                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
9237                                     x_ship_to_location_id          => lx_ship_to_location_id,
9238                                     x_ship_to_party_id             => lx_ship_to_party_id,
9239                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
9240 
9241                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9242                                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9243                                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9244                                   RAISE OKL_API.G_EXCEPTION_ERROR;
9245                                 END IF;
9246 
9247                     populate_tax_codes( p_api_version                  => p_api_version,
9248                                         p_init_msg_list                => OKC_API.G_FALSE,
9249                                         x_return_status                => x_return_status,
9250                                         x_msg_count                    => x_msg_count,
9251                                         x_msg_data                     => x_msg_data,
9252                                         p_prch_opt_det                             => l_ts_prch_opt_det,
9253                                         p_fin_prod_id_det                          => l_ts_fin_prod_id_det,
9254                                         p_int_disclosed_det                        => l_ts_int_disclosed_det,
9255                                         p_title_trnsfr_code                        => l_ts_asset_level_det_tbl(ind).transfer_of_title,
9256                                         p_sale_lease_back_code             => l_ts_asset_level_det_tbl(ind).sale_lease_back,
9257                                         p_lease_purchased_code             => l_ts_asset_level_det_tbl(ind).purchase_of_lease,
9258                                         p_equip_usage_code                         => l_ts_asset_level_det_tbl(ind).usage_of_equipment,
9259                                         p_vendor_site_id                           => l_ts_asset_level_det_tbl(ind).vendor_site_id,
9260                                         p_age_of_equip                             => l_ts_asset_level_det_tbl(ind).age_of_equipment,
9261                                         p_source_trx_name              => p_source_trx_name,
9262                                         p_book_class_code              => lx_book_class_code,
9263                                         p_tax_code_cnt                 => l_tax_code_count,
9264                                         p_sty_id                       => l_kstreamtypes_tbl(k).stream_type_id,
9265                                         p_try_id                       => l_ts_trx_type_id_det,
9266                                         p_tax_country_code             => l_taxation_country,
9267                                         p_khr_id                       => l_ts_khr_id,
9268                                         p_kle_id                       => l_fin_asset_id,
9269                                         p_bill_to_party_site_id        => lx_bill_to_party_site_id,
9270                                         p_bill_to_location_id          => lx_bill_to_location_id,
9271                                         p_bill_to_party_id             => lx_bill_to_party_id,
9272                                         p_bill_to_cust_acct_site_id    => lx_bill_to_siteuseid,
9273                                         p_ship_to_party_site_id         => lx_ship_to_party_site_id,
9274                                         p_ship_to_location_id           => lx_ship_to_location_id,
9275                                         p_ship_to_party_id              => lx_ship_to_party_id,
9276                                         p_ship_to_cust_acct_site_id     => lx_ship_to_siteuseid,
9277                                         p_inventory_item_id             => l_inv_item_id,
9278                                         p_org_id                        => l_org_id,
9279                                         p_trx_date                      => l_ts_start_date,
9280                                         px_tax_codes_tbl                => lx_tax_codes_tbl);
9281 
9282                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9283                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9284                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9285                               RAISE OKL_API.G_EXCEPTION_ERROR;
9286                         END IF;
9287 
9288                     l_tax_code_count := l_tax_code_count + 1;
9289 
9290                             EXIT;
9291                           END IF;
9292 
9293                   EXIT WHEN (ind = l_ts_asset_level_det_tbl.LAST);
9294                   ind := l_ts_asset_level_det_tbl.NEXT(ind);
9295                     END LOOP;
9296               END IF;
9297             END IF;
9298 
9299           END LOOP;
9300         END IF;
9301         EXIT WHEN l_kstreamtypes_csr%NOTFOUND;
9302       END LOOP;
9303       CLOSE l_kstreamtypes_csr;
9304 
9305       -- Taxable Basis Override not allowed for Tax Schedule type of calls
9306 
9307       l_tax_sources_tbl.DELETE;
9308       OPEN  c_k_unbilled_streams_csr(l_ts_khr_id, l_ts_start_date, l_ts_end_date);
9309       LOOP
9310         l_contract_streams_tbl.DELETE;
9311         FETCH c_k_unbilled_streams_csr BULK COLLECT INTO l_contract_streams_tbl LIMIT l_fetch_size;
9312 
9313                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9314             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9315                                                  'l_contract_streams_tbl.COUNT '||l_contract_streams_tbl.COUNT );
9316           END IF;
9317 
9318                   IF l_contract_streams_tbl.COUNT > 0 THEN
9319             -- insert each row into tax sources
9320             -- fill in the missing values IN l_contract_streams_tbl
9321             FOR K IN l_contract_streams_tbl.FIRST..l_contract_streams_tbl.LAST LOOP
9322 
9323               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9324                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9325                                                                                  'l_contract_streams_tbl(k).lty_code '||l_contract_streams_tbl(k).lty_code );
9326                           END IF;
9327 
9328               -- populate asset number for fin asset line / sublines
9329               IF l_contract_streams_tbl(k).lty_code IN ('FREE_FORM1','LINK_SERV_ASSET', 'LINK_FEE_ASSET') THEN
9330 
9331                 IF l_contract_streams_tbl(k).lty_code = 'FREE_FORM1' THEN
9332                   l_asset_line_id := l_contract_streams_tbl(k).kle_id;
9333                 ELSE -- Service subline or Fee subline
9334                   --get the financial asset associated with the subline
9335 
9336                   -- see if pervious fetch fro aaatched asset id can be stored and used here instead of curosr fetch
9337                           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
9338                           FETCH l_finasset_csr INTO l_asset_line_id;
9339                           CLOSE l_finasset_csr;
9340                         END IF;
9341 
9342                 l_contract_streams_tbl(k).asset_line_id := l_asset_line_id;  -- populate asset id for subline as well
9343 
9344                 OPEN  l_okclines_csr(l_asset_line_id);
9345                                 FETCH l_okclines_csr INTO l_name, l_lse_id;
9346                                 CLOSE  l_okclines_csr;
9347 
9348                                 l_contract_streams_tbl(k).asset_number := l_name;-- populate asset num for subline as well
9349 
9350                                 get_location_party_ids(
9351                                                                         p_api_version                  => p_api_version,
9352                                                                 p_init_msg_list                => OKC_API.G_FALSE,
9353                                                                 x_return_status                => x_return_status,
9354                                                                 x_msg_count                    => x_msg_count,
9355                                                                 x_msg_data                     => x_msg_data,
9356                                                                 p_cust_acct_id                 => l_cust_acct_id,
9357                                                                 p_fin_asset_id                 => l_asset_line_id,
9358                                     p_khr_id                       => l_ts_khr_id,
9359                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
9360                                     x_bill_to_location_id          => lx_bill_to_location_id,
9361                                     x_bill_to_party_id             => lx_bill_to_party_id,
9362                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
9363                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
9364                                     x_ship_to_location_id          => lx_ship_to_location_id,
9365                                     x_ship_to_party_id             => lx_ship_to_party_id,
9366                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
9367 
9368                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9369                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9370                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9371                           RAISE OKL_API.G_EXCEPTION_ERROR;
9372                         END IF;
9373 
9374                         l_contract_streams_tbl(k).ship_to_siteuseid := lx_ship_to_siteuseid;
9375 
9376                         -- get the inventory item id
9377                         OPEN l_invitem_csr(l_asset_line_id);
9378                         FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
9379                         IF l_invitem_csr%NOTFOUND THEN
9380                           OKL_API.set_message(p_app_name      => 'OKL',
9381                                       p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
9382                                                                           p_token1        => 'ASSET_NUMBER',
9383                                                                           p_token1_value  => l_asset_number);
9384                   RAISE OKL_API.G_EXCEPTION_ERROR;
9385                         END IF;
9386                         CLOSE  l_invitem_csr;
9387 
9388                         l_contract_streams_tbl(k).inventory_item_id := l_inv_item_id;
9389 
9390               ELSE
9391                 OPEN  l_okclines_csr(l_contract_streams_tbl(k).kle_id);
9392                                 FETCH l_okclines_csr INTO l_name, l_lse_id;
9393                                 CLOSE  l_okclines_csr;
9394                           END IF;
9395 
9396               -- Populate tax sources table with transaction type of 'Tax Schedule'
9397               l_tax_sources_tbl(k).id                               := get_seq_id;
9398               l_tax_sources_tbl(k).kle_id                           := l_contract_streams_tbl(k).kle_id;
9399               l_tax_sources_tbl(k).khr_id                           := l_ts_khr_id;
9400               l_tax_sources_tbl(k).asset_number                     := l_contract_streams_tbl(k).asset_number;
9401 
9402               l_tax_sources_tbl(k).trx_id                           := p_source_trx_id;
9403               l_tax_sources_tbl(k).trx_line_id                      := l_tax_sources_tbl(k).id;
9404               l_tax_sources_tbl(k).entity_code                      := G_TAX_SCH_ENTITY_CODE;
9405               l_tax_sources_tbl(k).event_class_code                 := G_TAX_SCHEDULE;
9406               l_tax_sources_tbl(k).trx_level_type                   := G_TRX_LEVEL_TYPE;
9407               l_tax_sources_tbl(k).adjusted_doc_entity_code         := null;
9408               l_tax_sources_tbl(k).adjusted_doc_event_class_code    := null;
9409               l_tax_sources_tbl(k).adjusted_doc_trx_id              := null;
9410               l_tax_sources_tbl(k).adjusted_doc_trx_line_id         := null;
9411               l_tax_sources_tbl(k).adjusted_doc_trx_level_type      := null;
9412               l_tax_sources_tbl(k).adjusted_doc_number              := null;
9413               l_tax_sources_tbl(k).adjusted_doc_date                := null;
9414               l_tax_sources_tbl(k).tax_call_type_code               := G_TAX_SCHEDULE;
9415               l_tax_sources_tbl(k).sty_id                           := l_contract_streams_tbl(k).stream_type_id;
9416 
9417               l_value_fetched := FALSE;
9418                   IF lx_tax_codes_tbl.COUNT > 0 THEN
9419                         ind := lx_tax_codes_tbl.FIRST;
9420                         LOOP
9421 
9422                           IF ((nvl(lx_tax_codes_tbl(ind).kle_id,-11) = nvl(l_contract_streams_tbl(k).kle_id,-11)) AND
9423                                   (lx_tax_codes_tbl(ind).sty_id = l_contract_streams_tbl(k).stream_type_id)) THEN
9424 
9425                                 l_tbc_code := lx_tax_codes_tbl(ind).tbc_code;
9426                     l_ufc_code := lx_tax_codes_tbl(ind).ufc_code;
9427                     l_pc_code := lx_tax_codes_tbl(ind).pc_code;
9428                     l_tax_class_code := lx_tax_codes_tbl(ind).tax_class_code;
9429 
9430                             EXIT;
9431                           END IF;
9432 
9433                           EXIT WHEN (ind = lx_tax_codes_tbl.LAST);
9434                   ind := lx_tax_codes_tbl.NEXT(ind);
9435                         END LOOP;
9436                         l_contract_streams_tbl(k).trx_business_category := l_contract_streams_tbc;
9437                   END IF;
9438 
9439               l_tax_sources_tbl(k).trx_business_category            := l_tbc_code;
9440               l_tax_sources_tbl(k).tax_line_status_code             := G_ACTIVE_STATUS;
9441               l_tax_sources_tbl(k).sel_id                           := l_contract_streams_tbl(k).sel_id;
9442               l_tax_sources_tbl(k).reported_yn                      := 'N';
9443                       l_tax_sources_tbl(k).program_id                       := null;
9444                       l_tax_sources_tbl(k).request_id                       := null;
9445                       l_tax_sources_tbl(k).program_application_id           := null;
9446                       l_tax_sources_tbl(k).program_update_date              := null;
9447                       l_tax_sources_tbl(k).attribute_category               := null;
9448 
9449                       l_tax_sources_tbl(k).attribute1                    := null;
9450                       l_tax_sources_tbl(k).attribute2                    := null;
9451                       l_tax_sources_tbl(k).attribute3                    := null;
9452                       l_tax_sources_tbl(k).attribute4                    := null;
9453                       l_tax_sources_tbl(k).attribute5                    := null;
9454                       l_tax_sources_tbl(k).attribute6                    := null;
9455                       l_tax_sources_tbl(k).attribute7                    := null;
9456                       l_tax_sources_tbl(k).attribute8                    := null;
9457                       l_tax_sources_tbl(k).attribute9                    := null;
9458                       l_tax_sources_tbl(k).attribute10                   := null;
9459                       l_tax_sources_tbl(k).attribute11                   := null;
9460                       l_tax_sources_tbl(k).attribute12                   := null;
9461                       l_tax_sources_tbl(k).attribute13                   := null;
9462                       l_tax_sources_tbl(k).attribute14                   := null;
9463                       l_tax_sources_tbl(k).attribute15                   := null;
9464                       l_tax_sources_tbl(k).created_by                    := G_USER_ID;
9465                       l_tax_sources_tbl(k).creation_date                 := SYSDATE;
9466                       l_tax_sources_tbl(k).last_updated_by               := G_USER_ID;
9467                       l_tax_sources_tbl(k).last_update_date              := SYSDATE;
9468                       l_tax_sources_tbl(k).last_update_login             := G_LOGIN_ID;
9469                       l_tax_sources_tbl(k).object_version_number         := null;
9470 
9471               l_tax_sources_tbl(k).line_name                 := l_name;
9472               l_tax_sources_tbl(k).application_id            := G_OKL_APPLICATION_ID;
9473               l_tax_sources_tbl(k).tax_reporting_flag        := 'N';
9474               l_tax_sources_tbl(k).default_taxation_country  := l_taxation_country;
9475               l_tax_sources_tbl(k).product_category          := l_pc_code;
9476               l_tax_sources_tbl(k).user_defined_fisc_class   := l_ufc_code;
9477               l_tax_sources_tbl(k).line_intended_use         := l_ts_age_of_equipment;
9478               l_tax_sources_tbl(k).tax_classification_code   := l_tax_class_code;
9479               l_tax_sources_tbl(k).inventory_item_id         := l_contract_streams_tbl(k).inventory_item_id;
9480               l_tax_sources_tbl(k).bill_to_cust_acct_id      := l_cust_acct_id;
9481               l_tax_sources_tbl(k).org_id                    := l_org_id;
9482               l_tax_sources_tbl(k).legal_entity_id           := l_legal_entity_id;
9483               l_tax_sources_tbl(k).line_amt                  := l_contract_streams_tbl(k).amount;
9484               l_tax_sources_tbl(k).assessable_value          := l_contract_streams_tbl(k).amount;
9485 
9486               l_tax_sources_tbl(k).total_tax                 := null;
9487               l_tax_sources_tbl(k).trx_date                  := l_contract_streams_tbl(k).stream_element_date;
9488               l_tax_sources_tbl(k).try_id                    := l_ts_trx_type_id_det;
9489 
9490               l_tax_sources_tbl(k).product_type                    := G_DEFAULT_PRODUCT_TYPE;
9491               l_tax_sources_tbl(k).product_fisc_classification     := null;
9492               l_tax_sources_tbl(k).provnl_tax_determination_date   := l_contract_streams_tbl(k).stream_element_date;
9493               l_tax_sources_tbl(k).ship_to_location_id             := lx_ship_to_location_id;
9494               l_tax_sources_tbl(k).ship_to_party_site_id           := lx_ship_to_party_site_id;
9495               l_tax_sources_tbl(k).ship_to_party_id                := lx_ship_to_party_id;
9496               l_tax_sources_tbl(k).bill_to_party_site_id           := lx_bill_to_party_site_id;
9497               l_tax_sources_tbl(k).bill_to_location_id             := lx_bill_to_location_id;
9498               l_tax_sources_tbl(k).bill_to_party_id                := lx_bill_to_party_id;
9499               l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id   := lx_ship_to_siteuseid;
9500               l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id   := lx_bill_to_siteuseid;
9501               l_tax_sources_tbl(k).trx_currency_code               := l_currency_code;
9502               l_tax_sources_tbl(k).currency_conversion_type        := lx_currency_conversion_type;
9503               l_tax_sources_tbl(k).currency_conversion_rate        := lx_currency_conversion_rate;
9504               l_tax_sources_tbl(k).currency_conversion_date        := lx_currency_conversion_date;
9505 
9506               -- Populate Tax Trx Table to call 'calculate_tax'
9507               lx_line_params_tbl(k).application_id                     := G_OKL_APPLICATION_ID;
9508               lx_line_params_tbl(k).trx_id                             := p_source_trx_id;
9509               lx_line_params_tbl(k).internal_organization_id           := l_org_id;
9510               lx_line_params_tbl(k).entity_code                        := l_tax_sources_tbl(k).entity_code;
9511               lx_line_params_tbl(k).event_class_code                   := l_tax_sources_tbl(k).event_class_code;
9512               lx_line_params_tbl(k).event_type_code                    := G_TAX_SCH_CRE_EVT_TYPE_CODE;
9513               lx_line_params_tbl(k).trx_date                           := l_tax_sources_tbl(k).trx_date;
9514               lx_line_params_tbl(k).ledger_id                          := l_ledger_id;
9515               lx_line_params_tbl(k).legal_entity_id                    := l_legal_entity_id;
9516               lx_line_params_tbl(k).trx_level_type                     := l_tax_sources_tbl(k).trx_level_type;
9517               lx_line_params_tbl(k).line_level_action                  := G_CREATE_LINE_LEVEL_ACTION;
9518 
9519               lx_line_params_tbl(k).trx_line_id                        := l_tax_sources_tbl(k).trx_line_id;
9520 
9521               lx_line_params_tbl(k).line_amt                           := l_tax_sources_tbl(k).line_amt;
9522               lx_line_params_tbl(k).tax_reporting_flag                 := l_tax_sources_tbl(k).tax_reporting_flag;
9523               lx_line_params_tbl(k).default_taxation_country           := l_tax_sources_tbl(k).default_taxation_country;
9524               lx_line_params_tbl(k).product_type                       := l_tax_sources_tbl(k).product_type;
9525               lx_line_params_tbl(k).output_tax_classification_code     := l_tax_sources_tbl(k).tax_classification_code;
9526               lx_line_params_tbl(k).assessable_value                   := l_tax_sources_tbl(k).line_amt;
9527               lx_line_params_tbl(k).receivables_trx_type_id            := l_cust_trx_type_id;
9528               lx_line_params_tbl(k).product_id                         := l_tax_sources_tbl(k).inventory_item_id;
9529               lx_line_params_tbl(k).adjusted_doc_entity_code           := null;
9530               lx_line_params_tbl(k).adjusted_doc_event_class_code      := null;
9531               lx_line_params_tbl(k).adjusted_doc_trx_id                := null;
9532               lx_line_params_tbl(k).adjusted_doc_line_id               := null;
9533               lx_line_params_tbl(k).adjusted_doc_trx_level_type        := null;
9534               lx_line_params_tbl(k).adjusted_doc_number                := null;
9535               lx_line_params_tbl(k).adjusted_doc_date                  := null;
9536               lx_line_params_tbl(k).line_amt_includes_tax_flag         := 'N';
9537 
9538               lx_line_params_tbl(k).trx_business_category              := l_tax_sources_tbl(k).trx_business_category;
9539               lx_line_params_tbl(k).product_category                   := l_tax_sources_tbl(k).product_category;
9540               lx_line_params_tbl(k).user_defined_fisc_class            := l_tax_sources_tbl(k).user_defined_fisc_class;
9541               lx_line_params_tbl(k).line_intended_use                  := l_tax_sources_tbl(k).line_intended_use;
9542               lx_line_params_tbl(k).ship_to_cust_acct_site_use_id      := l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id;
9543               lx_line_params_tbl(k).bill_to_cust_acct_site_use_id      := l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id;
9544               lx_line_params_tbl(k).bill_to_party_site_id              := l_tax_sources_tbl(k).bill_to_party_site_id;
9545               lx_line_params_tbl(k).bill_to_location_id                := l_tax_sources_tbl(k).bill_to_location_id;
9546               lx_line_params_tbl(k).bill_to_party_id                   := l_tax_sources_tbl(k).bill_to_party_id;
9547               lx_line_params_tbl(k).ship_to_party_site_id              := l_tax_sources_tbl(k).ship_to_party_site_id;
9548               lx_line_params_tbl(k).ship_to_location_id                := l_tax_sources_tbl(k).ship_to_location_id;
9549               lx_line_params_tbl(k).ship_to_party_id                   := l_tax_sources_tbl(k).ship_to_party_id;
9550               lx_line_params_tbl(k).rounding_ship_to_party_id          := l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id;
9551               lx_line_params_tbl(k).rounding_bill_to_party_id          := l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id;
9552               lx_line_params_tbl(k).trx_currency_code                  := l_tax_sources_tbl(k).trx_currency_code;
9553               lx_line_params_tbl(k).precision                          := l_precision;
9554               lx_line_params_tbl(k).minimum_accountable_unit           := l_minimum_accountable_unit;
9555               lx_line_params_tbl(k).currency_conversion_date           := l_tax_sources_tbl(k).currency_conversion_date;
9556               lx_line_params_tbl(k).currency_conversion_rate           := l_tax_sources_tbl(k).currency_conversion_rate;
9557               lx_line_params_tbl(k).currency_conversion_type           := l_tax_sources_tbl(k).currency_conversion_type;
9558 
9559             END LOOP;
9560           END IF;
9561 
9562           EXIT WHEN c_k_unbilled_streams_csr%NOTFOUND;
9563       END LOOP;
9564       CLOSE c_k_unbilled_streams_csr;
9565 
9566       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9567         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9568                                                                                  'before Insert into okl_tax_sources ');
9569           END IF;
9570 
9571       ---- Insert into okl_tax_sources begin -----
9572       BEGIN
9573         IF l_tax_sources_tbl.COUNT > 0 THEN
9574           FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
9575           -- SAVE EXCEPTIONS
9576           INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
9577         END IF;
9578       EXCEPTION
9579         WHEN OTHERS THEN
9580           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
9581                     FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
9582                           OKL_API.set_message(p_app_name      => 'OKL',
9583                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
9584                                 p_token1        => 'TABLE_NAME',
9585                                 p_token1_value  => 'OKL_TAX_SOURCES',
9586                                 p_token2        => 'ERROR_CODE',
9587                                                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
9588                                                                 p_token3        => 'ITERATION',
9589                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
9590                     END LOOP;
9591                     RAISE OKL_API.G_EXCEPTION_ERROR;
9592                   END IF;
9593       END;
9594       ---- Insert into okl_tax_sources end -----
9595 
9596       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9597         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9598                                                  'lx_line_params_tbl.COUNT '||lx_line_params_tbl.COUNT);
9599           END IF;
9600 
9601       IF lx_line_params_tbl.COUNT > 0 THEN
9602             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9603                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9604                                'Before Calling OKL_TAX_INTERFACE_PVT.calculate_tax  '||x_return_status);
9605             END IF;
9606 
9607         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
9608         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
9609         lp_hdr_params_rec.internal_organization_id := l_org_id;
9610         lp_hdr_params_rec.entity_code              := G_TAX_SCH_ENTITY_CODE;
9611         lp_hdr_params_rec.event_class_code         := G_TAX_SCHEDULE;
9612         lp_hdr_params_rec.event_type_code          := G_TAX_SCH_CRE_EVT_TYPE_CODE;
9613         lp_hdr_params_rec.quote_flag               := 'Y';
9614 
9615         OKL_TAX_INTERFACE_PVT.calculate_tax(
9616                                     p_api_version       =>  p_api_version,
9617                                     p_init_msg_list     =>  p_init_msg_list,
9618                                     x_return_status     =>  x_return_status,
9619                                     x_msg_count         =>  x_msg_count,
9620                                     x_msg_data          =>  x_msg_data,
9621                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
9622                                     p_line_params_tbl   =>  lx_line_params_tbl);
9623 
9624         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9625                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9626                                    'After tax engine call '||x_return_status);
9627             END IF;
9628 
9629             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9630           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9631         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9632           RAISE OKL_API.G_EXCEPTION_ERROR;
9633         END IF;
9634       END IF;
9635 
9636       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9637         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9638              'Calling "update_tax_sources_total" .. ');
9639       END IF;
9640 
9641       update_tax_sources_total(p_api_version    => p_api_version,
9642                                p_init_msg_list  => p_init_msg_list,
9643                                x_return_status  => x_return_status,
9644                                x_msg_count      => x_msg_count,
9645                                x_msg_data       => x_msg_data,
9646                                p_source_trx_id  => p_source_trx_id,
9647                                p_source_trx_name => p_source_trx_name  );
9648 
9649       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9650         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9651              'Return Status' || x_return_status);
9652       END IF;
9653 
9654       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9655         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9656       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9657         RAISE OKL_API.G_EXCEPTION_ERROR;
9658       END IF;
9659 
9660       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9661         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9662              'Calling "copy_tax_trx_data" .. ');
9663       END IF;
9664 
9665       copy_tax_trx_data ( p_api_version       => p_api_version,
9666                           p_init_msg_list     => p_init_msg_list,
9667                           x_return_status     => x_return_status,
9668                           x_msg_count         => x_msg_count,
9669                           x_msg_data          => x_msg_data,
9670                           p_trx_id            => p_source_trx_id,
9671                           p_entity_code           => G_TAX_SCH_ENTITY_CODE,
9672                           p_event_class_code  => G_TAX_SCHEDULE,
9673                           p_source_trx_name   => p_source_trx_name);
9674 
9675 
9676       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9677         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax.',
9678              'Return Status' || x_return_status);
9679       END IF;
9680 
9681       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9682         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9683       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9684         RAISE OKL_API.G_EXCEPTION_ERROR;
9685       END IF;
9686 
9687     END IF;  -- Processing for Unbilled streams - End
9688 
9689     -----------------Process Unbilled Stream elements - End --------------
9690 
9691     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9692       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ','End(-)');
9693     END IF;
9694 
9695   EXCEPTION
9696     WHEN OKL_API.G_EXCEPTION_ERROR THEN
9697       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9698         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ',
9699                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
9700       END IF;
9701 
9702       IF l_trxrequests_csr%ISOPEN THEN
9703         CLOSE l_trxrequests_csr;
9704       END IF;
9705 
9706       IF c_k_unbilled_streams_csr%ISOPEN THEN
9707         CLOSE c_k_unbilled_streams_csr;
9708       END IF;
9709 
9710       IF c_k_billed_streams_csr%ISOPEN THEN
9711         CLOSE c_k_billed_streams_csr;
9712       END IF;
9713 
9714       IF l_txdarlndtls_csr%ISOPEN THEN
9715         CLOSE l_txdarlndtls_csr;
9716       END IF;
9717 
9718       IF l_finassets_csr%ISOPEN THEN
9719         CLOSE l_finassets_csr;
9720       END IF;
9721 
9722       IF l_okclines_csr%ISOPEN THEN
9723         CLOSE l_okclines_csr;
9724       END IF;
9725 
9726       IF l_kstreamtypes_csr%ISOPEN THEN
9727         CLOSE l_kstreamtypes_csr;
9728       END IF;
9729 
9730       IF l_finasset_csr%ISOPEN THEN
9731         CLOSE l_finasset_csr;
9732       END IF;
9733 
9734       IF l_invitem_csr%ISOPEN THEN
9735         CLOSE l_invitem_csr;
9736       END IF;
9737 
9738       IF l_partyroles_csr%ISOPEN THEN
9739         CLOSE l_partyroles_csr;
9740       END IF;
9741 
9742       IF l_povendorsites_csr%ISOPEN THEN
9743         CLOSE l_povendorsites_csr;
9744       END IF;
9745 
9746       IF l_get_zx_total_tax%ISOPEN THEN
9747         CLOSE l_get_zx_total_tax;
9748       END IF;
9749 
9750       IF l_get_zx_taxable_line_info%ISOPEN THEN
9751         CLOSE l_get_zx_taxable_line_info;
9752       END IF;
9753 
9754       IF l_get_zx_tax_lines%ISOPEN THEN
9755         CLOSE l_get_zx_tax_lines;
9756       END IF;
9757 
9758       x_return_status := OKL_API.G_RET_STS_ERROR;
9759 
9760     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
9761       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9762         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ',
9763                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
9764       END IF;
9765 
9766       IF l_trxrequests_csr%ISOPEN THEN
9767         CLOSE l_trxrequests_csr;
9768       END IF;
9769 
9770       IF c_k_unbilled_streams_csr%ISOPEN THEN
9771         CLOSE c_k_unbilled_streams_csr;
9772       END IF;
9773 
9774       IF c_k_billed_streams_csr%ISOPEN THEN
9775         CLOSE c_k_billed_streams_csr;
9776       END IF;
9777 
9778       IF l_txdarlndtls_csr%ISOPEN THEN
9779         CLOSE l_txdarlndtls_csr;
9780       END IF;
9781 
9782       IF l_finassets_csr%ISOPEN THEN
9783         CLOSE l_finassets_csr;
9784       END IF;
9785 
9786       IF l_okclines_csr%ISOPEN THEN
9787         CLOSE l_okclines_csr;
9788       END IF;
9789 
9790       IF l_kstreamtypes_csr%ISOPEN THEN
9791         CLOSE l_kstreamtypes_csr;
9792       END IF;
9793 
9794       IF l_finasset_csr%ISOPEN THEN
9795         CLOSE l_finasset_csr;
9796       END IF;
9797 
9798       IF l_invitem_csr%ISOPEN THEN
9799         CLOSE l_invitem_csr;
9800       END IF;
9801 
9802       IF l_partyroles_csr%ISOPEN THEN
9803         CLOSE l_partyroles_csr;
9804       END IF;
9805 
9806       IF l_povendorsites_csr%ISOPEN THEN
9807         CLOSE l_povendorsites_csr;
9808       END IF;
9809 
9810       IF l_get_zx_total_tax%ISOPEN THEN
9811         CLOSE l_get_zx_total_tax;
9812       END IF;
9813 
9814       IF l_get_zx_taxable_line_info%ISOPEN THEN
9815         CLOSE l_get_zx_taxable_line_info;
9816       END IF;
9817 
9818       IF l_get_zx_tax_lines%ISOPEN THEN
9819         CLOSE l_get_zx_tax_lines;
9820       END IF;
9821 
9822       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
9823 
9824     WHEN OTHERS THEN
9825       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
9826         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_schedule_tax ',
9827                   'EXCEPTION :'||sqlerrm);
9828       END IF;
9829 
9830       IF l_trxrequests_csr%ISOPEN THEN
9831         CLOSE l_trxrequests_csr;
9832       END IF;
9833 
9834       IF c_k_unbilled_streams_csr%ISOPEN THEN
9835         CLOSE c_k_unbilled_streams_csr;
9836       END IF;
9837 
9838       IF c_k_billed_streams_csr%ISOPEN THEN
9839         CLOSE c_k_billed_streams_csr;
9840       END IF;
9841 
9842       IF l_txdarlndtls_csr%ISOPEN THEN
9843         CLOSE l_txdarlndtls_csr;
9844       END IF;
9845 
9846       IF l_finassets_csr%ISOPEN THEN
9847         CLOSE l_finassets_csr;
9848       END IF;
9849 
9850       IF l_okclines_csr%ISOPEN THEN
9851         CLOSE l_okclines_csr;
9852       END IF;
9853 
9854       IF l_kstreamtypes_csr%ISOPEN THEN
9855         CLOSE l_kstreamtypes_csr;
9856       END IF;
9857 
9858       IF l_finasset_csr%ISOPEN THEN
9859         CLOSE l_finasset_csr;
9860       END IF;
9861 
9862       IF l_invitem_csr%ISOPEN THEN
9863         CLOSE l_invitem_csr;
9864       END IF;
9865 
9866       IF l_partyroles_csr%ISOPEN THEN
9867         CLOSE l_partyroles_csr;
9868       END IF;
9869 
9870       IF l_povendorsites_csr%ISOPEN THEN
9871         CLOSE l_povendorsites_csr;
9872       END IF;
9873 
9874       IF l_get_zx_total_tax%ISOPEN THEN
9875         CLOSE l_get_zx_total_tax;
9876       END IF;
9877 
9878       IF l_get_zx_taxable_line_info%ISOPEN THEN
9879         CLOSE l_get_zx_taxable_line_info;
9880       END IF;
9881 
9882       IF l_get_zx_tax_lines%ISOPEN THEN
9883         CLOSE l_get_zx_tax_lines;
9884       END IF;
9885 
9886       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
9887       -- unexpected error
9888       OKL_API.set_message(p_app_name      => g_app_name,
9889                           p_msg_name      => g_unexpected_error,
9890                           p_token1        => g_sqlcode_token,
9891                           p_token1_value  => sqlcode,
9892                           p_token2        => g_sqlerrm_token,
9893                           p_token2_value  => sqlerrm);
9894 
9895   END process_tax_schedule_tax;
9896 
9897 /*========================================================================
9898  | PRIVATE PROCEDURE process_quote_tax
9899  |
9900  | DESCRIPTION
9901  |    This procedure is called from calculate_sales_tax procedure to calculate
9902  |    invoice tax for Termination / repurchase quote creation/updation/deletion
9903  |
9904  | CALLED FROM                                  calculate_sales_tax()
9905  |
9906  |
9907  | CALLS PROCEDURES/FUNCTIONS
9908  |     get_k_hdr_tax_params()
9909  |     get_asset_tax_params()
9910  |     get_location_party_ids()
9911  |     get_ufc_code()
9912  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
9913  |
9914  |
9915  | PARAMETERS
9916  |      p_source_trx_id                 -- Source transaction ID
9917  |      p_source_trx_name       -- Source transaction Name
9918  |      p_source_table          -- Source table
9919  |
9920  | KNOWN ISSUES
9921  |
9922  | NOTES
9923  |
9924  |
9925  | MODIFICATION HISTORY
9926  | Date                  Author            Description of Changes
9927  | 08-APR-05            SECHAWLA           Created
9928  |
9929  *=======================================================================*/
9930   PROCEDURE process_quote_tax(
9931         p_api_version                   IN  NUMBER,
9932     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
9933     x_return_status                     OUT NOCOPY VARCHAR2,
9934     x_msg_count                         OUT NOCOPY NUMBER,
9935     x_msg_data                          OUT NOCOPY VARCHAR2,
9936     p_source_trx_id                                     IN  NUMBER,
9937     p_source_trx_name               IN  VARCHAR2,
9938     p_source_table                  IN  VARCHAR2) IS
9939 
9940     ---- Termination/Repurchase Quote Creation -------
9941         --p_source_trx_id               ---> okl_trx_quotes_b.id
9942         --p_source_trx_name     ---> 'Estimated Billing'
9943         --p_source_table        ---> 'OKL_TRX_QUOTES_B'
9944     --------------------------------------------------
9945 
9946         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
9947 
9948         -- Get quote details
9949         CURSOR l_trxquotes_csr(cp_qte_id IN NUMBER) IS
9950         SELECT khr_id, date_effective_from, early_termination_yn, qtp_code,
9951            legal_entity_id, qrs_code
9952         FROM   okl_trx_quotes_b
9953         WHERE  id = cp_qte_id;
9954 
9955         -- get the previous tax source transaction for this quote
9956         CURSOR l_prevtaxsources_csr(cp_trx_id IN NUMBER) IS
9957         SELECT id
9958         FROM   okl_tax_sources
9959         WHERE  trx_id = cp_trx_id;
9960 
9961         -- get the previous tax trx details
9962         CURSOR l_prevtaxtrxdet_csr(cp_txs_id IN NUMBER) IS
9963         SELECT ID
9964         FROM   okl_tax_trx_details
9965         WHERE  txs_id = cp_txs_id;
9966 
9967         -- get the tax eligible quote lines
9968         CURSOR l_txlquotelines_csr(cp_qte_id IN NUMBER) IS
9969         SELECT txl.id, txl.sty_id, txl.kle_id,
9970            txl.qlt_code, txl.amount, txl.try_id, cle.name
9971         FROM   okl_txl_quote_lines_b txl, okc_k_lines_v cle
9972         WHERE  qte_id = cp_qte_id
9973         AND    qlt_code NOT IN ('AMCFIA', 'AMCTAX', 'AMYOUB', 'AMCSDD')
9974     AND    txl.kle_id = cle.id (+);
9975 
9976         -- AMYOUB - Outstanding bal : excluding as it is not invoiced So no tax will be calculated on it during acceptance
9977         -- AMCTAX - Tax/VAT : excluding for old quotes. New quotes wil not have this quote line
9978         -- AMCFIA - Used for internal purpose.
9979 
9980         --get line name
9981         CURSOR l_okclines_csr(cp_line_id IN NUMBER) IS
9982         SELECT name, lse_id
9983         FROM   okc_k_lines_v
9984         WHERE  id = cp_line_id;
9985 
9986     -- get the inventory item id and inventory item org for a financial asset
9987         CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
9988         SELECT cim_model.object1_id1,
9989            cim_model.object1_id2
9990     FROM   okc_k_items cim_model,
9991            okc_k_lines_b cleb_model,
9992            okc_line_styles_b lseb_model
9993     WHERE  cim_model.cle_id    = cleb_model.id
9994     AND    cleb_model.cle_id   = cp_fin_asset_id
9995     AND    lseb_model.id       = cleb_model.lse_id
9996     AND    lseb_model.lty_code = 'ITEM';
9997 
9998     -- Check if tax basis override formula exists
9999         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
10000         SELECT fma_id
10001         FROM   okl_tax_basis_override
10002         WHERE  try_id = cp_try_id
10003         AND    org_id = MO_GLOBAL.get_current_org_id;
10004 
10005     -- GET FORMULA NAME
10006     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
10007     SELECT name
10008     FROM   okl_formulae_b
10009     WHERE  id = cp_fma_id;
10010 
10011         TYPE prevtaxsrc_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10012         TYPE prevtaxtrxdet_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
10013         TYPE txlquotelines_tbl_type IS TABLE OF l_txlquotelines_csr%ROWTYPE INDEX BY BINARY_INTEGER;
10014 
10015         l_qte_khr_id                                    NUMBER;
10016         l_qte_dt_eff_from                               DATE;
10017 
10018         l_prevtaxsrc_tbl                            prevtaxsrc_tbl_type;
10019         l_prevtaxtrxdet_tbl                             prevtaxtrxdet_tbl_type;
10020         l_txlquotelines_tbl                             txlquotelines_tbl_type;
10021     l_tax_sources_tbl                           tax_sources_tbl_type;
10022     lp_tax_src_params_rec           tax_src_params_rec_type;
10023     lx_line_params_tbl              line_params_tbl_type;
10024     lx_tax_sources_tbl                  tax_sources_tbl_type;
10025     lp_hdr_params_rec               hdr_params_rec_type;
10026 
10027         l_fetch_size                    NUMBER := 10000;
10028         i                                                               NUMBER;
10029         j                                                               NUMBER;
10030         k                                                               NUMBER;
10031 
10032         l_cust_acct_id                                  NUMBER;
10033     l_bill_to_siteuseid                 NUMBER;
10034     l_currency_code                                     VARCHAR2(15);
10035     l_precision                         NUMBER;
10036     l_minimum_accountable_unit          NUMBER;
10037     l_cust_trx_type_id                          NUMBER;
10038     l_legal_entity_id               NUMBER;
10039 
10040     l_qte_prch_opt_det                          VARCHAR2(450);
10041     l_qte_fin_prod_id_det                       NUMBER;
10042     l_qte_int_disclosed_det                     VARCHAR2(30);
10043 
10044     l_name                                                      VARCHAR2(150);
10045     l_qte_transfer_of_title                     VARCHAR2(30);
10046     l_qte_sale_lease_back                       VARCHAR2(30);
10047     l_qte_purchase_of_lease                     VARCHAR2(30);
10048     l_qte_usage_of_equipment        VARCHAR2(450);
10049     l_qte_age_of_equipment                      NUMBER;
10050     l_qte_vendor_site_id            NUMBER;
10051     l_inv_item_id                                       NUMBER;
10052         l_inv_item_org_id                               NUMBER;
10053     l_taxation_country              VARCHAR2(2);
10054 
10055     lx_bill_to_party_site_id        NUMBER;
10056     lx_bill_to_location_id          NUMBER;
10057     lx_bill_to_party_id             NUMBER;
10058     lx_bill_to_siteuseid            NUMBER;
10059     lx_ship_to_party_site_id        NUMBER;
10060     lx_ship_to_location_id          NUMBER;
10061     lx_ship_to_party_id             NUMBER;
10062     lx_ship_to_siteuseid                NUMBER;
10063         lx_tbc_code                                             VARCHAR2(30);
10064     l_ledger_id                     NUMBER;
10065     l_lse_id                        NUMBER;
10066 
10067         l_taxable_basis                                 NUMBER;
10068     l_fma_id                                            NUMBER;
10069     l_formula_name                                      VARCHAR2(150);
10070     l_add_params                                        okl_execute_formula_pub.ctxt_val_tbl_type;
10071     lx_sty_id                                           NUMBER;
10072     l_early_term_yn                                     VARCHAR2(1);
10073         l_qtp_code                                              VARCHAR2(30);
10074     asset_cnt                       NUMBER;
10075     tax_call_cnt                    NUMBER;
10076 
10077     lx_org_id                       NUMBER;
10078     lx_book_class_code              VARCHAR2(30);
10079     lx_currency_conversion_type     VARCHAR2(30);
10080     lx_currency_conversion_rate     NUMBER;
10081     lx_currency_conversion_date     DATE;
10082     lx_contract_start_date          DATE;
10083 
10084     lx_cust_acct_id                                     NUMBER;
10085     lx_currency_code                            VARCHAR2(15);
10086     lx_precision                        NUMBER;
10087     lx_minimum_accountable_unit         NUMBER;
10088     lx_cust_trx_type_id                         NUMBER;
10089 
10090     lx_pb_prch_opt_det                          VARCHAR2(450);
10091     lx_pb_fin_prod_id_det                       NUMBER;
10092     lx_pb_int_disclosed_det                     VARCHAR2(30);
10093 
10094     l_qrs_code                      VARCHAR2(30);
10095 
10096   BEGIN
10097 
10098     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10099       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax','Begin(+)');
10100     END IF;
10101 
10102     --Print Input Variables
10103     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10104       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10105               'p_init_msg_list :'||p_init_msg_list);
10106       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10107               'p_source_trx_id :'||p_source_trx_id);
10108       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10109               'p_source_trx_name :'||p_source_trx_name);
10110       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10111               'p_source_table :'||p_source_table);
10112     END IF;
10113 
10114     x_return_status := OKL_API.G_RET_STS_SUCCESS;
10115 
10116     -- Validate soure trx id
10117     OPEN  l_trxquotes_csr(p_source_trx_id);
10118     FETCH l_trxquotes_csr INTO l_qte_khr_id, l_qte_dt_eff_from,
10119                                l_early_term_yn, l_qtp_code, l_legal_entity_id,
10120                                l_qrs_code;
10121     IF l_trxquotes_csr%NOTFOUND THEN
10122       -- source trx id is invalid
10123       OKC_API.set_message( p_app_name      => 'OKC',
10124                            p_msg_name      => G_INVALID_VALUE,
10125                            p_token1        => G_COL_NAME_TOKEN,
10126                            p_token1_value  => 'SOURCE_TRX_ID');
10127       RAISE OKL_API.G_EXCEPTION_ERROR;
10128     END IF;
10129     CLOSE l_trxquotes_csr;
10130 
10131     --Check if tax source transactions already exist for this quote. If so, delete the previous tax transcations and
10132     --recalculate tax
10133     OPEN  l_prevtaxsources_csr(p_source_trx_id);
10134     LOOP
10135       l_prevtaxsrc_tbl.DELETE;
10136       FETCH l_prevtaxsources_csr BULK COLLECT INTO l_prevtaxsrc_tbl LIMIT l_fetch_size;
10137       IF l_prevtaxsrc_tbl.COUNT > 0 THEN
10138 
10139         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10140           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10141                                   'Deleteing prev tax source transactions for this quote ');
10142         END IF;
10143 
10144         i := 0;
10145         l_prevtaxtrxdet_tbl.DELETE;
10146         FOR k IN l_prevtaxsrc_tbl.FIRST .. l_prevtaxsrc_tbl.LAST LOOP
10147           FOR  l_prevtaxtrxdet_rec IN l_prevtaxtrxdet_csr(l_prevtaxsrc_tbl(k)) LOOP
10148             i := i + 1;
10149             l_prevtaxtrxdet_tbl(i):= l_prevtaxtrxdet_rec.id;
10150 
10151           END LOOP;
10152         END LOOP;
10153 
10154         -- delete from both the tables.
10155         BEGIN
10156           IF l_prevtaxtrxdet_tbl.COUNT > 0 THEN
10157             FORALL i IN l_prevtaxtrxdet_tbl.FIRST..l_prevtaxtrxdet_tbl.LAST
10158               DELETE FROM OKL_TAX_TRX_DETAILS WHERE id = l_prevtaxtrxdet_tbl(i);
10159           END IF;
10160         EXCEPTION
10161           WHEN OTHERS THEN
10162             IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
10163                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
10164                                 OKL_API.set_message(
10165                                                                      p_app_name      => 'OKL',
10166                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
10167                                      p_token1        => 'TABLE_NAME',
10168                                      p_token1_value  => 'OKL_TAX_TRX_DETAILS',
10169                                      p_token2        => 'ERROR_CODE',
10170                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
10171                                                                          p_token3        => 'ITERATION',
10172                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
10173                           END LOOP;
10174                           RAISE OKL_API.G_EXCEPTION_ERROR;
10175                         END IF;
10176         END;
10177 
10178                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10179           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10180                                   'Deleted from okl_tax_trx_details...  ');
10181         END IF;
10182 
10183         BEGIN
10184           FORALL i IN l_prevtaxsrc_tbl.FIRST..l_prevtaxsrc_tbl.LAST
10185             DELETE FROM OKL_TAX_SOURCES WHERE id = l_prevtaxsrc_tbl(i);
10186         EXCEPTION
10187           WHEN OTHERS THEN
10188             IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
10189                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
10190                                 OKL_API.set_message(
10191                                                                      p_app_name      => 'OKL',
10192                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
10193                                      p_token1        => 'TABLE_NAME',
10194                                      p_token1_value  => 'OKL_TAX_SOURCES',
10195                                      p_token2        => 'ERROR_CODE',
10196                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
10197                                                                          p_token3        => 'ITERATION',
10198                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
10199                           END LOOP;
10200                           RAISE OKL_API.G_EXCEPTION_ERROR;
10201                         END IF;
10202         END;
10203 
10204                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10205           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10206                                   'Deleted from okl_tax_sources...  ');
10207         END IF;
10208       END IF;
10209 
10210       EXIT WHEN l_prevtaxsources_csr%NOTFOUND;
10211     END LOOP;
10212         CLOSE l_prevtaxsources_csr;
10213 
10214         -- Get contract header info
10215     get_k_hdr_tax_params(
10216         p_api_version                  => p_api_version,
10217         p_init_msg_list                => p_init_msg_list,
10218         x_return_status                => x_return_status,
10219         x_msg_count                    => x_msg_count,
10220         x_msg_data                     => x_msg_data,
10221         p_khr_id                       => l_qte_khr_id,
10222         p_source_trx_name              => p_source_trx_name,
10223         p_source_table                             => p_source_table,
10224         p_qtp_code                     => l_qtp_code,
10225         p_early_term_yn                            => l_early_term_yn,
10226         x_cust_acct_id                             => lx_cust_acct_id,
10227                 x_bill_to_siteuseid            => lx_bill_to_siteuseid,
10228                 x_currency_code                            => lx_currency_code,
10229         x_cust_trx_type_id             => lx_cust_trx_type_id,
10230         x_precision                                        => lx_precision,
10231                 x_minimum_accountable_unit     => lx_minimum_accountable_unit,
10232                 x_prch_opt_det                             => lx_pb_prch_opt_det,
10233                 x_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
10234                 x_int_disclosed_det                        => lx_pb_int_disclosed_det,
10235         x_org_id                       => lx_org_id,
10236         x_book_class_code              => lx_book_class_code,
10237         x_bill_to_party_site_id        => lx_bill_to_party_site_id,
10238         x_bill_to_party_id             => lx_bill_to_party_id,
10239         x_bill_to_location_id          => lx_bill_to_location_id,
10240         x_currency_conversion_type     => lx_currency_conversion_type,
10241         x_currency_conversion_rate     => lx_currency_conversion_rate,
10242         x_currency_conversion_date     => lx_currency_conversion_date,
10243         x_contract_start_date          => lx_contract_start_date);
10244 
10245         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10246       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10247     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10248       RAISE OKL_API.G_EXCEPTION_ERROR;
10249     END IF;
10250 
10251     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10252       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10253                 'l_cust_acct_id '||lx_cust_acct_id );
10254       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10255                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
10256       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10257                 'lx_currency_code '||lx_currency_code );
10258       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10259                 'lx_cust_trx_type_id '||lx_cust_trx_type_id );
10260       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10261                 'lx_precision '||lx_precision );
10262       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10263                 'lx_minimum_accountable_unit '||lx_minimum_accountable_unit );
10264       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10265                 'lx_pb_prch_opt_det '||lx_pb_prch_opt_det );
10266       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10267                 'lx_pb_fin_prod_id_det '||lx_pb_fin_prod_id_det );
10268       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10269                 'lx_pb_int_disclosed_det '||lx_pb_int_disclosed_det );
10270       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10271                 'lx_org_id '||lx_org_id );
10272       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10273                 'lx_book_class_code '||lx_book_class_code );
10274       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10275                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
10276       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10277                 'lx_bill_to_party_id '||lx_bill_to_party_id );
10278       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10279                 'lx_bill_to_location_id '||lx_bill_to_location_id );
10280       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10281                 'lx_currency_conversion_type '||lx_currency_conversion_type );
10282       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10283                 'lx_currency_conversion_rate '||lx_currency_conversion_rate );
10284       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10285                 'lx_currency_conversion_date '||lx_currency_conversion_date );
10286       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10287                 'lx_contract_start_date '||lx_contract_start_date );
10288     END IF;
10289 
10290     -- Fetch the Ledger info
10291     l_ledger_id := okl_accounting_util.get_set_of_books_id;
10292 
10293     -- Fetch the Tax country
10294     l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
10295                                                        x_msg_count         => x_msg_count,
10296                                                        x_msg_data          => x_msg_data,
10297                                                        p_legal_entity_id   => l_legal_entity_id);
10298         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10299       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10300     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10301       RAISE OKL_API.G_EXCEPTION_ERROR;
10302     END IF;
10303 
10304     tax_call_cnt := 1;
10305     OPEN  l_txlquotelines_csr(p_source_trx_id);
10306     LOOP
10307       l_txlquotelines_tbl.DELETE;
10308       l_tax_sources_tbl.DELETE;
10309       FETCH l_txlquotelines_csr BULK COLLECT INTO l_txlquotelines_tbl LIMIT l_fetch_size;
10310 
10311       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10312         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10313                                   'l_txlquotelines_tbl.COUNT '||l_txlquotelines_tbl.COUNT);
10314       END IF;
10315 
10316       IF l_txlquotelines_tbl.COUNT > 0 THEN
10317         FOR k IN l_txlquotelines_tbl.FIRST .. l_txlquotelines_tbl.LAST LOOP
10318 
10319           IF l_txlquotelines_tbl(k).kle_id IS NOT NULL THEN -- asset level quote line
10320 
10321             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10322                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10323                                   'asset level quote line ');
10324                 END IF;
10325 
10326             OPEN  l_okclines_csr(l_txlquotelines_tbl(k).kle_id);
10327                 FETCH l_okclines_csr INTO l_name, l_lse_id;
10328                 CLOSE l_okclines_csr;
10329 
10330             IF (l_lse_id = 33) THEN
10331               -- Get the financial asset level determinants
10332                   get_asset_tax_params(
10333                                                 p_api_version                  => p_api_version,
10334                                         p_init_msg_list                => OKC_API.G_FALSE,
10335                                         x_return_status                => x_return_status,
10336                                         x_msg_count                    => x_msg_count,
10337                                         x_msg_data                     => x_msg_data,
10338                                         p_khr_id                       => l_qte_khr_id,
10339                                         p_kle_id                       => l_txlquotelines_tbl(k).kle_id,
10340                                         p_source_trx_name              => p_source_trx_name,
10341                                         p_source_table                             => p_source_table,
10342                                         p_qtp_code                     => l_qtp_code,
10343                                     x_transfer_of_title                    => l_qte_transfer_of_title,
10344                                         x_sale_lease_back                          => l_qte_sale_lease_back,
10345                                         x_purchase_of_lease                        => l_qte_purchase_of_lease,
10346                                         x_usage_of_equipment               => l_qte_usage_of_equipment,
10347                                                 x_age_of_equipment                         => l_qte_age_of_equipment,
10348                                                 x_vendor_site_id                       => l_qte_vendor_site_id);
10349 
10350                           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10351                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10352                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10353                     RAISE OKL_API.G_EXCEPTION_ERROR;
10354                   END IF;
10355 
10356                   -- Equipment Type(inventory item id)
10357                   -- get the inventory item id
10358                           OPEN  l_invitem_csr(l_txlquotelines_tbl(k).kle_id);
10359                           FETCH l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
10360                           IF l_invitem_csr%NOTFOUND THEN
10361                             OKL_API.set_message(
10362                                                 p_app_name      => 'OKL',
10363                                 p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
10364                                         p_token1        => 'ASSET_NUMBER',
10365                                                         p_token1_value  => l_name);
10366 
10367                     RAISE OKL_API.G_EXCEPTION_ERROR;
10368                           END IF;
10369                           CLOSE l_invitem_csr;
10370 
10371               IF l_qtp_code LIKE 'TER%' THEN  -- Ship to Location is not applicable for repurchase quote
10372                             -- Get the ship_to and _bill_to identifiers
10373                             get_location_party_ids(
10374                                                                         p_api_version                  => p_api_version,
10375                                                                 p_init_msg_list                => OKC_API.G_FALSE,
10376                                                                 x_return_status                => x_return_status,
10377                                                                 x_msg_count                    => x_msg_count,
10378                                                                 x_msg_data                     => x_msg_data,
10379                                                                 p_cust_acct_id                 => lx_cust_acct_id,
10380                                                                 p_fin_asset_id                 => l_txlquotelines_tbl(k).kle_id,
10381                                     p_khr_id                       => l_qte_khr_id,
10382                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
10383                                     x_bill_to_location_id          => lx_bill_to_location_id,
10384                                     x_bill_to_party_id             => lx_bill_to_party_id,
10385                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
10386                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
10387                                     x_ship_to_location_id          => lx_ship_to_location_id,
10388                                     x_ship_to_party_id             => lx_ship_to_party_id,
10389                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
10390 
10391                             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10392                                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10393                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10394                           RAISE OKL_API.G_EXCEPTION_ERROR;
10395                             END IF;
10396                           END IF;
10397 
10398                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10399                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10400                                   'l_name '||l_name);
10401                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10402                                   'l_qte_khr_id '||l_qte_khr_id);
10403                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10404                                   'l_txlquotelines_tbl(k).kle_id '||l_txlquotelines_tbl(k).kle_id);
10405                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10406                                   'l_qte_transfer_of_title '||l_qte_transfer_of_title);
10407                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10408                                   'l_qte_sale_lease_back '||l_qte_sale_lease_back);
10409                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10410                                   'l_qte_purchase_of_lease '||l_qte_purchase_of_lease);
10411                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10412                                   'l_qte_usage_of_equipment '||l_qte_usage_of_equipment);
10413                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10414                                   'l_qte_age_of_equipment '||l_qte_age_of_equipment);
10415                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10416                                   'l_qte_vendor_site_id '||l_qte_vendor_site_id);
10417                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10418                                   'l_inv_item_id '||l_inv_item_id);
10419                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10420                                   'l_inv_item_org_id '||l_inv_item_org_id);
10421                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10422                                   'lx_ship_to_siteuseid '||lx_ship_to_siteuseid);
10423                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10424                                 'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
10425                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10426                                 'lx_ship_to_location_id '||lx_ship_to_location_id );
10427                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10428                                 'lx_ship_to_party_id '||lx_ship_to_party_id );
10429                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10430                                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
10431                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10432                                 'lx_bill_to_location_id '||lx_bill_to_location_id );
10433                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10434                                 'lx_bill_to_party_id '||lx_bill_to_party_id );
10435                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10436                                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
10437                   END IF;
10438             END IF;
10439           END IF; -- if asset level quote line
10440 
10441           -- SECHAWLA 17-MAR-06 5022404 : For Billing adjustment quote line, get stream type from quote lines table
10442           IF l_txlquotelines_tbl(k).qlt_code = 'BILL_ADJST' THEN
10443             lx_sty_id := l_txlquotelines_tbl(k).sty_id;
10444           ELSE
10445             OKL_STREAMS_UTIL.get_primary_stream_type( p_khr_id                           => l_qte_khr_id,
10446                                                                                                           p_primary_sty_purpose  => l_txlquotelines_tbl(k).qlt_code,
10447                                                                                                           x_return_status                => x_return_status,
10448                                                                                                           x_primary_sty_id       => lx_sty_id);
10449 
10450                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10451                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10452                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10453                   RAISE OKL_API.G_EXCEPTION_ERROR;
10454                         END IF;
10455                   END IF;
10456 
10457           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10458                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10459                                   'stream type '||lx_sty_id);
10460           END IF;
10461 
10462           IF (tax_call_cnt = 1) THEN
10463                 -- Check if taxable bais override applies to Estimated Billing transaction
10464                 OPEN  l_txbasisoverride_csr(l_txlquotelines_tbl(k).try_id);
10465                 FETCH l_txbasisoverride_csr INTO l_fma_id;
10466                 CLOSE l_txbasisoverride_csr;
10467 
10468                 IF l_fma_id IS NOT NULL THEN
10469                   OPEN  l_formulae_csr(l_fma_id);
10470                   FETCH l_formulae_csr INTO l_formula_name;
10471                   IF l_formulae_csr%NOTFOUND THEN
10472                         OKC_API.set_message( p_app_name      => 'OKC',
10473                                      p_msg_name      => G_INVALID_VALUE,
10474                                      p_token1        => G_COL_NAME_TOKEN,
10475                                      p_token1_value  => 'FMA_ID');
10476                         RAISE OKL_API.G_EXCEPTION_ERROR;
10477                   END IF;
10478                   CLOSE l_formulae_csr;
10479 
10480               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10481                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10482                                   'l_formula_name '||l_formula_name);
10483               END IF;
10484             END IF;
10485           END IF;
10486 
10487           -- Populate tax sources record -- start
10488           lp_tax_src_params_rec.kle_id       := l_txlquotelines_tbl(k).kle_id;
10489 
10490           IF (l_lse_id = 33) THEN
10491             lp_tax_src_params_rec.asset_number := l_txlquotelines_tbl(k).name;
10492           END IF;
10493 
10494           lp_tax_src_params_rec.line_name      := l_txlquotelines_tbl(k).name;
10495 
10496           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := lx_ship_to_siteuseid;
10497           lp_tax_src_params_rec.ship_to_party_site_id           := lx_ship_to_party_site_id;
10498           lp_tax_src_params_rec.ship_to_party_id                := lx_ship_to_party_id;
10499           lp_tax_src_params_rec.ship_to_location_id             := lx_ship_to_location_id;
10500 
10501           lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
10502           lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
10503           lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
10504           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
10505 
10506           lp_tax_src_params_rec.inventory_item_id             := l_inv_item_id;
10507           lp_tax_src_params_rec.sty_id                        := lx_sty_id;
10508 
10509           lp_tax_src_params_rec.khr_id                        := l_qte_khr_id;
10510           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
10511           lp_tax_src_params_rec.trx_line_id                   := l_txlquotelines_tbl(k).id;
10512           lp_tax_src_params_rec.entity_code                   := G_AM_QUOTES_ENTITY_CODE;
10513           lp_tax_src_params_rec.event_class_code              := G_AM_QTE_EVENT_CLASS_CODE;
10514           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
10515           lp_tax_src_params_rec.tax_call_type_code            := G_INVOICE_TAX;
10516           lp_tax_src_params_rec.tax_reporting_flag            := 'N';
10517           lp_tax_src_params_rec.reported_yn                   := 'N';
10518           lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
10519           lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
10520           lp_tax_src_params_rec.line_intended_use             := l_qte_usage_of_equipment;
10521           lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
10522           lp_tax_src_params_rec.org_id                        := lx_org_id;
10523           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
10524           lp_tax_src_params_rec.line_amt                      := l_txlquotelines_tbl(k).amount;
10525           lp_tax_src_params_rec.try_id                        := l_txlquotelines_tbl(k).try_id;
10526 
10527           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
10528           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
10529           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
10530               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
10531               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
10532               lp_tax_src_params_rec.adjusted_doc_number           := null;
10533               lp_tax_src_params_rec.adjusted_doc_date             := null;
10534           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
10535           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
10536 
10537           lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
10538           lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
10539           lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
10540           -- Populate tax sources record -- end
10541 
10542           populate_tax_info(
10543                                         p_api_version                  => p_api_version,
10544                                         p_init_msg_list                => OKC_API.G_FALSE,
10545                                         x_return_status                => x_return_status,
10546                                         x_msg_count                    => x_msg_count,
10547                                         x_msg_data                     => x_msg_data,
10548                                         p_prch_opt_det                             => lx_pb_prch_opt_det,
10549                                         p_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
10550                                         p_int_disclosed_det                        => lx_pb_int_disclosed_det,
10551                                         p_title_trnsfr_code                        => l_qte_transfer_of_title,
10552                                         p_sale_lease_back_code             => l_qte_sale_lease_back,
10553                                         p_lease_purchased_code             => l_qte_purchase_of_lease,
10554                                         p_equip_usage_code                         => l_qte_usage_of_equipment,
10555                                         p_vendor_site_id                           => l_qte_vendor_site_id,
10556                                         p_age_of_equip                             => l_qte_age_of_equipment,
10557                     p_source_trx_name              => p_source_trx_name,
10558                                     p_cust_trx_type_id             => lx_cust_trx_type_id,
10559                                     p_book_class_code              => lx_book_class_code,
10560                                         p_tax_call_cnt                             => tax_call_cnt,
10561                                         p_fma_id                                           => l_fma_id,
10562                                         p_formula_name                             => l_formula_name,
10563                                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
10564                                         p_precision                                        => lx_precision,
10565                                         p_sales_quote_id                           => null,
10566                                     p_event_type_code              => G_AM_QTE_CRE_EVT_TYPE_CODE,
10567                                     p_ledger_id                    => l_ledger_id,
10568                                     p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
10569                                     p_tax_src_params_rec           => lp_tax_src_params_rec,
10570                                     p_quote_flag                   => 'Y',
10571                                     p_rounding_ship_to_party_id    => lx_ship_to_party_id,
10572                                     p_rounding_bill_to_party_id    => lx_bill_to_party_id,
10573                                     p_line_amt_includes_tax_flag   => 'N',
10574                     p_term_quote_type_code         => l_qtp_code,
10575                     p_term_quote_reason_code       => l_qrs_code,
10576                                     px_tax_sources_tbl                     => lx_tax_sources_tbl,
10577                                     px_line_params_tbl             => lx_line_params_tbl );
10578 
10579           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10580             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10581           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10582             RAISE OKL_API.G_EXCEPTION_ERROR;
10583           END IF;
10584 
10585                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10586                     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10587                         'lx_tax_sources_tbl.count '|| lx_tax_sources_tbl.COUNT );
10588           END IF;
10589 
10590                   tax_call_cnt := tax_call_cnt + 1;
10591 
10592         END LOOP;
10593       END IF;
10594       EXIT WHEN l_txlquotelines_csr%NOTFOUND;
10595     END LOOP;
10596     CLOSE l_txlquotelines_csr;
10597 
10598     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10599           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10600                         'tax_call_cnt '||tax_call_cnt);
10601     END IF;
10602 
10603     -- Insert into okl_tax_sources
10604         BEGIN
10605       IF lx_tax_sources_tbl.COUNT > 0 THEN
10606         FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
10607           -- SAVE EXCEPTIONS
10608           INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
10609       END IF;
10610     EXCEPTION
10611       WHEN OTHERS THEN
10612         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
10613                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
10614                           OKL_API.set_message(   p_app_name      => 'OKL',
10615                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
10616                                      p_token1        => 'TABLE_NAME',
10617                                      p_token1_value  => 'OKL_TAX_SOURCES',
10618                                      p_token2        => 'ERROR_CODE',
10619                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
10620                                                                          p_token3        => 'ITERATION',
10621                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
10622                   END LOOP;
10623                   RAISE OKL_API.G_EXCEPTION_ERROR;
10624                 END IF;
10625     END;
10626     -- Insert into okl_tax_sources end
10627 
10628     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10629       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10630                                        'Insert into okl_tax_sources ');
10631         END IF;
10632 
10633     IF lx_line_params_tbl.COUNT > 0 THEN
10634           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10635                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10636                                'Before Calling OKL_TAX_INTERFACE_PVT.calculate_tax  '||x_return_status);
10637           END IF;
10638 
10639       lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
10640       lp_hdr_params_rec.trx_id                   := p_source_trx_id;
10641       lp_hdr_params_rec.internal_organization_id := lx_org_id;
10642       lp_hdr_params_rec.entity_code              := G_AM_QUOTES_ENTITY_CODE;
10643       lp_hdr_params_rec.event_class_code         := G_AM_QTE_EVENT_CLASS_CODE;
10644       lp_hdr_params_rec.event_type_code          := G_AM_QTE_CRE_EVT_TYPE_CODE;
10645       lp_hdr_params_rec.quote_flag               := 'Y';
10646 
10647       OKL_TAX_INTERFACE_PVT.calculate_tax(
10648                                     p_api_version       =>  p_api_version,
10649                                     p_init_msg_list     =>  p_init_msg_list,
10650                                     x_return_status     =>  x_return_status,
10651                                     x_msg_count         =>  x_msg_count,
10652                                     x_msg_data          =>  x_msg_data,
10653                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
10654                                     p_line_params_tbl   =>  lx_line_params_tbl);
10655 
10656       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10657                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10658                                    'After tax engine call '||x_return_status);
10659           END IF;
10660 
10661           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10662         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10663       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10664         RAISE OKL_API.G_EXCEPTION_ERROR;
10665       END IF;
10666     END IF;
10667 
10668     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10669       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10670              'Calling "update_tax_sources_total" .. ');
10671     END IF;
10672 
10673     update_tax_sources_total(p_api_version    => p_api_version,
10674                              p_init_msg_list  => p_init_msg_list,
10675                              x_return_status  => x_return_status,
10676                              x_msg_count      => x_msg_count,
10677                              x_msg_data       => x_msg_data,
10678                              p_source_trx_id  => p_source_trx_id,
10679                              p_source_trx_name => p_source_trx_name  );
10680 
10681     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10682       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10683              'Return Status' || x_return_status);
10684     END IF;
10685 
10686     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10687       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10688     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10689       RAISE OKL_API.G_EXCEPTION_ERROR;
10690     END IF;
10691 
10692     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10693       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10694              'Calling "copy_tax_trx_data" .. ');
10695     END IF;
10696 
10697     copy_tax_trx_data ( p_api_version       => p_api_version,
10698                         p_init_msg_list     => p_init_msg_list,
10699                         x_return_status     => x_return_status,
10700                         x_msg_count         => x_msg_count,
10701                         x_msg_data          => x_msg_data,
10702                         p_trx_id            => p_source_trx_id,
10703                         p_entity_code           => G_AM_QUOTES_ENTITY_CODE,
10704                         p_event_class_code  => G_AM_QTE_EVENT_CLASS_CODE,
10705                         p_source_trx_name   => p_source_trx_name);
10706 
10707 
10708     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10709       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax.',
10710              'Return Status' || x_return_status);
10711     END IF;
10712 
10713     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10714       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10715     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10716       RAISE OKL_API.G_EXCEPTION_ERROR;
10717     END IF;
10718 
10719     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10720        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ','End(-)');
10721     END IF;
10722 
10723   EXCEPTION
10724     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10725       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10726         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ',
10727                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
10728       END IF;
10729 
10730       IF l_trxquotes_csr%ISOPEN THEN
10731         CLOSE l_trxquotes_csr;
10732       END IF;
10733 
10734       IF l_prevtaxsources_csr%ISOPEN THEN
10735         CLOSE l_prevtaxsources_csr;
10736       END IF;
10737 
10738       IF l_prevtaxtrxdet_csr%ISOPEN THEN
10739         CLOSE l_prevtaxtrxdet_csr;
10740       END IF;
10741 
10742       IF l_txlquotelines_csr%ISOPEN THEN
10743         CLOSE l_txlquotelines_csr;
10744       END IF;
10745 
10746       IF l_okclines_csr%ISOPEN THEN
10747         CLOSE l_okclines_csr;
10748       END IF;
10749 
10750       IF l_invitem_csr%ISOPEN THEN
10751         CLOSE l_invitem_csr;
10752       END IF;
10753 
10754       IF l_txbasisoverride_csr%ISOPEN THEN
10755         CLOSE l_txbasisoverride_csr;
10756       END IF;
10757 
10758       IF l_formulae_csr%ISOPEN THEN
10759         CLOSE l_formulae_csr;
10760       END IF;
10761 
10762       x_return_status := OKL_API.G_RET_STS_ERROR;
10763     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10764       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10765         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ',
10766                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
10767       END IF;
10768 
10769       IF l_trxquotes_csr%ISOPEN THEN
10770         CLOSE l_trxquotes_csr;
10771       END IF;
10772 
10773       IF l_prevtaxsources_csr%ISOPEN THEN
10774         CLOSE l_prevtaxsources_csr;
10775       END IF;
10776 
10777       IF l_prevtaxtrxdet_csr%ISOPEN THEN
10778         CLOSE l_prevtaxtrxdet_csr;
10779       END IF;
10780 
10781       IF l_txlquotelines_csr%ISOPEN THEN
10782         CLOSE l_txlquotelines_csr;
10783       END IF;
10784 
10785       IF l_okclines_csr%ISOPEN THEN
10786         CLOSE l_okclines_csr;
10787       END IF;
10788 
10789       IF l_invitem_csr%ISOPEN THEN
10790         CLOSE l_invitem_csr;
10791       END IF;
10792 
10793       IF l_txbasisoverride_csr%ISOPEN THEN
10794         CLOSE l_txbasisoverride_csr;
10795       END IF;
10796 
10797       IF l_formulae_csr%ISOPEN THEN
10798         CLOSE l_formulae_csr;
10799       END IF;
10800 
10801       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
10802 
10803     WHEN OTHERS THEN
10804       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
10805         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quote_tax ',
10806                   'EXCEPTION :'||sqlerrm);
10807       END IF;
10808 
10809       IF l_trxquotes_csr%ISOPEN THEN
10810         CLOSE l_trxquotes_csr;
10811       END IF;
10812 
10813       IF l_prevtaxsources_csr%ISOPEN THEN
10814         CLOSE l_prevtaxsources_csr;
10815       END IF;
10816 
10817       IF l_prevtaxtrxdet_csr%ISOPEN THEN
10818         CLOSE l_prevtaxtrxdet_csr;
10819       END IF;
10820 
10821       IF l_txlquotelines_csr%ISOPEN THEN
10822         CLOSE l_txlquotelines_csr;
10823       END IF;
10824 
10825       IF l_okclines_csr%ISOPEN THEN
10826         CLOSE l_okclines_csr;
10827       END IF;
10828 
10829       IF l_invitem_csr%ISOPEN THEN
10830         CLOSE l_invitem_csr;
10831       END IF;
10832 
10833       IF l_txbasisoverride_csr%ISOPEN THEN
10834         CLOSE l_txbasisoverride_csr;
10835       END IF;
10836 
10837       IF l_formulae_csr%ISOPEN THEN
10838         CLOSE l_formulae_csr;
10839       END IF;
10840 
10841       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
10842       -- unexpected error
10843       OKL_API.set_message(p_app_name      => g_app_name,
10844                           p_msg_name      => g_unexpected_error,
10845                           p_token1        => g_sqlcode_token,
10846                           p_token1_value  => sqlcode,
10847                           p_token2        => g_sqlerrm_token,
10848                           p_token2_value  => sqlerrm);
10849 
10850   END process_quote_tax;
10851 
10852 /*========================================================================
10853  | PRIVATE PROCEDURE process_asset_loc_tax
10854  |
10855  | DESCRIPTION
10856  |    This procedure is called from calculate_sales_tax procedure to calculate
10857  |    upfront tax for Asset location Change
10858  |
10859  | CALLED FROM                                  calculate_sales_tax()
10860  |
10861  |
10862  | CALLS PROCEDURES/FUNCTIONS
10863  |     OKL_TAX_SOURCES_PUB.update_tax_sources()
10864  |     get_k_hdr_tax_params()
10865  |     get_asset_tax_params()
10866  |     get_location_party_ids()
10867  |     get_ufc_code()
10868  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
10869  |
10870  |
10871  | PARAMETERS
10872  |      p_source_trx_id                 -- Source transaction ID
10873  |      p_source_trx_name       -- Source transaction Name
10874  |      p_source_table          -- Source table
10875  |      p_tax_call_type         -- Tax call type (Values - 'ESTIMATED'/ 'ACTUAL')
10876  |      p_serialized_asset      -- Serialized Asset (Values - 'Y'/'N')
10877  |      p_request_id            -- Id of OKL_trx_Requests
10878  |      p_alc_final_call        -- Determines if the asset location change final
10879  |                                 call is being made for the serialized asset
10880  |                                 (Values - null/'N'/'Y')
10881  |
10882  | KNOWN ISSUES
10883  |
10884  | NOTES
10885  |
10886  |
10887  | MODIFICATION HISTORY
10888  | Date                  Author            Description of Changes
10889  | 08-APR-05            SECHAWLA           Created
10890  |
10891  *=======================================================================*/
10892   PROCEDURE process_asset_loc_tax(
10893         p_api_version                   IN  NUMBER,
10894     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
10895     x_return_status                     OUT NOCOPY VARCHAR2,
10896     x_msg_count                         OUT NOCOPY NUMBER,
10897     x_msg_data                          OUT NOCOPY VARCHAR2,
10898     p_source_trx_id                                     IN  NUMBER,
10899     p_source_trx_name               IN  VARCHAR2,
10900     p_source_table                  IN  VARCHAR2,
10901     p_tax_call_type                 IN  VARCHAR2,
10902     p_serialized_asset              IN  VARCHAR2,
10903     p_request_id                    IN  NUMBER,
10904     p_alc_final_call                IN  VARCHAR2) IS
10905 
10906      -------------Asset Location Change --------------
10907     --p_source_trx_id           ---> okl_trx_assets.id
10908     --p_source_trx_name     ---> 'Asset Relocation'  (changed from Internal Asset Creation to Asset Relocation)
10909     --p_source_table        ---> 'OKL_TRX_ASSETS'
10910     --p_tax_call_type       ---> Tax call type
10911     --p_serialized_asset    ---> Serialized Asset (Y/N)
10912     --p_request_id          ---> Id of OKL_trx_Requests
10913     --------------------------------------------------
10914         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
10915 
10916         -- validate source trx id
10917         CURSOR l_trxassets_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
10918         SELECT a.try_id, a.date_trans_occurred, a.legal_entity_id
10919         FROM   okl_trx_assets a , okl_trx_types_tl b
10920         WHERE  a.id = cp_trx_id
10921         AND    a.try_id = b.id
10922         AND    b.name = cp_trx_type_name
10923     AND    language = 'US';
10924 
10925         -- get the trx line details
10926         CURSOR l_txlitminsts_csr(cp_id IN NUMBER) IS
10927         SELECT kle_id, -- Id of INST_ITEM line
10928                OBJECT_ID1_NEW, -- ID of okx_party_site_uses_v
10929                    DNZ_CLE_ID  -- id of FREE_FORM1
10930         FROM   okl_txl_itm_insts
10931         WHERE  tas_id = cp_id;
10932 
10933         -- get the new location id
10934         --asawanka modified for bug # 6612165
10935         CURSOR l_partysiteuses_csr(cp_id1 IN NUMBER) IS
10936         SELECT location_id, party_site_id
10937         FROM   okx_party_site_uses_v
10938         WHERE  id1 = cp_id1
10939         AND    site_use_type = 'INSTALL_AT';
10940 
10941         -- get the acive upfront tax sources for this asset
10942         -- k1 > A1 > RENT
10943         -- k1 > A1 > Estimated Property Tax
10944         CURSOR l_taxsources_csr(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER) IS
10945         SELECT id, org_id, entity_code, event_class_code
10946         FROM   okl_tax_sources
10947         WHERE  khr_id = cp_khr_id
10948         AND    kle_id = cp_kle_id
10949         AND    tax_call_type_code = G_UPFRONT_TAX
10950         AND    tax_line_status_code = G_ACTIVE_STATUS
10951     AND    application_id = G_OKL_APPLICATION_ID
10952     AND    trx_level_type = G_TRX_LEVEL_TYPE
10953         AND    adjusted_doc_trx_id IS NULL
10954     AND    adjusted_doc_trx_line_id IS NULL;
10955 
10956         -- get the contract id
10957         CURSOR l_okcklines_csr(cp_kle_id IN NUMBER) IS
10958         SELECT chr_id, name
10959         FROM   okc_k_lines_v
10960         WHERE  id = cp_kle_id;
10961 
10962         -- get the current, active, billable streams for the asset
10963         CURSOR l_assetstreams_csr(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER) IS
10964         SELECT typ.code Stream_Type,
10965            strm.id stream_id,
10966            strm.kle_id line_id,
10967                    strm.sty_id stream_type_id
10968     FROM   okl_strm_type_b typ,
10969            okl_streams strm
10970     WHERE  strm.sty_id = typ.id
10971     AND    typ.billable_yn = 'Y'
10972     AND    strm.say_code ='CURR'
10973     AND    strm.active_yn = 'Y'
10974     AND    strm.purpose_code IS NULL
10975     AND    strm.khr_id = cp_khr_id
10976     AND    strm.kle_id = cp_kle_id;
10977 
10978     -- get the total stream amount
10979     CURSOR l_strmelements_csr(cp_stm_id IN NUMBER) IS
10980     SELECT sum(amount)
10981         FROM   okl_strm_elements
10982         WHERE  stm_id = cp_stm_id;
10983 
10984         -- Chaeck if tax basis override formula exists
10985         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
10986         SELECT fma_id
10987         FROM   okl_tax_basis_override
10988         WHERE  try_id = cp_try_id
10989         AND    org_id = MO_GLOBAL.get_current_org_id;
10990 
10991         -- get the inventory item id and inventory item org for a financial asset
10992         CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
10993         SELECT cim_model.object1_id1,
10994            cim_model.object1_id2
10995     FROM   okc_k_items cim_model,
10996            okc_k_lines_b cleb_model,
10997            okc_line_styles_b lseb_model
10998     WHERE  cim_model.cle_id    = cleb_model.id
10999     AND    cleb_model.cle_id   = cp_fin_asset_id
11000     AND    lseb_model.id       = cleb_model.lse_id
11001     AND    lseb_model.lty_code = 'ITEM';
11002 
11003     -- GET FORMULA NAME
11004     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
11005     SELECT name
11006     FROM   okl_formulae_b
11007     WHERE  id = cp_fma_id;
11008 
11009     CURSOR l_okltaxsources_csr(cp_app_id  IN  NUMBER, cp_trx_id  IN  NUMBER) IS
11010     SELECT entity_code, event_class_code
11011     FROM okl_tax_sources
11012     WHERE application_id = cp_app_id
11013     AND trx_id = cp_trx_id
11014     AND trx_level_type = G_TRX_LEVEL_TYPE
11015         AND tax_call_type_code = G_UPFRONT_TAX
11016         AND tax_line_status_code = G_ACTIVE_STATUS
11017     AND entity_code = G_ASSETS_ENTITY_CODE
11018     AND event_class_code = G_ALC_EVENT_CODE
11019     AND ROWNUM = 1;
11020 
11021     CURSOR c_get_ast_instances(p_parent_line_id IN NUMBER) IS
11022     SELECT  count(*)
11023     FROM    okc_k_lines_v okcl,
11024             okc_line_styles_v lse
11025     WHERE   okcl.cle_id = p_parent_line_id
11026     AND     okcl.lse_id = lse.id
11027     AND     lse.lty_code = 'FREE_FORM2';
11028 
11029     CURSOR c_get_streams_count(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER) IS
11030     SELECT  count(*)
11031     FROM   okl_strm_type_b typ,
11032            okl_streams strm
11033     WHERE  strm.sty_id = typ.id
11034     AND    typ.billable_yn = 'Y'
11035     AND    strm.say_code ='CURR'
11036     AND    strm.active_yn = 'Y'
11037     AND    strm.purpose_code IS NULL
11038     AND    strm.khr_id = cp_khr_id
11039     AND    strm.kle_id = cp_kle_id;
11040 
11041     l_taxsources_rec         l_okltaxsources_csr%ROWTYPE;
11042 
11043     --asawanka added for bug #6612165
11044     --Cursor to get the ship_to_site_use_id corresponding to the install_location_id of the asset
11045     CURSOR l_get_shiptositeid(cp_cust_acct_id IN NUMBER, cp_inst_loc_id IN NUMBER,cp_loc_id IN NUMBER) IS
11046     SELECT b.site_use_id,
11047            c.party_site_id,
11048            c.party_id,
11049            c.location_id
11050     FROM   hz_cust_acct_sites_all a,
11051            hz_cust_site_uses_all  b,
11052            hz_party_sites      c
11053     WHERE  a.CUST_ACCT_SITE_ID = b.CUST_ACCT_SITE_ID
11054     AND    b.site_use_code     = 'SHIP_TO'
11055     AND    a.party_site_id     = c.party_site_id
11056     AND    a.cust_account_id   = cp_cust_acct_id
11057     AND    a.org_id            = MO_GLOBAL.get_current_org_id
11058     AND    c.party_site_id     = cp_inst_loc_id
11059     AND    c.location_id       = cp_loc_id;
11060 
11061     SUBTYPE txsv_rec_type IS okl_txs_pvt.txsv_rec_type;
11062 
11063         TYPE  tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11064 
11065         l_tax_src_tbl                                           tax_src_tbl_type;
11066     lp_tax_src_params_rec               tax_src_params_rec_type;
11067     lx_line_params_tbl                  line_params_tbl_type;
11068     lx_tax_sources_tbl                      tax_sources_tbl_type;
11069     lp_hdr_params_rec                   hdr_params_rec_type;
11070 
11071         l_alc_trx_type_id_det                           NUMBER;
11072         l_inst_item_line_id                                     NUMBER;
11073         l_party_site_uses_id1               NUMBER;
11074         l_fin_asset_id                                          NUMBER;
11075         l_new_location_id                   NUMBER;
11076         --asawanka added for bug# 6612165 start
11077         l_install_location_id               NUMBER;
11078         --asawanka added for bug# 6612165 end
11079         l_chr_id                                                        NUMBER;
11080         l_name                                                          VARCHAR2(150);
11081         l_total_strm_tax                                        NUMBER;
11082         l_total_prev_tax                                        NUMBER;
11083         l_total_curr_tax                                        NUMBER;
11084 
11085         lx_cust_acct_id                                         NUMBER;
11086         lx_currency_code                                        VARCHAR2(15);
11087         lx_precision                                    NUMBER;
11088         lx_minimum_accountable_unit                     NUMBER;
11089         lx_cust_trx_type_id                                     NUMBER;
11090 
11091         lx_alc_prch_opt_det                                     VARCHAR2(450);
11092         lx_alc_fin_prod_id_det                          NUMBER;
11093         lx_alc_int_disclosed_det                        VARCHAR2(30);
11094 
11095         lx_alc_transfer_of_title                        VARCHAR2(30);
11096         lx_alc_sale_lease_back                          VARCHAR2(30);
11097         lx_alc_purchase_of_lease                        VARCHAR2(30);
11098         lx_alc_usage_of_equipment                       VARCHAR2(450);
11099         lx_alc_age_of_equipment                         NUMBER;
11100         lx_alc_vendor_site_id                   NUMBER;
11101 
11102         lp_txsv_rec                                                     txsv_rec_type;
11103         lp_txsv_rec_emp                                         txsv_rec_type;
11104     lx_txsv_rec                                                 txsv_rec_type;
11105 
11106     lx_tbc_code                                                 VARCHAR2(30);
11107     l_taxable_basis                                             NUMBER;
11108     l_taxable_ser_basis                             NUMBER;
11109     l_fma_id                                                    NUMBER;
11110     l_inv_item_id                                               NUMBER;
11111         l_inv_item_org_id                                       NUMBER;
11112     l_legal_entity_id                   NUMBER;
11113     l_ledger_id                         NUMBER;
11114     l_taxation_country                  VARCHAR2(2);
11115 
11116     lx_bill_to_party_site_id            NUMBER;
11117     lx_bill_to_location_id              NUMBER;
11118     lx_bill_to_party_id                 NUMBER;
11119     lx_bill_to_siteuseid                NUMBER;
11120     lx_ship_to_party_site_id            NUMBER;
11121     lx_ship_to_location_id              NUMBER;
11122     lx_ship_to_party_id                 NUMBER;
11123     lx_ship_to_siteuseid                    NUMBER;
11124 
11125         l_add_params                                            okl_execute_formula_pub.ctxt_val_tbl_type;
11126         l_formula_name                                          VARCHAR2(150);
11127         l_trx_date                                                      DATE;
11128         l_tax_source_id                                         NUMBER;
11129         k                                                                       NUMBER;
11130         j                                                                       NUMBER;
11131         next_tx_src_cnt                                         NUMBER;
11132     tax_call_cnt                        NUMBER;
11133 
11134     lx_org_id                       NUMBER;
11135     lx_book_class_code              VARCHAR2(30);
11136     l_entity_code                   VARCHAR2(30);
11137     l_event_class_code              VARCHAR2(30);
11138     lx_currency_conversion_type     VARCHAR2(30);
11139     lx_currency_conversion_rate     NUMBER;
11140     lx_currency_conversion_date     DATE;
11141     lx_contract_start_date          DATE;
11142     l_org_id                        NUMBER;
11143     l_asset_inst_count              NUMBER;
11144     l_alc_ser_def_code              VARCHAR2(1) := 'N';
11145     l_stream_count                  NUMBER;
11146 
11147   BEGIN
11148 
11149     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11150         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax','Begin(+)');
11151     END IF;
11152 
11153     --Print Input Variables
11154     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11155       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11156               'p_init_msg_list :'||p_init_msg_list);
11157       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11158               'p_source_trx_id :'||p_source_trx_id);
11159       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11160               'p_source_trx_name :'||p_source_trx_name);
11161       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11162               'p_source_table :'||p_source_table);
11163       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11164               'p_tax_call_type :'||p_tax_call_type);
11165       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11166               'p_serialized_asset :'||p_serialized_asset);
11167       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11168               'p_request_id :'||p_request_id);
11169       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11170               'p_alc_final_call :'||p_alc_final_call);
11171     END IF;
11172 
11173     x_return_status := OKL_API.G_RET_STS_SUCCESS;
11174 
11175     -- validate the source trx id
11176         OPEN  l_trxassets_csr(p_source_trx_id, p_source_trx_name);
11177         FETCH l_trxassets_csr INTO l_alc_trx_type_id_det, l_trx_date, l_legal_entity_id;
11178         IF l_trxassets_csr%NOTFOUND THEN
11179           -- source trx id is invalid
11180           OKC_API.set_message( p_app_name      => 'OKC',
11181                                    p_msg_name      => G_INVALID_VALUE,
11182                                        p_token1        => G_COL_NAME_TOKEN,
11183                                            p_token1_value  => 'SOURCE_TRX_ID');
11184           RAISE OKL_API.G_EXCEPTION_ERROR;
11185         END IF;
11186         CLOSE l_trxassets_csr;
11187 
11188     IF p_tax_call_type = G_ESTIMATED_CALL_TYPE  THEN
11189 
11190           -- get trx line details
11191           OPEN  l_txlitminsts_csr(p_source_trx_id);
11192           FETCH l_txlitminsts_csr INTO l_inst_item_line_id, l_party_site_uses_id1, l_fin_asset_id;
11193           IF l_txlitminsts_csr%NOTFOUND THEN
11194             OKC_API.set_message( p_app_name      => 'OKC',
11195                                              p_msg_name      => G_REQUIRED_VALUE,
11196                                              p_token1        => G_COL_NAME_TOKEN,
11197                                              p_token1_value  => 'PARTY_SITE_USES_ID1');
11198             RAISE OKL_API.G_EXCEPTION_ERROR;
11199           END IF;
11200 
11201       IF l_fin_asset_id IS NULL THEN
11202             OKC_API.set_message( p_app_name      => 'OKC',
11203                                              p_msg_name      => G_REQUIRED_VALUE,
11204                                              p_token1        => G_COL_NAME_TOKEN,
11205                                              p_token1_value  => 'DNZ_CLE_ID');
11206             RAISE OKL_API.G_EXCEPTION_ERROR;
11207           END IF;
11208           CLOSE l_txlitminsts_csr;
11209 
11210           OPEN  l_okcklines_csr(l_fin_asset_id);
11211           FETCH l_okcklines_csr INTO l_chr_id, l_name;
11212           IF l_okcklines_csr%NOTFOUND THEN
11213             OKC_API.set_message( p_app_name      => 'OKC',
11214                                              p_msg_name      => G_INVALID_VALUE,
11215                                              p_token1        => G_COL_NAME_TOKEN,
11216                                              p_token1_value  => 'DNZ_CLE_ID');
11217             RAISE OKL_API.G_EXCEPTION_ERROR;
11218           END IF;
11219           CLOSE l_okcklines_csr;
11220 
11221           -- get the new location id
11222           OPEN  l_partysiteuses_csr(l_party_site_uses_id1);
11223           FETCH l_partysiteuses_csr INTO l_new_location_id,l_install_location_id;
11224           IF l_partysiteuses_csr%NOTFOUND THEN
11225             OKC_API.set_message( p_app_name      => 'OKC',
11226                                              p_msg_name      => G_REQUIRED_VALUE,
11227                                              p_token1        => G_COL_NAME_TOKEN,
11228                                              p_token1_value  => 'LOCATION_ID');
11229             RAISE OKL_API.G_EXCEPTION_ERROR;
11230           END IF;
11231           CLOSE l_partysiteuses_csr;
11232 
11233           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11234                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11235                           'l_inst_item_line_id'||l_inst_item_line_id);
11236                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11237                           'l_party_site_uses_id1'||l_party_site_uses_id1);
11238                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11239                           'l_fin_asset_id'||l_fin_asset_id);
11240                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11241                           'l_chr_id'||l_chr_id);
11242                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11243                           'l_name'||l_name);
11244                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11245                           'l_new_location_id'||l_new_location_id);
11246           END IF;
11247 
11248       -- Populate tax sources id to deactivate existing upfront tax lines for this asset.
11249       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
11250         k := 1;
11251             l_tax_src_tbl.DELETE;
11252             -- This cursor will fetch only a few rows
11253             FOR l_taxsources_rec IN l_taxsources_csr(l_chr_id, l_fin_asset_id) LOOP
11254                   -- K1 > A1 > RENT
11255                   -- K2 > A1 > Estimated Property Tax
11256 
11257                   -- Store the tax source IDs in a table
11258                   l_tax_src_tbl(k) := l_taxsources_rec.ID;
11259 
11260           IF (k = 1) THEN
11261             l_org_id := l_taxsources_rec.org_id;
11262             l_entity_code := l_taxsources_rec.entity_code;
11263             l_event_class_code := l_taxsources_rec.event_class_code;
11264           END IF;
11265 
11266                   k := k + 1;
11267             END LOOP;
11268 
11269         -- Inactivate the previous ACTIVE upfront tax lines - begin
11270         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11271                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11272                         'l_tax_src_tbl.COUNT '||l_tax_src_tbl.COUNT );
11273         END IF;
11274 
11275         IF l_tax_src_tbl.COUNT > 0 THEN
11276           BEGIN
11277             FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
11278               UPDATE OKL_TAX_SOURCES SET TAX_LINE_STATUS_CODE = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
11279 
11280           EXCEPTION
11281             WHEN OTHERS THEN
11282               IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
11283                             FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
11284                                                                 OKL_API.set_message(
11285                                                                      p_app_name      => 'OKL',
11286                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
11287                                      p_token1        => 'TABLE_NAME',
11288                                      p_token1_value  => 'OKL_TAX_SOURCES',
11289                                      p_token2        => 'ERROR_CODE',
11290                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
11291                                                                          p_token3        => 'ITERATION',
11292                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
11293                             END LOOP;
11294                             RAISE OKL_API.G_EXCEPTION_ERROR;
11295                           END IF;
11296           END;
11297 
11298           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11299                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11300                         'Inactivated the previous active upfront tax lines ' );
11301           END IF;
11302         END IF;
11303         -- Inactivate the previous ACTIVE upfront tax lines - end
11304 
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                           'Updated existing tax lines status to INACIVE');
11308             END IF;
11309 
11310       END IF;  -- Processing will be only once for the serialized asset
11311 
11312           -- Get contract header info
11313       get_k_hdr_tax_params(
11314         p_api_version                  => p_api_version,
11315         p_init_msg_list                => p_init_msg_list,
11316         x_return_status                => x_return_status,
11317         x_msg_count                    => x_msg_count,
11318         x_msg_data                     => x_msg_data,
11319         p_khr_id                       => l_chr_id,
11320         p_source_trx_name              => p_source_trx_name,
11321         p_source_table                             => p_source_table,
11322         x_cust_acct_id                             => lx_cust_acct_id,
11323                 x_bill_to_siteuseid            => lx_bill_to_siteuseid,
11324                 x_currency_code                            => lx_currency_code,
11325         x_cust_trx_type_id             => lx_cust_trx_type_id,
11326         x_precision                                        => lx_precision,
11327                 x_minimum_accountable_unit     => lx_minimum_accountable_unit,
11328                 x_prch_opt_det                             => lx_alc_prch_opt_det,
11329                 x_fin_prod_id_det                          => lx_alc_fin_prod_id_det,
11330                 x_int_disclosed_det                        => lx_alc_int_disclosed_det,
11331         x_org_id                       => lx_org_id,
11332         x_book_class_code              => lx_book_class_code,
11333         x_bill_to_party_site_id        => lx_bill_to_party_site_id,
11334         x_bill_to_party_id             => lx_bill_to_party_id,
11335         x_bill_to_location_id          => lx_bill_to_location_id,
11336         x_currency_conversion_type     => lx_currency_conversion_type,
11337         x_currency_conversion_rate     => lx_currency_conversion_rate,
11338         x_currency_conversion_date     => lx_currency_conversion_date,
11339         x_contract_start_date          => lx_contract_start_date);
11340 
11341           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11342         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11343       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11344         RAISE OKL_API.G_EXCEPTION_ERROR;
11345       END IF;
11346 
11347       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11348         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11349                 'lx_cust_acct_id '||lx_cust_acct_id );
11350         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11351                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
11352         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11353                 'lx_currency_code '||lx_currency_code );
11354         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11355                 'lx_cust_trx_type_id '||lx_cust_trx_type_id );
11356         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11357                 'lx_precision '||lx_precision );
11358         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11359                 'lx_minimum_accountable_unit '||lx_minimum_accountable_unit );
11360         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11361                 'lx_alc_prch_opt_det '||lx_alc_prch_opt_det );
11362         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11363                 'lx_alc_fin_prod_id_det '||lx_alc_fin_prod_id_det );
11364         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11365                 'lx_alc_int_disclosed_det '||lx_alc_int_disclosed_det );
11366         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11367                 'lx_org_id '||lx_org_id );
11368         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11369                 'lx_book_class_code '||lx_book_class_code );
11370         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11371                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
11372         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11373                 'lx_bill_to_party_id '||lx_bill_to_party_id );
11374         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11375                 'lx_bill_to_location_id '||lx_bill_to_location_id );
11376         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11377                 'lx_currency_conversion_type '||lx_currency_conversion_type );
11378         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11379                 'lx_currency_conversion_rate '||lx_currency_conversion_rate );
11380         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11381                 'lx_currency_conversion_date '||lx_currency_conversion_date );
11382         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11383                 'lx_contract_start_date '||lx_contract_start_date );
11384       END IF;
11385 
11386           -- get the asset level determinants
11387           get_asset_tax_params(
11388                    p_api_version                  => p_api_version,
11389                p_init_msg_list                => OKC_API.G_FALSE,
11390                x_return_status                => x_return_status,
11391                x_msg_count                    => x_msg_count,
11392                x_msg_data                     => x_msg_data,
11393                p_khr_id                       => l_chr_id,
11394                p_kle_id                       => l_fin_asset_id,
11395                p_source_trx_name              => p_source_trx_name,
11396                p_source_table                             => p_source_table,
11397                x_transfer_of_title                        => lx_alc_transfer_of_title,
11398                x_sale_lease_back                          => lx_alc_sale_lease_back,
11399                x_purchase_of_lease                        => lx_alc_purchase_of_lease,
11400                x_usage_of_equipment                   => lx_alc_usage_of_equipment,
11401                    x_age_of_equipment                     => lx_alc_age_of_equipment,
11402                    x_vendor_site_id                   => lx_alc_vendor_site_id);
11403 
11404           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11405                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11406           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11407                 RAISE OKL_API.G_EXCEPTION_ERROR;
11408           END IF;
11409 
11410           -- Equipment Type(inventory item id)
11411           -- get the inventory item id
11412           OPEN   l_invitem_csr(l_fin_asset_id);
11413           FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
11414           IF l_invitem_csr%NOTFOUND THEN
11415             OKL_API.set_message( p_app_name      => 'OKL',
11416                                              p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
11417                                                          p_token1        => 'ASSET_NUMBER',
11418                                                          p_token1_value  => l_name);
11419             RAISE OKL_API.G_EXCEPTION_ERROR;
11420           END IF;
11421           CLOSE  l_invitem_csr;
11422 
11423       -- get the Equipment Locationn (IB Loc)
11424           get_location_party_ids(   p_api_version                  => p_api_version,
11425                                     p_init_msg_list                => OKC_API.G_FALSE,
11426                                     x_return_status                => x_return_status,
11427                                     x_msg_count                    => x_msg_count,
11428                                     x_msg_data                     => x_msg_data,
11429                                     p_cust_acct_id                 => lx_cust_acct_id,
11430                                     p_fin_asset_id                 => l_fin_asset_id,
11431                                     p_khr_id                       => l_chr_id,
11432                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
11433                                     x_bill_to_location_id          => lx_bill_to_location_id,
11434                                     x_bill_to_party_id             => lx_bill_to_party_id,
11435                                     x_bill_to_site_use_id          => lx_bill_to_siteuseid,
11436                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
11437                                     x_ship_to_location_id          => lx_ship_to_location_id,
11438                                     x_ship_to_party_id             => lx_ship_to_party_id,
11439                                     x_ship_to_site_use_id          => lx_ship_to_siteuseid);
11440 
11441       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN  -- will never be setting this to unexpecetd inside get_ufc_code ?
11442                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11443           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11444                 RAISE OKL_API.G_EXCEPTION_ERROR;
11445           END IF;
11446 
11447           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11448                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11449                           'l_fin_asset_id '||l_fin_asset_id);
11450                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11451                           'lx_alc_transfer_of_title '||lx_alc_transfer_of_title);
11452                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11453                           'lx_alc_sale_lease_back '||lx_alc_sale_lease_back);
11454                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11455                           'lx_alc_purchase_of_lease '||lx_alc_purchase_of_lease);
11456                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11457                           'lx_alc_usage_of_equipment '||lx_alc_usage_of_equipment);
11458                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11459                           'lx_alc_age_of_equipment '||lx_alc_age_of_equipment);
11460                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11461                           'lx_alc_vendor_site_id '||lx_alc_vendor_site_id);
11462                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11463                           'l_inv_item_id '||l_inv_item_id);
11464                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11465                           'l_inv_item_org_id '||l_inv_item_org_id);
11466                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11467                           'lx_ship_to_siteuseid '||lx_ship_to_siteuseid);
11468                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11469                       'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
11470                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11471                       'lx_ship_to_location_id '||lx_ship_to_location_id );
11472                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11473                       'lx_ship_to_party_id '||lx_ship_to_party_id );
11474                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11475                       'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
11476                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11477                       'lx_bill_to_location_id '||lx_bill_to_location_id );
11478                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11479                       'lx_bill_to_party_id '||lx_bill_to_party_id );
11480                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11481                       'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
11482           END IF;
11483 
11484           --asaawnka added for bug #6612165 start
11485           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11486                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11487                           'lx_cust_acct_id '||lx_cust_acct_id);
11488                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11489                           'l_install_location_id '||l_install_location_id);
11490                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11491                           'l_new_location_id '||l_new_location_id);
11492           END IF;
11493           --get the ship to addresses for the new location specified during asset location change
11494           OPEN  l_get_shiptositeid(lx_cust_acct_id,l_install_location_id,l_new_location_id);
11495           FETCH l_get_shiptositeid INTO lx_ship_to_siteuseid, lx_ship_to_party_site_id,
11496                                           lx_ship_to_party_id, lx_ship_to_location_id;
11497           CLOSE l_get_shiptositeid;
11498 
11499           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11500                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11501                           'lx_ship_to_siteuseid '||lx_ship_to_siteuseid);
11502                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11503                       'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
11504                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11505                       'lx_ship_to_location_id '||lx_ship_to_location_id );
11506                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11507                       'lx_ship_to_party_id '||lx_ship_to_party_id );
11508           END IF;
11509           --asaawnka added for bug #6612165 end
11510 
11511 
11512           -- Check if taxable bais override applies to Asset location Change transaction
11513           OPEN  l_txbasisoverride_csr(l_alc_trx_type_id_det);
11514           FETCH l_txbasisoverride_csr INTO l_fma_id;
11515           CLOSE l_txbasisoverride_csr;
11516 
11517           IF l_fma_id IS NOT NULL THEN
11518 
11519                 OPEN  l_formulae_csr(l_fma_id);
11520                 FETCH l_formulae_csr INTO l_formula_name;
11521                 IF l_formulae_csr%NOTFOUND THEN
11522                   OKC_API.set_message( p_app_name      => 'OKC',
11523                                                    p_msg_name      => G_INVALID_VALUE,
11524                                                    p_token1        => G_COL_NAME_TOKEN,
11525                                                    p_token1_value  => 'FMA_ID');
11526                   RAISE OKL_API.G_EXCEPTION_ERROR;
11527                 END IF;
11528                 CLOSE l_formulae_csr;
11529 
11530                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11531                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11532                           'l_formula_name '||l_formula_name);
11533                 END IF;
11534           END IF;
11535 
11536       -- Fetch the Ledger info
11537       l_ledger_id := okl_accounting_util.get_set_of_books_id;
11538 
11539       -- Fetch the Tax country
11540       l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
11541                                                          x_msg_count         => x_msg_count,
11542                                                          x_msg_data          => x_msg_data,
11543                                                          p_legal_entity_id   => l_legal_entity_id);
11544           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11545         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11546       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11547         RAISE OKL_API.G_EXCEPTION_ERROR;
11548       END IF;
11549 
11550       OPEN c_get_streams_count(l_chr_id, l_fin_asset_id);
11551       FETCH c_get_streams_count INTO l_stream_count;
11552       CLOSE c_get_streams_count;
11553 
11554 
11555       -- If the asset is serialized, divide the taxable amount by number of instances count
11556       -- Fetch the number of instances of asset
11557       OPEN c_get_ast_instances(l_fin_asset_id);
11558       FETCH c_get_ast_instances INTO l_asset_inst_count;
11559       CLOSE c_get_ast_instances;
11560 
11561       -- 'l_alc_ser_def_code' value is used in specific to derive the TBC, PC, UFC codes only once
11562       -- for serialized asset in order to prevent the same processing for all serial numbers
11563       IF (p_serialized_asset = 'Y' AND l_stream_count > 1) THEN
11564         l_alc_ser_def_code := 'A'; -- If there are multiple stream types, fetch the codes always
11565       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
11566         l_alc_ser_def_code := 'F'; -- If asset is serialized and asset is having only 1 unit , then fetch it
11567       ELSIF (p_serialized_asset = 'Y' AND p_alc_final_call IS NULL) THEN
11568         l_alc_ser_def_code := 'F'; -- If the asset is serialized and having multiple units, fetch only first time
11569       ELSIF (p_serialized_asset = 'Y' AND p_alc_final_call IN ('N', 'Y')) THEN
11570         l_alc_ser_def_code := 'N'; -- If the asset is serialized and having multiple units, fetch is already done in
11571                                    -- previous 'elsif' .. so don't fetch anymore, use the previous fetched values
11572       ELSIF (p_serialized_asset IS NULL OR p_serialized_asset = 'N') THEN
11573         l_alc_ser_def_code := 'A'; -- If the asset is not serialized fetch it
11574       END IF;
11575 
11576           tax_call_cnt := 1;
11577 
11578           -- This cursor will return only a few rows, typically 1 or 2
11579       -- For Non-Serialized asset
11580          -- A1 > Rent , A1 - Estimated Property tax etc
11581       -- For Serialized asset
11582          -- A1_ser1 > Rent , A1_ser1 - Estimated Property tax ( tax call)
11583          -- A1_ser2 > Rent , A1_ser2 - Estimated Property tax (2 tax call)
11584          -- A1_ser3 > Rent , A1_ser3 - Estimated Property tax (3 tax call)
11585           FOR l_assetstreams_rec IN l_assetstreams_csr(l_chr_id, l_fin_asset_id) LOOP
11586 
11587                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11588                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11589                           'Processing current payment '||l_assetstreams_rec.stream_type_id);
11590                 END IF;
11591 
11592                 -- Get the default taxable basis amount
11593                 OPEN  l_strmelements_csr(l_assetstreams_rec.stream_id);
11594                 FETCH l_strmelements_csr INTO l_taxable_basis;
11595                 CLOSE l_strmelements_csr;
11596 
11597         IF (p_serialized_asset = 'Y' AND l_asset_inst_count IS NOT NULL) THEN
11598           l_taxable_ser_basis := l_taxable_basis / l_asset_inst_count;
11599         END IF;
11600 
11601         -- Populate tax sources record -- start
11602         lp_tax_src_params_rec.kle_id       := l_fin_asset_id;
11603         lp_tax_src_params_rec.asset_number := l_name;
11604         lp_tax_src_params_rec.line_name    := l_name;
11605 
11606         lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := lx_ship_to_siteuseid;
11607         lp_tax_src_params_rec.ship_to_party_site_id           := lx_ship_to_party_site_id;
11608         lp_tax_src_params_rec.ship_to_party_id                := lx_ship_to_party_id;
11609         lp_tax_src_params_rec.ship_to_location_id             := lx_ship_to_location_id;
11610 
11611         lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
11612         lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
11613         lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
11614         lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
11615 
11616         lp_tax_src_params_rec.inventory_item_id             := l_inv_item_id;
11617         lp_tax_src_params_rec.sty_id                        := l_assetstreams_rec.stream_type_id;
11618 
11619         lp_tax_src_params_rec.khr_id                        := l_chr_id;
11620         lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
11621         lp_tax_src_params_rec.entity_code                   := G_ASSETS_ENTITY_CODE;
11622         lp_tax_src_params_rec.event_class_code              := G_ALC_EVENT_CODE;
11623         lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
11624         lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
11625         lp_tax_src_params_rec.tax_reporting_flag            := 'N';
11626         lp_tax_src_params_rec.reported_yn                   := 'N';
11627         lp_tax_src_params_rec.trx_date                      := l_trx_date;
11628         lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
11629         lp_tax_src_params_rec.line_intended_use             := lx_alc_usage_of_equipment;
11630         lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
11631         lp_tax_src_params_rec.org_id                        := lx_org_id;
11632         lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
11633         lp_tax_src_params_rec.try_id                        := l_alc_trx_type_id_det;
11634 
11635         lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
11636         lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
11637         lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
11638             lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
11639             lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
11640             lp_tax_src_params_rec.adjusted_doc_number           := null;
11641             lp_tax_src_params_rec.adjusted_doc_date             := null;
11642 
11643         lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
11644 
11645         lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
11646         lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
11647         lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
11648 
11649         IF (p_serialized_asset = 'Y') THEN
11650           lp_tax_src_params_rec.line_amt                      := l_taxable_ser_basis;
11651           lp_tax_src_params_rec.alc_serialized_total_line_amt := l_taxable_basis;
11652           lp_tax_src_params_rec.tax_line_status_code          := G_INACTIVE_STATUS;
11653 
11654           IF (p_alc_final_call = 'Y') THEN
11655             -- Indicates tax for last serial number. Also, used to display the
11656             -- HGrid data
11657             -- alc_serialized_yn is set at the stream type level. If A1 is
11658             -- serialized (3 units), with 2 stream types, okl_tax_sources will
11659             -- have 6 rows. Out of these 2 rows (last ones for each atream type)
11660             -- will have alc_serialized_yn set to 'L'
11661             lp_tax_src_params_rec.alc_serialized_yn           := 'L';
11662           ELSE
11663             lp_tax_src_params_rec.alc_serialized_yn           := p_serialized_asset;
11664           END IF;
11665 
11666         ELSE
11667           lp_tax_src_params_rec.line_amt                      := l_taxable_basis;
11668           lp_tax_src_params_rec.alc_serialized_total_line_amt := l_taxable_basis;
11669           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
11670         END IF;
11671         -- Populate tax sources record -- end
11672 
11673                 populate_tax_info(
11674                                         p_api_version                  => p_api_version,
11675                                         p_init_msg_list                => OKC_API.G_FALSE,
11676                                         x_return_status                => x_return_status,
11677                                         x_msg_count                    => x_msg_count,
11678                                         x_msg_data                     => x_msg_data,
11679                                         p_prch_opt_det                             => lx_alc_prch_opt_det,
11680                                         p_fin_prod_id_det                          => lx_alc_fin_prod_id_det,
11681                                         p_int_disclosed_det                        => lx_alc_int_disclosed_det,
11682                                         p_title_trnsfr_code                        => lx_alc_transfer_of_title,
11683                                         p_sale_lease_back_code             => lx_alc_sale_lease_back,
11684                                         p_lease_purchased_code             => lx_alc_purchase_of_lease,
11685                                         p_equip_usage_code                         => lx_alc_usage_of_equipment,
11686                                         p_vendor_site_id                           => lx_alc_vendor_site_id,
11687                                         p_age_of_equip                             => lx_alc_age_of_equipment,
11688                     p_source_trx_name              => p_source_trx_name,
11689                                     p_cust_trx_type_id             => lx_cust_trx_type_id,
11690                                     p_book_class_code              => lx_book_class_code,
11691                                         p_tax_call_cnt                             => tax_call_cnt,
11692                                         p_fma_id                                           => l_fma_id,
11693                                         p_formula_name                             => l_formula_name,
11694                                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
11695                                         p_precision                                        => lx_precision,
11696                                         p_sales_quote_id                           => null,
11697                                     p_event_type_code              => G_ALC_CRE_EVENT_CODE,
11698                                     p_ledger_id                    => l_ledger_id,
11699                                     p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
11700                                     p_tax_src_params_rec           => lp_tax_src_params_rec,
11701                                     p_quote_flag                   => 'N',
11702                                     p_rounding_ship_to_party_id    => lx_ship_to_party_id,
11703                                     p_rounding_bill_to_party_id    => lx_bill_to_party_id,
11704                                     p_line_amt_includes_tax_flag   => 'N',
11705                     p_term_quote_type_code         => null,
11706                     p_term_quote_reason_code       => null,
11707                     p_alc_ser_def_code             => l_alc_ser_def_code,
11708                                     px_tax_sources_tbl                     => lx_tax_sources_tbl,
11709                                     px_line_params_tbl             => lx_line_params_tbl );
11710 
11711         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11712           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11713         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11714           RAISE OKL_API.G_EXCEPTION_ERROR;
11715         END IF;
11716 
11717                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11718                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11719                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
11720         END IF;
11721 
11722                 tax_call_cnt := tax_call_cnt + 1;
11723       END LOOP;
11724 
11725           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11726                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11727                           'prepared new tax sources ');
11728           END IF;
11729 
11730       -- insert into okl_tax_sources
11731           BEGIN
11732         IF lx_tax_sources_tbl.COUNT > 0 THEN
11733           FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
11734             -- SAVE EXCEPTIONS
11735             INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
11736         END IF;
11737       EXCEPTION
11738         WHEN OTHERS THEN
11739           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
11740                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
11741                           OKL_API.set_message(
11742                                                                      p_app_name      => 'OKL',
11743                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
11744                                      p_token1        => 'TABLE_NAME',
11745                                      p_token1_value  => 'OKL_TAX_SOURCES',
11746                                      p_token2        => 'ERROR_CODE',
11747                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
11748                                                                          p_token3        => 'ITERATION',
11749                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
11750                         END LOOP;
11751                         RAISE OKL_API.G_EXCEPTION_ERROR;
11752                   END IF;
11753       END;
11754       -- Insert into okl_tax_sources end --
11755 
11756           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11757                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11758                           ' inserted into okl_tax_sources ' );
11759           END IF;
11760 
11761       -- At this point tax sources for previous upfront tax have been Inactivated
11762       -- and tax sources for the current tax calculations have been inserted"
11763       -- Incase of  a non serailzed asset, sample tax sources are -
11764       -- K1 > A1 > RENT
11765       -- K1 > A1 > Est Prop Tax
11766       -- Above Tax sources are created during the single call from ALC to OKl Tax Engine
11767       -- Incase of  a serailzed asset (3 units) , sample tax sources after the
11768       -- first call to OKL Tax engine, for 1st serial no. are -
11769       -- K1 > A1 > Ser 1 > RENT
11770       -- K1 > A1 > Ser 1 > Est Prop Tax
11771       -- During subsequent calls (for each serial no.), following taxsources will be created
11772       -- K1 > A1 > Ser 2 > RENT
11773       -- K1 > A1 > Ser 2 > Est Prop Tax
11774       -- K1 > A1 > Ser 3 > RENT
11775       -- K1 > A1 > Ser 4 > Est Prop Tax
11776           -- Call tax engine to calculate new tax for the current asset location change transaction
11777           IF lx_line_params_tbl.COUNT > 0 THEN
11778             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11779                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11780                                'Before tax engine call '||x_return_status);
11781             END IF;
11782 
11783         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
11784         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
11785         lp_hdr_params_rec.internal_organization_id := lx_org_id;
11786         lp_hdr_params_rec.entity_code              := G_ASSETS_ENTITY_CODE;
11787         lp_hdr_params_rec.event_class_code         := G_ALC_EVENT_CODE;
11788         lp_hdr_params_rec.event_type_code          := G_ALC_CRE_EVENT_CODE;
11789         lp_hdr_params_rec.quote_flag               := 'N';
11790 
11791         OKL_TAX_INTERFACE_PVT.calculate_tax(
11792                                     p_api_version       =>  p_api_version,
11793                                     p_init_msg_list     =>  p_init_msg_list,
11794                                     x_return_status     =>  x_return_status,
11795                                     x_msg_count         =>  x_msg_count,
11796                                     x_msg_data          =>  x_msg_data,
11797                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
11798                                     p_line_params_tbl   =>  lx_line_params_tbl);
11799 
11800                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11801                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11802                                    'After tax engine call '||x_return_status);
11803             END IF;
11804 
11805             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11806           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11807         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11808           RAISE OKL_API.G_EXCEPTION_ERROR;
11809         END IF;
11810       END IF;
11811 
11812       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11813         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11814              'Calling "update_tax_sources_total" .. ');
11815       END IF;
11816 
11817       update_tax_sources_total(p_api_version      => p_api_version,
11818                                p_init_msg_list    => p_init_msg_list,
11819                                x_return_status    => x_return_status,
11820                                x_msg_count        => x_msg_count,
11821                                x_msg_data         => x_msg_data,
11822                                p_source_trx_id    => p_source_trx_id,
11823                                p_source_trx_name  => p_source_trx_name,
11824                                p_serialized_asset => p_serialized_asset);
11825 
11826       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11827         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11828              'Return Status' || x_return_status);
11829       END IF;
11830 
11831       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11832         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11833       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11834         RAISE OKL_API.G_EXCEPTION_ERROR;
11835       END IF;
11836 
11837       IF (p_serialized_asset = 'Y' AND p_alc_final_call = 'Y') THEN
11838         G_UFC_CODE := null;
11839         G_TBC_CODE := null;
11840         G_PC_CODE := null;
11841         G_TAX_CLASS_CODE := null;
11842 
11843         populate_alc_total_tax(p_api_version      => p_api_version,
11844                                p_init_msg_list    => p_init_msg_list,
11845                                x_return_status    => l_return_status,
11846                                x_msg_count        => x_msg_count,
11847                                x_msg_data         => x_msg_data,
11848                                p_asset_id         => l_fin_asset_id,
11849                                p_request_id       => p_request_id,
11850                                p_serialized_asset => p_serialized_asset);
11851 
11852         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11853           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11854         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
11855           RAISE OKL_API.G_EXCEPTION_ERROR;
11856         END IF;
11857       ELSE
11858         populate_alc_total_tax(p_api_version      => p_api_version,
11859                                p_init_msg_list    => p_init_msg_list,
11860                                x_return_status    => l_return_status,
11861                                x_msg_count        => x_msg_count,
11862                                x_msg_data         => x_msg_data,
11863                                p_asset_id         => l_fin_asset_id,
11864                                p_request_id       => p_request_id);
11865 
11866         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11867           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11868         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
11869           RAISE OKL_API.G_EXCEPTION_ERROR;
11870         END IF;
11871       END IF;
11872 
11873     ELSIF p_tax_call_type = G_ACTUAL_CALL_TYPE THEN
11874 
11875       OPEN l_okltaxsources_csr(cp_app_id  =>  G_OKL_APPLICATION_ID,
11876                                cp_trx_id  =>  p_source_trx_id);
11877       FETCH l_okltaxsources_csr into l_taxsources_rec;
11878       CLOSE l_okltaxsources_csr;
11879 
11880 
11881       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11882         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11883               'process_final_upfront_tax');
11884       END IF;
11885 
11886       -- Call ebtax procedure to flip the reportable flag from N to Y
11887       process_final_upfront_tax( p_api_version       => p_api_version,
11888                                          p_init_msg_list     => p_init_msg_list,
11889                                  x_return_status     => x_return_status,
11890                                      x_msg_count         => x_msg_count,
11891                                          x_msg_data          => x_msg_data,
11892                                          p_trx_id                        => p_source_trx_id,
11893                                      p_application_id    => G_OKL_APPLICATION_ID,
11894                                  p_entity_code       => l_taxsources_rec.entity_code,
11895                                  p_event_class_code  => l_taxsources_rec.event_class_code);
11896 
11897       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11898         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11899               'Return Status' || x_return_status);
11900       END IF;
11901 
11902       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11903                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11904           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11905                 RAISE OKL_API.G_EXCEPTION_ERROR;
11906           END IF;
11907 
11908       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11909         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11910              'Calling "make_tax_sources_reportable" .. ');
11911       END IF;
11912 
11913       make_tax_sources_reportable(p_api_version    => p_api_version,
11914                                   p_init_msg_list  => p_init_msg_list,
11915                                   x_return_status  => x_return_status,
11916                                   x_msg_count      => x_msg_count,
11917                                   x_msg_data       => x_msg_data,
11918                                   p_source_trx_id  => p_source_trx_id);
11919 
11920       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11921         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax.',
11922              'Return Status' || x_return_status);
11923       END IF;
11924 
11925       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11926         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11927       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11928         RAISE OKL_API.G_EXCEPTION_ERROR;
11929       END IF;
11930 
11931     END IF;
11932 
11933     -- CS will Call BPD API with ALC trx, to create tax only invoice.
11934 
11935         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11936        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ','End(-)');
11937     END IF;
11938   EXCEPTION
11939     WHEN OKL_API.G_EXCEPTION_ERROR THEN
11940          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11941                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ',
11942                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
11943          END IF;
11944 
11945          IF l_trxassets_csr%ISOPEN THEN
11946             CLOSE l_trxassets_csr;
11947          END IF;
11948 
11949          IF l_txlitminsts_csr%ISOPEN THEN
11950             CLOSE l_txlitminsts_csr;
11951          END IF;
11952 
11953          IF l_partysiteuses_csr%ISOPEN THEN
11954             CLOSE l_partysiteuses_csr;
11955          END IF;
11956 
11957          IF l_taxsources_csr%ISOPEN THEN
11958             CLOSE l_taxsources_csr;
11959          END IF;
11960 
11961          IF l_okcklines_csr%ISOPEN THEN
11962             CLOSE l_okcklines_csr;
11963          END IF;
11964 
11965          IF l_assetstreams_csr%ISOPEN THEN
11966             CLOSE l_assetstreams_csr;
11967          END IF;
11968 
11969          IF l_strmelements_csr%ISOPEN THEN
11970             CLOSE l_strmelements_csr;
11971          END IF;
11972 
11973          IF l_txbasisoverride_csr%ISOPEN THEN
11974             CLOSE l_txbasisoverride_csr;
11975          END IF;
11976 
11977          IF l_invitem_csr%ISOPEN THEN
11978             CLOSE l_invitem_csr;
11979          END IF;
11980 
11981          IF l_formulae_csr%ISOPEN THEN
11982             CLOSE l_formulae_csr;
11983          END IF;
11984 
11985          IF c_get_streams_count%ISOPEN THEN
11986             CLOSE c_get_streams_count;
11987          END IF;
11988 
11989          x_return_status := OKL_API.G_RET_STS_ERROR;
11990     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11991          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
11992                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ',
11993                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
11994          END IF;
11995 
11996          IF l_trxassets_csr%ISOPEN THEN
11997             CLOSE l_trxassets_csr;
11998          END IF;
11999 
12000          IF l_txlitminsts_csr%ISOPEN THEN
12001             CLOSE l_txlitminsts_csr;
12002          END IF;
12003 
12004          IF l_partysiteuses_csr%ISOPEN THEN
12005             CLOSE l_partysiteuses_csr;
12006          END IF;
12007 
12008          IF l_taxsources_csr%ISOPEN THEN
12009             CLOSE l_taxsources_csr;
12010          END IF;
12011 
12012          IF l_okcklines_csr%ISOPEN THEN
12013             CLOSE l_okcklines_csr;
12014          END IF;
12015 
12016          IF l_assetstreams_csr%ISOPEN THEN
12017             CLOSE l_assetstreams_csr;
12018          END IF;
12019 
12020          IF l_strmelements_csr%ISOPEN THEN
12021             CLOSE l_strmelements_csr;
12022          END IF;
12023 
12024          IF l_txbasisoverride_csr%ISOPEN THEN
12025             CLOSE l_txbasisoverride_csr;
12026          END IF;
12027 
12028          IF l_invitem_csr%ISOPEN THEN
12029             CLOSE l_invitem_csr;
12030          END IF;
12031 
12032          IF l_formulae_csr%ISOPEN THEN
12033             CLOSE l_formulae_csr;
12034          END IF;
12035 
12036          IF c_get_streams_count%ISOPEN THEN
12037             CLOSE c_get_streams_count;
12038          END IF;
12039 
12040          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12041 
12042     WHEN OTHERS THEN
12043          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12044             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_asset_loc_tax ',
12045                   'EXCEPTION :'||sqlerrm);
12046          END IF;
12047 
12048          IF l_trxassets_csr%ISOPEN THEN
12049             CLOSE l_trxassets_csr;
12050          END IF;
12051 
12052          IF l_txlitminsts_csr%ISOPEN THEN
12053             CLOSE l_txlitminsts_csr;
12054          END IF;
12055 
12056          IF l_partysiteuses_csr%ISOPEN THEN
12057             CLOSE l_partysiteuses_csr;
12058          END IF;
12059 
12060          IF l_taxsources_csr%ISOPEN THEN
12061             CLOSE l_taxsources_csr;
12062          END IF;
12063 
12064          IF l_okcklines_csr%ISOPEN THEN
12065             CLOSE l_okcklines_csr;
12066          END IF;
12067 
12068          IF l_assetstreams_csr%ISOPEN THEN
12069             CLOSE l_assetstreams_csr;
12070          END IF;
12071 
12072          IF l_strmelements_csr%ISOPEN THEN
12073             CLOSE l_strmelements_csr;
12074          END IF;
12075 
12076          IF l_txbasisoverride_csr%ISOPEN THEN
12077             CLOSE l_txbasisoverride_csr;
12078          END IF;
12079 
12080          IF l_invitem_csr%ISOPEN THEN
12081             CLOSE l_invitem_csr;
12082          END IF;
12083 
12084          IF l_formulae_csr%ISOPEN THEN
12085             CLOSE l_formulae_csr;
12086          END IF;
12087 
12088          IF c_get_streams_count%ISOPEN THEN
12089             CLOSE c_get_streams_count;
12090          END IF;
12091 
12092          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12093          -- unexpected error
12094          OKL_API.set_message(p_app_name      => g_app_name,
12095                          p_msg_name      => g_unexpected_error,
12096                          p_token1        => g_sqlcode_token,
12097                          p_token1_value  => sqlcode,
12098                          p_token2        => g_sqlerrm_token,
12099                          p_token2_value  => sqlerrm);
12100 
12101   END process_asset_loc_tax;
12102 
12103 /*========================================================================
12104  | PRIVATE PROCEDURE process_split_asset_tax
12105  |
12106  | DESCRIPTION
12107  |    This procedure is called from calculate_sales_tax procedure to Split
12108  |    the currently active upfront tax lines for the asset being split
12109  |
12110  | CALLED FROM                                  calculate_sales_tax()
12111  |
12112  |
12113  | CALLS PROCEDURES/FUNCTIONS
12114  |     OKL_TAX_SOURCES_PUB.update_tax_sources()
12115  |
12116  |
12117  | PARAMETERS
12118  |      p_source_trx_id                 -- Source transaction ID
12119  |      p_source_trx_name       -- Source transaction Name
12120  |      p_source_table          -- Source table
12121  |
12122  | KNOWN ISSUES
12123  |
12124  | NOTES
12125  |
12126  |
12127  | MODIFICATION HISTORY
12128  | Date                  Author            Description of Changes
12129  | 08-APR-05            SECHAWLA           Created
12130  |
12131  *=======================================================================*/
12132   PROCEDURE process_split_asset_tax(
12133         p_api_version                   IN  NUMBER,
12134     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
12135     x_return_status                     OUT NOCOPY VARCHAR2,
12136     x_msg_count                         OUT NOCOPY NUMBER,
12137     x_msg_data                          OUT NOCOPY VARCHAR2,
12138     p_source_trx_id                                     IN  NUMBER,
12139     p_source_trx_name               IN  VARCHAR2,
12140     p_source_table                  IN  VARCHAR2) IS
12141 
12142     -------------Split Asset -------------------------
12143     --p_source_trx_id           ---> okl_trx_assets.id
12144     --p_source_trx_name     ---> 'Split Asset'
12145     --p_source_table        ---> 'OKL_TRX_ASSETS'
12146     --------------------------------------------------
12147 
12148         -- validate source trx id
12149         CURSOR l_trxassets_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
12150         SELECT a.try_id, a.date_trans_occurred
12151         FROM   okl_trx_assets a, okl_trx_types_tl b
12152         WHERE  a.id = cp_trx_id
12153         AND    a.try_id = b.id
12154         AND    b.name = cp_trx_type_name
12155     AND    language = 'US';
12156 
12157         -- get the trx line information
12158         CURSOR l_txlassets_csr(cp_id IN NUMBER) IS
12159         SELECT txl.id, okc.cle_id kle_id, -- financial asset to be split
12160                txl.dnz_khr_id,
12161                txl.asset_number,
12162                txl.current_units
12163         FROM   okl_txl_assets_b txl,
12164            okc_k_lines_b okc
12165         WHERE  txl.tas_id = cp_id
12166     AND    txl.kle_id = okc.id
12167     AND    txl.dnz_khr_id = okc.dnz_chr_id;
12168 
12169         -- get the trx details information
12170         CURSOR l_txdassets_csr(cp_id IN NUMBER) IS
12171         SELECT txd.id, okc.cle_id target_kle_id, txd.asset_number, txd.split_percent, txd.quantity
12172         FROM   okl_txd_assets_b txd,
12173            okc_k_lines_b okc
12174         WHERE  tal_id = cp_id
12175     AND    txd.target_kle_id = okc.id;
12176 
12177 
12178         -- get the current active upfront tax sources for this asset
12179         -- k1 > A1 > RENT
12180         -- k1 > A1 > Estimated Property Tax
12181         CURSOR l_taxsources_csr(cp_khr_id IN NUMBER, cp_kle_id IN NUMBER ) IS
12182         SELECT id, khr_id, kle_id, asset_number, trx_id, trx_line_id, entity_code, event_class_code,
12183                trx_level_type, tax_call_type_code, sty_id, trx_business_category, reported_yn,
12184            sel_id, line_name, application_id, tax_reporting_flag, default_taxation_country,
12185            product_category, user_defined_fisc_class, line_intended_use,
12186            tax_classification_code, inventory_item_id, bill_to_cust_acct_id, legal_entity_id,
12187                    line_amt, assessable_value, total_tax, product_type,
12188            product_fisc_classification, trx_date, provnl_tax_determination_date,
12189            try_id, ship_to_location_id, ship_to_party_site_id, ship_to_party_id,
12190            bill_to_party_site_id, bill_to_location_id, bill_to_party_id,
12191            ship_to_cust_acct_site_use_id, bill_to_cust_acct_site_use_id,
12192            trx_currency_code, currency_conversion_type, currency_conversion_rate,
12193            currency_conversion_date, org_id, alc_serialized_yn
12194         FROM   okl_tax_sources
12195         WHERE  khr_id = cp_khr_id
12196         AND    kle_id = cp_kle_id
12197         AND    tax_call_type_code = G_UPFRONT_TAX
12198         AND    tax_line_status_code = G_ACTIVE_STATUS
12199         AND    ADJUSTED_DOC_TRX_ID IS NULL
12200         AND    ADJUSTED_DOC_TRX_LINE_ID IS NULL;
12201 
12202         -- get the tax lines corresponding to previous upfront tax source ID
12203     CURSOR l_taxtrxdetails_csr(cp_txs_id IN NUMBER) IS
12204     SELECT *
12205     FROM   okl_tax_trx_details
12206     WHERE  txs_id = cp_txs_id;
12207 
12208     -- get the contract id
12209         CURSOR l_okcklines_csr(cp_kle_id IN NUMBER) IS
12210         SELECT dnz_chr_id, name
12211         FROM   okc_k_lines_v
12212         WHERE  id = cp_kle_id;
12213 
12214     CURSOR l_racusttrxtypes_csr IS
12215     SELECT cust_trx_type_id
12216         FROM   ra_cust_trx_types_all
12217         WHERE  name = 'Invoice-OKL';
12218 
12219     CURSOR l_fndcurrency_csr(cp_currency_code IN VARCHAR2) IS
12220     SELECT precision, minimum_accountable_unit
12221     FROM   fnd_currencies
12222     WHERE  currency_code = cp_currency_code
12223         AND    enabled_flag = 'Y'
12224     AND    NVL(start_date_active, sysdate) <= sysdate
12225     AND    NVL(end_date_active, sysdate) >= sysdate;
12226 
12227         TYPE tax_sources_tbl_type IS TABLE OF OKL_TAX_SOURCES%ROWTYPE INDEX BY BINARY_INTEGER;
12228     TYPE tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
12229 
12230         l_tax_src_tbl                                           tax_src_tbl_type;
12231         l_tax_sources_tbl                   tax_sources_tbl_type;
12232     rev_trx_lines_tbl                   zx_trx_lines_tbl_type;
12233     rev_trx_hdr_rec                     line_params_rec_type;
12234     l_line_params_tbl                   line_params_tbl_type;
12235     l_new_tax_sources_tbl               tax_sources_tbl_type;
12236     lp_hdr_params_rec                   hdr_params_rec_type;
12237 
12238     l_spl_trx_type_id                                   NUMBER;
12239     l_trx_date                                                  DATE;
12240     l_fin_asset_id                                              NUMBER;
12241     l_dnz_khr_id                                                NUMBER;
12242         l_asset_number                                          VARCHAR2(150);
12243         l_txl_id                                                        NUMBER;
12244         l_txd_id                                                        NUMBER;
12245         l_current_units                                         NUMBER;
12246     l_dnz_chr_id                                                NUMBER;
12247         l_name                                                          VARCHAR2(150);
12248         k                                                                       NUMBER;
12249         j                                                                       NUMBER;
12250         old_tx_src_cnt                                          NUMBER;
12251         new_tax_count                                           NUMBER;
12252     lp_txsv_rec                                                 txsv_rec_type;
12253         lp_txsv_rec_emp                                         txsv_rec_type;
12254     lx_txsv_rec                                                 txsv_rec_type;
12255     l_split_ratio                                               NUMBER;
12256     l_reverse                           BOOLEAN := FALSE;
12257     l_org_id                            NUMBER;
12258     l_legal_entity_id                   NUMBER;
12259 
12260     l_cust_trx_type_id                  NUMBER;
12261     l_precision                         NUMBER;
12262     l_minimum_accountable_unit          NUMBER;
12263     l_hdr_total_tax                     NUMBER := 0;
12264     l_trx_currency_code                 VARCHAR2(15);
12265     l_asset_ser_alc                     VARCHAR2(1);
12266 
12267   BEGIN
12268 
12269     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12270       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax','Begin(+)');
12271     END IF;
12272 
12273     --Print Input Variables
12274     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12275       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12276               'p_init_msg_list :'||p_init_msg_list);
12277       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12278               'p_source_trx_id :'||p_source_trx_id);
12279       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12280               'p_source_trx_name :'||p_source_trx_name);
12281       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12282               'p_source_table :'||p_source_table);
12283     END IF;
12284 
12285     x_return_status := OKL_API.G_RET_STS_SUCCESS;
12286 
12287     -- validate the source trx id
12288     OPEN  l_trxassets_csr(p_source_trx_id, p_source_trx_name);
12289     FETCH l_trxassets_csr INTO l_spl_trx_type_id, l_trx_date;
12290     IF l_trxassets_csr%NOTFOUND THEN
12291       -- source trx id is invalid
12292       OKC_API.set_message( p_app_name      => 'OKC',
12293                            p_msg_name      => G_INVALID_VALUE,
12294                            p_token1        => G_COL_NAME_TOKEN,
12295                            p_token1_value  => 'SOURCE_TRX_ID');
12296       RAISE OKL_API.G_EXCEPTION_ERROR;
12297     END IF;
12298     CLOSE l_trxassets_csr;
12299 
12300     -- get trx line information
12301     OPEN  l_txlassets_csr(p_source_trx_id);
12302     FETCH l_txlassets_csr INTO l_txl_id, l_fin_asset_id, l_dnz_khr_id,
12303                                l_asset_number, l_current_units;
12304     IF l_txlassets_csr%NOTFOUND THEN
12305       OKC_API.set_message( p_app_name      => 'OKC',
12306                            p_msg_name      => G_REQUIRED_VALUE,
12307                            p_token1        => G_COL_NAME_TOKEN,
12308                            p_token1_value  => 'Financial Asset');
12309       RAISE OKL_API.G_EXCEPTION_ERROR;
12310     END IF;
12311 
12312     IF l_fin_asset_id IS NULL THEN
12313       OKC_API.set_message( p_app_name      => 'OKC',
12314                            p_msg_name      => G_REQUIRED_VALUE,
12315                            p_token1        => G_COL_NAME_TOKEN,
12316                            p_token1_value  => 'KLE_ID');
12317       RAISE OKL_API.G_EXCEPTION_ERROR;
12318     END IF;
12319 
12320     IF l_current_units IS NULL THEN
12321       OKC_API.set_message( p_app_name      => 'OKC',
12322                            p_msg_name      => G_REQUIRED_VALUE,
12323                            p_token1        => G_COL_NAME_TOKEN,
12324                            p_token1_value  => 'CURRENT_UNITS');
12325       RAISE OKL_API.G_EXCEPTION_ERROR;
12326     END IF;
12327 
12328     CLOSE l_txlassets_csr;
12329 
12330     IF l_dnz_khr_id IS NULL OR l_asset_number IS NULL THEN
12331       OPEN  l_okcklines_csr(l_fin_asset_id);
12332       FETCH l_okcklines_csr INTO l_dnz_chr_id, l_name;
12333       IF l_okcklines_csr%NOTFOUND THEN
12334         OKC_API.set_message( p_app_name      => 'OKC',
12335                              p_msg_name      => G_INVALID_VALUE,
12336                              p_token1        => G_COL_NAME_TOKEN,
12337                              p_token1_value  => 'KLE_ID');
12338         RAISE OKL_API.G_EXCEPTION_ERROR;
12339       END IF;
12340       CLOSE l_okcklines_csr;
12341 
12342       IF l_dnz_khr_id IS NULL THEN
12343         l_dnz_khr_id := l_dnz_chr_id;
12344       END IF;
12345 
12346       IF l_asset_number IS NULL THEN
12347         l_asset_number := l_name;
12348         IF l_asset_number IS NULL THEN
12349           OKC_API.set_message( p_app_name      => 'OKC',
12350                                p_msg_name      => G_REQUIRED_VALUE,
12351                                p_token1        => G_COL_NAME_TOKEN,
12352                                p_token1_value  => 'ASSET_NUMBER');
12353           RAISE OKL_API.G_EXCEPTION_ERROR;
12354         END IF;
12355       END IF;
12356     END IF;
12357 
12358         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12359       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12360                   'l_txl_id'||l_txl_id);
12361       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12362                   'l_fin_asset_id'||l_fin_asset_id);
12363       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12364                   'l_dnz_khr_id'||l_dnz_khr_id);
12365       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12366                   'l_asset_number'||l_asset_number);
12367       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12368                   'l_current_units'||l_current_units);
12369     END IF;
12370 
12371 
12372     -- Create adjusting tax source transaction for the previous active tax lines
12373     -- These tax lines could have resulted from an earlier booking / rebooking /
12374     -- asset location change / split asset transactions
12375     -- Deactivate existing upfront tax lines for this asset.
12376     k := 1;
12377     l_tax_sources_tbl.DELETE;
12378     l_tax_src_tbl.DELETE;
12379     -- This cursor will fetch only a few rows
12380     FOR l_taxsources_rec IN l_taxsources_csr(l_dnz_khr_id, l_fin_asset_id) LOOP
12381       -- K1 > A1 > RENT
12382       -- K2 > A1 > Estimated Property Tax
12383 
12384       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12385         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12386                   'creating -ve tax sources for prev ACTIVE upfront tax lines '||' k = '||k);
12387       END IF;
12388 
12389       IF (k = 1) THEN
12390         l_reverse                           := TRUE;
12391         l_org_id                            := l_taxsources_rec.org_id;
12392         l_legal_entity_id                   := l_taxsources_rec.legal_entity_id;
12393         l_trx_currency_code                 := l_taxsources_rec.trx_currency_code;
12394       END IF;
12395 
12396       l_hdr_total_tax := l_hdr_total_tax + l_taxsources_rec.total_tax;
12397 
12398       -- Create adjusting tax source transaction for the previous active tax lines
12399           l_tax_sources_tbl(k).id                           := get_seq_id;
12400       l_tax_sources_tbl(k).khr_id                       := l_taxsources_rec.khr_id;
12401       l_tax_sources_tbl(k).kle_id                       := l_taxsources_rec.kle_id;
12402       l_tax_sources_tbl(k).asset_number                 := l_taxsources_rec.asset_number;
12403       l_tax_sources_tbl(k).trx_id                       := p_source_trx_id; -- split asset trx id
12404       l_tax_sources_tbl(k).trx_line_id                  := l_tax_sources_tbl(k).id;
12405       l_tax_sources_tbl(k).entity_code                  := G_CONTRACTS_ENTITY_CODE;
12406       l_tax_sources_tbl(k).event_class_code             := G_REBOOK_EVENT_CLASS_CODE;
12407       l_tax_sources_tbl(k).trx_level_type               := G_TRX_LEVEL_TYPE;
12408       l_tax_sources_tbl(k).adjusted_doc_entity_code     := l_taxsources_rec.entity_code;
12409       l_tax_sources_tbl(k).adjusted_doc_event_class_code := l_taxsources_rec.event_class_code;
12410       l_tax_sources_tbl(k).adjusted_doc_trx_id           := l_taxsources_rec.trx_id;
12411       l_tax_sources_tbl(k).adjusted_doc_trx_line_id      := l_taxsources_rec.trx_line_id;
12412       l_tax_sources_tbl(k).adjusted_doc_trx_level_type   := l_taxsources_rec.trx_level_type;
12413           l_tax_sources_tbl(k).adjusted_doc_number           := NULL;
12414           l_tax_sources_tbl(k).adjusted_doc_date             := NULL;
12415           l_tax_sources_tbl(k).tax_call_type_code            := l_taxsources_rec.tax_call_type_code;
12416           l_tax_sources_tbl(k).sty_id                        := l_taxsources_rec.sty_id;
12417           l_tax_sources_tbl(k).trx_business_category         := l_taxsources_rec.trx_business_category;
12418           l_tax_sources_tbl(k).tax_line_status_code          := G_ACTIVE_STATUS;
12419 
12420           l_tax_sources_tbl(k).sel_id                        := l_taxsources_rec.sel_id;
12421           l_tax_sources_tbl(k).line_name                     := l_taxsources_rec.line_name;
12422           l_tax_sources_tbl(k).application_id                := l_taxsources_rec.application_id;
12423           l_tax_sources_tbl(k).tax_reporting_flag            := l_taxsources_rec.tax_reporting_flag;
12424           l_tax_sources_tbl(k).default_taxation_country      := l_taxsources_rec.default_taxation_country;
12425           l_tax_sources_tbl(k).product_category              := l_taxsources_rec.product_category;
12426           l_tax_sources_tbl(k).user_defined_fisc_class       := l_taxsources_rec.user_defined_fisc_class;
12427           l_tax_sources_tbl(k).line_intended_use             := l_taxsources_rec.line_intended_use;
12428           l_tax_sources_tbl(k).tax_classification_code       := l_taxsources_rec.tax_classification_code;
12429           l_tax_sources_tbl(k).inventory_item_id             := l_taxsources_rec.inventory_item_id;
12430           l_tax_sources_tbl(k).bill_to_cust_acct_id          := l_taxsources_rec.bill_to_cust_acct_id;
12431           l_tax_sources_tbl(k).org_id                        := l_taxsources_rec.org_id;
12432           l_tax_sources_tbl(k).legal_entity_id               := l_taxsources_rec.legal_entity_id;
12433           l_tax_sources_tbl(k).line_amt                      := -l_taxsources_rec.line_amt;
12434           l_tax_sources_tbl(k).assessable_value              := -l_taxsources_rec.assessable_value;
12435           l_tax_sources_tbl(k).total_tax                     := null; -- Populated after Reverse document ZX call
12436           l_tax_sources_tbl(k).product_type                  := l_taxsources_rec.product_type;
12437           l_tax_sources_tbl(k).product_fisc_classification   := l_taxsources_rec.product_fisc_classification;
12438           l_tax_sources_tbl(k).trx_date                      := l_trx_date;
12439           l_tax_sources_tbl(k).provnl_tax_determination_date := l_taxsources_rec.trx_date;
12440           l_tax_sources_tbl(k).try_id                        := l_spl_trx_type_id;
12441           l_tax_sources_tbl(k).ship_to_location_id           := l_taxsources_rec.ship_to_location_id;
12442           l_tax_sources_tbl(k).ship_to_party_site_id         := l_taxsources_rec.ship_to_party_site_id;
12443           l_tax_sources_tbl(k).ship_to_party_id              := l_taxsources_rec.ship_to_party_id;
12444           l_tax_sources_tbl(k).bill_to_party_site_id         := l_taxsources_rec.bill_to_party_site_id;
12445           l_tax_sources_tbl(k).bill_to_location_id           := l_taxsources_rec.bill_to_location_id;
12446           l_tax_sources_tbl(k).bill_to_party_id              := l_taxsources_rec.bill_to_party_id;
12447           l_tax_sources_tbl(k).ship_to_cust_acct_site_use_id := l_taxsources_rec.ship_to_cust_acct_site_use_id;
12448           l_tax_sources_tbl(k).bill_to_cust_acct_site_use_id := l_taxsources_rec.bill_to_cust_acct_site_use_id;
12449           l_tax_sources_tbl(k).trx_currency_code             := l_taxsources_rec.trx_currency_code;
12450           l_tax_sources_tbl(k).currency_conversion_type      := l_taxsources_rec.currency_conversion_type;
12451           l_tax_sources_tbl(k).currency_conversion_rate      := l_taxsources_rec.currency_conversion_rate;
12452           l_tax_sources_tbl(k).currency_conversion_date      := l_taxsources_rec.currency_conversion_date;
12453       l_tax_sources_tbl(k).alc_serialized_yn             := l_taxsources_rec.alc_serialized_yn;
12454 
12455       l_tax_sources_tbl(k).reported_yn                   := l_taxsources_rec.reported_yn;
12456           l_tax_sources_tbl(k).program_id                    := NULL;
12457           l_tax_sources_tbl(k).request_id                    := NULL;
12458           l_tax_sources_tbl(k).program_application_id        := NULL;
12459           l_tax_sources_tbl(k).program_update_date           := NULL;
12460           l_tax_sources_tbl(k).attribute_category            := NULL;
12461 
12462           l_tax_sources_tbl(k).attribute1                    := NULL;
12463           l_tax_sources_tbl(k).attribute2                    := NULL;
12464           l_tax_sources_tbl(k).attribute3                    := NULL;
12465           l_tax_sources_tbl(k).attribute4                    := NULL;
12466           l_tax_sources_tbl(k).attribute5                    := NULL;
12467           l_tax_sources_tbl(k).attribute6                    := NULL;
12468           l_tax_sources_tbl(k).attribute7                    := NULL;
12469           l_tax_sources_tbl(k).attribute8                    := NULL;
12470           l_tax_sources_tbl(k).attribute9                    := NULL;
12471           l_tax_sources_tbl(k).attribute10                   := NULL;
12472           l_tax_sources_tbl(k).attribute11                   := NULL;
12473           l_tax_sources_tbl(k).attribute12                   := NULL;
12474           l_tax_sources_tbl(k).attribute13                   := NULL;
12475           l_tax_sources_tbl(k).attribute14                   := NULL;
12476           l_tax_sources_tbl(k).attribute15                   := NULL;
12477           l_tax_sources_tbl(k).created_by                    := G_USER_ID;
12478           l_tax_sources_tbl(k).creation_date                 := SYSDATE;
12479           l_tax_sources_tbl(k).last_updated_by               := G_USER_ID;
12480           l_tax_sources_tbl(k).last_update_date              := SYSDATE;
12481           l_tax_sources_tbl(k).last_update_login             := G_LOGIN_ID;
12482           l_tax_sources_tbl(k).object_version_number         := NULL;
12483 
12484       l_tax_src_tbl(k)                                   := l_taxsources_rec.id;
12485 
12486       -- Populate the ZX reverse transaction lines table for tax call
12487       rev_trx_lines_tbl(k).internal_organization_id      := l_org_id;
12488       rev_trx_lines_tbl(k).reversing_appln_id            := G_OKL_APPLICATION_ID;
12489       rev_trx_lines_tbl(k).reversing_entity_code         := G_CONTRACTS_ENTITY_CODE;
12490       rev_trx_lines_tbl(k).reversing_evnt_cls_code       := G_REBOOK_EVENT_CLASS_CODE;
12491       rev_trx_lines_tbl(k).reversing_trx_id              := p_source_trx_id;
12492       rev_trx_lines_tbl(k).reversing_trx_level_type      := l_taxsources_rec.trx_level_type;
12493       rev_trx_lines_tbl(k).reversing_trx_line_id         := l_tax_sources_tbl(k).id;
12494 
12495       rev_trx_lines_tbl(k).reversed_appln_id             := G_OKL_APPLICATION_ID;
12496       rev_trx_lines_tbl(k).reversed_entity_code          := l_taxsources_rec.entity_code;
12497       rev_trx_lines_tbl(k).reversed_evnt_cls_code        := l_taxsources_rec.event_class_code;
12498       rev_trx_lines_tbl(k).reversed_trx_id               := l_taxsources_rec.trx_id;
12499       rev_trx_lines_tbl(k).reversed_trx_level_type       := l_taxsources_rec.trx_level_type;
12500       rev_trx_lines_tbl(k).reversed_trx_line_id          := l_taxsources_rec.trx_line_id;
12501 
12502       k := k + 1;
12503     END LOOP;
12504 
12505     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12506       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12507                   ' k = '||k);
12508     END IF;
12509 
12510     -- Inactivate the previous ACTIVE tax lines - begin
12511     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12512       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12513                   ' Inactivating the status of previous active upfront tax sources - Start ');
12514     END IF;
12515 
12516     IF l_tax_src_tbl.COUNT > 0 THEN
12517       BEGIN
12518         FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
12519           UPDATE okl_tax_sources SET tax_line_status_code = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
12520       EXCEPTION
12521         WHEN OTHERS THEN
12522           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
12523                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
12524                                                                 OKL_API.set_message(
12525                                                                      p_app_name      => 'OKL',
12526                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
12527                                      p_token1        => 'TABLE_NAME',
12528                                      p_token1_value  => 'OKL_TAX_SOURCES',
12529                                      p_token2        => 'ERROR_CODE',
12530                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
12531                                                                          p_token3        => 'ITERATION',
12532                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
12533                         END LOOP;
12534                         RAISE OKL_API.G_EXCEPTION_ERROR;
12535                   END IF;
12536       END;
12537     END IF;
12538 
12539     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12540                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12541                         'Inactivating the status of previous active upfront tax sources - End ' );
12542     END IF;
12543     -- Inactivate the previous ACTIVE tax lines - end
12544 
12545     -- bulk insert into okl_tax_sources -- start
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                   ' Insert Adjusting tax sources  - Start');
12549     END IF;
12550 
12551     BEGIN
12552       IF l_tax_sources_tbl.COUNT > 0 THEN
12553         FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
12554           -- SAVE EXCEPTIONS
12555           INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
12556       END IF;
12557     EXCEPTION
12558       WHEN OTHERS THEN
12559         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
12560                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
12561                         OKL_API.set_message(p_app_name      => 'OKL',
12562                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
12563                                 p_token1        => 'TABLE_NAME',
12564                                 p_token1_value  => 'OKL_TAX_SOURCES',
12565                                 p_token2        => 'ERROR_CODE',
12566                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
12567                                                                 p_token3        => 'ITERATION',
12568                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
12569           END LOOP;
12570               RAISE OKL_API.G_EXCEPTION_ERROR;
12571                 END IF;
12572     END;
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                   ' Insert Adjusting tax sources  - End');
12577     END IF;
12578     -- bulk insert into okl_tax_sources -- end
12579 
12580     -- Reverse document call
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               'Calling OKL_TAX_INTERFACE_PVT.reverse_document');
12584     END IF;
12585 
12586     IF (l_reverse) THEN  -- Process Reversal only if the tax is created for the contract
12587 
12588       rev_trx_hdr_rec.internal_organization_id := l_org_id;
12589       rev_trx_hdr_rec.application_id           := G_OKL_APPLICATION_ID;
12590       rev_trx_hdr_rec.trx_id                   := p_source_trx_id;
12591       rev_trx_hdr_rec.legal_entity_id          := l_legal_entity_id;
12592       rev_trx_hdr_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
12593       rev_trx_hdr_rec.event_class_code         := G_REBOOK_EVENT_CLASS_CODE;
12594 
12595       OKL_TAX_INTERFACE_PVT.reverse_document (
12596                               p_api_version       => p_api_version,
12597                               p_init_msg_list     => p_init_msg_list,
12598                               x_return_status     => x_return_status,
12599                               x_msg_count         => x_msg_count,
12600                               x_msg_data          => x_msg_data,
12601                               p_rev_trx_hdr_rec   => rev_trx_hdr_rec,
12602                               p_rev_trx_lines_tbl => rev_trx_lines_tbl);
12603 
12604       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12605         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12606               'Return Status' || x_return_status);
12607       END IF;
12608 
12609       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12610         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12611       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12612         RAISE OKL_API.G_EXCEPTION_ERROR;
12613       END IF;
12614 
12615       -- Get the total tax amount corresponding to 'Reverse' transaction from
12616       -- zx_lines and update total_tax on okl_tax_sources
12617       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12618         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12619           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
12620       END IF;
12621 
12622       update_tax_sources_total(p_api_version     => p_api_version,
12623                                p_init_msg_list   => p_init_msg_list,
12624                                x_return_status   => x_return_status,
12625                                x_msg_count       => x_msg_count,
12626                                x_msg_data        => x_msg_data,
12627                                p_source_trx_id   => p_source_trx_id,
12628                                p_source_trx_name => p_source_trx_name);
12629 
12630       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12631         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12632           'Return Status' || x_return_status);
12633       END IF;
12634 
12635       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12636         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12637       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12638         RAISE OKL_API.G_EXCEPTION_ERROR;
12639       END IF;
12640 
12641     END IF;
12642 
12643     -- get the AR cust trx type ID
12644     OPEN  l_racusttrxtypes_csr;
12645     FETCH l_racusttrxtypes_csr INTO l_cust_trx_type_id;
12646     IF l_racusttrxtypes_csr%NOTFOUND THEN
12647        -- cust trx tyep id is required
12648        OKC_API.set_message( p_app_name      => 'OKC',
12649                             p_msg_name      => G_REQUIRED_VALUE,
12650                             p_token1        => G_COL_NAME_TOKEN,
12651                             p_token1_value  => 'CUST_TRX_TYPE_ID');
12652        RAISE OKL_API.G_EXCEPTION_ERROR;
12653     END IF;
12654     CLOSE l_racusttrxtypes_csr;
12655 
12656         OPEN  l_fndcurrency_csr(l_trx_currency_code);
12657     FETCH l_fndcurrency_csr INTO l_precision, l_minimum_accountable_unit;  -- l_minimum_accountable_unit is optional in fnd_currencies
12658                                                                                                                                            -- but mandatory for tax team
12659                                                                                                                                            -- check with Nilesh
12660     IF l_fndcurrency_csr%NOTFOUND THEN
12661       OKC_API.set_message( p_app_name      => 'OKC',
12662                            p_msg_name      => G_INVALID_VALUE,
12663                            p_token1        => G_COL_NAME_TOKEN,
12664                            p_token1_value  => 'CURRENCY_CODE');
12665       RAISE OKL_API.G_EXCEPTION_ERROR;
12666     END IF;
12667     CLOSE l_fndcurrency_csr;
12668 
12669     IF k > 1 THEN -- if there are any existing ACTIVE upfront tax lines
12670       old_tx_src_cnt := k - 1;  -- tax source trx count for the original asset
12671 
12672       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12673                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12674                   'old_tx_src_cnt '||old_tx_src_cnt );
12675       END IF;
12676 
12677       l_asset_ser_alc := is_serialized_and_alc(l_dnz_khr_id);
12678 
12679           -- create tax sources for assets after split
12680       l_new_tax_sources_tbl.DELETE;
12681       new_tax_count := 1;
12682       FOR l_txdassets_rec IN l_txdassets_csr(l_txl_id) LOOP  -- for each new asset
12683 
12684         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12685           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12686                   'asset after split '||l_txdassets_rec.asset_number );
12687           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12688                   'split_percent '||l_txdassets_rec.split_percent );
12689         END IF;
12690 
12691         IF l_txdassets_rec.split_percent IS NOT NULL THEN
12692           l_split_ratio := l_txdassets_rec.split_percent  / 100;
12693         ELSE
12694           l_split_ratio := l_txdassets_rec.quantity / l_current_units;
12695         END IF;
12696 
12697         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12698           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12699                   'l_split_ratio '||l_split_ratio );
12700         END IF;
12701 
12702         -- for each new asset, create as many tax source transactions as the original asset
12703         FOR k IN 1..old_tx_src_cnt LOOP
12704 
12705           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12706                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12707                        'Creating tax src for the new asset, k = '||k);
12708           END IF;
12709 
12710                   -- Create new tax sources for split transaction
12711               l_new_tax_sources_tbl(new_tax_count).id                           := get_seq_id;
12712           l_new_tax_sources_tbl(new_tax_count).khr_id                       := l_dnz_khr_id;
12713           l_new_tax_sources_tbl(new_tax_count).kle_id                       := l_txdassets_rec.target_kle_id;
12714           l_new_tax_sources_tbl(new_tax_count).asset_number                 := l_txdassets_rec.asset_number;
12715           l_new_tax_sources_tbl(new_tax_count).trx_id                       := p_source_trx_id; -- split asset trx id
12716           l_new_tax_sources_tbl(new_tax_count).trx_line_id                  := l_new_tax_sources_tbl(new_tax_count).id;
12717           l_new_tax_sources_tbl(new_tax_count).entity_code                  := G_CONTRACTS_ENTITY_CODE;
12718           l_new_tax_sources_tbl(new_tax_count).event_class_code             := G_BOOKING_EVENT_CLASS_CODE;
12719           l_new_tax_sources_tbl(new_tax_count).trx_level_type               := G_TRX_LEVEL_TYPE;
12720           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_entity_code     := NULL;
12721           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_event_class_code := NULL;
12722           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_trx_id           := NULL;
12723           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_trx_line_id      := NULL;
12724           l_new_tax_sources_tbl(new_tax_count).adjusted_doc_trx_level_type   := NULL;
12725               l_new_tax_sources_tbl(new_tax_count).adjusted_doc_number           := NULL;
12726               l_new_tax_sources_tbl(new_tax_count).adjusted_doc_date             := NULL;
12727               l_new_tax_sources_tbl(new_tax_count).tax_call_type_code            := G_UPFRONT_TAX;
12728               l_new_tax_sources_tbl(new_tax_count).sty_id                        := l_tax_sources_tbl(k).sty_id;
12729               l_new_tax_sources_tbl(new_tax_count).trx_business_category         := l_tax_sources_tbl(k).trx_business_category;
12730               l_new_tax_sources_tbl(new_tax_count).tax_line_status_code          := G_ACTIVE_STATUS;
12731 
12732               l_new_tax_sources_tbl(new_tax_count).sel_id                        := l_tax_sources_tbl(k).sel_id;
12733               l_new_tax_sources_tbl(new_tax_count).line_name                     := l_txdassets_rec.asset_number;
12734               l_new_tax_sources_tbl(new_tax_count).application_id                := G_OKL_APPLICATION_ID;
12735               l_new_tax_sources_tbl(new_tax_count).tax_reporting_flag            := l_tax_sources_tbl(k).tax_reporting_flag;
12736               l_new_tax_sources_tbl(new_tax_count).default_taxation_country      := l_tax_sources_tbl(k).default_taxation_country;
12737               l_new_tax_sources_tbl(new_tax_count).product_category              := l_tax_sources_tbl(k).product_category;
12738               l_new_tax_sources_tbl(new_tax_count).user_defined_fisc_class       := l_tax_sources_tbl(k).user_defined_fisc_class;
12739               l_new_tax_sources_tbl(new_tax_count).line_intended_use             := l_tax_sources_tbl(k).line_intended_use;
12740               l_new_tax_sources_tbl(new_tax_count).tax_classification_code       := l_tax_sources_tbl(k).tax_classification_code;
12741               l_new_tax_sources_tbl(new_tax_count).inventory_item_id             := l_tax_sources_tbl(k).inventory_item_id;
12742               l_new_tax_sources_tbl(new_tax_count).bill_to_cust_acct_id          := l_tax_sources_tbl(k).bill_to_cust_acct_id;
12743               l_new_tax_sources_tbl(new_tax_count).org_id                        := l_tax_sources_tbl(k).org_id;
12744               l_new_tax_sources_tbl(new_tax_count).legal_entity_id               := l_tax_sources_tbl(k).legal_entity_id;
12745               l_new_tax_sources_tbl(new_tax_count).line_amt                      := -l_tax_sources_tbl(k).line_amt * l_split_ratio;
12746               l_new_tax_sources_tbl(new_tax_count).assessable_value              := -l_tax_sources_tbl(k).assessable_value * l_split_ratio;
12747               l_new_tax_sources_tbl(new_tax_count).total_tax                     := null; -- Populated after tax call
12748               l_new_tax_sources_tbl(new_tax_count).product_type                  := l_tax_sources_tbl(k).product_type;
12749               l_new_tax_sources_tbl(new_tax_count).product_fisc_classification   := l_tax_sources_tbl(k).product_fisc_classification;
12750               l_new_tax_sources_tbl(new_tax_count).trx_date                      := l_tax_sources_tbl(k).trx_date;
12751               l_new_tax_sources_tbl(new_tax_count).provnl_tax_determination_date := l_tax_sources_tbl(k).provnl_tax_determination_date;
12752               l_new_tax_sources_tbl(new_tax_count).try_id                        := l_spl_trx_type_id;
12753               l_new_tax_sources_tbl(new_tax_count).ship_to_location_id           := l_tax_sources_tbl(k).ship_to_location_id;
12754               l_new_tax_sources_tbl(new_tax_count).ship_to_party_site_id         := l_tax_sources_tbl(k).ship_to_party_site_id;
12755               l_new_tax_sources_tbl(new_tax_count).ship_to_party_id              := l_tax_sources_tbl(k).ship_to_party_id;
12756               l_new_tax_sources_tbl(new_tax_count).bill_to_party_site_id         := l_tax_sources_tbl(k).bill_to_party_site_id;
12757               l_new_tax_sources_tbl(new_tax_count).bill_to_location_id           := l_tax_sources_tbl(k).bill_to_location_id;
12758               l_new_tax_sources_tbl(new_tax_count).bill_to_party_id              := l_tax_sources_tbl(k).bill_to_party_id;
12759               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;
12760               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;
12761               l_new_tax_sources_tbl(new_tax_count).trx_currency_code             := l_tax_sources_tbl(k).trx_currency_code;
12762               l_new_tax_sources_tbl(new_tax_count).currency_conversion_type      := l_tax_sources_tbl(k).currency_conversion_type;
12763               l_new_tax_sources_tbl(new_tax_count).currency_conversion_rate      := l_tax_sources_tbl(k).currency_conversion_rate;
12764               l_new_tax_sources_tbl(new_tax_count).currency_conversion_date      := l_tax_sources_tbl(k).currency_conversion_date;
12765               l_new_tax_sources_tbl(new_tax_count).alc_serialized_yn             := l_tax_sources_tbl(k).alc_serialized_yn;
12766 
12767           l_new_tax_sources_tbl(new_tax_count).reported_yn                   := l_tax_sources_tbl(k).reported_yn;
12768               l_new_tax_sources_tbl(new_tax_count).program_id                    := NULL;
12769               l_new_tax_sources_tbl(new_tax_count).request_id                    := NULL;
12770               l_new_tax_sources_tbl(new_tax_count).program_application_id        := NULL;
12771               l_new_tax_sources_tbl(new_tax_count).program_update_date           := NULL;
12772               l_new_tax_sources_tbl(new_tax_count).attribute_category            := NULL;
12773 
12774               l_new_tax_sources_tbl(new_tax_count).attribute1                    := NULL;
12775               l_new_tax_sources_tbl(new_tax_count).attribute2                    := NULL;
12776               l_new_tax_sources_tbl(new_tax_count).attribute3                    := NULL;
12777               l_new_tax_sources_tbl(new_tax_count).attribute4                    := NULL;
12778               l_new_tax_sources_tbl(new_tax_count).attribute5                    := NULL;
12779               l_new_tax_sources_tbl(new_tax_count).attribute6                    := NULL;
12780               l_new_tax_sources_tbl(new_tax_count).attribute7                    := NULL;
12781               l_new_tax_sources_tbl(new_tax_count).attribute8                    := NULL;
12782               l_new_tax_sources_tbl(new_tax_count).attribute9                    := NULL;
12783               l_new_tax_sources_tbl(new_tax_count).attribute10                   := NULL;
12784               l_new_tax_sources_tbl(new_tax_count).attribute11                   := NULL;
12785               l_new_tax_sources_tbl(new_tax_count).attribute12                   := NULL;
12786               l_new_tax_sources_tbl(new_tax_count).attribute13                   := NULL;
12787               l_new_tax_sources_tbl(new_tax_count).attribute14                   := NULL;
12788               l_new_tax_sources_tbl(new_tax_count).attribute15                   := NULL;
12789               l_new_tax_sources_tbl(new_tax_count).created_by                    := G_USER_ID;
12790               l_new_tax_sources_tbl(new_tax_count).creation_date                 := SYSDATE;
12791               l_new_tax_sources_tbl(new_tax_count).last_updated_by               := G_USER_ID;
12792               l_new_tax_sources_tbl(new_tax_count).last_update_date              := SYSDATE;
12793               l_new_tax_sources_tbl(new_tax_count).last_update_login             := G_LOGIN_ID;
12794               l_new_tax_sources_tbl(new_tax_count).object_version_number         := NULL;
12795 
12796           -- Populate line params table for tax calculation
12797           l_line_params_tbl(new_tax_count).application_id                     := G_OKL_APPLICATION_ID;
12798           l_line_params_tbl(new_tax_count).trx_id                             := p_source_trx_id;
12799           l_line_params_tbl(new_tax_count).internal_organization_id           := l_tax_sources_tbl(k).org_id;
12800           l_line_params_tbl(new_tax_count).entity_code                        := G_CONTRACTS_ENTITY_CODE;
12801           l_line_params_tbl(new_tax_count).event_class_code                   := G_BOOKING_EVENT_CLASS_CODE;
12802           l_line_params_tbl(new_tax_count).event_type_code                    := G_BOOKING_CRE_EVT_TYPE_CODE;
12803           l_line_params_tbl(new_tax_count).trx_date                           := l_tax_sources_tbl(k).trx_date;
12804           l_line_params_tbl(new_tax_count).ledger_id                          := okl_accounting_util.get_set_of_books_id;
12805           l_line_params_tbl(new_tax_count).legal_entity_id                    := l_tax_sources_tbl(k).legal_entity_id;
12806           l_line_params_tbl(new_tax_count).trx_level_type                     := G_TRX_LEVEL_TYPE;
12807           l_line_params_tbl(new_tax_count).line_level_action                  := G_CREATE_LINE_LEVEL_ACTION;
12808           l_line_params_tbl(new_tax_count).trx_line_id                        := l_new_tax_sources_tbl(new_tax_count).id;
12809           l_line_params_tbl(new_tax_count).line_amt                           := -l_tax_sources_tbl(k).line_amt * l_split_ratio;
12810           l_line_params_tbl(new_tax_count).tax_reporting_flag                 := l_tax_sources_tbl(k).tax_reporting_flag;
12811           l_line_params_tbl(new_tax_count).default_taxation_country           := l_tax_sources_tbl(k).default_taxation_country;
12812           l_line_params_tbl(new_tax_count).product_type                       := l_tax_sources_tbl(k).product_type;
12813           l_line_params_tbl(new_tax_count).output_tax_classification_code     := l_tax_sources_tbl(k).tax_classification_code;
12814           l_line_params_tbl(new_tax_count).assessable_value                   := -l_tax_sources_tbl(k).assessable_value * l_split_ratio;
12815           l_line_params_tbl(new_tax_count).receivables_trx_type_id            := l_cust_trx_type_id;
12816           l_line_params_tbl(new_tax_count).product_id                         := l_tax_sources_tbl(k).inventory_item_id;
12817           l_line_params_tbl(new_tax_count).adjusted_doc_entity_code           := NULL;
12818           l_line_params_tbl(new_tax_count).adjusted_doc_event_class_code      := NULL;
12819           l_line_params_tbl(new_tax_count).adjusted_doc_trx_id                := NULL;
12820           l_line_params_tbl(new_tax_count).adjusted_doc_line_id               := NULL;
12821           l_line_params_tbl(new_tax_count).adjusted_doc_trx_level_type        := NULL;
12822           l_line_params_tbl(new_tax_count).adjusted_doc_number                := NULL;
12823           l_line_params_tbl(new_tax_count).adjusted_doc_date                  := NULL;
12824           l_line_params_tbl(new_tax_count).line_amt_includes_tax_flag         := 'N';
12825           l_line_params_tbl(new_tax_count).trx_business_category              := l_tax_sources_tbl(k).trx_business_category;
12826           l_line_params_tbl(new_tax_count).product_category                   := l_tax_sources_tbl(k).product_category;
12827           l_line_params_tbl(new_tax_count).user_defined_fisc_class            := l_tax_sources_tbl(k).user_defined_fisc_class;
12828           l_line_params_tbl(new_tax_count).line_intended_use                  := l_tax_sources_tbl(k).line_intended_use;
12829           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;
12830           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;
12831           l_line_params_tbl(new_tax_count).bill_to_party_site_id              := l_tax_sources_tbl(k).bill_to_party_site_id;
12832           l_line_params_tbl(new_tax_count).bill_to_location_id                := l_tax_sources_tbl(k).bill_to_location_id;
12833           l_line_params_tbl(new_tax_count).bill_to_party_id                   := l_tax_sources_tbl(k).bill_to_party_id;
12834           l_line_params_tbl(new_tax_count).ship_to_party_site_id              := l_tax_sources_tbl(k).ship_to_party_site_id;
12835           l_line_params_tbl(new_tax_count).ship_to_location_id                := l_tax_sources_tbl(k).ship_to_location_id;
12836           l_line_params_tbl(new_tax_count).ship_to_party_id                   := l_tax_sources_tbl(k).ship_to_party_id;
12837           l_line_params_tbl(new_tax_count).rounding_ship_to_party_id          := l_tax_sources_tbl(k).ship_to_party_id;
12838           l_line_params_tbl(new_tax_count).rounding_bill_to_party_id          := l_tax_sources_tbl(k).bill_to_party_id;
12839           l_line_params_tbl(new_tax_count).trx_currency_code                  := l_tax_sources_tbl(k).trx_currency_code;
12840           l_line_params_tbl(new_tax_count).precision                          := l_precision;
12841           l_line_params_tbl(new_tax_count).minimum_accountable_unit           := l_minimum_accountable_unit;
12842           l_line_params_tbl(new_tax_count).currency_conversion_date           := l_tax_sources_tbl(k).currency_conversion_date;
12843           l_line_params_tbl(new_tax_count).currency_conversion_rate           := l_tax_sources_tbl(k).currency_conversion_rate;
12844           l_line_params_tbl(new_tax_count).currency_conversion_type               := l_tax_sources_tbl(k).currency_conversion_type;
12845           l_line_params_tbl(new_tax_count).provnl_tax_determination_date      := l_tax_sources_tbl(k).provnl_tax_determination_date;
12846           l_line_params_tbl(new_tax_count).ctrl_total_hdr_tax_amt             := l_hdr_total_tax;
12847 
12848               new_tax_count := new_tax_count + 1;
12849 
12850             END LOOP;
12851 
12852       END LOOP;
12853 
12854       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12855         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12856                      'l_line_params_tbl.COUNT '||l_line_params_tbl.COUNT);
12857         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12858                      'l_new_tax_sources_tbl.COUNT '||l_new_tax_sources_tbl.COUNT);
12859       END IF;
12860 
12861       -- bulk insert into okl_tax_sources -- start
12862       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12863         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12864                   ' Insert Split asset tax sources  - Start');
12865       END IF;
12866 
12867       BEGIN
12868         IF l_new_tax_sources_tbl.COUNT > 0 THEN
12869           FORALL indx in l_new_tax_sources_tbl.FIRST..l_new_tax_sources_tbl.LAST
12870             -- SAVE EXCEPTIONS
12871             INSERT INTO okl_tax_sources VALUES l_new_tax_sources_tbl(indx);
12872         END IF;
12873       EXCEPTION
12874         WHEN OTHERS THEN
12875           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
12876                     FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
12877                           OKL_API.set_message(p_app_name      => 'OKL',
12878                                   p_msg_name      => 'OKL_TX_TRX_INS_ERR',
12879                                   p_token1        => 'TABLE_NAME',
12880                                   p_token1_value  => 'OKL_TAX_SOURCES',
12881                                   p_token2        => 'ERROR_CODE',
12882                                   p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
12883                                                                   p_token3        => 'ITERATION',
12884                                                                   p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
12885             END LOOP;
12886                         RAISE OKL_API.G_EXCEPTION_ERROR;
12887                   END IF;
12888       END;
12889 
12890       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12891         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12892                   ' Insert Split asset tax sources  - End');
12893       END IF;
12894       -- bulk insert into okl_tax_sources -- end
12895 
12896 
12897           IF l_line_params_tbl.COUNT > 0 THEN
12898             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12899                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12900                                'Before tax engine call '||x_return_status);
12901             END IF;
12902 
12903         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
12904         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
12905         lp_hdr_params_rec.internal_organization_id := l_org_id;
12906         lp_hdr_params_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
12907         lp_hdr_params_rec.event_class_code         := G_BOOKING_EVENT_CLASS_CODE;
12908         lp_hdr_params_rec.event_type_code          := G_BOOKING_CRE_EVT_TYPE_CODE;
12909         lp_hdr_params_rec.quote_flag               := 'N';
12910 
12911         OKL_TAX_INTERFACE_PVT.calculate_tax(
12912                                     p_api_version       =>  p_api_version,
12913                                     p_init_msg_list     =>  p_init_msg_list,
12914                                     x_return_status     =>  x_return_status,
12915                                     x_msg_count         =>  x_msg_count,
12916                                     x_msg_data          =>  x_msg_data,
12917                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
12918                                     p_line_params_tbl   =>  l_line_params_tbl);
12919 
12920                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12921                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12922                                    'After tax engine call '||x_return_status);
12923             END IF;
12924 
12925             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12926           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12927         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12928           RAISE OKL_API.G_EXCEPTION_ERROR;
12929         END IF;
12930       END IF;
12931 
12932       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12933         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12934              'Calling "update_tax_sources_total" .. ');
12935       END IF;
12936 
12937       update_tax_sources_total(p_api_version    => p_api_version,
12938                                p_init_msg_list  => p_init_msg_list,
12939                                x_return_status  => x_return_status,
12940                                x_msg_count      => x_msg_count,
12941                                x_msg_data       => x_msg_data,
12942                                p_source_trx_id  => p_source_trx_id);
12943 
12944       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12945         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax.',
12946              'Return Status' || x_return_status);
12947       END IF;
12948 
12949       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12950         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12951       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12952         RAISE OKL_API.G_EXCEPTION_ERROR;
12953       END IF;
12954 
12955       -- Populate Serialized Asset total tax, if the ALC happened on the asset
12956       -- before the Split process
12957       IF (l_asset_ser_alc = 'Y') THEN
12958         FOR l_txdassets_rec IN l_txdassets_csr(l_txl_id) LOOP
12959           populate_ser_split_total_tax(p_api_version      => p_api_version,
12960                                        p_init_msg_list    => p_init_msg_list,
12961                                        x_return_status    => x_return_status,
12962                                        x_msg_count        => x_msg_count,
12963                                        x_msg_data         => x_msg_data,
12964                                        p_asset_id         => l_txdassets_rec.target_kle_id,
12965                                        p_serialized_asset => l_asset_ser_alc);
12966 
12967           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12968             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12969           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12970             RAISE OKL_API.G_EXCEPTION_ERROR;
12971           END IF;
12972         END LOOP;
12973       END IF;
12974 
12975     END IF; -- if there are any existing ACTIVE upfront tax lines
12976 
12977     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12978        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ','End(-)');
12979     END IF;
12980 
12981   EXCEPTION
12982     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12983       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
12984         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ',
12985                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
12986       END IF;
12987 
12988       IF l_trxassets_csr%ISOPEN THEN
12989         CLOSE l_trxassets_csr;
12990       END IF;
12991 
12992       IF l_txlassets_csr%ISOPEN THEN
12993         CLOSE l_txlassets_csr;
12994       END IF;
12995 
12996       IF l_txdassets_csr%ISOPEN THEN
12997         CLOSE l_txdassets_csr;
12998       END IF;
12999 
13000       IF l_taxsources_csr%ISOPEN THEN
13001         CLOSE l_taxsources_csr;
13002       END IF;
13003 
13004       IF l_taxtrxdetails_csr%ISOPEN THEN
13005         CLOSE l_taxtrxdetails_csr;
13006       END IF;
13007 
13008       IF l_okcklines_csr%ISOPEN THEN
13009         CLOSE l_okcklines_csr;
13010       END IF;
13011 
13012       IF l_racusttrxtypes_csr%ISOPEN THEN
13013         CLOSE l_racusttrxtypes_csr;
13014       END IF;
13015 
13016       IF l_fndcurrency_csr%ISOPEN THEN
13017         CLOSE l_fndcurrency_csr;
13018       END IF;
13019 
13020     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13021       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13022         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ',
13023                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
13024       END IF;
13025 
13026       IF l_trxassets_csr%ISOPEN THEN
13027         CLOSE l_trxassets_csr;
13028       END IF;
13029 
13030       IF l_txlassets_csr%ISOPEN THEN
13031         CLOSE l_txlassets_csr;
13032       END IF;
13033 
13034       IF l_txdassets_csr%ISOPEN THEN
13035         CLOSE l_txdassets_csr;
13036       END IF;
13037 
13038       IF l_taxsources_csr%ISOPEN THEN
13039         CLOSE l_taxsources_csr;
13040       END IF;
13041 
13042       IF l_taxtrxdetails_csr%ISOPEN THEN
13043         CLOSE l_taxtrxdetails_csr;
13044       END IF;
13045 
13046       IF l_okcklines_csr%ISOPEN THEN
13047         CLOSE l_okcklines_csr;
13048       END IF;
13049 
13050       IF l_racusttrxtypes_csr%ISOPEN THEN
13051         CLOSE l_racusttrxtypes_csr;
13052       END IF;
13053 
13054       IF l_fndcurrency_csr%ISOPEN THEN
13055         CLOSE l_fndcurrency_csr;
13056       END IF;
13057 
13058       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13059 
13060     WHEN OTHERS THEN
13061       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13062         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_split_asset_tax ',
13063                   'EXCEPTION :'||sqlerrm);
13064       END IF;
13065 
13066       IF l_trxassets_csr%ISOPEN THEN
13067         CLOSE l_trxassets_csr;
13068       END IF;
13069 
13070       IF l_txlassets_csr%ISOPEN THEN
13071         CLOSE l_txlassets_csr;
13072       END IF;
13073 
13074       IF l_txdassets_csr%ISOPEN THEN
13075         CLOSE l_txdassets_csr;
13076       END IF;
13077 
13078       IF l_taxsources_csr%ISOPEN THEN
13079         CLOSE l_taxsources_csr;
13080       END IF;
13081 
13082       IF l_taxtrxdetails_csr%ISOPEN THEN
13083         CLOSE l_taxtrxdetails_csr;
13084       END IF;
13085 
13086       IF l_okcklines_csr%ISOPEN THEN
13087         CLOSE l_okcklines_csr;
13088       END IF;
13089 
13090       IF l_racusttrxtypes_csr%ISOPEN THEN
13091         CLOSE l_racusttrxtypes_csr;
13092       END IF;
13093 
13094       IF l_fndcurrency_csr%ISOPEN THEN
13095         CLOSE l_fndcurrency_csr;
13096       END IF;
13097 
13098       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13099       -- unexpected error
13100       OKL_API.set_message(p_app_name      => g_app_name,
13101                           p_msg_name      => g_unexpected_error,
13102                           p_token1        => g_sqlcode_token,
13103                           p_token1_value  => sqlcode,
13104                           p_token2        => g_sqlerrm_token,
13105                           p_token2_value  => sqlerrm);
13106 
13107   END process_split_asset_tax;
13108 
13109 /*========================================================================
13110  | PRIVATE PROCEDURE process_booking_upfront_tax
13111  |
13112  | DESCRIPTION
13113  |    This procedure is called from calculate_sales_tax procedure to calculate
13114  |    Upfront tax during Pre Booking and Booking
13115  |
13116  | CALLED FROM                                  calculate_sales_tax()
13117  |
13118  |
13119  | CALLS PROCEDURES/FUNCTIONS
13120  |     get_k_hdr_tax_params()
13121  |     get_asset_tax_params()
13122  |     get_location_party_ids()
13123  |     populate_tax_info()
13124  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
13125  |
13126  |
13127  | PARAMETERS
13128  |      p_source_trx_id                 -- Source transaction ID
13129  |      p_source_trx_name       -- Source transaction Name
13130  |      p_source_table          -- Source table
13131  |      p_tax_call_type         -- 'ESTIMATED'/'ACTUAL'
13132  |
13133  | KNOWN ISSUES
13134  |
13135  | NOTES
13136  |
13137  |
13138  | MODIFICATION HISTORY
13139  | Date          Author     Description of Changes
13140  | 08-APR-05    SECHAWLA      Created
13141  | 29-NOV-05    SECHAWLA      4772640 Modified to merge Pre-Booking and Booking
13142  |                            setups into 'Booking'
13143  |
13144  *=======================================================================*/
13145  PROCEDURE process_booking_upfront_tax(
13146         p_api_version                   IN  NUMBER,
13147     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
13148     x_return_status                     OUT NOCOPY VARCHAR2,
13149     x_msg_count                         OUT NOCOPY NUMBER,
13150     x_msg_data                          OUT NOCOPY VARCHAR2,
13151     p_source_trx_id                                     IN  NUMBER,
13152     p_source_trx_name               IN  VARCHAR2,
13153     p_source_table                  IN  VARCHAR2,
13154     p_tax_call_type                 IN  VARCHAR2) IS
13155 
13156      -------------Booking --------------
13157     --p_source_trx_id           ---> okl_trx_contracts.id
13158     --p_source_trx_name     ---> 'Booking'
13159     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
13160     --p_tax_call_type       ---> 'ESTIMATED'/'ACTUAL'
13161     --------------------------------------------------
13162         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
13163 
13164         -- validate source trx id (Booking)
13165         CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
13166         SELECT a.try_id, a.khr_id, a.legal_entity_id
13167         FROM   okl_trx_contracts a , okl_trx_types_tl b
13168         WHERE  a.id = cp_trx_id
13169         AND    a.try_id = b.id
13170         AND    b.name = cp_trx_type_name
13171     AND    language = 'US';
13172 
13173         -- validate source trx id (Rebook)
13174     -- okl_trx_contracts.khr_id has original contract id
13175     -- okl_trx_contracts.khr_id_new has rebook copy contract id
13176         CURSOR l_trxcontracts_rbk_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
13177         SELECT a.khr_id_new, a.legal_entity_id
13178         FROM   okl_trx_contracts a , okl_trx_types_tl b
13179         WHERE  a.id = cp_trx_id
13180         AND    a.try_id = b.id
13181         AND    b.name = cp_trx_type_name
13182     AND    language = 'US';
13183 
13184     CURSOR l_bookingtrxtypeid_csr IS
13185     SELECT id
13186         FROM   okl_trx_types_v
13187         WHERE  NAME = 'Booking';
13188 
13189     CURSOR l_tax_src_info_csr(cp_khr_id IN NUMBER, cp_trx_id IN NUMBER) IS
13190     SELECT org_id, application_id, entity_code, event_class_code
13191     FROM   okl_tax_sources
13192     WHERE  khr_id = cp_khr_id
13193     AND    tax_call_type_code = G_UPFRONT_TAX
13194     AND    tax_line_status_code = G_ACTIVE_STATUS
13195     AND    application_id = G_OKL_APPLICATION_ID
13196     AND    trx_id = cp_trx_id
13197     AND    trx_level_type = G_TRX_LEVEL_TYPE
13198     AND    ROWNUM = 1;
13199 
13200     CURSOR l_prev_taxsources_csr(cp_khr_id IN NUMBER, cp_trx_id IN NUMBER) IS
13201     SELECT id
13202     FROM   okl_tax_sources
13203     WHERE  khr_id = cp_khr_id
13204     AND    tax_call_type_code = G_UPFRONT_TAX
13205     AND    tax_line_status_code = G_ACTIVE_STATUS
13206     AND    application_id = G_OKL_APPLICATION_ID
13207     AND    trx_id = cp_trx_id
13208     AND    trx_level_type = G_TRX_LEVEL_TYPE;
13209 
13210     --delete the pre-booking tax source transaction and tax details
13211         -- This cursor is used during Booking. It will pick up the Pre-booking tax lines
13212         -- Pre-Booking tax lines will be the only ACTIVE set of tax lines at the time K is being Booked
13213     CURSOR l_prevtaxsourcesbk_csr(cp_khr_id IN NUMBER) IS
13214     SELECT id
13215     FROM   okl_tax_sources
13216     WHERE  khr_id = cp_khr_id
13217     AND    tax_call_type_code = G_UPFRONT_TAX
13218     AND    tax_line_status_code = G_ACTIVE_STATUS
13219     AND    application_id = G_OKL_APPLICATION_ID
13220     AND    trx_level_type = G_TRX_LEVEL_TYPE;
13221 
13222         -- Get all the asset lines of the contract
13223         CURSOR l_finassets_csr(cp_chr_id IN NUMBER) IS
13224     SELECT cle.id  fin_asset_id, cle.name asset_number
13225     FROM   okc_k_lines_v cle
13226     WHERE  cle.chr_id = cp_chr_id
13227     AND    cle.lse_id = 33
13228     AND    sts_code NOT IN ('ABANDONED', 'EXPIRED', 'REVERSED', 'TERMINATED');
13229 
13230         -- get the current contract and asset line level payments
13231         CURSOR  l_k_asset_pymnts_csr(cp_chr_id IN NUMBER) IS
13232         SELECT  rgpb.cle_id  line_id,
13233                         styb.id  stream_type_id,
13234                         styb.CODE stream_type_code,
13235                         sum(nvl((rulb2.RULE_INFORMATION3 * rulb2.RULE_INFORMATION6),0) + nvl(rulb2.RULE_INFORMATION8,0)) line_amt
13236         FROM
13237                 okc_rule_groups_b rgpb,
13238                 okc_rules_b       rulb,
13239                 okc_rules_b       rulb2,
13240                 okl_strm_type_b   styb
13241     WHERE   rgpb.dnz_chr_id = cp_chr_id
13242         AND    rgpb.chr_id     = cp_chr_id
13243         AND    rgpb.cle_id IS NULL
13244         AND    rgpb.rgd_code   = 'LALEVL'
13245         AND    rulb.rgp_id     = rgpb.id
13246         AND    rulb.rule_information_category  = 'LASLH'
13247         AND    rulb.dnz_chr_id                 = cp_chr_id
13248         AND    styb.id                         = rulb.object1_id1
13249         AND    rulb2.object2_id1               = rulb.id
13250         AND    rulb2.rgp_id                    = rgpb.id
13251         AND    rulb2.rule_information_category = 'LASLL'
13252         GROUP BY rgpb.cle_id, styb.id, styb.CODE, rulb2.RULE_INFORMATION6
13253     UNION
13254         SELECT  rgpb.cle_id  line_id,
13255                         styb.id                 stream_type_id,
13256                         styb.CODE               stream_type_code,
13257                     sum(nvl((rulb2.RULE_INFORMATION3 * rulb2.RULE_INFORMATION6),0) + nvl(rulb2.RULE_INFORMATION8,0)) line_amt
13258         FROM    okc_k_lines_b       cleb,
13259                 okc_rule_groups_b rgpb,
13260                 okc_rules_b       rulb,
13261             okc_rules_b       rulb2,
13262             okl_strm_type_b   styb
13263         WHERE   rgpb.dnz_chr_id = cp_chr_id
13264         AND     rgpb.chr_id    IS NULL
13265         AND     rgpb.cle_id  = cleb.id
13266         AND     cleb.dnz_chr_id = cp_chr_id
13267         AND     cleb.lse_id     = 33
13268     AND     cleb.sts_code NOT IN ('ABANDONED', 'EXPIRED', 'REVERSED', 'TERMINATED')
13269         AND     rgpb.rgd_code   = 'LALEVL'
13270         AND     rulb.rgp_id     = rgpb.id
13271         AND     rulb.rule_information_category  = 'LASLH'
13272         AND     rulb.dnz_chr_id                 = cp_chr_id
13273         AND     styb.id                         = rulb.object1_id1
13274         AND     rulb2.object2_id1               = rulb.id
13275         AND     rulb2.rgp_id                    = rgpb.id
13276         AND     rulb2.rule_information_category = 'LASLL'
13277     GROUP BY rgpb.cle_id, styb.id, styb.CODE, rulb2.RULE_INFORMATION6;
13278 
13279    -- get the inventory item id and inventory item org for a financial asset
13280     CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
13281         SELECT cim_model.object1_id1,
13282            cim_model.object1_id2
13283     FROM   okc_k_items cim_model,
13284            okc_k_lines_b cleb_model,
13285            okc_line_styles_b lseb_model
13286     WHERE  cim_model.cle_id    = cleb_model.id
13287     AND    cleb_model.cle_id   = cp_fin_asset_id
13288     AND    lseb_model.id       = cleb_model.lse_id
13289     AND    lseb_model.lty_code = 'ITEM';
13290 
13291         -- Check if tax basis override formula exists
13292         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
13293         SELECT fma_id
13294         FROM   okl_tax_basis_override
13295         WHERE  try_id = cp_try_id
13296         AND    org_id = MO_GLOBAL.get_current_org_id;
13297 
13298         -- GET FORMULA NAME
13299     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
13300     SELECT name
13301     FROM   Okl_formulae_b
13302     WHERE  id = cp_fma_id;
13303 
13304     l_fetch_size                    NUMBER := 10000;
13305     l_bk_trx_type_id_det                        NUMBER;
13306     l_khr_id                                            NUMBER;
13307     l_legal_entity_id               NUMBER;
13308     i                                                           NUMBER;
13309     l_fma_id                                            NUMBER;
13310     l_formula_name                                      VARCHAR2(150);
13311     l_ledger_id                     NUMBER;
13312 
13313     lx_cust_acct_id                                     NUMBER;
13314     lx_currency_code                                    VARCHAR2(15);
13315     lx_precision                        NUMBER;
13316     lx_minimum_accountable_unit         NUMBER;
13317     lx_cust_trx_type_id                         NUMBER;
13318 
13319     lx_pb_prch_opt_det                          VARCHAR2(450);
13320     lx_pb_fin_prod_id_det                       NUMBER;
13321     lx_pb_int_disclosed_det                     VARCHAR2(30);
13322     l_tax_call_type                             VARCHAR2(30);
13323 
13324     l_pb_transfer_of_title                      VARCHAR2(30);
13325     l_pb_sale_lease_back                        VARCHAR2(30);
13326     l_pb_purchase_of_lease                      VARCHAR2(30);
13327     l_pb_usage_of_equipment                     VARCHAR2(450);
13328     l_pb_age_of_equipment                       NUMBER;
13329     l_pb_vendor_site_id             NUMBER;
13330     l_inv_item_id                                       NUMBER;
13331         l_inv_item_org_id                               NUMBER;
13332 
13333     lx_bill_to_party_site_id        NUMBER;
13334     lx_bill_to_location_id          NUMBER;
13335     lx_bill_to_party_id             NUMBER;
13336     lx_bill_to_siteuseid            NUMBER;
13337     lx_ship_to_party_site_id        NUMBER;
13338     lx_ship_to_location_id          NUMBER;
13339     lx_ship_to_party_id             NUMBER;
13340     lx_ship_to_siteuseid                NUMBER;
13341 
13342     lx_org_id                       NUMBER;
13343     lx_book_class_code              VARCHAR2(30);
13344     lx_currency_conversion_type     VARCHAR2(30);
13345     lx_currency_conversion_rate     NUMBER;
13346     lx_currency_conversion_date     DATE;
13347     lx_contract_start_date          DATE;
13348 
13349     tax_call_cnt                                        NUMBER;
13350     k_pymnt_exist                                       VARCHAR2(1);
13351     l_reported_yn                                       VARCHAR2(1);
13352 
13353     l_internal_organization_id      NUMBER;
13354     l_application_id                NUMBER;
13355     l_entity_code                   VARCHAR2(30);
13356     l_event_class_code              VARCHAR2(30);
13357     k                               NUMBER;
13358     l_taxation_country              VARCHAR2(2);
13359     ind                                                         NUMBER;
13360     l_delete_data                   BOOLEAN := FALSE;
13361 
13362     l_event_type_code               VARCHAR2(30);
13363 
13364 
13365     TYPE  prev_tax_source_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13366     TYPE  prev_tx_trx_det_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13367     TYPE k_asset_pymnts_tbl_type  IS TABLE OF l_k_asset_pymnts_csr%ROWTYPE INDEX BY BINARY_INTEGER;
13368     TYPE finassets_tbl_type       IS TABLE OF l_finassets_csr%ROWTYPE INDEX BY BINARY_INTEGER;
13369 
13370     l_k_asset_pymnts_tbl                        k_asset_pymnts_tbl_type;
13371     l_prev_tax_source_tbl           prev_tax_source_tbl_type;
13372     lp_hdr_params_rec               hdr_params_rec_type;
13373     l_transaction_rec               transaction_rec_type;
13374     lp_tax_src_params_rec           tax_src_params_rec_type;
13375     lx_line_params_tbl              line_params_tbl_type;
13376         l_pb_asset_level_det_tbl            asset_level_det_tbl_type;
13377     lx_tax_sources_tbl                  tax_sources_tbl_type;
13378     l_finassets_tbl                             finassets_tbl_type;
13379 
13380   BEGIN
13381 
13382     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13383         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax','Begin(+)');
13384     END IF;
13385 
13386     --Print Input Variables
13387     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13388          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13389               'p_init_msg_list :'||p_init_msg_list);
13390          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13391               'p_source_trx_id :'||p_source_trx_id);
13392          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13393               'p_source_trx_name :'||p_source_trx_name);
13394          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13395               'p_source_table :'||p_source_table);
13396 
13397     END IF;
13398 
13399     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13400 
13401     IF (p_source_trx_name = 'Booking') THEN
13402       -- validate the source trx id
13403       OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
13404       FETCH l_trxcontracts_csr INTO l_bk_trx_type_id_det, l_khr_id, l_legal_entity_id;
13405       -- At this point, l_bk_trx_type_id_det will be the id of Booking trx type
13406       IF l_trxcontracts_csr%NOTFOUND THEN
13407         -- source trx id is invalid
13408         OKC_API.set_message( p_app_name      => 'OKC',
13409                              p_msg_name      => G_INVALID_VALUE,
13410                              p_token1        => G_COL_NAME_TOKEN,
13411                              p_token1_value  => 'SOURCE_TRX_ID');
13412         RAISE OKL_API.G_EXCEPTION_ERROR;
13413       END IF;
13414       CLOSE l_trxcontracts_csr;
13415     ELSIF (p_source_trx_name = 'Rebook') THEN
13416       -- validate the source trx id
13417       OPEN  l_trxcontracts_rbk_csr(p_source_trx_id, p_source_trx_name);
13418       FETCH l_trxcontracts_rbk_csr INTO l_khr_id, l_legal_entity_id;
13419       -- At this point, l_bk_trx_type_id_det will be the id of Booking trx type
13420       IF l_trxcontracts_rbk_csr%NOTFOUND THEN
13421         -- source trx id is invalid
13422         OKC_API.set_message( p_app_name      => 'OKC',
13423                              p_msg_name      => G_INVALID_VALUE,
13424                              p_token1        => G_COL_NAME_TOKEN,
13425                              p_token1_value  => 'SOURCE_TRX_ID');
13426         RAISE OKL_API.G_EXCEPTION_ERROR;
13427       END IF;
13428       CLOSE l_trxcontracts_rbk_csr;
13429 
13430       OPEN  l_bookingtrxtypeid_csr;
13431       FETCH l_bookingtrxtypeid_csr INTO l_bk_trx_type_id_det;
13432       CLOSE l_bookingtrxtypeid_csr;
13433 
13434     END IF;
13435 
13436     l_tax_call_type := upper(p_tax_call_type);
13437 
13438     IF (l_tax_call_type IS NOT NULL AND
13439         l_tax_call_type NOT IN (G_ESTIMATED_CALL_TYPE, G_ACTUAL_CALL_TYPE)) THEN
13440       OKC_API.set_message( p_app_name      => 'OKC',
13441                            p_msg_name      => G_INVALID_VALUE,
13442                            p_token1        => G_COL_NAME_TOKEN,
13443                            p_token1_value  => 'TAX_CALL_TYPE');
13444       RAISE OKL_API.G_EXCEPTION_ERROR;
13445     END IF;
13446 
13447     IF (l_tax_call_type = G_ESTIMATED_CALL_TYPE) THEN
13448 
13449       l_event_class_code        := G_BOOKING_EVENT_CLASS_CODE;
13450       l_event_type_code         := G_BOOKING_CRE_EVT_TYPE_CODE;
13451 
13452       -- Fetch info from tax sources
13453       OPEN  l_tax_src_info_csr(l_khr_id, p_source_trx_id);
13454       FETCH l_tax_src_info_csr INTO l_internal_organization_id, l_application_id,
13455                                     l_entity_code, l_event_class_code;
13456       CLOSE l_tax_src_info_csr;
13457 
13458       -- Check if estimated Booking tax lines already exist for p_source_trx_id
13459       -- This may happen if contract is validated multiple times prior to activation
13460       -- Bulk delete Previous Booking tax sources
13461       OPEN  l_prev_taxsources_csr(l_khr_id, p_source_trx_id);
13462       LOOP
13463         l_prev_tax_source_tbl.DELETE;
13464             FETCH l_prev_taxsources_csr BULK COLLECT INTO l_prev_tax_source_tbl LIMIT l_fetch_size;
13465         IF l_prev_tax_source_tbl.COUNT > 0 THEN
13466           l_delete_data := TRUE;
13467           BEGIN
13468             FORALL i IN l_prev_tax_source_tbl.FIRST..l_prev_tax_source_tbl.LAST
13469               DELETE FROM OKL_TAX_SOURCES WHERE id = l_prev_tax_source_tbl(i);
13470 
13471           EXCEPTION
13472                 WHEN OTHERS THEN
13473                   IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
13474                                 FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
13475                                     OKL_API.set_message(p_app_name      => 'OKL',
13476                                         p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
13477                                         p_token1        => 'TABLE_NAME',
13478                                         p_token1_value  => 'OKL_TAX_SOURCES',
13479                                         p_token2        => 'ERROR_CODE',
13480                                         p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
13481                                                                                 p_token3        => 'ITERATION',
13482                                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
13483                             END LOOP;
13484                                 RAISE OKL_API.G_EXCEPTION_ERROR;
13485                           END IF;
13486           END;
13487         END IF;
13488         EXIT WHEN l_prev_taxsources_csr%NOTFOUND;
13489       END LOOP;
13490       CLOSE l_prev_taxsources_csr;
13491       -- deletion from tax sources -- end
13492 
13493       -- delete booking tax lines from zx_lines -- start
13494       IF (l_delete_data) THEN
13495 
13496         l_transaction_rec.internal_organization_id := l_internal_organization_id;
13497         l_transaction_rec.application_id           := l_application_id;
13498         l_transaction_rec.entity_code              := l_entity_code;
13499         l_transaction_rec.event_class_code         := l_event_class_code;
13500         l_transaction_rec.event_type_code          := G_BOOK_DEL_EVENT_CODE;
13501 
13502         l_transaction_rec.trx_id                   :=  p_source_trx_id;
13503 
13504         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13505           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13506               'OKL_TAX_INTERFACE_PVT.update_document');
13507         END IF;
13508 
13509         OKL_TAX_INTERFACE_PVT.update_document(p_api_version     => p_api_version,
13510                                               p_init_msg_list   => p_init_msg_list,
13511                                               x_return_status   => x_return_status,
13512                                               x_msg_count       => x_msg_count,
13513                                               x_msg_data        => x_msg_data,
13514                                               p_transaction_rec => l_transaction_rec);
13515 
13516         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13517           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13518               'Return Status' || x_return_status);
13519         END IF;
13520 
13521             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13522           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13523         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13524           RAISE OKL_API.G_EXCEPTION_ERROR;
13525         END IF;
13526       END IF;
13527       -- delete booking tax lines from zx_lines -- end
13528 
13529       -- Fetch the Ledger info
13530       l_ledger_id := okl_accounting_util.get_set_of_books_id;
13531       l_reported_yn := 'N';
13532 
13533       -- Fetch the Tax country
13534       l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
13535                                                          x_msg_count         => x_msg_count,
13536                                                          x_msg_data          => x_msg_data,
13537                                                          p_legal_entity_id   => l_legal_entity_id);
13538           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13539         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13540       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13541         RAISE OKL_API.G_EXCEPTION_ERROR;
13542       END IF;
13543 
13544       -- Check if taxable basis override applies to Estimated Booking / Booking transaction
13545       OPEN  l_txbasisoverride_csr(l_bk_trx_type_id_det);
13546       FETCH l_txbasisoverride_csr INTO l_fma_id;
13547       CLOSE l_txbasisoverride_csr;
13548 
13549       IF l_fma_id IS NOT NULL THEN
13550         OPEN  l_formulae_csr(l_fma_id);
13551         FETCH l_formulae_csr INTO l_formula_name;
13552         IF l_formulae_csr%NOTFOUND THEN
13553           OKC_API.set_message( p_app_name      => 'OKC',
13554                                p_msg_name      => G_INVALID_VALUE,
13555                                p_token1        => G_COL_NAME_TOKEN,
13556                                p_token1_value  => 'FMA_ID');
13557           RAISE OKL_API.G_EXCEPTION_ERROR;
13558         END IF;
13559         CLOSE l_formulae_csr;
13560 
13561             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13562                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13563                         'l_formula_name '||l_formula_name );
13564         END IF;
13565           END IF;
13566 
13567       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13568                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13569                 'l_khr_id '||l_khr_id );
13570       END IF;
13571           -- Get contract header info
13572       get_k_hdr_tax_params(
13573         p_api_version                  => p_api_version,
13574         p_init_msg_list                => p_init_msg_list,
13575         x_return_status                => x_return_status,
13576         x_msg_count                    => x_msg_count,
13577         x_msg_data                     => x_msg_data,
13578         p_khr_id                       => l_khr_id,
13579         p_source_trx_name              => p_source_trx_name,
13580         p_source_table                             => p_source_table,
13581         x_cust_acct_id                             => lx_cust_acct_id,
13582                 x_bill_to_siteuseid            => lx_bill_to_siteuseid,
13583                 x_currency_code                            => lx_currency_code,
13584         x_cust_trx_type_id             => lx_cust_trx_type_id,
13585         x_precision                                        => lx_precision,
13586                 x_minimum_accountable_unit     => lx_minimum_accountable_unit,
13587                 x_prch_opt_det                             => lx_pb_prch_opt_det,
13588                 x_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
13589                 x_int_disclosed_det                        => lx_pb_int_disclosed_det,
13590         x_org_id                       => lx_org_id,
13591         x_book_class_code              => lx_book_class_code,
13592         x_bill_to_party_site_id        => lx_bill_to_party_site_id,
13593         x_bill_to_party_id             => lx_bill_to_party_id,
13594         x_bill_to_location_id          => lx_bill_to_location_id,
13595         x_currency_conversion_type     => lx_currency_conversion_type,
13596         x_currency_conversion_rate     => lx_currency_conversion_rate,
13597         x_currency_conversion_date     => lx_currency_conversion_date,
13598         x_contract_start_date          => lx_contract_start_date);
13599 
13600           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13601         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13602       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13603         RAISE OKL_API.G_EXCEPTION_ERROR;
13604       END IF;
13605 
13606       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13607         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13608                 'l_cust_acct_id '||lx_cust_acct_id );
13609         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13610                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
13611         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13612                 'lx_currency_code '||lx_currency_code );
13613         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13614                 'lx_cust_trx_type_id '||lx_cust_trx_type_id );
13615         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13616                 'lx_precision '||lx_precision );
13617         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13618                 'lx_minimum_accountable_unit '||lx_minimum_accountable_unit );
13619         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13620                 'lx_pb_prch_opt_det '||lx_pb_prch_opt_det );
13621         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13622                 'lx_pb_fin_prod_id_det '||lx_pb_fin_prod_id_det );
13623         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13624                 'lx_pb_int_disclosed_det '||lx_pb_int_disclosed_det );
13625         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13626                 'lx_org_id '||lx_org_id );
13627         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13628                 'lx_book_class_code '||lx_book_class_code );
13629         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13630                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
13631         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13632                 'lx_bill_to_party_id '||lx_bill_to_party_id );
13633         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13634                 'lx_bill_to_location_id '||lx_bill_to_location_id );
13635         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13636                 'lx_currency_conversion_type '||lx_currency_conversion_type );
13637         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13638                 'lx_currency_conversion_rate '||lx_currency_conversion_rate );
13639         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13640                 'lx_currency_conversion_date '||lx_currency_conversion_date );
13641         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13642                 'lx_contract_start_date '||lx_contract_start_date );
13643       END IF;
13644 
13645       -- Tax call will be made at the contract and asset line level, even if no payments exist at any of these levels
13646       i := 0;
13647 
13648       OPEN l_finassets_csr(l_khr_id);
13649       LOOP
13650         l_finassets_tbl.DELETE;
13651         FETCH l_finassets_csr BULK COLLECT INTO l_finassets_tbl LIMIT l_fetch_size;
13652 
13653         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13654                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13655                 'l_finassets_tbl.COUNT '||l_finassets_tbl.COUNT );
13656             END IF;
13657 
13658             IF l_finassets_tbl.COUNT > 0 THEN
13659 
13660           FOR K IN l_finassets_tbl.FIRST..l_finassets_tbl.LAST LOOP
13661 
13662             l_pb_transfer_of_title   := null;
13663                 l_pb_sale_lease_back     := null;
13664                 l_pb_purchase_of_lease   := null;
13665                 l_pb_usage_of_equipment  := null;
13666                         l_pb_age_of_equipment    := null;
13667                         l_pb_vendor_site_id      := null;
13668 
13669             lx_bill_to_party_site_id := null;
13670             lx_bill_to_location_id   := null;
13671             lx_bill_to_party_id      := null;
13672             lx_bill_to_siteuseid     := null;
13673             lx_ship_to_party_site_id := null;
13674             lx_ship_to_location_id   := null;
13675             lx_ship_to_party_id      := null;
13676             lx_ship_to_siteuseid     := null;
13677 
13678             -- Get financial asset line level tax determinants --
13679                 get_asset_tax_params(
13680                                                                 p_api_version                  => p_api_version,
13681                                                         p_init_msg_list                => OKC_API.G_FALSE,
13682                                                         x_return_status                => x_return_status,
13683                                                         x_msg_count                    => x_msg_count,
13684                                                         x_msg_data                     => x_msg_data,
13685                                                         p_khr_id                       => l_khr_id,
13686                                                         p_kle_id                       => l_finassets_tbl(k).fin_asset_id,
13687                                                         p_source_trx_name              => p_source_trx_name,
13688                                                     p_source_table                                 => p_source_table,
13689                                                         x_transfer_of_title                        => l_pb_transfer_of_title,
13690                                                         x_sale_lease_back                          => l_pb_sale_lease_back,
13691                                                         x_purchase_of_lease                        => l_pb_purchase_of_lease,
13692                                                         x_usage_of_equipment               => l_pb_usage_of_equipment,
13693                                                                 x_age_of_equipment                         => l_pb_age_of_equipment,
13694                                                                 x_vendor_site_id                       => l_pb_vendor_site_id);
13695 
13696                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13697                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13698                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13699                   RAISE OKL_API.G_EXCEPTION_ERROR;
13700                 END IF;
13701 
13702                 -- Equipment Type(inventory item id)
13703                         -- get the inventory item id
13704                         OPEN   l_invitem_csr(l_finassets_tbl(k).fin_asset_id);
13705                         FETCH  l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
13706                         IF l_invitem_csr%NOTFOUND THEN
13707                           OKL_API.set_message(
13708                                                      p_app_name      => 'OKL',
13709                              p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
13710                                                  p_token1        => 'ASSET_NUMBER',
13711                                                          p_token1_value  => l_finassets_tbl(k).asset_number);
13712 
13713                           RAISE OKL_API.G_EXCEPTION_ERROR;
13714                         END IF;
13715                         CLOSE  l_invitem_csr;
13716 
13717                         -- get the Location Party ID's
13718                         get_location_party_ids(
13719                                                                         p_api_version                  => p_api_version,
13720                                                                 p_init_msg_list                => OKC_API.G_FALSE,
13721                                                                 x_return_status                => x_return_status,
13722                                                                 x_msg_count                    => x_msg_count,
13723                                                                 x_msg_data                     => x_msg_data,
13724                                                                 p_cust_acct_id                 => lx_cust_acct_id,
13725                                                                 p_fin_asset_id                 => l_finassets_tbl(k).fin_asset_id,
13726                                     p_khr_id                       => l_khr_id,
13727                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
13728                                     x_bill_to_location_id          => lx_bill_to_location_id,
13729                                     x_bill_to_party_id             => lx_bill_to_party_id,
13730                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
13731                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
13732                                     x_ship_to_location_id          => lx_ship_to_location_id,
13733                                     x_ship_to_party_id             => lx_ship_to_party_id,
13734                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
13735 
13736             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13737                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13738                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13739                           RAISE OKL_API.G_EXCEPTION_ERROR;
13740                         END IF;
13741 
13742                 l_pb_asset_level_det_tbl(i).fin_asset_id       := l_finassets_tbl(k).fin_asset_id;
13743                 l_pb_asset_level_det_tbl(i).asset_number       := l_finassets_tbl(k).asset_number;
13744                 l_pb_asset_level_det_tbl(i).transfer_of_title  := l_pb_transfer_of_title;
13745                 l_pb_asset_level_det_tbl(i).sale_lease_back    := l_pb_sale_lease_back;
13746                 l_pb_asset_level_det_tbl(i).purchase_of_lease  := l_pb_purchase_of_lease;
13747                 l_pb_asset_level_det_tbl(i).usage_of_equipment := l_pb_usage_of_equipment;
13748                 l_pb_asset_level_det_tbl(i).vendor_site_id         := l_pb_vendor_site_id;
13749                 l_pb_asset_level_det_tbl(i).age_of_equipment   := l_pb_age_of_equipment;
13750 
13751                         -- tax engine parameters
13752                         l_pb_asset_level_det_tbl(i).inv_item_id        := l_inv_item_id;
13753                         l_pb_asset_level_det_tbl(i).inv_org_id         := l_inv_item_org_id;
13754 
13755                         -- Party, location identifiers
13756             l_pb_asset_level_det_tbl(i).ship_to_site_use_id   := lx_ship_to_siteuseid;
13757             l_pb_asset_level_det_tbl(i).ship_to_party_site_id := lx_ship_to_party_site_id;
13758             l_pb_asset_level_det_tbl(i).ship_to_location_id   := lx_ship_to_location_id;
13759             l_pb_asset_level_det_tbl(i).ship_to_party_id      := lx_ship_to_party_id;
13760 
13761             l_pb_asset_level_det_tbl(i).bill_to_party_site_id := lx_bill_to_party_site_id;
13762             l_pb_asset_level_det_tbl(i).bill_to_location_id   := lx_bill_to_location_id;
13763             l_pb_asset_level_det_tbl(i).bill_to_party_id      := lx_bill_to_party_id;
13764             l_pb_asset_level_det_tbl(i).bill_to_site_use_id   := lx_bill_to_siteuseid;
13765 
13766                         l_pb_asset_level_det_tbl(i).asset_pymnt_exist     := 'N';
13767 
13768             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13769                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.', 'i '||i );
13770               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13771                                 'fin_asset_id '||l_finassets_tbl(k).fin_asset_id );
13772               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13773                                 'asset_number '||l_finassets_tbl(k).asset_number );
13774               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13775                                 'l_pb_transfer_of_title '||l_pb_transfer_of_title );
13776               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13777                                 'l_pb_sale_lease_back '||l_pb_sale_lease_back );
13778               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13779                                 'l_pb_purchase_of_lease '||l_pb_purchase_of_lease );
13780               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13781                                 'l_pb_usage_of_equipment '||l_pb_usage_of_equipment );
13782               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13783                                 'l_pb_vendor_site_id '||l_pb_vendor_site_id );
13784               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13785                                 'l_pb_age_of_equipment '||l_pb_age_of_equipment );
13786               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13787                                 'l_inv_item_id '||l_inv_item_id );
13788               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13789                                 'l_inv_item_org_id '||l_inv_item_org_id );
13790               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13791                                 'lx_ship_to_siteuseid '||lx_ship_to_siteuseid );
13792               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13793                                 'lx_ship_to_party_site_id '||lx_ship_to_party_site_id );
13794               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13795                                 'lx_ship_to_location_id '||lx_ship_to_location_id );
13796               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13797                                 'lx_ship_to_party_id '||lx_ship_to_party_id );
13798               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13799                                 'lx_bill_to_party_site_id '||lx_bill_to_party_site_id );
13800               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13801                                 'lx_bill_to_location_id '||lx_bill_to_location_id );
13802               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13803                                 'lx_bill_to_party_id '||lx_bill_to_party_id );
13804               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13805                                 'lx_bill_to_siteuseid '||lx_bill_to_siteuseid );
13806                     END IF;
13807 
13808                         i := i+1;
13809           END LOOP;
13810         END IF;
13811         EXIT WHEN l_finassets_csr%NOTFOUND;
13812       END LOOP;
13813       CLOSE l_finassets_csr;
13814 
13815       -- Get TBC at payment level (for each unique combination of K/Asset Line and payment) --
13816       k_pymnt_exist := 'N';
13817 
13818       i := 1;
13819       OPEN l_k_asset_pymnts_csr(l_khr_id);
13820       LOOP
13821         l_k_asset_pymnts_tbl.DELETE;
13822         FETCH l_k_asset_pymnts_csr BULK COLLECT INTO l_k_asset_pymnts_tbl LIMIT l_fetch_size;
13823 
13824         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13825                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13826                         'l_k_asset_pymnts_tbl.count '||l_k_asset_pymnts_tbl.count||' i = '||i );
13827         END IF;
13828 
13829         IF l_k_asset_pymnts_tbl.count = 0 AND i = 1 THEN
13830                   -- No payments exist
13831                   -- tax call will still be made at the K hdr and each fin asset line level
13832                   tax_call_cnt := 1;
13833 
13834                   -- contract level call begin
13835                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13836                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13837                         'No payments exist, tax_call_cnt = '||tax_call_cnt);
13838           END IF;
13839 
13840           -- Populate tax sources record -- start
13841           lp_tax_src_params_rec.kle_id       := null;
13842           lp_tax_src_params_rec.asset_number := null;
13843           lp_tax_src_params_rec.line_name    := null;
13844 
13845           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := null;
13846           lp_tax_src_params_rec.ship_to_party_site_id := null;
13847           lp_tax_src_params_rec.ship_to_party_id      := null;
13848           lp_tax_src_params_rec.ship_to_location_id   := null;
13849 
13850           lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
13851           lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
13852           lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
13853           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
13854 
13855           lp_tax_src_params_rec.inventory_item_id             := null;
13856           lp_tax_src_params_rec.sty_id                        := null;
13857           lp_tax_src_params_rec.khr_id                        := l_khr_id;
13858           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
13859           lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
13860           lp_tax_src_params_rec.event_class_code              := l_event_class_code;
13861           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
13862               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
13863           lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
13864           lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
13865           lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
13866           lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
13867           lp_tax_src_params_rec.line_intended_use             := null;
13868           lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
13869           lp_tax_src_params_rec.org_id                        := lx_org_id;
13870           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
13871           lp_tax_src_params_rec.line_amt                      := 0;
13872           lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
13873 
13874           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
13875           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
13876           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
13877               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
13878               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
13879               lp_tax_src_params_rec.adjusted_doc_number           := null;
13880               lp_tax_src_params_rec.adjusted_doc_date             := null;
13881           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
13882           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
13883 
13884           lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
13885           lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
13886           lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
13887           -- Populate tax sources record -- end
13888 
13889                   populate_tax_info(
13890                         p_api_version                  => p_api_version,
13891                         p_init_msg_list                => OKC_API.G_FALSE,
13892                         x_return_status                => x_return_status,
13893                         x_msg_count                    => x_msg_count,
13894                         x_msg_data                     => x_msg_data,
13895                         p_prch_opt_det                             => lx_pb_prch_opt_det,
13896                                 p_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
13897                                 p_int_disclosed_det                        => lx_pb_int_disclosed_det,
13898                         -- asset level begin
13899                         p_title_trnsfr_code                        => null,
13900                         p_sale_lease_back_code             => null,
13901                         p_lease_purchased_code             => null,
13902                         p_equip_usage_code                         => null,
13903                         p_vendor_site_id                           => null,
13904                         p_age_of_equip                             => null,
13905                 p_source_trx_name              => p_source_trx_name,
13906                 p_cust_trx_type_id             => lx_cust_trx_type_id,
13907                 p_book_class_code              => lx_book_class_code,
13908                         p_tax_call_cnt                             => tax_call_cnt,
13909                         p_fma_id                                           => l_fma_id,
13910                         p_formula_name                             => l_formula_name,
13911                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
13912                         p_precision                                        => lx_precision,
13913                         p_sales_quote_id                           => null,
13914                 p_event_type_code              => l_event_type_code,
13915                 p_ledger_id                    => l_ledger_id,
13916                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
13917                 p_tax_src_params_rec           => lp_tax_src_params_rec,
13918                 p_quote_flag                   => 'N',
13919                 p_rounding_ship_to_party_id    => null,
13920                 p_rounding_bill_to_party_id    => lx_bill_to_party_id,
13921                 p_line_amt_includes_tax_flag   => 'N',
13922                 p_term_quote_type_code         => null,
13923                 p_term_quote_reason_code       => null,
13924                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
13925                 px_line_params_tbl             => lx_line_params_tbl );
13926 
13927           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13928             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13929           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13930             RAISE OKL_API.G_EXCEPTION_ERROR;
13931           END IF;
13932 
13933                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13934                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13935                         'lx_tax_sources_tbl.count '|| lx_tax_sources_tbl.COUNT );
13936           END IF;
13937                   -- contract level call end
13938 
13939                   tax_call_cnt := tax_call_cnt + 1;
13940 
13941           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
13942                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
13943                         'tax_call_cnt '||tax_call_cnt);
13944           END IF;
13945 
13946                   -- Fin asset level call begin
13947                   IF l_pb_asset_level_det_tbl.COUNT > 0 THEN
13948                         FOR asset_cnt IN l_pb_asset_level_det_tbl.FIRST .. l_pb_asset_level_det_tbl.LAST LOOP
13949 
13950               -- Populate tax sources record -- start
13951               lp_tax_src_params_rec.kle_id       := l_pb_asset_level_det_tbl(asset_cnt).fin_asset_id;
13952               lp_tax_src_params_rec.asset_number := l_pb_asset_level_det_tbl(asset_cnt).asset_number;
13953               lp_tax_src_params_rec.line_name    := l_pb_asset_level_det_tbl(asset_cnt).asset_number;
13954 
13955               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;
13956               lp_tax_src_params_rec.ship_to_party_site_id := l_pb_asset_level_det_tbl(asset_cnt).ship_to_party_site_id;
13957               lp_tax_src_params_rec.ship_to_party_id      := l_pb_asset_level_det_tbl(asset_cnt).ship_to_party_id;
13958               lp_tax_src_params_rec.ship_to_location_id   := l_pb_asset_level_det_tbl(asset_cnt).ship_to_location_id;
13959 
13960               lp_tax_src_params_rec.bill_to_party_site_id         := l_pb_asset_level_det_tbl(asset_cnt).bill_to_party_site_id;
13961               lp_tax_src_params_rec.bill_to_party_id              := l_pb_asset_level_det_tbl(asset_cnt).bill_to_party_id;
13962               lp_tax_src_params_rec.bill_to_location_id           := l_pb_asset_level_det_tbl(asset_cnt).bill_to_location_id;
13963               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;
13964 
13965               lp_tax_src_params_rec.inventory_item_id             := l_pb_asset_level_det_tbl(asset_cnt).inv_item_id;
13966               lp_tax_src_params_rec.sty_id                        := null;
13967               lp_tax_src_params_rec.khr_id                        := l_khr_id;
13968               lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
13969               lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
13970               lp_tax_src_params_rec.event_class_code              := l_event_class_code;
13971               lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
13972               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
13973               lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
13974               lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
13975               lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
13976               lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
13977               lp_tax_src_params_rec.line_intended_use             := l_pb_asset_level_det_tbl(asset_cnt).usage_of_equipment;
13978               lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
13979               lp_tax_src_params_rec.org_id                        := lx_org_id;
13980               lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
13981               lp_tax_src_params_rec.line_amt                      := 0;
13982               lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
13983 
13984               lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
13985               lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
13986               lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
13987                   lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
13988                   lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
13989                   lp_tax_src_params_rec.adjusted_doc_number           := null;
13990                   lp_tax_src_params_rec.adjusted_doc_date             := null;
13991               lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
13992               lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
13993 
13994               lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
13995               lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
13996               lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
13997               -- Populate tax sources record -- end
13998 
13999                           -- asset level call begin
14000                           populate_tax_info(
14001                                         p_api_version                  => p_api_version,
14002                                         p_init_msg_list                => OKC_API.G_FALSE,
14003                                         x_return_status                => x_return_status,
14004                                         x_msg_count                    => x_msg_count,
14005                                         x_msg_data                     => x_msg_data,
14006                                         p_prch_opt_det                             => lx_pb_prch_opt_det,
14007                                         p_fin_prod_id_det                          => lx_pb_fin_prod_id_det,
14008                                         p_int_disclosed_det                        => lx_pb_int_disclosed_det,
14009                                         -- asset level begin
14010                                         p_title_trnsfr_code                        => l_pb_asset_level_det_tbl(asset_cnt).transfer_of_title,
14011                                         p_sale_lease_back_code             => l_pb_asset_level_det_tbl(asset_cnt).sale_lease_back,
14012                                         p_lease_purchased_code             => l_pb_asset_level_det_tbl(asset_cnt).purchase_of_lease,
14013                                         p_equip_usage_code                         => l_pb_asset_level_det_tbl(asset_cnt).usage_of_equipment,
14014                                         p_vendor_site_id                           => l_pb_asset_level_det_tbl(asset_cnt).vendor_site_id,
14015                                         p_age_of_equip                             => l_pb_asset_level_det_tbl(asset_cnt).age_of_equipment,
14016                     p_source_trx_name              => p_source_trx_name,
14017                                     p_cust_trx_type_id             => lx_cust_trx_type_id,
14018                                     p_book_class_code              => lx_book_class_code,
14019                                         p_tax_call_cnt                             => tax_call_cnt,
14020                                         p_fma_id                                           => l_fma_id,
14021                                         p_formula_name                             => l_formula_name,
14022                                         p_minimum_accountable_unit         => lx_minimum_accountable_unit,
14023                                         p_precision                                        => lx_precision,
14024                                         p_sales_quote_id                           => null,
14025                                     p_event_type_code              => l_event_type_code,
14026                                     p_ledger_id                    => l_ledger_id,
14027                                     p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14028                                     p_tax_src_params_rec           => lp_tax_src_params_rec,
14029                                     p_quote_flag                   => 'N',
14030                                     p_rounding_ship_to_party_id    => l_pb_asset_level_det_tbl(asset_cnt).ship_to_party_id,
14031                                     p_rounding_bill_to_party_id    => l_pb_asset_level_det_tbl(asset_cnt).bill_to_party_id,
14032                                     p_line_amt_includes_tax_flag   => 'N',
14033                     p_term_quote_type_code         => null,
14034                     p_term_quote_reason_code       => null,
14035                                     px_tax_sources_tbl                     => lx_tax_sources_tbl,
14036                                     px_line_params_tbl             => lx_line_params_tbl );
14037 
14038               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14039                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14040                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14041                 RAISE OKL_API.G_EXCEPTION_ERROR;
14042                   END IF;
14043                           -- asset level call end
14044 
14045                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14046                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14047                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14048               END IF;
14049 
14050                           tax_call_cnt := tax_call_cnt + 1;
14051                         END LOOP;
14052                   END IF;
14053                   -- Fin asset level call end
14054                   -- No payments exist - end
14055         ELSIF l_k_asset_pymnts_tbl.COUNT > 0 THEN
14056                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14057                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14058                         'payments exist ');
14059           END IF;
14060 
14061           FOR K IN l_k_asset_pymnts_tbl.FIRST..l_k_asset_pymnts_tbl.LAST LOOP
14062                 tax_call_cnt := i;
14063 
14064                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14065                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14066                                 'tax_call_cnt '||tax_call_cnt);
14067             END IF;
14068 
14069                 IF l_k_asset_pymnts_tbl(k).line_id IS NULL THEN
14070               -- K level payment
14071                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14072                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14073                                 'K level payment ');
14074               END IF;
14075 
14076               -- Populate tax sources record -- start
14077               lp_tax_src_params_rec.kle_id       := null;
14078               lp_tax_src_params_rec.asset_number := null;
14079               lp_tax_src_params_rec.line_name    := null;
14080 
14081               lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := null;
14082               lp_tax_src_params_rec.ship_to_party_site_id := null;
14083               lp_tax_src_params_rec.ship_to_party_id      := null;
14084               lp_tax_src_params_rec.ship_to_location_id   := null;
14085 
14086               lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
14087               lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
14088               lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
14089               lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
14090 
14091               lp_tax_src_params_rec.inventory_item_id             := null;
14092               lp_tax_src_params_rec.sty_id                        := l_k_asset_pymnts_tbl(k).stream_type_id;
14093               lp_tax_src_params_rec.khr_id                        := l_khr_id;
14094               lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14095               lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14096               lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14097               lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14098               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14099               lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14100               lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14101               lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14102               lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14103               lp_tax_src_params_rec.line_intended_use             := null;
14104               lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14105               lp_tax_src_params_rec.org_id                        := lx_org_id;
14106               lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14107               lp_tax_src_params_rec.line_amt                      := l_k_asset_pymnts_tbl(k).line_amt;
14108               lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14109 
14110               lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14111               lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14112               lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14113                   lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14114                   lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14115                   lp_tax_src_params_rec.adjusted_doc_number           := null;
14116                   lp_tax_src_params_rec.adjusted_doc_date             := null;
14117               lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14118               lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14119 
14120               lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14121               lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14122               lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14123               -- Populate tax sources record -- end
14124 
14125                           populate_tax_info(
14126                                               p_api_version                  => p_api_version,
14127                                               p_init_msg_list                => OKC_API.G_FALSE,
14128                                               x_return_status                => x_return_status,
14129                                               x_msg_count                    => x_msg_count,
14130                                               x_msg_data                     => x_msg_data,
14131                                               p_prch_opt_det                             => lx_pb_prch_opt_det,
14132                                                       p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14133                                                       p_int_disclosed_det                        => lx_pb_int_disclosed_det,
14134                                               -- asset level begin
14135                                               p_title_trnsfr_code                        => null,
14136                                               p_sale_lease_back_code         => null,
14137                                               p_lease_purchased_code             => null,
14138                                               p_equip_usage_code                         => null,
14139                                               p_vendor_site_id                       => null,
14140                                               p_age_of_equip                             => null,
14141                                       p_source_trx_name              => p_source_trx_name,
14142                                       p_cust_trx_type_id             => lx_cust_trx_type_id,
14143                                       p_book_class_code              => lx_book_class_code,
14144                                               p_tax_call_cnt                             => tax_call_cnt,
14145                                               p_fma_id                                       => l_fma_id,
14146                                               p_formula_name                             => l_formula_name,
14147                                               p_minimum_accountable_unit         => lx_minimum_accountable_unit,
14148                                               p_precision                                        => lx_precision,
14149                                               p_sales_quote_id                       => null,
14150                                       p_event_type_code              => l_event_type_code,
14151                                       p_ledger_id                    => l_ledger_id,
14152                                       p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14153                                       p_tax_src_params_rec           => lp_tax_src_params_rec,
14154                                       p_quote_flag                   => 'N',
14155                                       p_rounding_ship_to_party_id    => null,
14156                                       p_rounding_bill_to_party_id    => lx_bill_to_party_id,
14157                                       p_line_amt_includes_tax_flag   => 'N',
14158                                       p_term_quote_type_code         => null,
14159                                       p_term_quote_reason_code       => null,
14160                                       px_tax_sources_tbl                         => lx_tax_sources_tbl,
14161                                       px_line_params_tbl             => lx_line_params_tbl );
14162 
14163               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14164                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14165                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14166                 RAISE OKL_API.G_EXCEPTION_ERROR;
14167                   END IF;
14168 
14169                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14170                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14171                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14172               END IF;
14173 
14174                   k_pymnt_exist := 'Y';
14175 
14176                 ELSE  -- asset line level payment
14177 
14178                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14179                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14180                                         'asset line level payment ');
14181               END IF;
14182 
14183                   IF l_pb_asset_level_det_tbl.count > 0 THEN
14184                         ind := l_pb_asset_level_det_tbl.FIRST;
14185                         LOOP
14186                           IF l_pb_asset_level_det_tbl(ind).fin_asset_id = l_k_asset_pymnts_tbl(k).line_id THEN
14187                             -- get the determinants and get TBC
14188                             l_pb_asset_level_det_tbl(ind).asset_pymnt_exist := 'Y';
14189 
14190                     -- Populate tax sources record -- start
14191                     lp_tax_src_params_rec.kle_id       := l_k_asset_pymnts_tbl(k).line_id;
14192                     lp_tax_src_params_rec.asset_number := l_pb_asset_level_det_tbl(ind).asset_number;
14193                     lp_tax_src_params_rec.line_name    := l_pb_asset_level_det_tbl(ind).asset_number;
14194 
14195                     lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_pb_asset_level_det_tbl(ind).ship_to_site_use_id;
14196                     lp_tax_src_params_rec.ship_to_party_site_id := l_pb_asset_level_det_tbl(ind).ship_to_party_site_id;
14197                     lp_tax_src_params_rec.ship_to_party_id      := l_pb_asset_level_det_tbl(ind).ship_to_party_id;
14198                     lp_tax_src_params_rec.ship_to_location_id   := l_pb_asset_level_det_tbl(ind).ship_to_location_id;
14199 
14200                     lp_tax_src_params_rec.bill_to_party_site_id         := l_pb_asset_level_det_tbl(ind).bill_to_party_site_id;
14201                     lp_tax_src_params_rec.bill_to_party_id              := l_pb_asset_level_det_tbl(ind).bill_to_party_id;
14202                     lp_tax_src_params_rec.bill_to_location_id           := l_pb_asset_level_det_tbl(ind).bill_to_location_id;
14203                     lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_pb_asset_level_det_tbl(ind).bill_to_site_use_id;
14204 
14205                     lp_tax_src_params_rec.inventory_item_id             := l_pb_asset_level_det_tbl(ind).inv_item_id;
14206                     lp_tax_src_params_rec.sty_id                        := l_k_asset_pymnts_tbl(k).stream_type_id;
14207                     lp_tax_src_params_rec.khr_id                        := l_khr_id;
14208                     lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14209                     lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14210                     lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14211                     lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14212                     lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14213                     lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14214                     lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14215                     lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14216                     lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14217                     lp_tax_src_params_rec.line_intended_use             := l_pb_asset_level_det_tbl(ind).usage_of_equipment;
14218                     lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14219                     lp_tax_src_params_rec.org_id                        := lx_org_id;
14220                     lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14221                     lp_tax_src_params_rec.line_amt                      := l_k_asset_pymnts_tbl(k).line_amt;
14222                     lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14223 
14224                     lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14225                     lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14226                     lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14227                         lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14228                         lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14229                         lp_tax_src_params_rec.adjusted_doc_number           := null;
14230                         lp_tax_src_params_rec.adjusted_doc_date             := null;
14231                     lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14232                     lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14233 
14234                     lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14235                     lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14236                     lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14237                     -- Populate tax sources record -- end
14238 
14239                                 -- asset level call begin
14240                                 populate_tax_info(
14241                                                 p_api_version                  => p_api_version,
14242                                                     p_init_msg_list                => OKC_API.G_FALSE,
14243                                                     x_return_status                => x_return_status,
14244                                                     x_msg_count                    => x_msg_count,
14245                                                     x_msg_data                     => x_msg_data,
14246                                                     p_prch_opt_det                                 => lx_pb_prch_opt_det,
14247                                                     p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14248                                                     p_int_disclosed_det                    => lx_pb_int_disclosed_det,
14249                                                     -- asset level begin
14250                                                     p_title_trnsfr_code                    => l_pb_asset_level_det_tbl(ind).transfer_of_title,
14251                                                     p_sale_lease_back_code                 => l_pb_asset_level_det_tbl(ind).sale_lease_back,
14252                                                     p_lease_purchased_code                 => l_pb_asset_level_det_tbl(ind).purchase_of_lease,
14253                                                     p_equip_usage_code                     => l_pb_asset_level_det_tbl(ind).usage_of_equipment,
14254                                                     p_vendor_site_id                       => l_pb_asset_level_det_tbl(ind).vendor_site_id,
14255                                                     p_age_of_equip                                 => l_pb_asset_level_det_tbl(ind).age_of_equipment,
14256                                 p_source_trx_name              => p_source_trx_name,
14257                                                 p_cust_trx_type_id             => lx_cust_trx_type_id,
14258                                                 p_book_class_code              => lx_book_class_code,
14259                                                     p_tax_call_cnt                                 => tax_call_cnt,
14260                                                     p_fma_id                                       => l_fma_id,
14261                                                     p_formula_name                                 => l_formula_name,
14262                                                     p_minimum_accountable_unit     => lx_minimum_accountable_unit,
14263                                                     p_precision                                    => lx_precision,
14264                                                     p_sales_quote_id                       => null,
14265                                                 p_event_type_code              => l_event_type_code,
14266                                                 p_ledger_id                    => l_ledger_id,
14267                                                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14268                                                 p_tax_src_params_rec           => lp_tax_src_params_rec,
14269                                                 p_quote_flag                   => 'N',
14270                                                 p_rounding_ship_to_party_id    => l_pb_asset_level_det_tbl(ind).ship_to_party_id,
14271                                                 p_rounding_bill_to_party_id    => l_pb_asset_level_det_tbl(ind).bill_to_party_id,
14272                                                 p_line_amt_includes_tax_flag   => 'N',
14273                                 p_term_quote_type_code         => null,
14274                                 p_term_quote_reason_code       => null,
14275                                                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
14276                                                 px_line_params_tbl             => lx_line_params_tbl );
14277 
14278                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14279                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14280                                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14281                           RAISE OKL_API.G_EXCEPTION_ERROR;
14282                                 END IF;
14283 
14284                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14285                                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14286                                                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14287                                 END IF;
14288                                     -- asset level call end
14289                             EXIT;
14290                       END IF;
14291                       EXIT WHEN (ind = l_pb_asset_level_det_tbl.LAST);
14292                   ind := l_pb_asset_level_det_tbl.NEXT(ind);
14293                         END LOOP;
14294                   END IF;
14295                 END IF;
14296                 i := i + 1;
14297           END LOOP;
14298         END IF;
14299         EXIT WHEN l_k_asset_pymnts_csr%NOTFOUND;
14300       END LOOP;
14301       CLOSE l_k_asset_pymnts_csr;
14302 
14303       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14304                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.', 'i '||i);
14305       END IF;
14306 
14307       IF i > 1 THEN -- some payments exist
14308         tax_call_cnt := i; -- pick the last index
14309 
14310         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14311               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14312                      'some payments exist, tax_call_cnt= '||tax_call_cnt);
14313         END IF;
14314 
14315             IF k_pymnt_exist = 'N' THEN -- K level payment does not exist
14316 
14317               -- contract level call begin
14318                   --tax_call_cnt := i; -- pick the last index
14319                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14320                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14321                 'K level payment does not exist ');
14322           END IF;
14323 
14324           -- Populate tax sources record -- start
14325           lp_tax_src_params_rec.kle_id       := null;
14326           lp_tax_src_params_rec.asset_number := null;
14327           lp_tax_src_params_rec.line_name    := null;
14328 
14329           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := null;
14330           lp_tax_src_params_rec.ship_to_party_site_id := null;
14331           lp_tax_src_params_rec.ship_to_party_id      := null;
14332           lp_tax_src_params_rec.ship_to_location_id   := null;
14333 
14334           lp_tax_src_params_rec.bill_to_party_site_id         := lx_bill_to_party_site_id;
14335           lp_tax_src_params_rec.bill_to_party_id              := lx_bill_to_party_id;
14336           lp_tax_src_params_rec.bill_to_location_id           := lx_bill_to_location_id;
14337           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := lx_bill_to_siteuseid;
14338 
14339           lp_tax_src_params_rec.inventory_item_id             := null;
14340           lp_tax_src_params_rec.sty_id                        := null;
14341           lp_tax_src_params_rec.khr_id                        := l_khr_id;
14342           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14343           lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14344           lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14345           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14346           lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14347           lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14348           lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14349           lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14350           lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14351           lp_tax_src_params_rec.line_intended_use             := null;
14352           lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14353           lp_tax_src_params_rec.org_id                        := lx_org_id;
14354           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14355           lp_tax_src_params_rec.line_amt                      := 0;
14356           lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14357 
14358           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14359           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14360           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14361               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14362               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14363               lp_tax_src_params_rec.adjusted_doc_number           := null;
14364               lp_tax_src_params_rec.adjusted_doc_date             := null;
14365           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14366           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14367 
14368           lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14369           lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14370           lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14371           -- Populate tax sources record -- end
14372 
14373                   populate_tax_info(
14374                                               p_api_version                  => p_api_version,
14375                                               p_init_msg_list                => OKC_API.G_FALSE,
14376                                               x_return_status                => x_return_status,
14377                                               x_msg_count                    => x_msg_count,
14378                                               x_msg_data                     => x_msg_data,
14379                                               p_prch_opt_det                             => lx_pb_prch_opt_det,
14380                                                       p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14381                                                       p_int_disclosed_det                        => lx_pb_int_disclosed_det,
14382                                               -- asset level begin
14383                                               p_title_trnsfr_code                        => null,
14384                                               p_sale_lease_back_code         => null,
14385                                               p_lease_purchased_code             => null,
14386                                               p_equip_usage_code                         => null,
14387                                               p_vendor_site_id                       => null,
14388                                               p_age_of_equip                             => null,
14389                                       p_source_trx_name              => p_source_trx_name,
14390                                       p_cust_trx_type_id             => lx_cust_trx_type_id,
14391                                       p_book_class_code              => lx_book_class_code,
14392                                               p_tax_call_cnt                             => tax_call_cnt,
14393                                               p_fma_id                                       => l_fma_id,
14394                                               p_formula_name                             => l_formula_name,
14395                                               p_minimum_accountable_unit         => lx_minimum_accountable_unit,
14396                                               p_precision                                        => lx_precision,
14397                                               p_sales_quote_id                       => null,
14398                                       p_event_type_code              => l_event_type_code,
14399                                       p_ledger_id                    => l_ledger_id,
14400                                       p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14401                                       p_tax_src_params_rec           => lp_tax_src_params_rec,
14402                                       p_quote_flag                   => 'N',
14403                                       p_rounding_ship_to_party_id    => null,
14404                                       p_rounding_bill_to_party_id    => lx_bill_to_party_id,
14405                                       p_line_amt_includes_tax_flag   => 'N',
14406                                       p_term_quote_type_code         => null,
14407                                       p_term_quote_reason_code       => null,
14408                                       px_tax_sources_tbl                         => lx_tax_sources_tbl,
14409                                       px_line_params_tbl             => lx_line_params_tbl );
14410 
14411           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14412             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14413           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14414             RAISE OKL_API.G_EXCEPTION_ERROR;
14415           END IF;
14416 
14417                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14418                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14419                              'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14420                   END IF;
14421                   -- contract level call end
14422                   tax_call_cnt := tax_call_cnt + 1;
14423             END IF;
14424 
14425             -- this table will have one record for each asset
14426             -- check if payment does not exist for any of the assets
14427             FOR k IN l_pb_asset_level_det_tbl.FIRST .. l_pb_asset_level_det_tbl.LAST LOOP
14428               IF l_pb_asset_level_det_tbl(k).asset_pymnt_exist = 'N' THEN -- asset level payment does not exist
14429                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14430                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14431                           'tax_call_cnt '||tax_call_cnt||'asset_pymnt_exist = N ' );
14432                         END IF;
14433 
14434             -- asset level call begin
14435             -- Populate tax sources record -- start
14436             lp_tax_src_params_rec.kle_id       := l_pb_asset_level_det_tbl(k).fin_asset_id;
14437             lp_tax_src_params_rec.asset_number := l_pb_asset_level_det_tbl(k).asset_number;
14438             lp_tax_src_params_rec.line_name    := l_pb_asset_level_det_tbl(k).asset_number;
14439 
14440             lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_pb_asset_level_det_tbl(k).ship_to_site_use_id;
14441             lp_tax_src_params_rec.ship_to_party_site_id := l_pb_asset_level_det_tbl(k).ship_to_party_site_id;
14442             lp_tax_src_params_rec.ship_to_party_id      := l_pb_asset_level_det_tbl(k).ship_to_party_id;
14443             lp_tax_src_params_rec.ship_to_location_id   := l_pb_asset_level_det_tbl(k).ship_to_location_id;
14444             lp_tax_src_params_rec.bill_to_party_site_id         := l_pb_asset_level_det_tbl(k).bill_to_party_site_id;
14445             lp_tax_src_params_rec.bill_to_party_id              := l_pb_asset_level_det_tbl(k).bill_to_party_id;
14446             lp_tax_src_params_rec.bill_to_location_id           := l_pb_asset_level_det_tbl(k).bill_to_location_id;
14447             lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_pb_asset_level_det_tbl(k).bill_to_site_use_id;
14448             lp_tax_src_params_rec.inventory_item_id             := l_pb_asset_level_det_tbl(ind).inv_item_id;
14449             lp_tax_src_params_rec.sty_id                        := null;
14450             lp_tax_src_params_rec.khr_id                        := l_khr_id;
14451             lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
14452             lp_tax_src_params_rec.entity_code                   := G_CONTRACTS_ENTITY_CODE;
14453             lp_tax_src_params_rec.event_class_code              := l_event_class_code;
14454             lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
14455             lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
14456             lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
14457             lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
14458             lp_tax_src_params_rec.trx_date                      := lx_contract_start_date;
14459             lp_tax_src_params_rec.trx_currency_code             := lx_currency_code;
14460             lp_tax_src_params_rec.line_intended_use             := l_pb_asset_level_det_tbl(k).usage_of_equipment;
14461             lp_tax_src_params_rec.bill_to_cust_acct_id          := lx_cust_acct_id;
14462             lp_tax_src_params_rec.org_id                        := lx_org_id;
14463             lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
14464             lp_tax_src_params_rec.line_amt                      := 0;
14465             lp_tax_src_params_rec.try_id                        := l_bk_trx_type_id_det;
14466 
14467             lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
14468             lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
14469             lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
14470                 lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
14471                 lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
14472                 lp_tax_src_params_rec.adjusted_doc_number           := null;
14473                 lp_tax_src_params_rec.adjusted_doc_date             := null;
14474             lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
14475             lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
14476             lp_tax_src_params_rec.currency_conversion_type      := lx_currency_conversion_type;
14477             lp_tax_src_params_rec.currency_conversion_rate      := lx_currency_conversion_rate;
14478             lp_tax_src_params_rec.currency_conversion_date      := lx_currency_conversion_date;
14479             -- Populate tax sources record -- end
14480 
14481                 -- asset level call begin
14482                         populate_tax_info(
14483                                                 p_api_version                  => p_api_version,
14484                                                     p_init_msg_list                => OKC_API.G_FALSE,
14485                                                     x_return_status                => x_return_status,
14486                                                     x_msg_count                    => x_msg_count,
14487                                                     x_msg_data                     => x_msg_data,
14488                                                     p_prch_opt_det                                 => lx_pb_prch_opt_det,
14489                                                     p_fin_prod_id_det                      => lx_pb_fin_prod_id_det,
14490                                                     p_int_disclosed_det                    => lx_pb_int_disclosed_det,
14491                                                     -- asset level begin
14492                                                     p_title_trnsfr_code                    => l_pb_asset_level_det_tbl(k).transfer_of_title,
14493                                                     p_sale_lease_back_code                 => l_pb_asset_level_det_tbl(k).sale_lease_back,
14494                                                     p_lease_purchased_code                 => l_pb_asset_level_det_tbl(k).purchase_of_lease,
14495                                                     p_equip_usage_code                     => l_pb_asset_level_det_tbl(k).usage_of_equipment,
14496                                                     p_vendor_site_id                       => l_pb_asset_level_det_tbl(k).vendor_site_id,
14497                                                     p_age_of_equip                                 => l_pb_asset_level_det_tbl(k).age_of_equipment,
14498                                 p_source_trx_name              => p_source_trx_name,
14499                                                 p_cust_trx_type_id             => lx_cust_trx_type_id,
14500                                                 p_book_class_code              => lx_book_class_code,
14501                                                     p_tax_call_cnt                                 => tax_call_cnt,
14502                                                     p_fma_id                                       => l_fma_id,
14503                                                     p_formula_name                                 => l_formula_name,
14504                                                     p_minimum_accountable_unit     => lx_minimum_accountable_unit,
14505                                                     p_precision                                    => lx_precision,
14506                                                     p_sales_quote_id                       => null,
14507                                                 p_event_type_code              => l_event_type_code,
14508                                                 p_ledger_id                    => l_ledger_id,
14509                                                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
14510                                                 p_tax_src_params_rec           => lp_tax_src_params_rec,
14511                                                 p_quote_flag                   => 'N',
14512                                                 p_rounding_ship_to_party_id    => l_pb_asset_level_det_tbl(k).ship_to_party_id,
14513                                                 p_rounding_bill_to_party_id    => l_pb_asset_level_det_tbl(k).bill_to_party_id,
14514                                                 p_line_amt_includes_tax_flag   => 'N',
14515                                 p_term_quote_type_code         => null,
14516                                 p_term_quote_reason_code       => null,
14517                                                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
14518                                                 px_line_params_tbl             => lx_line_params_tbl );
14519 
14520             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14521               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14522                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14523               RAISE OKL_API.G_EXCEPTION_ERROR;
14524                 END IF;
14525                         -- asset level call end
14526                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14527                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14528                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count);
14529                         END IF;
14530 
14531                     tax_call_cnt := tax_call_cnt + 1;
14532               END IF;
14533             END LOOP;
14534       END IF;
14535 
14536       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14537         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14538                         'lx_tax_sources_tbl.COUNT '||lx_tax_sources_tbl.COUNT);
14539           END IF;
14540 
14541       -- insert into okl_tax_sources
14542           BEGIN
14543         IF lx_tax_sources_tbl.COUNT > 0 THEN
14544           FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
14545             -- SAVE EXCEPTIONS
14546             INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
14547         END IF;
14548       EXCEPTION
14549         WHEN OTHERS THEN
14550           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
14551                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
14552                           OKL_API.set_message(
14553                                                                      p_app_name      => 'OKL',
14554                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
14555                                      p_token1        => 'TABLE_NAME',
14556                                      p_token1_value  => 'OKL_TAX_SOURCES',
14557                                      p_token2        => 'ERROR_CODE',
14558                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
14559                                                                          p_token3        => 'ITERATION',
14560                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
14561                         END LOOP;
14562                         RAISE OKL_API.G_EXCEPTION_ERROR;
14563                   END IF;
14564       END;
14565       -- Insert into okl_tax_sources end --
14566 
14567       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14568                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14569                                        'Insert into okl_tax_sources ');
14570           END IF;
14571 
14572           IF lx_line_params_tbl.COUNT > 0 THEN
14573             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14574                       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14575                                'Before tax engine call '||x_return_status);
14576             END IF;
14577 
14578         lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
14579         lp_hdr_params_rec.trx_id                   := p_source_trx_id;
14580         lp_hdr_params_rec.internal_organization_id := lx_org_id;
14581         lp_hdr_params_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
14582         lp_hdr_params_rec.event_class_code         := l_event_class_code;
14583         lp_hdr_params_rec.event_type_code          := l_event_type_code;
14584         lp_hdr_params_rec.quote_flag               := 'N';
14585 
14586         OKL_TAX_INTERFACE_PVT.calculate_tax(
14587                                     p_api_version       =>  p_api_version,
14588                                     p_init_msg_list     =>  p_init_msg_list,
14589                                     x_return_status     =>  x_return_status,
14590                                     x_msg_count         =>  x_msg_count,
14591                                     x_msg_data          =>  x_msg_data,
14592                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
14593                                     p_line_params_tbl   =>  lx_line_params_tbl);
14594 
14595                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14596                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14597                                    'After tax engine call '||x_return_status);
14598             END IF;
14599 
14600             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14601           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14602         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14603           RAISE OKL_API.G_EXCEPTION_ERROR;
14604         END IF;
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              'Calling "update_tax_sources_total" .. ');
14610       END IF;
14611 
14612       update_tax_sources_total(p_api_version    => p_api_version,
14613                                p_init_msg_list  => p_init_msg_list,
14614                                x_return_status  => x_return_status,
14615                                x_msg_count      => x_msg_count,
14616                                x_msg_data       => x_msg_data,
14617                                p_source_trx_id  => p_source_trx_id);
14618 
14619       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14620         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14621              'Return Status' || x_return_status);
14622       END IF;
14623 
14624       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14625         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14626       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14627         RAISE OKL_API.G_EXCEPTION_ERROR;
14628       END IF;
14629 
14630     ELSIF (l_tax_call_type = G_ACTUAL_CALL_TYPE) THEN
14631 
14632       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14633          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14634               'process_final_upfront_tax');
14635       END IF;
14636 
14637       -- Call ebtax procedure to flip the reportable flag from N to Y
14638       process_final_upfront_tax( p_api_version       => p_api_version,
14639                                          p_init_msg_list     => p_init_msg_list,
14640                                      x_return_status     => x_return_status,
14641                                      x_msg_count         => x_msg_count,
14642                                          x_msg_data          => x_msg_data,
14643                                          p_trx_id                        => p_source_trx_id,
14644                                      p_application_id    => G_OKL_APPLICATION_ID,
14645                                  p_entity_code       => G_CONTRACTS_ENTITY_CODE,
14646                                  p_event_class_code  => G_BOOKING_EVENT_CLASS_CODE);
14647 
14648       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14649          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14650               'Return Status' || x_return_status);
14651       END IF;
14652 
14653           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14654                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14655           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14656                 RAISE OKL_API.G_EXCEPTION_ERROR;
14657       END IF;
14658 
14659       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14660         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14661              'Calling "make_tax_sources_reportable" .. ');
14662       END IF;
14663 
14664       make_tax_sources_reportable(p_api_version    => p_api_version,
14665                                   p_init_msg_list  => p_init_msg_list,
14666                                   x_return_status  => x_return_status,
14667                                   x_msg_count      => x_msg_count,
14668                                   x_msg_data       => x_msg_data,
14669                                   p_source_trx_id  => p_source_trx_id);
14670 
14671       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14672         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax.',
14673              'Return Status' || x_return_status);
14674       END IF;
14675 
14676       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14677         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14678       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14679         RAISE OKL_API.G_EXCEPTION_ERROR;
14680       END IF;
14681 
14682     END IF;
14683 
14684     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14685        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ','End(-)');
14686     END IF;
14687   EXCEPTION
14688     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14689          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14690                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ',
14691                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
14692          END IF;
14693 
14694          IF l_trxcontracts_csr%ISOPEN THEN
14695             CLOSE l_trxcontracts_csr;
14696          END IF;
14697 
14698          IF l_tax_src_info_csr%ISOPEN THEN
14699            CLOSE l_tax_src_info_csr;
14700          END IF;
14701 
14702          IF l_prev_taxsources_csr%ISOPEN THEN
14703             CLOSE l_prev_taxsources_csr;
14704          END IF;
14705 
14706          IF l_finassets_csr%ISOPEN THEN
14707             CLOSE l_finassets_csr;
14708          END IF;
14709 
14710          IF l_k_asset_pymnts_csr%ISOPEN THEN
14711             CLOSE l_k_asset_pymnts_csr;
14712          END IF;
14713 
14714          IF l_invitem_csr%ISOPEN THEN
14715             CLOSE l_invitem_csr;
14716          END IF;
14717 
14718          IF l_txbasisoverride_csr%ISOPEN THEN
14719             CLOSE l_txbasisoverride_csr;
14720          END IF;
14721 
14722          IF l_formulae_csr%ISOPEN THEN
14723             CLOSE l_formulae_csr;
14724          END IF;
14725 
14726          x_return_status := OKL_API.G_RET_STS_ERROR;
14727     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14728          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14729                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ',
14730                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
14731          END IF;
14732 
14733          IF l_trxcontracts_csr%ISOPEN THEN
14734             CLOSE l_trxcontracts_csr;
14735          END IF;
14736 
14737          IF l_tax_src_info_csr%ISOPEN THEN
14738            CLOSE l_tax_src_info_csr;
14739          END IF;
14740 
14741          IF l_prev_taxsources_csr%ISOPEN THEN
14742             CLOSE l_prev_taxsources_csr;
14743          END IF;
14744 
14745          IF l_finassets_csr%ISOPEN THEN
14746             CLOSE l_finassets_csr;
14747          END IF;
14748 
14749          IF l_k_asset_pymnts_csr%ISOPEN THEN
14750             CLOSE l_k_asset_pymnts_csr;
14751          END IF;
14752 
14753          IF l_invitem_csr%ISOPEN THEN
14754             CLOSE l_invitem_csr;
14755          END IF;
14756 
14757          IF l_txbasisoverride_csr%ISOPEN THEN
14758             CLOSE l_txbasisoverride_csr;
14759          END IF;
14760 
14761          IF l_formulae_csr%ISOPEN THEN
14762             CLOSE l_formulae_csr;
14763          END IF;
14764 
14765          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14766 
14767     WHEN OTHERS THEN
14768          IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14769             FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_booking_upfront_tax ',
14770                   'EXCEPTION :'||sqlerrm);
14771          END IF;
14772 
14773          IF l_trxcontracts_csr%ISOPEN THEN
14774             CLOSE l_trxcontracts_csr;
14775          END IF;
14776 
14777          IF l_tax_src_info_csr%ISOPEN THEN
14778            CLOSE l_tax_src_info_csr;
14779          END IF;
14780 
14781          IF l_prev_taxsources_csr%ISOPEN THEN
14782             CLOSE l_prev_taxsources_csr;
14783          END IF;
14784 
14785          IF l_finassets_csr%ISOPEN THEN
14786             CLOSE l_finassets_csr;
14787          END IF;
14788 
14789          IF l_k_asset_pymnts_csr%ISOPEN THEN
14790             CLOSE l_k_asset_pymnts_csr;
14791          END IF;
14792 
14793          IF l_invitem_csr%ISOPEN THEN
14794             CLOSE l_invitem_csr;
14795          END IF;
14796 
14797          IF l_txbasisoverride_csr%ISOPEN THEN
14798             CLOSE l_txbasisoverride_csr;
14799          END IF;
14800 
14801          IF l_formulae_csr%ISOPEN THEN
14802             CLOSE l_formulae_csr;
14803          END IF;
14804 
14805          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14806          -- unexpected error
14807          OKL_API.set_message(p_app_name      => g_app_name,
14808                              p_msg_name      => g_unexpected_error,
14809                              p_token1        => g_sqlcode_token,
14810                              p_token1_value  => sqlcode,
14811                              p_token2        => g_sqlerrm_token,
14812                              p_token2_value  => sqlerrm);
14813 
14814   END process_booking_upfront_tax;
14815 
14816 /*========================================================================
14817  | PRIVATE PROCEDURE process_pre_rbk_upfront_tax
14818  |
14819  | DESCRIPTION
14820  |    This procedure is called from calculate_sales_tax procedure to calculate
14821  |    Upfront tax during Pre Rebooking
14822  |
14823  | CALLED FROM                                  calculate_sales_tax()
14824  |
14825  |
14826  | CALLS PROCEDURES/FUNCTIONS
14827  |     process_booking_upfront_tax()
14828  |
14829  | PARAMETERS
14830  |      p_source_trx_id                 -- Source transaction ID
14831  |      p_source_trx_name       -- Source transaction Name
14832  |      p_source_table          -- Source table
14833  |
14834  | KNOWN ISSUES
14835  |
14836  | NOTES
14837  |
14838  |
14839  | MODIFICATION HISTORY
14840  | Date          Author            Description of Changes
14841  | 08-APR-05     SECHAWLA           Created
14842  | 29-NOV-05     SECHAWLA           4772640 Modified to merge Pre-Rebook trx type
14843  |                                  setups into 'Booking'
14844  |
14845  *=======================================================================*/
14846   PROCEDURE process_pre_rbk_upfront_tax(
14847         p_api_version                   IN  NUMBER,
14848     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
14849     x_return_status                     OUT NOCOPY VARCHAR2,
14850     x_msg_count                         OUT NOCOPY NUMBER,
14851     x_msg_data                          OUT NOCOPY VARCHAR2,
14852     p_source_trx_id                                     IN  NUMBER,
14853     p_source_trx_name               IN  VARCHAR2,
14854     p_source_table                  IN  VARCHAR2,
14855     p_tax_call_type                 IN  VARCHAR2) IS
14856 
14857     -------------Pre Rebook --------------
14858     --p_source_trx_id           ---> okl_trx_contracts.id
14859     --p_source_trx_name     ---> 'Rebook'
14860     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
14861     --p_tax_call_type       ---> 'ESTIMATED'
14862     --------------------------------------------------
14863 
14864   BEGIN
14865 
14866     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14867         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax','Begin(+)');
14868     END IF;
14869 
14870     --Print Input Variables
14871     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14872       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14873               'p_init_msg_list :'||p_init_msg_list);
14874       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14875               'p_source_trx_id :'||p_source_trx_id);
14876       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14877               'p_source_trx_name :'||p_source_trx_name);
14878       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14879               'p_source_table :'||p_source_table);
14880       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14881               'p_tax_call_type :'||p_tax_call_type);
14882     END IF;
14883 
14884     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14885 
14886     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14887       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14888                   'Calling process_booking_upfront_tax');
14889     END IF;
14890 
14891     process_booking_upfront_tax(p_api_version        =>  p_api_version,
14892                                 p_init_msg_list      =>  p_init_msg_list,
14893                                 x_return_status      =>  x_return_status,
14894                                 x_msg_count          =>  x_msg_count,
14895                                 x_msg_data           =>  x_msg_data,
14896                                 p_source_trx_id          =>  p_source_trx_id,
14897                                 p_source_trx_name    =>  p_source_trx_name,
14898                                 p_source_table       =>  p_source_table,
14899                                 p_tax_call_type      =>  p_tax_call_type);
14900 
14901     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14902       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax.',
14903                   'Finished process_booking_upfront_tax '|| x_return_status);
14904     END IF;
14905 
14906         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14907        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14908     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14909        RAISE OKL_API.G_EXCEPTION_ERROR;
14910     END IF;
14911 
14912     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14913        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ','End(-)');
14914     END IF;
14915 
14916   EXCEPTION
14917     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14918       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14919         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ',
14920                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
14921       END IF;
14922 
14923       x_return_status := OKL_API.G_RET_STS_ERROR;
14924 
14925     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14926       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14927         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ',
14928                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
14929       END IF;
14930 
14931       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14932 
14933     WHEN OTHERS THEN
14934       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
14935         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_pre_rbk_upfront_tax ',
14936                   'EXCEPTION :'||sqlerrm);
14937       END IF;
14938 
14939       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14940       -- unexpected error
14941       OKL_API.set_message(p_app_name      => g_app_name,
14942                           p_msg_name      => g_unexpected_error,
14943                           p_token1        => g_sqlcode_token,
14944                           p_token1_value  => sqlcode,
14945                           p_token2        => g_sqlerrm_token,
14946                           p_token2_value  => sqlerrm);
14947   END process_pre_rbk_upfront_tax;
14948 
14949 /*========================================================================
14950  | PRIVATE PROCEDURE process_rebook_upfront_tax
14951  |
14952  | DESCRIPTION
14953  |    This procedure is called from calculate_sales_tax procedure to calculate
14954  |    Upfront tax during Rebook
14955  |
14956  | CALLED FROM                                  calculate_sales_tax()
14957  |
14958  |
14959  | CALLS PROCEDURES/FUNCTIONS
14960  |     OKL_TAX_INTERFACE_PVT.reverse_document()
14961  |     update_tax_sources_total()
14962  |     okl_tax_sources_pub.update_tax_sources()
14963  |     process_final_upfront_tax()
14964  |
14965  |
14966  | PARAMETERS
14967  |      p_source_trx_id                 -- Source transaction ID
14968  |      p_source_trx_name       -- Source transaction Name
14969  |      p_source_table          -- Source table
14970  |
14971  | KNOWN ISSUES
14972  |
14973  | NOTES
14974  |
14975  |
14976  | MODIFICATION HISTORY
14977  | Date           Author        Description of Changes
14978  | 08-APR-05      SECHAWLA        Created
14979  | 29-NOV-05      SECHAWLA        4772640 Modified to merge Rebook trx type setups
14980  |                                into 'Booking' trx type
14981  |
14982  *=======================================================================*/
14983   PROCEDURE process_rebook_upfront_tax(
14984         p_api_version                   IN  NUMBER,
14985     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
14986     x_return_status                     OUT NOCOPY VARCHAR2,
14987     x_msg_count                         OUT NOCOPY NUMBER,
14988     x_msg_data                          OUT NOCOPY VARCHAR2,
14989     p_source_trx_id                                     IN  NUMBER,
14990     p_source_trx_name               IN  VARCHAR2,
14991     p_source_table                  IN  VARCHAR2) IS
14992 
14993      -------------Rebook --------------
14994     --p_source_trx_id           ---> okl_trx_contracts.id
14995     --p_source_trx_name     ---> 'Rebook'
14996     --p_source_table        ---> 'OKL_TRX_CONTRACTS'
14997     --------------------------------------------------
14998 
14999         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
15000 
15001         -- validate source trx id
15002     -- okl_trx_contracts.khr_id has original contract id
15003     -- okl_trx_contracts.khr_id_new has rebook copy contract id
15004         CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
15005         SELECT a.try_id, a.khr_id, a.khr_id_new, a.date_transaction_occurred
15006         FROM   okl_trx_contracts a , okl_trx_types_tl b
15007         WHERE  a.id = cp_trx_id
15008         AND    a.try_id = b.id
15009         AND    b.name = cp_trx_type_name
15010     AND    language = 'US';
15011 
15012     -- Booking tax lines will be the only ACTIVE set of tax lines at the time K is being Reversed
15013         -- Contract can be reversed only if no other transactions have happened on the contract
15014         -- this cursor selects existing active upfront taxable lines for a contract that is being reversed
15015         CURSOR l_prevtaxsources_csr(cp_khr_id IN NUMBER) IS
15016         SELECT id, khr_id, kle_id, asset_number, trx_id, trx_line_id, entity_code,
15017                event_class_code, trx_level_type, tax_call_type_code, sty_id,
15018                trx_business_category, tax_line_status_code, sel_id, reported_yn,
15019                line_name, application_id, tax_reporting_flag, default_taxation_country,
15020                product_category, user_defined_fisc_class, line_intended_use,
15021                tax_classification_code, inventory_item_id, bill_to_cust_acct_id,
15022                org_id, legal_entity_id, line_amt, assessable_value, total_tax,
15023                product_type, product_fisc_classification, trx_date, provnl_tax_determination_date,
15024                try_id, ship_to_location_id, ship_to_party_site_id, ship_to_party_id,
15025                bill_to_party_site_id, bill_to_location_id, bill_to_party_id,
15026                ship_to_cust_acct_site_use_id, bill_to_cust_acct_site_use_id,
15027                trx_currency_code, currency_conversion_date, currency_conversion_rate,
15028                currency_conversion_type
15029         FROM   okl_tax_sources
15030         WHERE  khr_id = cp_khr_id
15031         AND    tax_call_type_code = G_UPFRONT_TAX
15032         AND    tax_line_status_code = G_ACTIVE_STATUS
15033     AND    application_id = G_OKL_APPLICATION_ID
15034     AND    trx_level_type = G_TRX_LEVEL_TYPE
15035         AND    ADJUSTED_DOC_TRX_ID IS NULL
15036         AND    ADJUSTED_DOC_TRX_LINE_ID IS NULL;
15037 
15038     CURSOR l_rbk_taxablelines_csr(cp_trx_id IN NUMBER, cp_khr_id IN NUMBER) IS
15039     SELECT id, kle_id
15040     FROM okl_tax_sources
15041     WHERE trx_id = cp_trx_id
15042     AND   khr_id = cp_khr_id
15043     AND   tax_call_type_code = G_UPFRONT_TAX
15044     AND   tax_line_status_code = G_ACTIVE_STATUS;
15045 
15046     CURSOR l_orig_kle_id(cp_kle_id IN NUMBER) IS
15047     SELECT orig_system_id1
15048     FROM   okc_k_lines_b
15049     WHERE  id = cp_kle_id;
15050 
15051     CURSOR l_new_line_id(cp_orig_system_id IN NUMBER) IS
15052     SELECT id
15053     FROM   okc_k_lines_b
15054     WHERE  orig_system_id1 = cp_orig_system_id;
15055 
15056         TYPE  tax_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15057         TYPE  prev_tx_src_tbl_type IS TABLE OF l_prevtaxsources_csr%ROWTYPE INDEX BY BINARY_INTEGER;
15058 
15059     l_prevtaxsources_tbl                        prev_tx_src_tbl_type;
15060         l_tax_src_tbl                                   tax_src_tbl_type;
15061         l_tax_sources_tbl               tax_sources_tbl_type;
15062     rev_trx_lines_tbl               zx_trx_lines_tbl_type;
15063     rev_trx_hdr_rec                 line_params_rec_type;
15064     l_txsv_tbl                      txsv_tbl_type;
15065     lx_txsv_tbl                     txsv_tbl_type;
15066 
15067         l_fetch_size                    NUMBER := 10000;
15068     i                                                           NUMBER;
15069     j                                                           NUMBER;
15070 
15071     l_trx_date                      DATE;
15072     l_trx_level_type                VARCHAR2(30);
15073     l_org_id                        NUMBER;
15074     l_legal_entity_id               NUMBER;
15075     l_reversed_trx_id               NUMBER;
15076     l_rbk_khr_id                    NUMBER;
15077     l_rbk_trx_type_id_det                       NUMBER;
15078     l_khr_id                                            NUMBER;
15079     l_kle_id                        NUMBER;
15080     l_sync_kle_id                   NUMBER;
15081     l_booking_tax_exists            BOOLEAN := FALSE;
15082 
15083   BEGIN
15084 
15085     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15086         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax','Begin(+)');
15087     END IF;
15088 
15089     --Print Input Variables
15090     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15091       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15092               'p_init_msg_list :'||p_init_msg_list);
15093       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15094               'p_source_trx_id :'||p_source_trx_id);
15095       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15096               'p_source_trx_name :'||p_source_trx_name);
15097       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15098               'p_source_table :'||p_source_table);
15099     END IF;
15100 
15101     x_return_status := OKL_API.G_RET_STS_SUCCESS;
15102 
15103     -- Validate the source trx id
15104     OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
15105     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
15106     -- At this point l_rbk_trx_type_id_det has the id of the Rebook trx type
15107     IF l_trxcontracts_csr%NOTFOUND THEN
15108       -- source trx id is invalid
15109       OKC_API.set_message( p_app_name      => 'OKC',
15110                            p_msg_name      => G_INVALID_VALUE,
15111                            p_token1        => G_COL_NAME_TOKEN,
15112                            p_token1_value  => 'SOURCE_TRX_ID');
15113       RAISE OKL_API.G_EXCEPTION_ERROR;
15114     END IF;
15115     CLOSE l_trxcontracts_csr;
15116 
15117     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15118           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15119                 'l_rbk_trx_type_id_det '||l_rbk_trx_type_id_det );
15120       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15121                 'l_khr_id '||l_khr_id );
15122       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15123                 'l_rbk_khr_id '||l_rbk_khr_id );
15124       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15125                 'l_trx_date '||l_trx_date );
15126     END IF;
15127 
15128         --Create negative tax lines for the previously active upfront tax lines
15129     i := 1;
15130         j := 1;
15131         l_tax_sources_tbl.DELETE;
15132         l_tax_src_tbl.DELETE;
15133 
15134     OPEN l_prevtaxsources_csr(l_khr_id);
15135         LOOP
15136           l_prevtaxsources_tbl.DELETE;
15137           FETCH l_prevtaxsources_csr BULK COLLECT INTO l_prevtaxsources_tbl LIMIT l_fetch_size;
15138           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15139             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15140                                 'l_prevtaxsources_tbl.COUNT '||l_prevtaxsources_tbl.COUNT );
15141       END IF;
15142 
15143       IF l_prevtaxsources_tbl.COUNT > 0 THEN
15144         l_booking_tax_exists := TRUE;
15145         FOR k IN  l_prevtaxsources_tbl.FIRST..l_prevtaxsources_tbl.LAST LOOP
15146 
15147           IF i = 1 THEN
15148             l_org_id          := l_prevtaxsources_tbl(k).org_id;
15149             l_trx_level_type  := l_prevtaxsources_tbl(k).trx_level_type;
15150             l_legal_entity_id := l_prevtaxsources_tbl(k).legal_entity_id;
15151             l_reversed_trx_id := l_prevtaxsources_tbl(k).trx_id;
15152           END IF;
15153 
15154           -- Create adjusting tax source transaction for the previous active tax lines
15155               l_tax_sources_tbl(i).id                            := get_seq_id;
15156           l_tax_sources_tbl(i).khr_id                        := l_prevtaxsources_tbl(k).khr_id;
15157           l_tax_sources_tbl(i).kle_id                        := l_prevtaxsources_tbl(k).kle_id;
15158           l_tax_sources_tbl(i).asset_number                  := l_prevtaxsources_tbl(k).asset_number;
15159           l_tax_sources_tbl(i).trx_id                        := p_source_trx_id;
15160           l_tax_sources_tbl(i).trx_line_id                   := l_tax_sources_tbl(i).id;
15161           l_tax_sources_tbl(i).entity_code                   := G_CONTRACTS_ENTITY_CODE;
15162           l_tax_sources_tbl(i).event_class_code              := G_REBOOK_EVENT_CLASS_CODE;
15163           l_tax_sources_tbl(i).trx_level_type                := G_TRX_LEVEL_TYPE;
15164           l_tax_sources_tbl(i).adjusted_doc_entity_code      := l_prevtaxsources_tbl(k).entity_code;
15165           l_tax_sources_tbl(i).adjusted_doc_event_class_code := l_prevtaxsources_tbl(k).event_class_code;
15166           l_tax_sources_tbl(i).adjusted_doc_trx_id           := l_prevtaxsources_tbl(k).trx_id;
15167                   l_tax_sources_tbl(i).adjusted_doc_trx_line_id      := l_prevtaxsources_tbl(k).trx_line_id;
15168                   l_tax_sources_tbl(i).adjusted_doc_trx_level_type   := l_prevtaxsources_tbl(k).trx_level_type;
15169                   l_tax_sources_tbl(i).adjusted_doc_number           := NULL;
15170                   l_tax_sources_tbl(i).adjusted_doc_date             := NULL;
15171                   l_tax_sources_tbl(i).tax_call_type_code            := G_UPFRONT_TAX;
15172                   l_tax_sources_tbl(i).sty_id                        := l_prevtaxsources_tbl(k).sty_id;
15173                   l_tax_sources_tbl(i).trx_business_category         := l_prevtaxsources_tbl(k).trx_business_category;
15174                   l_tax_sources_tbl(i).tax_line_status_code          := G_INACTIVE_STATUS;
15175 
15176           l_tax_sources_tbl(i).sel_id                        := l_prevtaxsources_tbl(k).sel_id;
15177                   l_tax_sources_tbl(i).reported_yn                   := l_prevtaxsources_tbl(k).reported_yn;
15178           l_tax_sources_tbl(i).tax_reporting_flag            := l_prevtaxsources_tbl(k).tax_reporting_flag;
15179                   l_tax_sources_tbl(i).program_id                    := NULL;
15180                   l_tax_sources_tbl(i).request_id                    := NULL;
15181                   l_tax_sources_tbl(i).program_application_id        := NULL;
15182                   l_tax_sources_tbl(i).program_update_date           := NULL;
15183                   l_tax_sources_tbl(i).attribute_category            := NULL;
15184 
15185                   l_tax_sources_tbl(i).attribute1                    := NULL;
15186                   l_tax_sources_tbl(i).attribute2                    := NULL;
15187                   l_tax_sources_tbl(i).attribute3                    := NULL;
15188                   l_tax_sources_tbl(i).attribute4                    := NULL;
15189                   l_tax_sources_tbl(i).attribute5                    := NULL;
15190                   l_tax_sources_tbl(i).attribute6                    := NULL;
15191                   l_tax_sources_tbl(i).attribute7                    := NULL;
15192                   l_tax_sources_tbl(i).attribute8                    := NULL;
15193                   l_tax_sources_tbl(i).attribute9                    := NULL;
15194                   l_tax_sources_tbl(i).attribute10                   := NULL;
15195                   l_tax_sources_tbl(i).attribute11                   := NULL;
15196                   l_tax_sources_tbl(i).attribute12                   := NULL;
15197                   l_tax_sources_tbl(i).attribute13                   := NULL;
15198                   l_tax_sources_tbl(i).attribute14                   := NULL;
15199                   l_tax_sources_tbl(i).attribute15                   := NULL;
15200                   l_tax_sources_tbl(i).created_by                    := G_USER_ID;
15201                   l_tax_sources_tbl(i).creation_date                 := SYSDATE;
15202                   l_tax_sources_tbl(i).last_updated_by               := G_USER_ID;
15203                   l_tax_sources_tbl(i).last_update_date              := SYSDATE;
15204                   l_tax_sources_tbl(i).last_update_login             := G_LOGIN_ID;
15205                   l_tax_sources_tbl(i).object_version_number         := NULL;
15206 
15207           l_tax_sources_tbl(i).line_name                 := l_prevtaxsources_tbl(k).line_name;
15208           l_tax_sources_tbl(i).application_id            := l_prevtaxsources_tbl(k).application_id;
15209           l_tax_sources_tbl(i).default_taxation_country  := l_prevtaxsources_tbl(k).default_taxation_country;
15210           l_tax_sources_tbl(i).product_category          := l_prevtaxsources_tbl(k).product_category;
15211           l_tax_sources_tbl(i).user_defined_fisc_class   := l_prevtaxsources_tbl(k).user_defined_fisc_class;
15212           l_tax_sources_tbl(i).line_intended_use         := l_prevtaxsources_tbl(k).line_intended_use;
15213           l_tax_sources_tbl(i).tax_classification_code   := l_prevtaxsources_tbl(k).tax_classification_code;
15214           l_tax_sources_tbl(i).inventory_item_id         := l_prevtaxsources_tbl(k).inventory_item_id;
15215           l_tax_sources_tbl(i).bill_to_cust_acct_id      := l_prevtaxsources_tbl(k).bill_to_cust_acct_id;
15216           l_tax_sources_tbl(i).org_id                    := l_prevtaxsources_tbl(k).org_id;
15217           l_tax_sources_tbl(i).legal_entity_id           := l_prevtaxsources_tbl(k).legal_entity_id;
15218           l_tax_sources_tbl(i).line_amt                  := -l_prevtaxsources_tbl(k).line_amt;
15219           l_tax_sources_tbl(i).assessable_value          := -l_prevtaxsources_tbl(k).assessable_value;
15220 
15221           l_tax_sources_tbl(i).total_tax                 := null;  -- this col will be populated after reverse doc API is called
15222           l_tax_sources_tbl(i).trx_date                  := l_trx_date;
15223           l_tax_sources_tbl(i).try_id                    := l_rbk_trx_type_id_det;
15224 
15225           l_tax_sources_tbl(i).product_type                    := l_prevtaxsources_tbl(k).product_type;
15226           l_tax_sources_tbl(i).product_fisc_classification     := l_prevtaxsources_tbl(k).product_fisc_classification;
15227           l_tax_sources_tbl(i).provnl_tax_determination_date   := null;
15228           l_tax_sources_tbl(i).ship_to_location_id             := l_prevtaxsources_tbl(k).ship_to_location_id;
15229           l_tax_sources_tbl(i).ship_to_party_site_id           := l_prevtaxsources_tbl(k).ship_to_party_site_id;
15230           l_tax_sources_tbl(i).ship_to_party_id                := l_prevtaxsources_tbl(k).ship_to_party_id;
15231           l_tax_sources_tbl(i).bill_to_party_site_id           := l_prevtaxsources_tbl(k).bill_to_party_site_id;
15232           l_tax_sources_tbl(i).bill_to_location_id             := l_prevtaxsources_tbl(k).bill_to_location_id;
15233           l_tax_sources_tbl(i).bill_to_party_id                := l_prevtaxsources_tbl(k).bill_to_party_id;
15234           l_tax_sources_tbl(i).ship_to_cust_acct_site_use_id   := l_prevtaxsources_tbl(k).ship_to_cust_acct_site_use_id;
15235           l_tax_sources_tbl(i).bill_to_cust_acct_site_use_id   := l_prevtaxsources_tbl(k).bill_to_cust_acct_site_use_id;
15236           l_tax_sources_tbl(i).trx_currency_code               := l_prevtaxsources_tbl(k).trx_currency_code;
15237           l_tax_sources_tbl(i).currency_conversion_type        := l_prevtaxsources_tbl(k).currency_conversion_type;
15238           l_tax_sources_tbl(i).currency_conversion_rate        := l_prevtaxsources_tbl(k).currency_conversion_rate;
15239           l_tax_sources_tbl(i).currency_conversion_date        := l_prevtaxsources_tbl(k).currency_conversion_date;
15240 
15241           -- Store the tax source IDs in a table
15242           l_tax_src_tbl(i)                                     := l_prevtaxsources_tbl(k).id;
15243 
15244           -- Populate the ZX reverse transaction lines table for tax call
15245           rev_trx_lines_tbl(i).internal_organization_id        := l_org_id;
15246           rev_trx_lines_tbl(i).reversing_appln_id              := G_OKL_APPLICATION_ID;
15247           rev_trx_lines_tbl(i).reversing_entity_code           := G_CONTRACTS_ENTITY_CODE;
15248           rev_trx_lines_tbl(i).reversing_evnt_cls_code         := G_REBOOK_EVENT_CLASS_CODE;
15249           rev_trx_lines_tbl(i).reversing_trx_id                := p_source_trx_id;
15250           rev_trx_lines_tbl(i).reversing_trx_level_type        := l_trx_level_type;
15251           rev_trx_lines_tbl(i).reversing_trx_line_id           := l_tax_sources_tbl(i).trx_line_id;
15252 
15253           rev_trx_lines_tbl(i).reversed_appln_id               := G_OKL_APPLICATION_ID;
15254           rev_trx_lines_tbl(i).reversed_entity_code            := l_prevtaxsources_tbl(k).entity_code;
15255           rev_trx_lines_tbl(i).reversed_evnt_cls_code          := l_prevtaxsources_tbl(k).event_class_code;
15256           rev_trx_lines_tbl(i).reversed_trx_id                 := l_tax_sources_tbl(i).adjusted_doc_trx_id;
15257           rev_trx_lines_tbl(i).reversed_trx_level_type         := l_trx_level_type;
15258           rev_trx_lines_tbl(i).reversed_trx_line_id            := l_tax_sources_tbl(i).adjusted_doc_trx_line_id;
15259 
15260           i := i + 1;
15261         END LOOP;
15262       END IF;
15263       EXIT WHEN l_prevtaxsources_csr%NOTFOUND;
15264     END LOOP;
15265     CLOSE l_prevtaxsources_csr;
15266 
15267     -- Inactivate the previous ACTIVE tax lines - begin
15268     IF l_tax_src_tbl.COUNT > 0 THEN
15269       BEGIN
15270         FORALL i IN l_tax_src_tbl.FIRST..l_tax_src_tbl.LAST
15271           UPDATE OKL_TAX_SOURCES SET TAX_LINE_STATUS_CODE = G_INACTIVE_STATUS WHERE id = l_tax_src_tbl(i);
15272       EXCEPTION
15273         WHEN OTHERS THEN
15274           IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
15275                         FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
15276                                                                 OKL_API.set_message(
15277                                                                      p_app_name      => 'OKL',
15278                                      p_msg_name      => 'OKL_TX_TRX_UPD_ERR',
15279                                      p_token1        => 'TABLE_NAME',
15280                                      p_token1_value  => 'OKL_TAX_SOURCES',
15281                                      p_token2        => 'ERROR_CODE',
15282                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
15283                                                                          p_token3        => 'ITERATION',
15284                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
15285                     END LOOP;
15286                         RAISE OKL_API.G_EXCEPTION_ERROR;
15287                   END IF;
15288       END;
15289 
15290       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15291                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15292                         'Inactivated the previous active upfront tax lines ' );
15293       END IF;
15294     END IF;
15295     -- Inactivate the previous ACTIVE tax lines - end
15296 
15297     -- Push the negative tax lines populated before for original contract into
15298     -- tax sources
15299     -- bulk insert into okl_tax_sources -- start
15300     BEGIN
15301       IF l_tax_sources_tbl.COUNT > 0 THEN
15302         FORALL indx in l_tax_sources_tbl.FIRST..l_tax_sources_tbl.LAST
15303           -- SAVE EXCEPTIONS
15304           INSERT INTO okl_tax_sources VALUES l_tax_sources_tbl(indx);
15305       END IF;
15306     EXCEPTION
15307       WHEN OTHERS THEN
15308         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
15309                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
15310                         OKL_API.set_message(p_app_name      => 'OKL',
15311                                 p_msg_name      => 'OKL_TX_TRX_INS_ERR',
15312                                 p_token1        => 'TABLE_NAME',
15313                                 p_token1_value  => 'OKL_TAX_SOURCES',
15314                                 p_token2        => 'ERROR_CODE',
15315                                 p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
15316                                                                 p_token3        => 'ITERATION',
15317                                                                 p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
15318           END LOOP;
15319                   RAISE OKL_API.G_EXCEPTION_ERROR;
15320                 END IF;
15321     END;
15322     -- bulk insert into okl_tax_sources -- end
15323 
15324     -- Reverse document call for the reversal of original contract tax sources
15325         -- Populate ZX reverse transaction tables
15326     IF (l_booking_tax_exists) THEN -- Perform reversal only if the booking tax exists
15327       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15328         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15329               'Calling OKL_TAX_INTERFACE_PVT.reverse_document');
15330       END IF;
15331 
15332       rev_trx_hdr_rec.internal_organization_id := l_org_id;
15333       rev_trx_hdr_rec.application_id           := G_OKL_APPLICATION_ID;
15334       rev_trx_hdr_rec.trx_id                   := p_source_trx_id;
15335       rev_trx_hdr_rec.legal_entity_id          := l_legal_entity_id;
15336       rev_trx_hdr_rec.entity_code              := G_CONTRACTS_ENTITY_CODE;
15337       rev_trx_hdr_rec.event_class_code         := G_REBOOK_EVENT_CLASS_CODE;
15338 
15339       OKL_TAX_INTERFACE_PVT.reverse_document (
15340                               p_api_version       => p_api_version,
15341                               p_init_msg_list     => p_init_msg_list,
15342                               x_return_status     => x_return_status,
15343                               x_msg_count         => x_msg_count,
15344                               x_msg_data          => x_msg_data,
15345                               p_rev_trx_hdr_rec   => rev_trx_hdr_rec,
15346                               p_rev_trx_lines_tbl => rev_trx_lines_tbl);
15347 
15348       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15349         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15350               'Return Status' || x_return_status);
15351       END IF;
15352 
15353       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15354         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15355       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15356         RAISE OKL_API.G_EXCEPTION_ERROR;
15357       END IF;
15358 
15359       -- Get the total tax amount corresponding to 'Reverse' transaction initiated
15360       -- for the 'Rebook' transaction and update total_tax in okl_tax_sources
15361       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15362         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15363           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
15364       END IF;
15365 
15366       update_tax_sources_total(p_api_version      => p_api_version,
15367                                p_init_msg_list    => p_init_msg_list,
15368                                x_return_status    => x_return_status,
15369                                x_msg_count        => x_msg_count,
15370                                x_msg_data         => x_msg_data,
15371                                p_source_trx_id    => p_source_trx_id,
15372                                p_source_trx_name  => p_source_trx_name);
15373 
15374       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15375         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15376           'Return Status' || x_return_status);
15377       END IF;
15378 
15379       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15380         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15381       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15382         RAISE OKL_API.G_EXCEPTION_ERROR;
15383       END IF;
15384 
15385     END IF;  -- Perform reversal only if the booking tax exists
15386 
15387     -- Sync rebook tax sources with original contract info
15388     i := 1;
15389     FOR l_rbk_taxablelines_rec IN l_rbk_taxablelines_csr(cp_trx_id => p_source_trx_id,
15390                                                          cp_khr_id => l_rbk_khr_id ) LOOP
15391       l_sync_kle_id := null;
15392 
15393       l_txsv_tbl(i).id      := l_rbk_taxablelines_rec.id;
15394       l_txsv_tbl(i).khr_id  := l_khr_id; -- sync the parent contract id
15395 
15396       l_kle_id := l_rbk_taxablelines_rec.kle_id;
15397 
15398       IF (l_kle_id IS NOT NULL) THEN  -- Asset Line, else Contract level tax line
15399 
15400         -- Sync rebook tax sources with original contract line ids (for existing assets)
15401         -- and new contract line id (for new assets)
15402         -- Sync the parent contract kle_id's
15403         OPEN l_orig_kle_id(cp_kle_id  => l_kle_id);
15404         FETCH l_orig_kle_id INTO l_sync_kle_id;
15405         IF l_orig_kle_id%NOTFOUND THEN
15406           OKC_API.set_message( p_app_name      => 'OKC',
15407                                p_msg_name      => G_INVALID_VALUE,
15408                                p_token1        => G_COL_NAME_TOKEN,
15409                               p_token1_value  => 'SOURCE_TRX_ID');
15410           RAISE OKL_API.G_EXCEPTION_ERROR;
15411         END IF;
15412         CLOSE l_orig_kle_id;
15413 
15414         IF (l_sync_kle_id IS NOT NULL) THEN
15415           l_txsv_tbl(i).kle_id  := l_sync_kle_id;
15416         ELSE
15417           -- This means the asset is newly created during Rebook process, so fetch
15418           -- the id of okc_k_lines_b where the orig_system_id1 is the kle_id of
15419           -- l_rbk_taxablelines_rec
15420           OPEN l_new_line_id(cp_orig_system_id => l_kle_id);
15421           FETCH l_new_line_id INTO l_sync_kle_id;
15422           IF l_new_line_id%NOTFOUND THEN
15423             OKC_API.set_message( p_app_name      => 'OKC',
15424                                  p_msg_name      => G_INVALID_VALUE,
15425                                  p_token1        => G_COL_NAME_TOKEN,
15426                                  p_token1_value  => 'SOURCE_TRX_ID');
15427             RAISE OKL_API.G_EXCEPTION_ERROR;
15428           END IF;
15429           CLOSE l_new_line_id;
15430 
15431           l_txsv_tbl(i).kle_id  := l_sync_kle_id;
15432         END IF;
15433 
15434       END IF;
15435 
15436       i := i+1;
15437 
15438     END LOOP;
15439 
15440     IF (l_txsv_tbl.COUNT > 0) THEN
15441 
15442       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15443         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax',
15444            'Calling okl_tax_sources_pub.update_tax_sources for synching back original contract info for all Lines in Tax Sources');
15445       END IF;
15446 
15447       okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
15448                                             ,p_init_msg_list   => p_init_msg_list
15449                                             ,x_return_status   => x_return_status
15450                                             ,x_msg_count       => x_msg_count
15451                                             ,x_msg_data        => x_msg_data
15452                                             ,p_txsv_tbl        => l_txsv_tbl
15453                                             ,x_txsv_tbl        => lx_txsv_tbl);
15454 
15455       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15456         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax',
15457               'Return Status' || x_return_status);
15458       END IF;
15459 
15460       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15461         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15462       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15463         RAISE OKL_API.G_EXCEPTION_ERROR;
15464       END IF;
15465     END IF;
15466     -- End Sync rebook tax sources with original contract info
15467 
15468     -- Change the reportable flag after synching back the rebook copy contract
15469     -- with the original contract
15470     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15471       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15472               'process_final_upfront_tax');
15473     END IF;
15474 
15475     -- Call ebtax procedure to flip the reportable flag from N to Y
15476     process_final_upfront_tax( p_api_version       => p_api_version,
15477                                    p_init_msg_list     => p_init_msg_list,
15478                                x_return_status     => x_return_status,
15479                                    x_msg_count         => x_msg_count,
15480                                        x_msg_data          => x_msg_data,
15481                                        p_trx_id                    => p_source_trx_id,
15482                                    p_application_id    => G_OKL_APPLICATION_ID,
15483                                p_entity_code       => G_CONTRACTS_ENTITY_CODE,
15484                                p_event_class_code  => G_BOOKING_EVENT_CLASS_CODE);
15485 
15486     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15487       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15488             'Return Status' || x_return_status);
15489     END IF;
15490 
15491     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15492       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15493         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15494           RAISE OKL_API.G_EXCEPTION_ERROR;
15495         END IF;
15496 
15497     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15498       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15499             'Calling "make_tax_sources_reportable" .. ');
15500     END IF;
15501 
15502     make_tax_sources_reportable(p_api_version    => p_api_version,
15503                                 p_init_msg_list  => p_init_msg_list,
15504                                 x_return_status  => x_return_status,
15505                                 x_msg_count      => x_msg_count,
15506                                 x_msg_data       => x_msg_data,
15507                                 p_source_trx_id  => p_source_trx_id);
15508 
15509     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15510       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax.',
15511             'Return Status' || x_return_status);
15512     END IF;
15513 
15514     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15515       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15516     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15517       RAISE OKL_API.G_EXCEPTION_ERROR;
15518     END IF;
15519 
15520     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15521        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ','End(-)');
15522     END IF;
15523 
15524   EXCEPTION
15525     WHEN OKL_API.G_EXCEPTION_ERROR THEN
15526       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15527         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ',
15528                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
15529       END IF;
15530 
15531       IF l_trxcontracts_csr%ISOPEN THEN
15532         CLOSE l_trxcontracts_csr;
15533       END IF;
15534 
15535       IF l_prevtaxsources_csr%ISOPEN THEN
15536         CLOSE l_prevtaxsources_csr;
15537       END IF;
15538 
15539       IF l_rbk_taxablelines_csr%ISOPEN THEN
15540         CLOSE l_rbk_taxablelines_csr;
15541       END IF;
15542 
15543       IF l_orig_kle_id%ISOPEN THEN
15544         CLOSE l_orig_kle_id;
15545       END IF;
15546 
15547       IF l_new_line_id%ISOPEN THEN
15548         CLOSE l_new_line_id;
15549       END IF;
15550 
15551       x_return_status := OKL_API.G_RET_STS_ERROR;
15552 
15553     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
15554       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15555         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ',
15556                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
15557       END IF;
15558 
15559       IF l_trxcontracts_csr%ISOPEN THEN
15560         CLOSE l_trxcontracts_csr;
15561       END IF;
15562 
15563       IF l_prevtaxsources_csr%ISOPEN THEN
15564         CLOSE l_prevtaxsources_csr;
15565       END IF;
15566 
15567       IF l_rbk_taxablelines_csr%ISOPEN THEN
15568         CLOSE l_rbk_taxablelines_csr;
15569       END IF;
15570 
15571       IF l_orig_kle_id%ISOPEN THEN
15572         CLOSE l_orig_kle_id;
15573       END IF;
15574 
15575       IF l_new_line_id%ISOPEN THEN
15576         CLOSE l_new_line_id;
15577       END IF;
15578 
15579       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
15580 
15581     WHEN OTHERS THEN
15582       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15583         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_rebook_upfront_tax ',
15584                   'EXCEPTION :'||sqlerrm);
15585       END IF;
15586 
15587       IF l_trxcontracts_csr%ISOPEN THEN
15588         CLOSE l_trxcontracts_csr;
15589       END IF;
15590 
15591       IF l_prevtaxsources_csr%ISOPEN THEN
15592         CLOSE l_prevtaxsources_csr;
15593       END IF;
15594 
15595       IF l_rbk_taxablelines_csr%ISOPEN THEN
15596         CLOSE l_rbk_taxablelines_csr;
15597       END IF;
15598 
15599       IF l_orig_kle_id%ISOPEN THEN
15600         CLOSE l_orig_kle_id;
15601       END IF;
15602 
15603       IF l_new_line_id%ISOPEN THEN
15604         CLOSE l_new_line_id;
15605       END IF;
15606 
15607       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
15608       -- unexpected error
15609       OKL_API.set_message(p_app_name      => g_app_name,
15610                           p_msg_name      => g_unexpected_error,
15611                           p_token1        => g_sqlcode_token,
15612                           p_token1_value  => sqlcode,
15613                           p_token2        => g_sqlerrm_token,
15614                           p_token2_value  => sqlerrm);
15615 
15616   END process_rebook_upfront_tax;
15617 
15618 /*========================================================================
15619  | PRIVATE PROCEDURE process_quoting_upfront_tax
15620  |
15621  | DESCRIPTION
15622  |    This procedure is called from calculate_sales_tax procedure to calculate
15623  |    Upfront tax for a sales quote
15624  |
15625  | CALLED FROM                                  calculate_sales_tax()
15626  |
15627  |
15628  | CALLS PROCEDURES/FUNCTIONS
15629  |     populate_tax_info()
15630  |     OKL_TAX_INTERFACE_PVT.calculate_tax()
15631  |
15632  |
15633  | PARAMETERS
15634  |      p_source_trx_id                 -- Source transaction ID
15635  |      p_source_trx_name       -- Source transaction Name
15636  |      p_source_table          -- Source table
15637  |
15638  | KNOWN ISSUES
15639  |
15640  | NOTES
15641  |
15642  |
15643  | MODIFICATION HISTORY
15644  | Date         Author     Description of Changes
15645  | 08-APR-05   SECHAWLA     Created
15646  | 12-DEC-05   SECHAWLA     4690074 - modified cursor l_get_location_id to map
15647  |                                    Install site id of the assets to
15648  |                                    PARTY_SITE_USE_ID in hz_party_site_uses
15649  |
15650  *=======================================================================*/
15651   PROCEDURE process_quoting_upfront_tax(
15652         p_api_version                   IN  NUMBER,
15653     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
15654     x_return_status                     OUT NOCOPY VARCHAR2,
15655     x_msg_count                         OUT NOCOPY NUMBER,
15656     x_msg_data                          OUT NOCOPY VARCHAR2,
15657     p_source_trx_id                                     IN  NUMBER,
15658     p_source_trx_name               IN  VARCHAR2,
15659     p_source_table                  IN  VARCHAR2) IS
15660 
15661     ---------------------Sales Quote / Lease Application ----------------
15662     --p_source_trx_id           ---> okl_lease_quotes_b.id  (sales quote ID)
15663     --p_source_trx_name     ---> 'Sales Quote'
15664     --p_source_table        ---> 'OKL_LEASE_QUOTES_B'
15665     -- 'Sales Quote' is not going to store/add try_id in okl_lease_quotes_b,
15666     -- as it will be the same for all the rows
15667     ----------------------------------------------------------------------
15668 
15669         l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
15670 
15671         -- Validate source trx id
15672         CURSOR l_leasequotes_csr(cp_trx_id IN NUMBER) IS
15673         SELECT expected_start_date, product_id, interest_disclosed,
15674                transfer_of_title, sale_and_lease_back, purchase_of_lease, usage_category,
15675                age_of_equipment, parent_object_code , parent_object_id, legal_entity_id
15676         FROM   okl_lease_quotes_b
15677         WHERE  id = cp_trx_id;
15678 
15679         -- Get the transaction type id
15680         CURSOR l_trxtypes_csr IS
15681         SELECT id
15682         FROM   okl_trx_types_tl
15683         WHERE  name = 'Sales Quote'
15684     AND    language = 'US';
15685 
15686         -- Get Currency code and cust a/c for lease opportunity
15687         CURSOR l_leaseopp_csr(cp_id IN NUMBER) IS
15688         SELECT lop.currency_code, lop.cust_acct_id, lop.prospect_id,  --> (party id)
15689            lop.org_id, lsq.expected_start_date, lop.currency_conversion_type,
15690            lop.currency_conversion_rate, lop.currency_conversion_date, lsq.line_intended_use,
15691            pdt.name
15692         FROM   okl_lease_opportunities_b lop, okl_lease_quotes_b lsq, okl_products pdt
15693         WHERE  lsq.parent_object_id = lop.id
15694     AND    lsq.parent_object_code = 'LEASEOPP'
15695     AND    lsq.product_id = pdt.id
15696     AND    lsq.id = cp_id;
15697 
15698         -- Get Currency code and cust a/c for lease application
15699         CURSOR l_leaseapp_csr(cp_id IN NUMBER) IS
15700         SELECT lap.currency_code, lap.cust_acct_id, lap.prospect_id, --> (party id)
15701            lap.org_id, lsq.expected_start_date, lap.currency_conversion_type,
15702            lap.currency_conversion_rate, lap.currency_conversion_date, lsq.line_intended_use,
15703            pdt.name
15704         FROM   okl_lease_applications_b lap, okl_lease_quotes_b lsq, okl_products pdt
15705         WHERE  lsq.parent_object_id = lap.id
15706     AND    lsq.parent_object_code = 'LEASEAPP'
15707     AND    lsq.primary_quote = 'Y'
15708     AND    lsq.product_id = pdt.id
15709     AND    lsq.id = cp_id;
15710 
15711         -- Check if quoting tax was already calculated for this quote. If so, first
15712         -- delete the quoting tax source transaction and tax details
15713     CURSOR l_prevtaxsources_csr(cp_trx_id IN NUMBER) IS
15714     SELECT id
15715     FROM   okl_tax_sources
15716     WHERE  tax_call_type_code = G_UPFRONT_TAX
15717     AND    trx_id = cp_trx_id;
15718 
15719         -- Get the previous tax trx details
15720         CURSOR l_prevtaxtrxdet_csr(cp_txs_id IN NUMBER) IS
15721         SELECT ID
15722         FROM   okl_tax_trx_details
15723         WHERE  txs_id = cp_txs_id;
15724 
15725         -- Get all the assets of the sales quote
15726         CURSOR l_quoteassets_csr(cp_quote_id IN NUMBER) IS
15727     SELECT AST.ID  asset_id, asset_number, install_site_id
15728     FROM   OKL_ASSETS_B AST
15729     WHERE  AST.PARENT_OBJECT_CODE = 'LEASEQUOTE'
15730     AND    AST.PARENT_OBJECT_ID = cp_quote_id;
15731 
15732     -- Get Inv item and supplier
15733     CURSOR l_assetcomponent_csr(cp_asset_id IN NUMBER) IS
15734     SELECT inv_item_id, supplier_id
15735     FROM   okl_asset_components_b
15736     WHERE  asset_id = cp_asset_id
15737     AND    primary_component = 'Y';
15738 
15739         -- Get the quote and asset level cash flows for a sales quote
15740         CURSOR l_q_asset_cashflows_csr(cp_quote_id IN NUMBER) IS
15741         SELECT cfo.source_id ,  ast.asset_number, caf.sty_id,
15742            sum(nvl((cfl.amount * cfl.number_of_periods),0) + nvl(cfl.stub_amount,0)) taxable_basis
15743         FROM   OKL_ASSETS_B ast, okl_cash_flow_objects cfo, okl_cash_flows caf, okl_cash_flow_levels cfl
15744         WHERE  AST.PARENT_OBJECT_CODE = 'LEASEQUOTE'
15745         AND    AST.PARENT_OBJECT_ID = cp_quote_id
15746         AND    ast.id = cfo.source_id
15747         AND    cfo.oty_code = 'QUOTED_ASSET'
15748         AND    cfo.source_table = 'OKL_ASSETS_B'
15749         AND    cfo.id = caf.cfo_id
15750         AND    caf.cft_code = 'PAYMENT_SCHEDULE'
15751         AND    caf.sts_code IN ('CURRENT', 'WORK')
15752         AND    caf.id = cfl.caf_id
15753         GROUP BY cfo.source_id ,  ast.asset_number, caf.sty_id
15754     UNION
15755     SELECT cfo.source_id ,  null, caf.sty_id,
15756            sum(nvl((cfl.amount * cfl.number_of_periods),0) + nvl(cfl.stub_amount,0)) taxable_basis
15757         FROM   okl_cash_flow_objects cfo, okl_cash_flows caf, okl_cash_flow_levels cfl
15758         WHERE  cfo.oty_code = 'LEASE_QUOTE'
15759         AND    cfo.source_table = 'OKL_LEASE_QUOTES_B'
15760         AND    cfo.source_id = cp_quote_id
15761         AND    cfo.id = caf.cfo_id
15762         AND    caf.cft_code = 'PAYMENT_SCHEDULE'
15763         AND    caf.sts_code IN ('CURRENT', 'WORK')
15764         AND    caf.id = cfl.caf_id
15765         GROUP BY cfo.source_id ,  null, caf.sty_id;
15766 
15767         -- Get 'BILL_TO' identifiers for the quote party
15768         CURSOR l_billtosite_csr(cp_party_id IN NUMBER) IS
15769     SELECT
15770            b.site_use_id,
15771            c.party_site_id,
15772            c.party_id,
15773            c.location_id
15774     FROM   hz_cust_acct_sites_all a,
15775            hz_cust_site_uses_all  b,
15776            hz_party_sites      c,
15777            hz_parties d
15778     WHERE
15779            a.cust_acct_site_id = b.cust_acct_site_id
15780     AND    b.site_use_code     = 'BILL_TO'
15781     AND    d.party_id          = cp_party_id
15782     AND    a.party_site_id     = c.party_site_id
15783     AND    c.party_id          = d.party_id;
15784 
15785         -- Get 'SHIP_TO' identifiers for the quote party
15786         CURSOR l_shiptosite_csr(cp_party_id IN NUMBER) IS
15787     SELECT
15788            b.site_use_id,
15789            c.party_site_id,
15790            c.party_id,
15791            c.location_id
15792     FROM   hz_cust_acct_sites_all a,
15793            hz_cust_site_uses_all  b,
15794            hz_party_sites      c,
15795            hz_parties d
15796     WHERE
15797            a.cust_acct_site_id = b.cust_acct_site_id
15798     AND    b.site_use_code     = 'SHIP_TO'
15799     AND    d.party_id          = cp_party_id
15800     AND    a.party_site_id     = c.party_site_id
15801     AND    c.party_id          = d.party_id;
15802 
15803     -- Check if tax basis override formula exists
15804         CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
15805         SELECT fma_id
15806         FROM   okl_tax_basis_override
15807         WHERE  try_id = cp_try_id
15808         AND    org_id = MO_GLOBAL.get_current_org_id;
15809 
15810         -- GET FORMULA NAME
15811     CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
15812     SELECT name
15813     FROM   Okl_formulae_b
15814     WHERE  id = cp_fma_id;
15815 
15816     -- Get the AR customer transaction type used by OKL
15817     CURSOR l_racusttrxtypes_csr IS
15818     SELECT cust_trx_type_id
15819         FROM   ra_cust_trx_types_all
15820         WHERE  name = 'Invoice-OKL';
15821 
15822     -- Get currency attributes
15823     CURSOR l_fndcurrency_csr(cp_currency_code IN VARCHAR2) IS
15824     SELECT precision, minimum_accountable_unit
15825     FROM   fnd_currencies
15826     WHERE  currency_code = cp_currency_code
15827         AND    enabled_flag = 'Y'
15828     AND    NVL(start_date_active, sysdate) <= sysdate
15829     AND    NVL(end_date_active, sysdate) >= sysdate;
15830 
15831     -- Get the primary pay vendor location for the vendor
15832     CURSOR l_povendorsites_csr(cp_vendor_id IN NUMBER) IS
15833     SELECT vendor_site_id
15834     FROM   po_vendor_sites
15835     WHERE  vendor_id = cp_vendor_id
15836     AND    primary_pay_site_flag = 'Y';
15837 
15838     -- Cursor to get the corresponding hz_location id for the install location id
15839     CURSOR l_get_location_id(cp_party_site_id  IN NUMBER) IS
15840     -- SECHAWLA 12-DEC-05 4690074
15841     SELECT hzp.location_id
15842     FROM   HZ_PARTY_SITES hzp, hz_party_site_uses hsu
15843     WHERE  hsu.PARTY_SITE_USE_ID = cp_party_site_id
15844     AND    hzp.party_Site_id = hsu.party_site_id;
15845 
15846     -- Cursor to get the ship_to_site_use_id corresponding to the install_location_id of the asset
15847     CURSOR l_get_shiptositeid(cp_cust_acct_id IN NUMBER, cp_inst_loc_id IN NUMBER,cp_loc_id IN NUMBER) IS
15848     SELECT b.site_use_id, c.party_site_id, c.party_id, c.location_id
15849     FROM   hz_cust_acct_sites_all a,
15850            hz_cust_site_uses_all  b,
15851            hz_party_sites      c
15852     WHERE  a.cust_acct_site_id = b.cust_acct_site_id
15853     AND    b.site_use_code     = 'SHIP_TO'
15854     AND    a.party_site_id     = c.party_site_id
15855     AND    a.cust_account_id   = cp_cust_acct_id
15856     AND    a.org_id            = MO_GLOBAL.get_current_org_id
15857     AND    c.party_site_id     = cp_inst_loc_id
15858     AND    c.location_id       = cp_loc_id;
15859 
15860     TYPE asset_level_det_rec_type IS RECORD
15861         (asset_id                                               NUMBER,
15862          asset_number                                   VARCHAR2(150),
15863          vendor_site_id                                 NUMBER,
15864          inv_item_id                                    NUMBER,
15865          ship_to_site_use_id                    NUMBER,
15866          asset_pymnt_exist                              VARCHAR2(1));
15867 
15868     TYPE  prev_tx_src_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15869     TYPE  prev_tx_trx_det_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
15870     TYPE  quoteassets_tbl_type IS TABLE OF l_quoteassets_csr%ROWTYPE INDEX BY BINARY_INTEGER;
15871         TYPE asset_level_det_tbl_type IS TABLE OF asset_level_det_rec_type INDEX BY BINARY_INTEGER;
15872         TYPE q_asset_cashflows_tbl_type IS TABLE OF l_q_asset_cashflows_csr%ROWTYPE INDEX BY BINARY_INTEGER;
15873 
15874         l_q_asset_cashflows_tbl                 q_asset_cashflows_tbl_type;
15875         l_sq_asset_level_det_tbl            asset_level_det_tbl_type;
15876     l_quoteassets_tbl                           quoteassets_tbl_type;
15877     l_prevtaxsources_tbl                        prev_tx_src_tbl_type;
15878     l_prevtaxtrxdet_tbl                         prev_tx_trx_det_tbl_type;
15879     lp_tax_src_params_rec           tax_src_params_rec_type;
15880 
15881     lx_line_params_tbl              line_params_tbl_type;
15882     lx_tax_sources_tbl                  tax_sources_tbl_type;
15883     lp_hdr_params_rec               hdr_params_rec_type;
15884 
15885     l_sq_trx_type_id                            NUMBER;
15886     l_parent_object_code                        VARCHAR2(30);
15887         l_parent_object_id                              NUMBER;
15888     l_legal_entity_id               NUMBER;
15889         l_inv_item_id                                   NUMBER;
15890         l_supplier_id                                   NUMBER;
15891 
15892     l_reported_yn                                       VARCHAR2(1);
15893     l_ledger_id                     NUMBER;
15894     l_taxation_country              VARCHAR2(2);
15895 
15896         l_k_start_date                                  DATE;
15897         l_sq_fin_prod_id                                NUMBER;
15898         l_sq_int_disclosed                              VARCHAR2(30);
15899         l_sq_transfer_of_title                  VARCHAR2(30);
15900     l_sq_sale_lease_back                        VARCHAR2(30);
15901     l_sq_purchase_of_lease                      VARCHAR2(30);
15902     l_sq_usage_of_equipment                     VARCHAR2(450);
15903     l_sq_age_of_equipment                       NUMBER;
15904 
15905         l_inv_item_org_id                               NUMBER;
15906 
15907     l_fetch_size                    NUMBER := 10000;
15908     i                                                           NUMBER;
15909     l_fma_id                                            NUMBER;
15910     l_formula_name                                      VARCHAR2(150);
15911 
15912     l_cust_acct_id                                      NUMBER;
15913     l_bill_to_siteuseid                 NUMBER;
15914     l_bill_to_party_site_id         NUMBER;
15915     l_bill_to_party_id              NUMBER;
15916     l_bill_to_location_id           NUMBER;
15917     l_currency_code                                     VARCHAR2(15);
15918     l_precision                         NUMBER;
15919     l_minimum_accountable_unit          NUMBER;
15920     l_cust_trx_type_id                          NUMBER;
15921     l_party_id                                          NUMBER;
15922     l_vendor_site_id                            NUMBER;
15923     l_loc_id                                            NUMBER;
15924     l_ship_to_siteuseid                         NUMBER;
15925     l_ship_to_party_site_id         NUMBER;
15926     l_ship_to_party_id              NUMBER;
15927     l_ship_to_location_id           NUMBER;
15928     l_org_id                        NUMBER;
15929     l_start_date                    DATE;
15930     l_currency_conversion_type      VARCHAR2(30);
15931     l_currency_conversion_rate      NUMBER;
15932     l_currency_conversion_date      DATE;
15933     l_line_intended_use             VARCHAR2(240);
15934     l_deal_type                     VARCHAR2(30);
15935 
15936     tax_call_cnt                                        NUMBER;
15937     Q_pymnt_exist                                       VARCHAR2(1);
15938     ind                                                         NUMBER;
15939 
15940   BEGIN
15941 
15942     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15943         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax','Begin(+)');
15944     END IF;
15945 
15946     --Print Input Variables
15947     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15948          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15949               'p_init_msg_list :'||p_init_msg_list);
15950          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15951               'p_source_trx_id :'||p_source_trx_id);
15952          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15953               'p_source_trx_name :'||p_source_trx_name);
15954          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15955               'p_source_table :'||p_source_table);
15956     END IF;
15957 
15958     x_return_status := OKL_API.G_RET_STS_SUCCESS;
15959 
15960     -- Validate the source trx id
15961     OPEN  l_leasequotes_csr(p_source_trx_id);
15962     FETCH l_leasequotes_csr INTO  l_k_start_date, l_sq_fin_prod_id, l_sq_int_disclosed,
15963               l_sq_transfer_of_title, l_sq_sale_lease_back, l_sq_purchase_of_lease, l_sq_usage_of_equipment,
15964                   l_sq_age_of_equipment, l_parent_object_code, l_parent_object_id, l_legal_entity_id;
15965 
15966     IF l_leasequotes_csr%NOTFOUND THEN
15967       -- Source trx id is invalid
15968       OKC_API.set_message( p_app_name      => 'OKC',
15969                            p_msg_name      => G_INVALID_VALUE,
15970                            p_token1        => G_COL_NAME_TOKEN,
15971                            p_token1_value  => 'SOURCE_TRX_ID');
15972       RAISE OKL_API.G_EXCEPTION_ERROR;
15973     END IF;
15974     CLOSE l_leasequotes_csr;
15975 
15976     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
15977           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15978             'l_k_start_date '||l_k_start_date );
15979       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15980             'l_sq_fin_prod_id '||l_sq_fin_prod_id );
15981       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15982             'l_sq_int_disclosed '||l_sq_int_disclosed );
15983       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15984             'l_sq_transfer_of_title '||l_sq_transfer_of_title );
15985       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15986             'l_sq_sale_lease_back '||l_sq_sale_lease_back );
15987       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15988             'l_sq_purchase_of_lease '||l_sq_purchase_of_lease );
15989       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15990             'l_sq_usage_of_equipment '||l_sq_usage_of_equipment );
15991       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15992             'l_sq_age_of_equipment '||l_sq_age_of_equipment );
15993       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15994             'l_parent_object_code '||l_parent_object_code );
15995       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
15996             'l_parent_object_id '||l_parent_object_id );
15997     END IF;
15998 
15999         -- Check if Quoting tax lines already exist for this quote
16000     OPEN  l_prevtaxsources_csr(p_source_trx_id);
16001         LOOP
16002           l_prevtaxsources_tbl.DELETE;
16003           FETCH l_prevtaxsources_csr BULK COLLECT INTO l_prevtaxsources_tbl LIMIT l_fetch_size;
16004       IF l_prevtaxsources_tbl.COUNT > 0 THEN
16005         i := 0;
16006         l_prevtaxtrxdet_tbl.DELETE;
16007 
16008         FOR k IN l_prevtaxsources_tbl.FIRST .. l_prevtaxsources_tbl.LAST LOOP
16009           -- Get the corresponding tax trx details
16010           FOR  l_prevtaxtrxdet_rec IN l_prevtaxtrxdet_csr(l_prevtaxsources_tbl(k)) LOOP
16011             i := i + 1;
16012             l_prevtaxtrxdet_tbl(i):= l_prevtaxtrxdet_rec.id;
16013 
16014           END LOOP;
16015         END LOOP;
16016 
16017         -- Delete from both the tables.
16018         BEGIN
16019           IF l_prevtaxtrxdet_tbl.COUNT > 0 THEN
16020             FORALL i IN l_prevtaxtrxdet_tbl.FIRST..l_prevtaxtrxdet_tbl.LAST
16021               DELETE FROM OKL_TAX_TRX_DETAILS WHERE id = l_prevtaxtrxdet_tbl(i);
16022 
16023           END IF;
16024         EXCEPTION
16025           WHEN OTHERS THEN
16026             IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
16027                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
16028                                 OKL_API.set_message( p_app_name      => 'OKL',
16029                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
16030                                      p_token1        => 'TABLE_NAME',
16031                                      p_token1_value  => 'OKL_TAX_TRX_DETAILS',
16032                                      p_token2        => 'ERROR_CODE',
16033                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
16034                                                                          p_token3        => 'ITERATION',
16035                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
16036                           END LOOP;
16037                           RAISE OKL_API.G_EXCEPTION_ERROR;
16038                         END IF;
16039         END;
16040 
16041         BEGIN
16042           FORALL i IN l_prevtaxsources_tbl.FIRST..l_prevtaxsources_tbl.LAST
16043             DELETE FROM OKL_TAX_SOURCES WHERE id = l_prevtaxsources_tbl(i);
16044         EXCEPTION
16045           WHEN OTHERS THEN
16046                 IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
16047                           FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
16048                                 OKL_API.set_message( p_app_name      => 'OKL',
16049                                      p_msg_name      => 'OKL_TX_TRX_DEL_ERR',
16050                                      p_token1        => 'TABLE_NAME',
16051                                      p_token1_value  => 'OKL_TAX_SOURCES',
16052                                      p_token2        => 'ERROR_CODE',
16053                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
16054                                                                          p_token3        => 'ITERATION',
16055                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
16056                           END LOOP;
16057                           RAISE OKL_API.G_EXCEPTION_ERROR;
16058                         END IF;
16059         END;
16060 
16061         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16062                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16063                                 'Deleted prev tax sources and lines for this sales quote ' );
16064         END IF;
16065 
16066       END IF;
16067       EXIT WHEN l_prevtaxsources_csr%NOTFOUND;
16068     END LOOP;
16069     CLOSE l_prevtaxsources_csr;
16070 
16071     -- Fetch the Ledger info
16072     l_ledger_id := okl_accounting_util.get_set_of_books_id;
16073     l_reported_yn := 'N';
16074 
16075     -- Fetch the Tax country
16076     l_taxation_country := get_default_taxation_country(x_return_status     => x_return_status,
16077                                                        x_msg_count         => x_msg_count,
16078                                                        x_msg_data          => x_msg_data,
16079                                                        p_legal_entity_id   => l_legal_entity_id);
16080         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16081       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16082     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16083       RAISE OKL_API.G_EXCEPTION_ERROR;
16084     END IF;
16085 
16086     -- Fetch 'Sales Quote' Trx type ID
16087     OPEN l_trxtypes_csr;
16088     FETCH l_trxtypes_csr INTO l_sq_trx_type_id;
16089     CLOSE l_trxtypes_csr;
16090 
16091     -- Check if taxable basis override applies to 'Sales Quote' transaction
16092     OPEN  l_txbasisoverride_csr(cp_try_id => l_sq_trx_type_id);
16093     FETCH l_txbasisoverride_csr INTO l_fma_id;
16094     CLOSE l_txbasisoverride_csr;
16095 
16096     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16097       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16098                 'Sales Quote Trx Type ID '||l_sq_trx_type_id );
16099       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16100                 'Formula ID '||l_fma_id );
16101     END IF;
16102 
16103     IF l_fma_id IS NOT NULL THEN
16104       OPEN  l_formulae_csr(l_fma_id);
16105       FETCH l_formulae_csr INTO l_formula_name;
16106       IF l_formulae_csr%NOTFOUND THEN
16107         OKC_API.set_message( p_app_name      => 'OKC',
16108                              p_msg_name      => G_INVALID_VALUE,
16109                              p_token1        => G_COL_NAME_TOKEN,
16110                              p_token1_value  => 'FMA_ID');
16111         RAISE OKL_API.G_EXCEPTION_ERROR;
16112           END IF;
16113           CLOSE l_formulae_csr;
16114 
16115       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16116                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16117                 'l_formula_name '||l_formula_name );
16118       END IF;
16119         END IF;
16120 
16121         -- Get the AR cust trx type ID
16122     OPEN  l_racusttrxtypes_csr;
16123     FETCH l_racusttrxtypes_csr INTO l_cust_trx_type_id;
16124     IF l_racusttrxtypes_csr%NOTFOUND THEN
16125       -- Cust trx type id is required
16126       OKC_API.set_message( p_app_name      => 'OKC',
16127                            p_msg_name      => G_REQUIRED_VALUE,
16128                            p_token1        => G_COL_NAME_TOKEN,
16129                            p_token1_value  => 'CUST_TRX_TYPE_ID');
16130       RAISE OKL_API.G_EXCEPTION_ERROR;
16131     END IF;
16132     CLOSE l_racusttrxtypes_csr;
16133 
16134     -- Fetch parent object values
16135         IF l_parent_object_code ='LEASEOPP' THEN
16136           OPEN  l_leaseopp_csr(p_source_trx_id);
16137           FETCH l_leaseopp_csr INTO l_currency_code, l_cust_acct_id, l_party_id,  -- l_cust_acct_id may be null
16138                                 l_org_id, l_start_date, l_currency_conversion_type,
16139                                 l_currency_conversion_rate, l_currency_conversion_date,
16140                                 l_line_intended_use,l_deal_type;
16141           IF l_leaseopp_csr%NOTFOUND THEN
16142             OKC_API.set_message( p_app_name      => 'OKC',
16143                              p_msg_name      => G_REQUIRED_VALUE,
16144                              p_token1        => G_COL_NAME_TOKEN,
16145                              p_token1_value  => 'CURRENCY_CODE');
16146         RAISE OKL_API.G_EXCEPTION_ERROR;
16147       END IF;
16148           CLOSE l_leaseopp_csr;
16149         ELSIF l_parent_object_code ='LEASEAPP' THEN
16150           OPEN  l_leaseapp_csr(p_source_trx_id);
16151           FETCH l_leaseapp_csr INTO l_currency_code, l_cust_acct_id, l_party_id, -- l_cust_acct_id may be null
16152                                 l_org_id, l_start_date, l_currency_conversion_type,
16153                                 l_currency_conversion_rate, l_currency_conversion_date,
16154                                 l_line_intended_use, l_deal_type;
16155           IF l_leaseapp_csr%NOTFOUND THEN
16156             OKC_API.set_message( p_app_name      => 'OKC',
16157                              p_msg_name      => G_REQUIRED_VALUE,
16158                              p_token1        => G_COL_NAME_TOKEN,
16159                              p_token1_value  => 'CURRENCY_CODE');
16160         RAISE OKL_API.G_EXCEPTION_ERROR;
16161       END IF;
16162           CLOSE l_leaseapp_csr;
16163         END IF;
16164 
16165         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16166           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16167             'l_currency_code '||l_currency_code );
16168       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16169             'l_cust_acct_id '||l_cust_acct_id );
16170       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16171             'l_party_id '||l_party_id );
16172     END IF;
16173 
16174         -- Get Bill to Site Use ID from TCA
16175         -- This cursor may return more than one Bill To sites for a party
16176         -- Select the first bill to returned by the cursor
16177         -- Bill To is not captured on a sales quote. So we get it from TCA
16178         -- There may not be any Bill To site defined for a party
16179     OPEN  l_billtosite_csr(l_party_id);
16180         FETCH l_billtosite_csr INTO l_bill_to_siteuseid, l_bill_to_party_site_id,
16181                                 l_bill_to_party_id, l_bill_to_location_id;
16182         IF l_billtosite_csr%NOTFOUND THEN
16183           OKC_API.set_message( p_app_name      => 'OKL',
16184                            p_msg_name      => 'OKL_TX_NO_SQ_BILL_TO');
16185       RAISE OKL_API.G_EXCEPTION_ERROR;
16186         END IF;
16187         CLOSE l_billtosite_csr ;
16188 
16189     -- Fetch precision, minimum accountable unit
16190     OPEN  l_fndcurrency_csr(l_currency_code);
16191     FETCH l_fndcurrency_csr INTO l_precision, l_minimum_accountable_unit;
16192     IF l_fndcurrency_csr%NOTFOUND THEN
16193       -- Currency code is invalid
16194       OKC_API.set_message( p_app_name      => 'OKC',
16195                            p_msg_name      => G_INVALID_VALUE,
16196                            p_token1        => G_COL_NAME_TOKEN,
16197                            p_token1_value  => 'CURRENCY_CODE');
16198       RAISE OKL_API.G_EXCEPTION_ERROR;
16199     END IF;
16200     CLOSE l_fndcurrency_csr;
16201 
16202     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16203           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16204             'l_bill_to_siteuseid '||l_bill_to_siteuseid );
16205       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16206             'l_precision '||l_precision );
16207       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16208             'l_minimum_accountable_unit '||l_minimum_accountable_unit );
16209     END IF;
16210 
16211     -- Sales Quoting is not capturing Purchase Option as of now.
16212     -- So this determinant will be null for Sales Quote
16213 
16214     -- Get all the assets belonging to a quote
16215     -------------- Populate asset level TBC Determinants ---------------
16216     i := 0;
16217 
16218     OPEN l_quoteassets_csr(p_source_trx_id);
16219     LOOP
16220       l_quoteassets_tbl.DELETE;
16221       FETCH l_quoteassets_csr BULK COLLECT INTO l_quoteassets_tbl LIMIT l_fetch_size;
16222 
16223       IF l_quoteassets_tbl.COUNT > 0 THEN
16224         FOR K IN l_quoteassets_tbl.FIRST..l_quoteassets_tbl.LAST LOOP
16225 
16226           OPEN  l_assetcomponent_csr(l_quoteassets_tbl(k).asset_id);
16227                   FETCH l_assetcomponent_csr INTO l_inv_item_id, l_supplier_id;
16228                   CLOSE l_assetcomponent_csr;
16229 
16230                   IF l_supplier_id IS NOT NULL THEN
16231                         OPEN   l_povendorsites_csr(l_supplier_id);
16232                 FETCH  l_povendorsites_csr INTO l_vendor_site_id; -- will be null if none of the sites are checked as primary
16233                 CLOSE  l_povendorsites_csr;
16234           END IF;
16235 
16236           -- get the location ID
16237                   OPEN  l_get_location_id(l_quoteassets_tbl(k).install_site_id);
16238                   FETCH l_get_location_id INTO l_loc_id;
16239                   CLOSE l_get_location_id;
16240 
16241                   IF l_loc_id IS NULL THEN
16242             -- Install Location id is required
16243                 OKL_API.set_message( p_app_name      => 'OKC',
16244                                  p_msg_name      => G_REQUIRED_VALUE,
16245                                  p_token1        => G_COL_NAME_TOKEN,
16246                                  p_token1_value  => 'INSTALL_LOCATION_ID');
16247                 RAISE OKL_API.G_EXCEPTION_ERROR;
16248           END IF;
16249 
16250               IF l_cust_acct_id IS NOT NULL THEN
16251                 -- Get the ship to site use id of the asset
16252                 OPEN  l_get_shiptositeid(l_cust_acct_id,l_quoteassets_tbl(k).install_site_id,l_loc_id);
16253                 FETCH l_get_shiptositeid INTO l_ship_to_siteuseid, l_ship_to_party_site_id,
16254                                           l_ship_to_party_id, l_ship_to_location_id;
16255                 CLOSE l_get_shiptositeid;
16256           ELSE
16257                 OPEN  l_shiptosite_csr(l_party_id);
16258                 FETCH l_shiptosite_csr INTO l_ship_to_siteuseid, l_ship_to_party_site_id,
16259                                         l_ship_to_party_id, l_ship_to_location_id;
16260                 CLOSE l_shiptosite_csr;
16261           END IF;
16262 
16263           l_sq_asset_level_det_tbl(i).asset_id            := l_quoteassets_tbl(k).asset_id;
16264           l_sq_asset_level_det_tbl(i).asset_number        := l_quoteassets_tbl(k).asset_number;
16265           l_sq_asset_level_det_tbl(i).vendor_site_id      := l_vendor_site_id;
16266           l_sq_asset_level_det_tbl(i).inv_item_id         := l_inv_item_id;
16267           l_sq_asset_level_det_tbl(i).ship_to_site_use_id := l_ship_to_siteuseid;
16268 
16269           l_sq_asset_level_det_tbl(i).asset_pymnt_exist := 'N';
16270 
16271           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16272                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16273                                 'i '||i );
16274             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16275                                 'asset_id '||l_sq_asset_level_det_tbl(i).asset_id );
16276             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16277                                 'asset_number '||l_sq_asset_level_det_tbl(i).asset_number );
16278             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16279                                 'vendor_site_id '||l_sq_asset_level_det_tbl(i).vendor_site_id );
16280             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16281                                 'inv_item_id '||l_sq_asset_level_det_tbl(i).inv_item_id );
16282             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16283                                 'ship_to_site_use_id '||l_sq_asset_level_det_tbl(i).ship_to_site_use_id );
16284             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16285                                 'asset_pymnt_exist '||l_sq_asset_level_det_tbl(i).asset_pymnt_exist );
16286           END IF;
16287 
16288                   i := i+1;
16289         END LOOP;
16290       END IF;
16291           EXIT WHEN l_quoteassets_csr%NOTFOUND;
16292     END LOOP;
16293     CLOSE l_quoteassets_csr;
16294 
16295     -- Populate tax info
16296     Q_pymnt_exist := 'N';
16297 
16298     i := 1;
16299     OPEN l_q_asset_cashflows_csr(p_source_trx_id);
16300     LOOP
16301       l_q_asset_cashflows_tbl.DELETE;
16302       FETCH l_q_asset_cashflows_csr BULK COLLECT INTO l_q_asset_cashflows_tbl LIMIT l_fetch_size;
16303 
16304       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16305                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16306                 'l_q_asset_cashflows_tbl.count '||l_q_asset_cashflows_tbl.count||' i = '||i );
16307       END IF;
16308 
16309           IF l_q_asset_cashflows_tbl.count = 0 AND i = 1 THEN
16310                 -- No payments exist
16311         -- Tax call will still be made at the Q hdr and each asset level
16312 
16313                 tax_call_cnt := 1;
16314 
16315                 -- Quote level call begin
16316 
16317                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16318                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16319                   'tax_call_cnt '||tax_call_cnt );
16320         END IF;
16321 
16322         -- Populate tax sources record -- start
16323         lp_tax_src_params_rec.kle_id       := null;
16324         lp_tax_src_params_rec.asset_number := null;
16325         lp_tax_src_params_rec.line_name    := null;
16326 
16327         lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_ship_to_siteuseid;
16328         lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16329         lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16330         lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16331 
16332         lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16333         lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16334         lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16335         lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16336 
16337         lp_tax_src_params_rec.inventory_item_id             := null;
16338         lp_tax_src_params_rec.sty_id                        := null;
16339         lp_tax_src_params_rec.khr_id                        := null;
16340         lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16341         lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16342         lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16343         lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16344         lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16345         lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16346         lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16347         lp_tax_src_params_rec.trx_date                      := l_start_date;
16348         lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16349         lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16350         lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16351         lp_tax_src_params_rec.org_id                        := l_org_id;
16352         lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16353         lp_tax_src_params_rec.line_amt                      := 0;
16354         lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16355 
16356         lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16357         lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16358         lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16359         lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16360         lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16361         lp_tax_src_params_rec.adjusted_doc_number           := null;
16362             lp_tax_src_params_rec.adjusted_doc_date             := null;
16363         lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16364         lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16365 
16366         lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16367         lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16368         lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16369         -- Populate tax sources record -- end
16370 
16371         populate_tax_info(
16372                         p_api_version                  => p_api_version,
16373                         p_init_msg_list                => OKC_API.G_FALSE,
16374                         x_return_status                => x_return_status,
16375                         x_msg_count                    => x_msg_count,
16376                         x_msg_data                     => x_msg_data,
16377                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16378                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16379                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16380                         p_title_trnsfr_code                        => null,
16381                         p_sale_lease_back_code             => null,
16382                         p_lease_purchased_code             => null,
16383                         p_equip_usage_code                         => null,
16384                         p_vendor_site_id                           => null,
16385                         p_age_of_equip                             => null,
16386                 p_source_trx_name              => p_source_trx_name,
16387                 p_cust_trx_type_id             => l_cust_trx_type_id,
16388                 p_book_class_code              => l_deal_type,
16389                         p_tax_call_cnt                             => tax_call_cnt,
16390                         p_fma_id                                           => l_fma_id,
16391                         p_formula_name                             => l_formula_name,
16392                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16393                         p_precision                                        => l_precision,
16394                         p_sales_quote_id                           => p_source_trx_id,
16395                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16396                 p_ledger_id                    => l_ledger_id,
16397                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16398                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16399                 p_quote_flag                   => 'Y',
16400                 p_rounding_ship_to_party_id    => null,
16401                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16402                 p_line_amt_includes_tax_flag   => 'N',
16403                 p_term_quote_type_code         => null,
16404                 p_term_quote_reason_code       => null,
16405                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16406                 px_line_params_tbl             => lx_line_params_tbl );
16407 
16408         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16409           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16410         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16411           RAISE OKL_API.G_EXCEPTION_ERROR;
16412         END IF;
16413 
16414                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16415                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16416                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16417         END IF;
16418             -- quote level call end
16419 
16420                 tax_call_cnt := tax_call_cnt + 1;
16421 
16422                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16423                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16424                   'tax_call_cnt '||tax_call_cnt );
16425         END IF;
16426 
16427             -- Asset level call begin
16428                 IF l_sq_asset_level_det_tbl.COUNT > 0 THEN
16429 
16430                   FOR asset_cnt IN l_sq_asset_level_det_tbl.FIRST .. l_sq_asset_level_det_tbl.LAST LOOP
16431 
16432             -- Populate tax sources record -- start
16433             lp_tax_src_params_rec.kle_id       := null;
16434             lp_tax_src_params_rec.asset_number := l_sq_asset_level_det_tbl(asset_cnt).asset_number;
16435             lp_tax_src_params_rec.line_name    := l_sq_asset_level_det_tbl(asset_cnt).asset_number;
16436 
16437             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;
16438             lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16439             lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16440             lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16441 
16442             lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16443             lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16444             lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16445             lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16446 
16447             lp_tax_src_params_rec.inventory_item_id             := l_sq_asset_level_det_tbl(asset_cnt).inv_item_id;
16448             lp_tax_src_params_rec.sty_id                        := null;
16449             lp_tax_src_params_rec.khr_id                        := null;
16450             lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16451             lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16452             lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16453             lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16454             lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16455             lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16456             lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16457             lp_tax_src_params_rec.trx_date                      := l_start_date;
16458             lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16459             lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16460             lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16461             lp_tax_src_params_rec.org_id                        := l_org_id;
16462             lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16463             lp_tax_src_params_rec.line_amt                      := 0;
16464             lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16465 
16466             lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16467             lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16468             lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16469             lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16470             lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16471             lp_tax_src_params_rec.adjusted_doc_number           := null;
16472                 lp_tax_src_params_rec.adjusted_doc_date             := null;
16473             lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16474             lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16475 
16476             lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16477             lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16478             lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16479             -- Populate tax sources record -- end
16480 
16481                     -- asset level call begin
16482             populate_tax_info(
16483                         p_api_version                  => p_api_version,
16484                         p_init_msg_list                => OKC_API.G_FALSE,
16485                         x_return_status                => x_return_status,
16486                         x_msg_count                    => x_msg_count,
16487                         x_msg_data                     => x_msg_data,
16488                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16489                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16490                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16491                         p_title_trnsfr_code                        => l_sq_transfer_of_title,
16492                         p_sale_lease_back_code             => l_sq_sale_lease_back,
16493                         p_lease_purchased_code             => l_sq_purchase_of_lease,
16494                         p_equip_usage_code                         => l_sq_usage_of_equipment,
16495                         p_vendor_site_id                           => l_sq_asset_level_det_tbl(asset_cnt).vendor_site_id,
16496                         p_age_of_equip                             => l_sq_age_of_equipment,
16497                 p_source_trx_name              => p_source_trx_name,
16498                 p_cust_trx_type_id             => l_cust_trx_type_id,
16499                 p_book_class_code              => l_deal_type,
16500                         p_tax_call_cnt                             => tax_call_cnt,
16501                         p_fma_id                                           => l_fma_id,
16502                         p_formula_name                             => l_formula_name,
16503                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16504                         p_precision                                        => l_precision,
16505                         p_sales_quote_id                           => p_source_trx_id,
16506                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16507                 p_ledger_id                    => l_ledger_id,
16508                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16509                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16510                 p_quote_flag                   => 'Y',
16511                 p_rounding_ship_to_party_id    => null,
16512                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16513                 p_line_amt_includes_tax_flag   => 'N',
16514                 p_term_quote_type_code         => null,
16515                 p_term_quote_reason_code       => null,
16516                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16517                 px_line_params_tbl             => lx_line_params_tbl );
16518 
16519             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16520               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16521                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16522               RAISE OKL_API.G_EXCEPTION_ERROR;
16523                 END IF;
16524                         -- asset level call end
16525 
16526                         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16527                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16528                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16529                     END IF;
16530                         tax_call_cnt := tax_call_cnt + 1;
16531                   END LOOP;
16532                 END IF;
16533                 -- Asset level call end
16534                 -- No payments exist - end
16535 
16536             ELSIF l_q_asset_cashflows_tbl.COUNT > 0 THEN
16537                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16538                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16539                         'payments exist ');
16540           END IF;
16541 
16542           FOR K IN l_q_asset_cashflows_tbl.FIRST..l_q_asset_cashflows_tbl.LAST LOOP
16543 
16544                         tax_call_cnt := i;
16545 
16546                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16547                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16548                                 'tax_call_cnt '||tax_call_cnt);
16549                 END IF;
16550 
16551                 IF l_q_asset_cashflows_tbl(k).asset_number IS NULL THEN
16552               -- Q level payment
16553 
16554                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16555                             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16556                                         'Quote level payment ');
16557               END IF;
16558 
16559               -- Populate tax sources record -- start
16560               lp_tax_src_params_rec.kle_id       := null;
16561               lp_tax_src_params_rec.asset_number := null;
16562               lp_tax_src_params_rec.line_name    := null;
16563 
16564               lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_ship_to_siteuseid;
16565               lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16566               lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16567               lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16568 
16569               lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16570               lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16571               lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16572               lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16573 
16574               lp_tax_src_params_rec.inventory_item_id             := null;
16575               lp_tax_src_params_rec.sty_id                        := l_q_asset_cashflows_tbl(k).sty_id;
16576               lp_tax_src_params_rec.khr_id                        := null;
16577               lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16578               lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16579               lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16580               lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16581               lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16582               lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16583               lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16584               lp_tax_src_params_rec.trx_date                      := l_start_date;
16585               lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16586               lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16587               lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16588               lp_tax_src_params_rec.org_id                        := l_org_id;
16589               lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16590               lp_tax_src_params_rec.line_amt                      := l_q_asset_cashflows_tbl(k).taxable_basis;
16591               lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16592 
16593               lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16594               lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16595               lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16596               lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16597               lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16598               lp_tax_src_params_rec.adjusted_doc_number           := null;
16599                   lp_tax_src_params_rec.adjusted_doc_date             := null;
16600               lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16601               lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16602 
16603               lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16604               lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16605               lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16606               -- Populate tax sources record -- end
16607 
16608               populate_tax_info(
16609                         p_api_version                  => p_api_version,
16610                         p_init_msg_list                => OKC_API.G_FALSE,
16611                         x_return_status                => x_return_status,
16612                         x_msg_count                    => x_msg_count,
16613                         x_msg_data                     => x_msg_data,
16614                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16615                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16616                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16617                         p_title_trnsfr_code                        => null,
16618                         p_sale_lease_back_code             => null,
16619                         p_lease_purchased_code             => null,
16620                         p_equip_usage_code                         => null,
16621                         p_vendor_site_id                           => null,
16622                         p_age_of_equip                             => null,
16623                 p_source_trx_name              => p_source_trx_name,
16624                 p_cust_trx_type_id             => l_cust_trx_type_id,
16625                 p_book_class_code              => l_deal_type,
16626                         p_tax_call_cnt                             => tax_call_cnt,
16627                         p_fma_id                                           => l_fma_id,
16628                         p_formula_name                             => l_formula_name,
16629                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16630                         p_precision                                        => l_precision,
16631                         p_sales_quote_id                           => p_source_trx_id,
16632                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16633                 p_ledger_id                    => l_ledger_id,
16634                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16635                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16636                 p_quote_flag                   => 'Y',
16637                 p_rounding_ship_to_party_id    => null,
16638                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16639                 p_line_amt_includes_tax_flag   => 'N',
16640                 p_term_quote_type_code         => null,
16641                 p_term_quote_reason_code       => null,
16642                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16643                 px_line_params_tbl             => lx_line_params_tbl );
16644 
16645               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16646                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16647                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16648                 RAISE OKL_API.G_EXCEPTION_ERROR;
16649                   END IF;
16650 
16651                           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16652                                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16653                                         'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16654                       END IF;
16655 
16656                   Q_pymnt_exist := 'Y';
16657 
16658                 ELSE  -- asset line level payment
16659                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16660                              FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16661                                         'Asset level payment ');
16662               END IF;
16663 
16664                   IF l_sq_asset_level_det_tbl.count > 0 THEN
16665                         ind := l_sq_asset_level_det_tbl.FIRST;
16666                         LOOP
16667                           IF l_sq_asset_level_det_tbl(ind).asset_number = l_q_asset_cashflows_tbl(k).asset_number THEN
16668                             l_sq_asset_level_det_tbl(ind).asset_pymnt_exist := 'Y';
16669 
16670                             -- asset level call begin
16671                     -- Populate tax sources record -- start
16672                     lp_tax_src_params_rec.kle_id       := null;
16673                     lp_tax_src_params_rec.asset_number := l_sq_asset_level_det_tbl(ind).asset_number;
16674                     lp_tax_src_params_rec.line_name    := l_sq_asset_level_det_tbl(ind).asset_number;
16675 
16676                     lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_sq_asset_level_det_tbl(ind).ship_to_site_use_id;
16677                     lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16678                     lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16679                     lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16680 
16681                     lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16682                     lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16683                     lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16684                     lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16685 
16686                     lp_tax_src_params_rec.inventory_item_id             := l_sq_asset_level_det_tbl(ind).inv_item_id;
16687                     lp_tax_src_params_rec.sty_id                        := l_q_asset_cashflows_tbl(k).sty_id;
16688                     lp_tax_src_params_rec.khr_id                        := null;
16689                     lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16690                     lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16691                     lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16692                     lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16693                     lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16694                     lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16695                     lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16696                     lp_tax_src_params_rec.trx_date                      := l_start_date;
16697                     lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16698                     lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16699                     lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16700                     lp_tax_src_params_rec.org_id                        := l_org_id;
16701                     lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16702                     lp_tax_src_params_rec.line_amt                      := l_q_asset_cashflows_tbl(k).taxable_basis;
16703                     lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16704 
16705                     lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16706                     lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16707                     lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16708                     lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16709                     lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16710                     lp_tax_src_params_rec.adjusted_doc_number           := null;
16711                         lp_tax_src_params_rec.adjusted_doc_date             := null;
16712                     lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16713                     lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16714 
16715                     lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16716                     lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16717                     lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16718                     -- Populate tax sources record -- end
16719 
16720                             -- asset level call begin
16721                     populate_tax_info(
16722                                      p_api_version                  => p_api_version,
16723                                      p_init_msg_list                => OKC_API.G_FALSE,
16724                                      x_return_status                => x_return_status,
16725                                      x_msg_count                    => x_msg_count,
16726                                      x_msg_data                     => x_msg_data,
16727                                      p_prch_opt_det                                 => null,  -- purchase option is not captured on Sales Quote
16728                                              p_fin_prod_id_det                      => l_sq_fin_prod_id,
16729                                              p_int_disclosed_det                    => l_sq_int_disclosed,
16730                                      p_title_trnsfr_code                    => l_sq_transfer_of_title,
16731                                      p_sale_lease_back_code                 => l_sq_sale_lease_back,
16732                                      p_lease_purchased_code                 => l_sq_purchase_of_lease,
16733                                      p_equip_usage_code                     => l_sq_usage_of_equipment,
16734                                      p_vendor_site_id                       => l_sq_asset_level_det_tbl(ind).vendor_site_id,
16735                                      p_age_of_equip                                 => l_sq_age_of_equipment,
16736                              p_source_trx_name              => p_source_trx_name,
16737                              p_cust_trx_type_id             => l_cust_trx_type_id,
16738                              p_book_class_code              => l_deal_type,
16739                                      p_tax_call_cnt                         => tax_call_cnt,
16740                                      p_fma_id                                       => l_fma_id,
16741                                      p_formula_name                                 => l_formula_name,
16742                                      p_minimum_accountable_unit     => l_minimum_accountable_unit,
16743                                      p_precision                                        => l_precision,
16744                                      p_sales_quote_id                       => p_source_trx_id,
16745                              p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16746                              p_ledger_id                    => l_ledger_id,
16747                              p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16748                              p_tax_src_params_rec           => lp_tax_src_params_rec,
16749                              p_quote_flag                   => 'Y',
16750                              p_rounding_ship_to_party_id    => null,
16751                              p_rounding_bill_to_party_id    => l_bill_to_party_id,
16752                              p_line_amt_includes_tax_flag   => 'N',
16753                              p_term_quote_type_code         => null,
16754                              p_term_quote_reason_code       => null,
16755                              px_tax_sources_tbl                     => lx_tax_sources_tbl,
16756                              px_line_params_tbl             => lx_line_params_tbl );
16757 
16758                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16759                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16760                                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16761                       RAISE OKL_API.G_EXCEPTION_ERROR;
16762                                 END IF;
16763 
16764                                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16765                                           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16766                                                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16767                                         END IF;
16768                                     -- asset level call end
16769                           EXIT;
16770                     END IF;
16771                     EXIT WHEN (ind = l_sq_asset_level_det_tbl.LAST);
16772                 ind := l_sq_asset_level_det_tbl.NEXT(ind);
16773                   END LOOP;
16774                 END IF;
16775           END IF;
16776                   i := i + 1;
16777         END LOOP;
16778       END IF;
16779       EXIT WHEN l_q_asset_cashflows_csr%NOTFOUND;
16780     END LOOP;
16781     CLOSE l_q_asset_cashflows_csr;
16782 
16783     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16784             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16785                 'i '||i);
16786     END IF;
16787 
16788     IF i > 1 THEN -- some payments exist
16789       tax_call_cnt := i; -- pick the last index
16790 
16791       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16792             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16793             'some payments exist, tax_call_cnt= '||tax_call_cnt);
16794       END IF;
16795 
16796       IF Q_pymnt_exist = 'N' THEN -- Q level payment does not exist
16797             -- Quote level call begin
16798 
16799             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16800               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16801                 'Q level payment does not exist ');
16802         END IF;
16803 
16804         -- Populate tax sources record -- start
16805         lp_tax_src_params_rec.kle_id       := null;
16806         lp_tax_src_params_rec.asset_number := null;
16807         lp_tax_src_params_rec.line_name    := null;
16808 
16809         lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_ship_to_siteuseid;
16810         lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16811         lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16812         lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16813 
16814         lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16815         lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16816         lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16817         lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16818 
16819         lp_tax_src_params_rec.inventory_item_id             := null;
16820         lp_tax_src_params_rec.sty_id                        := null;
16821         lp_tax_src_params_rec.khr_id                        := null;
16822         lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16823         lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16824         lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16825         lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16826         lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16827         lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16828         lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16829         lp_tax_src_params_rec.trx_date                      := l_start_date;
16830         lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16831         lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16832         lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16833         lp_tax_src_params_rec.org_id                        := l_org_id;
16834         lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16835         lp_tax_src_params_rec.line_amt                      := 0;
16836         lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16837 
16838         lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16839         lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16840         lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16841         lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16842         lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16843         lp_tax_src_params_rec.adjusted_doc_number           := null;
16844             lp_tax_src_params_rec.adjusted_doc_date             := null;
16845         lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16846         lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16847 
16848         lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16849         lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16850         lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16851         -- Populate tax sources record -- end
16852 
16853         populate_tax_info(
16854                         p_api_version                  => p_api_version,
16855                         p_init_msg_list                => OKC_API.G_FALSE,
16856                         x_return_status                => x_return_status,
16857                         x_msg_count                    => x_msg_count,
16858                         x_msg_data                     => x_msg_data,
16859                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16860                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16861                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16862                         p_title_trnsfr_code                        => null,
16863                         p_sale_lease_back_code             => null,
16864                         p_lease_purchased_code             => null,
16865                         p_equip_usage_code                         => null,
16866                         p_vendor_site_id                           => null,
16867                         p_age_of_equip                             => null,
16868                 p_source_trx_name              => p_source_trx_name,
16869                 p_cust_trx_type_id             => l_cust_trx_type_id,
16870                 p_book_class_code              => l_deal_type,
16871                         p_tax_call_cnt                             => tax_call_cnt,
16872                         p_fma_id                                           => l_fma_id,
16873                         p_formula_name                             => l_formula_name,
16874                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16875                         p_precision                                        => l_precision,
16876                         p_sales_quote_id                           => p_source_trx_id,
16877                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16878                 p_ledger_id                    => l_ledger_id,
16879                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16880                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16881                 p_quote_flag                   => 'Y',
16882                 p_rounding_ship_to_party_id    => null,
16883                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16884                 p_line_amt_includes_tax_flag   => 'N',
16885                 p_term_quote_type_code         => null,
16886                 p_term_quote_reason_code       => null,
16887                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16888                 px_line_params_tbl             => lx_line_params_tbl );
16889 
16890         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16891           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16892         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16893           RAISE OKL_API.G_EXCEPTION_ERROR;
16894         END IF;
16895 
16896                 IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16897                   FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16898                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
16899         END IF;
16900                 -- quote level call end
16901                 tax_call_cnt := tax_call_cnt + 1;
16902       END IF;
16903 
16904           -- this table will have one record for each asset
16905           -- check if payment does not exist for any of the assets
16906           FOR k IN l_sq_asset_level_det_tbl.FIRST .. l_sq_asset_level_det_tbl.LAST LOOP
16907             IF l_sq_asset_level_det_tbl(k).asset_pymnt_exist = 'N' THEN -- aset level payment does not exist
16908 
16909           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
16910                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
16911                           'tax_call_cnt '||tax_call_cnt||'asset_pymnt_exist = N ' );
16912               END IF;
16913 
16914           -- Populate tax sources record -- start
16915           lp_tax_src_params_rec.kle_id       := null;
16916           lp_tax_src_params_rec.asset_number := l_sq_asset_level_det_tbl(k).asset_number;
16917           lp_tax_src_params_rec.line_name    := l_sq_asset_level_det_tbl(k).asset_number;
16918 
16919           lp_tax_src_params_rec.ship_to_cust_acct_site_use_id   := l_sq_asset_level_det_tbl(k).ship_to_site_use_id;
16920           lp_tax_src_params_rec.ship_to_party_site_id           := l_ship_to_party_site_id;
16921           lp_tax_src_params_rec.ship_to_party_id                := l_ship_to_party_id;
16922           lp_tax_src_params_rec.ship_to_location_id             := l_ship_to_location_id;
16923 
16924           lp_tax_src_params_rec.bill_to_party_site_id         := l_bill_to_party_site_id;
16925           lp_tax_src_params_rec.bill_to_party_id              := l_bill_to_party_id;
16926           lp_tax_src_params_rec.bill_to_location_id           := l_bill_to_location_id;
16927           lp_tax_src_params_rec.bill_to_cust_acct_site_use_id := l_bill_to_siteuseid;
16928 
16929           lp_tax_src_params_rec.inventory_item_id             := l_sq_asset_level_det_tbl(k).inv_item_id;
16930           lp_tax_src_params_rec.sty_id                        := null;
16931           lp_tax_src_params_rec.khr_id                        := null;
16932           lp_tax_src_params_rec.trx_id                        := p_source_trx_id;
16933           lp_tax_src_params_rec.entity_code                   := G_SQ_ENTITY_CODE;
16934           lp_tax_src_params_rec.event_class_code              := G_SQ_EVENT_CLASS_CODE;
16935           lp_tax_src_params_rec.trx_level_type                := G_TRX_LEVEL_TYPE;
16936           lp_tax_src_params_rec.tax_call_type_code            := G_UPFRONT_TAX;
16937           lp_tax_src_params_rec.tax_reporting_flag            := l_reported_yn;
16938           lp_tax_src_params_rec.reported_yn                   := l_reported_yn;
16939           lp_tax_src_params_rec.trx_date                      := l_start_date;
16940           lp_tax_src_params_rec.trx_currency_code             := l_currency_code;
16941           lp_tax_src_params_rec.line_intended_use             := l_line_intended_use;
16942           lp_tax_src_params_rec.bill_to_cust_acct_id          := l_cust_acct_id;
16943           lp_tax_src_params_rec.org_id                        := l_org_id;
16944           lp_tax_src_params_rec.legal_entity_id               := l_legal_entity_id;
16945           lp_tax_src_params_rec.line_amt                      := 0;
16946           lp_tax_src_params_rec.try_id                        := l_sq_trx_type_id;
16947 
16948           lp_tax_src_params_rec.adjusted_doc_entity_code      := null;
16949           lp_tax_src_params_rec.adjusted_doc_event_class_code := null;
16950           lp_tax_src_params_rec.adjusted_doc_trx_id           := null;
16951           lp_tax_src_params_rec.adjusted_doc_trx_line_id      := null;
16952           lp_tax_src_params_rec.adjusted_doc_trx_level_type   := null;
16953           lp_tax_src_params_rec.adjusted_doc_number           := null;
16954           lp_tax_src_params_rec.adjusted_doc_date             := null;
16955           lp_tax_src_params_rec.tax_line_status_code          := G_ACTIVE_STATUS;
16956           lp_tax_src_params_rec.default_taxation_country      := l_taxation_country;
16957 
16958           lp_tax_src_params_rec.currency_conversion_type      := l_currency_conversion_type;
16959           lp_tax_src_params_rec.currency_conversion_rate      := l_currency_conversion_rate;
16960           lp_tax_src_params_rec.currency_conversion_date      := l_currency_conversion_date;
16961           -- Populate tax sources record -- end
16962 
16963               -- asset level call begin
16964           populate_tax_info(
16965                         p_api_version                  => p_api_version,
16966                         p_init_msg_list                => OKC_API.G_FALSE,
16967                         x_return_status                => x_return_status,
16968                         x_msg_count                    => x_msg_count,
16969                         x_msg_data                     => x_msg_data,
16970                         p_prch_opt_det                             => null,  -- purchase option is not captured on Sales Quote
16971                                 p_fin_prod_id_det                          => l_sq_fin_prod_id,
16972                                 p_int_disclosed_det                        => l_sq_int_disclosed,
16973                         p_title_trnsfr_code                        => l_sq_transfer_of_title,
16974                         p_sale_lease_back_code             => l_sq_sale_lease_back,
16975                         p_lease_purchased_code             => l_sq_purchase_of_lease,
16976                         p_equip_usage_code                         => l_sq_usage_of_equipment,
16977                         p_vendor_site_id                           => l_sq_asset_level_det_tbl(k).vendor_site_id,
16978                         p_age_of_equip                             => l_sq_age_of_equipment,
16979                 p_source_trx_name              => p_source_trx_name,
16980                 p_cust_trx_type_id             => l_cust_trx_type_id,
16981                 p_book_class_code              => l_deal_type,
16982                         p_tax_call_cnt                             => tax_call_cnt,
16983                         p_fma_id                                           => l_fma_id,
16984                         p_formula_name                             => l_formula_name,
16985                         p_minimum_accountable_unit         => l_minimum_accountable_unit,
16986                         p_precision                                        => l_precision,
16987                         p_sales_quote_id                           => p_source_trx_id,
16988                 p_event_type_code              => G_SQ_CRE_EVT_TYPE_CODE,
16989                 p_ledger_id                    => l_ledger_id,
16990                 p_line_level_action            => G_CREATE_LINE_LEVEL_ACTION,
16991                 p_tax_src_params_rec           => lp_tax_src_params_rec,
16992                 p_quote_flag                   => 'Y',
16993                 p_rounding_ship_to_party_id    => null,
16994                 p_rounding_bill_to_party_id    => l_bill_to_party_id,
16995                 p_line_amt_includes_tax_flag   => 'N',
16996                 p_term_quote_type_code         => null,
16997                 p_term_quote_reason_code       => null,
16998                 px_tax_sources_tbl                         => lx_tax_sources_tbl,
16999                 px_line_params_tbl             => lx_line_params_tbl );
17000 
17001           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17002             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17003           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17004             RAISE OKL_API.G_EXCEPTION_ERROR;
17005           END IF;
17006                   -- asset level call end
17007 
17008                   IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17009                         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17010                                                 'lx_tax_sources_tbl.count '||lx_tax_sources_tbl.count||' lx_line_params_tbl.count '||lx_line_params_tbl.count);
17011                   END IF;
17012 
17013           tax_call_cnt := tax_call_cnt + 1;
17014 
17015              END IF;
17016            END LOOP;
17017          END IF;
17018 
17019      IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17020            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17021                         'lx_tax_sources_tbl.COUNT '||lx_tax_sources_tbl.COUNT);
17022            FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17023                         'lx_line_params_tbl.COUNT '||lx_line_params_tbl.COUNT);
17024         END IF;
17025 
17026     -- Insert into okl_tax_sources
17027         BEGIN
17028       IF lx_tax_sources_tbl.COUNT > 0 THEN
17029         FORALL indx in lx_tax_sources_tbl.FIRST..lx_tax_sources_tbl.LAST
17030           -- SAVE EXCEPTIONS
17031           INSERT INTO okl_tax_sources VALUES lx_tax_sources_tbl(indx);
17032       END IF;
17033     EXCEPTION
17034       WHEN OTHERS THEN
17035         IF SQL%BULK_EXCEPTIONS.COUNT > 0 THEN
17036                   FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
17037                         OKL_API.set_message(     p_app_name      => 'OKL',
17038                                      p_msg_name      => 'OKL_TX_TRX_INS_ERR',
17039                                      p_token1        => 'TABLE_NAME',
17040                                      p_token1_value  => 'OKL_TAX_SOURCES',
17041                                      p_token2        => 'ERROR_CODE',
17042                                                                          p_token2_value  => SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE),
17043                                                                          p_token3        => 'ITERATION',
17044                                                                          p_token3_value  => SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
17045                   END LOOP;
17046                   RAISE OKL_API.G_EXCEPTION_ERROR;
17047                 END IF;
17048     END;
17049 
17050     ---- Insert into okl_tax_sources end -----
17051     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17052                  FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17053                         'Insert into okl_tax_sources ');
17054         END IF;
17055 
17056     IF lx_line_params_tbl.COUNT > 0 THEN
17057           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17058                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17059                                'Before Calling OKL_TAX_INTERFACE_PVT.calculate_tax  '||x_return_status);
17060           END IF;
17061 
17062       lp_hdr_params_rec.application_id           := G_OKL_APPLICATION_ID;
17063       lp_hdr_params_rec.trx_id                   := p_source_trx_id;
17064       lp_hdr_params_rec.internal_organization_id := l_org_id;
17065       lp_hdr_params_rec.entity_code              := G_SQ_ENTITY_CODE;
17066       lp_hdr_params_rec.event_class_code         := G_SQ_EVENT_CLASS_CODE;
17067       lp_hdr_params_rec.event_type_code          := G_SQ_CRE_EVT_TYPE_CODE;
17068       lp_hdr_params_rec.quote_flag               := 'Y';
17069 
17070       OKL_TAX_INTERFACE_PVT.calculate_tax(
17071                                     p_api_version       =>  p_api_version,
17072                                     p_init_msg_list     =>  p_init_msg_list,
17073                                     x_return_status     =>  x_return_status,
17074                                     x_msg_count         =>  x_msg_count,
17075                                     x_msg_data          =>  x_msg_data,
17076                                     p_hdr_params_rec    =>  lp_hdr_params_rec,
17077                                     p_line_params_tbl   =>  lx_line_params_tbl);
17078 
17079       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17080                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17081                                    'After tax engine call '||x_return_status);
17082           END IF;
17083 
17084           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17085         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17086       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17087         RAISE OKL_API.G_EXCEPTION_ERROR;
17088       END IF;
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              'Calling "update_tax_sources_total" .. ');
17094     END IF;
17095 
17096     update_tax_sources_total(p_api_version    => p_api_version,
17097                              p_init_msg_list  => p_init_msg_list,
17098                              x_return_status  => x_return_status,
17099                              x_msg_count      => x_msg_count,
17100                              x_msg_data       => x_msg_data,
17101                              p_source_trx_id  => p_source_trx_id,
17102                              p_source_trx_name => p_source_trx_name  );
17103 
17104     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17105       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17106              'Return Status' || x_return_status);
17107     END IF;
17108 
17109     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17110       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17111     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17112       RAISE OKL_API.G_EXCEPTION_ERROR;
17113     END IF;
17114 
17115     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17116       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17117              'Calling "copy_tax_trx_data" .. ');
17118     END IF;
17119 
17120     copy_tax_trx_data ( p_api_version       => p_api_version,
17121                         p_init_msg_list     => p_init_msg_list,
17122                         x_return_status     => x_return_status,
17123                         x_msg_count         => x_msg_count,
17124                         x_msg_data          => x_msg_data,
17125                         p_trx_id            => p_source_trx_id,
17126                         p_entity_code           => G_SQ_ENTITY_CODE,
17127                         p_event_class_code  => G_SQ_EVENT_CLASS_CODE,
17128                         p_source_trx_name   => p_source_trx_name);
17129 
17130 
17131     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17132       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax.',
17133              'Return Status' || x_return_status);
17134     END IF;
17135 
17136     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17137       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17138     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17139       RAISE OKL_API.G_EXCEPTION_ERROR;
17140     END IF;
17141 
17142     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17143        FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ','End(-)');
17144     END IF;
17145 
17146   EXCEPTION
17147     WHEN OKL_API.G_EXCEPTION_ERROR THEN
17148       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17149         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ',
17150                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
17151       END IF;
17152 
17153       IF l_leasequotes_csr%ISOPEN THEN
17154         CLOSE l_leasequotes_csr;
17155       END IF;
17156 
17157       IF l_leaseopp_csr%ISOPEN THEN
17158         CLOSE l_leaseopp_csr;
17159       END IF;
17160 
17161       IF l_leaseapp_csr%ISOPEN THEN
17162         CLOSE l_leaseapp_csr;
17163       END IF;
17164 
17165       IF l_prevtaxsources_csr%ISOPEN THEN
17166         CLOSE l_prevtaxsources_csr;
17167       END IF;
17168 
17169       IF l_prevtaxtrxdet_csr%ISOPEN THEN
17170         CLOSE l_prevtaxtrxdet_csr;
17171       END IF;
17172 
17173       IF l_quoteassets_csr%ISOPEN THEN
17174         CLOSE l_quoteassets_csr;
17175       END IF;
17176 
17177       IF l_assetcomponent_csr%ISOPEN THEN
17178         CLOSE l_assetcomponent_csr;
17179       END IF;
17180 
17181       IF l_q_asset_cashflows_csr%ISOPEN THEN
17182         CLOSE l_q_asset_cashflows_csr;
17183       END IF;
17184 
17185       IF l_billtosite_csr%ISOPEN THEN
17186         CLOSE l_billtosite_csr;
17187       END IF;
17188 
17189       IF l_shiptosite_csr%ISOPEN THEN
17190         CLOSE l_shiptosite_csr;
17191       END IF;
17192 
17193       IF l_trxtypes_csr%ISOPEN THEN
17194         CLOSE l_trxtypes_csr;
17195       END IF;
17196 
17197       IF l_txbasisoverride_csr%ISOPEN THEN
17198         CLOSE l_txbasisoverride_csr;
17199       END IF;
17200 
17201       IF l_formulae_csr%ISOPEN THEN
17202         CLOSE l_formulae_csr;
17203       END IF;
17204 
17205       IF l_racusttrxtypes_csr%ISOPEN THEN
17206         CLOSE l_racusttrxtypes_csr;
17207       END IF;
17208 
17209       IF l_fndcurrency_csr%ISOPEN THEN
17210         CLOSE l_fndcurrency_csr;
17211       END IF;
17212 
17213       IF l_povendorsites_csr%ISOPEN THEN
17214         CLOSE l_povendorsites_csr;
17215       END IF;
17216 
17217       IF l_get_location_id%ISOPEN THEN
17218         CLOSE l_get_location_id;
17219       END IF;
17220 
17221       IF l_get_shiptositeid%ISOPEN THEN
17222         CLOSE l_get_shiptositeid;
17223       END IF;
17224 
17225       x_return_status := OKL_API.G_RET_STS_ERROR;
17226 
17227     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
17228       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17229         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ',
17230                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
17231       END IF;
17232 
17233       IF l_leasequotes_csr%ISOPEN THEN
17234         CLOSE l_leasequotes_csr;
17235       END IF;
17236 
17237       IF l_leaseopp_csr%ISOPEN THEN
17238         CLOSE l_leaseopp_csr;
17239       END IF;
17240 
17241       IF l_leaseapp_csr%ISOPEN THEN
17242         CLOSE l_leaseapp_csr;
17243       END IF;
17244 
17245       IF l_prevtaxsources_csr%ISOPEN THEN
17246         CLOSE l_prevtaxsources_csr;
17247       END IF;
17248 
17249       IF l_prevtaxtrxdet_csr%ISOPEN THEN
17250         CLOSE l_prevtaxtrxdet_csr;
17251       END IF;
17252 
17253       IF l_quoteassets_csr%ISOPEN THEN
17254         CLOSE l_quoteassets_csr;
17255       END IF;
17256 
17257       IF l_assetcomponent_csr%ISOPEN THEN
17258         CLOSE l_assetcomponent_csr;
17259       END IF;
17260 
17261       IF l_q_asset_cashflows_csr%ISOPEN THEN
17262         CLOSE l_q_asset_cashflows_csr;
17263       END IF;
17264 
17265       IF l_billtosite_csr%ISOPEN THEN
17266         CLOSE l_billtosite_csr;
17267       END IF;
17268 
17269       IF l_shiptosite_csr%ISOPEN THEN
17270         CLOSE l_shiptosite_csr;
17271       END IF;
17272 
17273       IF l_trxtypes_csr%ISOPEN THEN
17274         CLOSE l_trxtypes_csr;
17275       END IF;
17276 
17277       IF l_txbasisoverride_csr%ISOPEN THEN
17278         CLOSE l_txbasisoverride_csr;
17279       END IF;
17280 
17281       IF l_formulae_csr%ISOPEN THEN
17282         CLOSE l_formulae_csr;
17283       END IF;
17284 
17285       IF l_racusttrxtypes_csr%ISOPEN THEN
17286         CLOSE l_racusttrxtypes_csr;
17287       END IF;
17288 
17289       IF l_fndcurrency_csr%ISOPEN THEN
17290         CLOSE l_fndcurrency_csr;
17291       END IF;
17292 
17293       IF l_povendorsites_csr%ISOPEN THEN
17294         CLOSE l_povendorsites_csr;
17295       END IF;
17296 
17297       IF l_get_location_id%ISOPEN THEN
17298         CLOSE l_get_location_id;
17299       END IF;
17300 
17301       IF l_get_shiptositeid%ISOPEN THEN
17302         CLOSE l_get_shiptositeid;
17303       END IF;
17304 
17305       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
17306 
17307     WHEN OTHERS THEN
17308       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17309         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_quoting_upfront_tax ',
17310                   'EXCEPTION :'||sqlerrm);
17311       END IF;
17312 
17313       IF l_leasequotes_csr%ISOPEN THEN
17314         CLOSE l_leasequotes_csr;
17315       END IF;
17316 
17317       IF l_leaseopp_csr%ISOPEN THEN
17318         CLOSE l_leaseopp_csr;
17319       END IF;
17320 
17321       IF l_leaseapp_csr%ISOPEN THEN
17322         CLOSE l_leaseapp_csr;
17323       END IF;
17324 
17325       IF l_prevtaxsources_csr%ISOPEN THEN
17326         CLOSE l_prevtaxsources_csr;
17327       END IF;
17328 
17329       IF l_prevtaxtrxdet_csr%ISOPEN THEN
17330         CLOSE l_prevtaxtrxdet_csr;
17331       END IF;
17332 
17333       IF l_quoteassets_csr%ISOPEN THEN
17334         CLOSE l_quoteassets_csr;
17335       END IF;
17336 
17337       IF l_assetcomponent_csr%ISOPEN THEN
17338         CLOSE l_assetcomponent_csr;
17339       END IF;
17340 
17341       IF l_q_asset_cashflows_csr%ISOPEN THEN
17342         CLOSE l_q_asset_cashflows_csr;
17343       END IF;
17344 
17345       IF l_billtosite_csr%ISOPEN THEN
17346         CLOSE l_billtosite_csr;
17347       END IF;
17348 
17349       IF l_shiptosite_csr%ISOPEN THEN
17350         CLOSE l_shiptosite_csr;
17351       END IF;
17352 
17353       IF l_trxtypes_csr%ISOPEN THEN
17354         CLOSE l_trxtypes_csr;
17355       END IF;
17356 
17357       IF l_txbasisoverride_csr%ISOPEN THEN
17358         CLOSE l_txbasisoverride_csr;
17359       END IF;
17360 
17361       IF l_formulae_csr%ISOPEN THEN
17362         CLOSE l_formulae_csr;
17363       END IF;
17364 
17365       IF l_racusttrxtypes_csr%ISOPEN THEN
17366         CLOSE l_racusttrxtypes_csr;
17367       END IF;
17368 
17369       IF l_fndcurrency_csr%ISOPEN THEN
17370         CLOSE l_fndcurrency_csr;
17371       END IF;
17372 
17373       IF l_povendorsites_csr%ISOPEN THEN
17374         CLOSE l_povendorsites_csr;
17375       END IF;
17376 
17377       IF l_get_location_id%ISOPEN THEN
17378         CLOSE l_get_location_id;
17379       END IF;
17380 
17381       IF l_get_shiptositeid%ISOPEN THEN
17382         CLOSE l_get_shiptositeid;
17383       END IF;
17384 
17385       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
17386       -- unexpected error
17387       OKL_API.set_message(p_app_name      => g_app_name,
17388                           p_msg_name      => g_unexpected_error,
17389                           p_token1        => g_sqlcode_token,
17390                           p_token1_value  => sqlcode,
17391                           p_token2        => g_sqlerrm_token,
17392                           p_token2_value  => sqlerrm);
17393   END process_quoting_upfront_tax;
17394 
17395   /*========================================================================
17396    | PUBLIC PROCEDURE calculate_sales_tax
17397    |
17398    | DESCRIPTION
17399    |    This procedure is called by OLM tax events to calculate tax
17400    |
17401    | CALLED FROM          OLM Tax Events
17402    |
17403    |
17404    | CALLS PROCEDURES/FUNCTIONS
17405    |     process_tax_schedule_tax()
17406    |     process_quote_tax()
17407    |     process_asset_loc_tax()
17408    |     process_split_asset_tax()
17409    |     process_booking_upfront_tax()
17410    |     process_pre_rbk_upfront_tax()
17411    |     process_rebook_upfront_tax()
17412    |
17413    |
17414    | PARAMETERS
17415    |      p_source_trx_id     -- Source transaction ID
17416    |      p_source_trx_name   -- Source transaction Name
17417    |      p_source_table      -- Source table
17418    |      p_tax_call_type     -- Tax call type (applies to Booking, Rebook, Asset Location Change)
17419    |      p_serialized_asset  -- Serialized asset Y/N flag (applies to Asset Location Change)
17420    |      p_request_id        -- ID of Okl_Trx_Requests  (applies to Asset Location Change)
17421    |
17422    | KNOWN ISSUES
17423    |
17424    | NOTES
17425    |
17426    |
17427    | MODIFICATION HISTORY
17428    | Date          Author     Description of Changes
17429    | 08-APR-05    SECHAWLA      Created
17430    | 12-DEC-05    SECHAWLA      4690074  set a message if OU does not allow
17431    |                                     tax calculation
17432    |
17433    *=======================================================================*/
17434     PROCEDURE calculate_sales_tax(
17435       p_api_version                   IN  NUMBER,
17436       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
17437       x_return_status                 OUT NOCOPY VARCHAR2,
17438       x_msg_count                     OUT NOCOPY NUMBER,
17439       x_msg_data                      OUT NOCOPY VARCHAR2,
17440       p_source_trx_id                 IN  NUMBER,
17441       p_source_trx_name               IN  VARCHAR2,
17442       p_source_table                  IN  VARCHAR2,
17443       p_tax_call_type                 IN  VARCHAR2 DEFAULT NULL,
17444       p_serialized_asset              IN  VARCHAR2 DEFAULT NULL,
17445       p_request_id                    IN  NUMBER   DEFAULT NULL,
17446       p_alc_final_call                IN  VARCHAR2 DEFAULT NULL)IS
17447 
17448       --------------- CS Tax Schedule ------------------
17449       --p_source_trx_id   ---> okl_trx_requests.id
17450       --p_source_trx_name     ---> 'Tax Schedule'
17451       --p_source_table        ---> 'OKL_TRX_REQUESTS'
17452       --------------------------------------------------
17453 
17454       --------------- Booking ------------------
17455       --p_source_trx_id   ---> okl_trx_contracts.id
17456       --p_source_trx_name     ---> 'Booking'
17457       --p_source_table        ---> 'OKL_TRX_CONTRACTS'
17458       --p_tax_call_type       ---> 'ESTIMATED'/'ACTUAL' call type
17459       --------------------------------------------------
17460 
17461       --------------- Rebook ------------------
17462       --p_source_trx_id   ---> okl_trx_contracts.id
17463       --p_source_trx_name     ---> 'Rebook'
17464       --p_source_table        ---> 'OKL_TRX_CONTRACTS'
17465       --p_tax_call_type       ---> 'ESTIMATED'/'ACTUAL' call type
17466       --------------------------------------------------
17467 
17468       -------------- Split Asset ------------------
17469       --p_source_trx_id   ---> okl_trx_assets.id
17470       --p_source_trx_name     ---> 'Split Asset'
17471       --p_source_table        ---> 'OKL_TRX_ASSETS'
17472       --------------------------------------------------
17473 
17474       -------------- Reverse ------------------
17475       --p_source_trx_id   ---> okl_trx_assets.id
17476       --p_source_trx_name     ---> 'Reverse'
17477       --p_source_table        ---> 'OKL_TRX_ASSETS'
17478       --------------------------------------------------
17479 
17480       ---- Termination/Repurchase Quote Creation -------
17481       --p_source_trx_id   ---> okl_trx_quotes_b.id
17482       --p_source_trx_name     ---> 'Estimated Billing'
17483       --p_source_table        ---> 'OKL_TRX_QUOTES_B'
17484       --------------------------------------------------
17485 
17486       /*-----------------------------------------------------------------------+
17487       | Cursor Declarations                                                   |
17488       +-----------------------------------------------------------------------*/
17489       -- Get the OU tax options
17490       CURSOR  l_systemparams_csr(cp_org_id  IN  NUMBER) IS
17491       SELECT  tax_upfront_yn, tax_invoice_yn
17492       FROM    OKL_SYSTEM_PARAMS_ALL
17493       WHERE   org_id = cp_org_id;
17494 
17495       CURSOR l_tax_schedule_csr(cp_trx_id IN NUMBER) IS
17496       SELECT rul.rule_information5
17497       FROM okc_rules_b rul,
17498            okc_rule_groups_b rgp,
17499            okl_trx_requests trx
17500       WHERE rgp.dnz_chr_id = trx.dnz_khr_id
17501       AND   rul.rgp_id = rgp.id
17502       AND   rgp.rgd_code = 'LAHDTX'
17503       AND   rul.rule_information_category = 'LASTPR'
17504       AND   trx.id = cp_trx_id
17505       AND   trx.request_type_code = 'TAX_SCHEDULES';
17506 
17507       /*-----------------------------------------------------------------------+
17508       | Local Variable Declarations and initializations                       |
17509       +-----------------------------------------------------------------------*/
17510       l_api_version            CONSTANT NUMBER := 1;
17511       l_api_name               CONSTANT VARCHAR2(30) := 'calculate_sales_tax';
17512       l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
17513 
17514       l_ou_tax_upfront_yn         VARCHAR2(1);
17515       l_ou_tax_invoice_yn         VARCHAR2(1);
17516       l_k_tax_schedule_yn         VARCHAR2(1);
17517 
17518       l_source_table              VARCHAR2(30);
17519 
17520       l_tax_call_type             VARCHAR2(30);
17521       l_org_id                    NUMBER;
17522       l_quote_object_code         VARCHAR2(30);
17523       l_quote_object_id           NUMBER;
17524 
17525     BEGIN
17526 
17527       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17528           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax','Begin(+)');
17529       END IF;
17530 
17531       --Print Input Variables
17532       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17533         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17534                 'p_init_msg_list :'||p_init_msg_list);
17535         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17536                 'p_source_trx_id :'||to_char(p_source_trx_id));
17537         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17538                 'p_source_trx_name :'||p_source_trx_name);
17539         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17540                 'p_source_table :'||p_source_table);
17541         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17542               'p_tax_call_type :'||p_tax_call_type);
17543         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17544               'p_serialized_asset :'||p_serialized_asset);
17545         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax.',
17546               'p_request_id :'||p_request_id);
17547       END IF;
17548 
17549       --Check API version, initialize message list and create savepoint.
17550       l_return_status := OKL_API.START_ACTIVITY(l_api_name,
17551                                                 G_PKG_NAME,
17552                                                 p_init_msg_list,
17553                                                 l_api_version,
17554                                                 p_api_version,
17555                                                 '_PVT',
17556                                                 x_return_status);
17557       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17558         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17559       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
17560         RAISE OKL_API.G_EXCEPTION_ERROR;
17561       END IF;
17562 
17563       l_source_table := upper(p_source_table);
17564       l_org_id := mo_global.get_current_org_id;
17565 
17566       -- Get the OU Tax options
17567       OPEN  l_systemparams_csr(cp_org_id  => l_org_id);
17568       FETCH l_systemparams_csr INTO l_ou_tax_upfront_yn, l_ou_tax_invoice_yn;
17569       IF  l_systemparams_csr%NOTFOUND THEN
17570         -- Tax options are not setup for this operating unit.
17571         OKL_API.set_message(   p_app_name      => 'OKL',
17572                                p_msg_name      => 'OKL_TX_NO_TAX_SETUP');
17573         RAISE OKL_API.G_EXCEPTION_ERROR;
17574       END IF;
17575       CLOSE l_systemparams_csr;
17576 
17577       IF p_source_trx_name = 'Tax Schedule' THEN
17578 
17579         OPEN  l_tax_schedule_csr(cp_trx_id  => p_source_trx_id);
17580         FETCH l_tax_schedule_csr INTO l_k_tax_schedule_yn ;
17581         CLOSE l_tax_schedule_csr;
17582 
17583         IF  l_k_tax_schedule_yn = 'Y' THEN -- OU allows Tax schedule type of call
17584           process_tax_schedule_tax(
17585                             p_api_version     =>   p_api_version,
17586                             p_init_msg_list   =>   OKL_API.G_FALSE,
17587                             x_return_status   =>   x_return_status,
17588                             x_msg_count       =>   x_msg_count,
17589                             x_msg_data        =>   x_msg_data,
17590                             p_source_trx_id   =>   p_source_trx_id,
17591                             p_source_trx_name =>   p_source_trx_name,
17592                             p_source_table    =>   l_source_table);
17593 
17594           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17595             OKL_API.set_message( p_app_name      => 'OKL',
17596                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17597                                  p_token1        => 'TRX_TYPE',
17598                                  p_token1_value  => p_source_trx_name);
17599 
17600             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17601               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17602             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17603               RAISE OKL_API.G_EXCEPTION_ERROR;
17604             END IF;
17605           END IF;
17606         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17607           OKL_API.set_message(   p_app_name      => 'OKL',
17608                                  p_msg_name      => 'OKL_TAX_SCH_FLAG_NOT_SET');
17609         END IF;
17610 
17611       ELSIF p_source_trx_name = 'Estimated Billing' AND l_source_table = 'OKL_TRX_QUOTES_B' THEN -- AM Quote creation
17612         process_quote_tax(    p_api_version     =>   p_api_version,
17613                               p_init_msg_list   =>   OKL_API.G_FALSE,
17614                               x_return_status   =>   x_return_status,
17615                               x_msg_count       =>   x_msg_count,
17616                               x_msg_data        =>   x_msg_data,
17617                               p_source_trx_id   =>   p_source_trx_id,
17618                               p_source_trx_name =>   p_source_trx_name,
17619                               p_source_table    =>   l_source_table);
17620 
17621         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17622           OKL_API.set_message(   p_app_name      => 'OKL',
17623                                  p_msg_name      => 'OKL_TX_QUOTE_TAX_ERR');
17624         END IF;
17625 
17626         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17627           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17628         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17629           RAISE OKL_API.G_EXCEPTION_ERROR;
17630         END IF;
17631 
17632       ELSIF (p_source_trx_name = 'Asset Relocation') THEN
17633         IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17634           IF p_tax_call_type IS NULL THEN
17635               OKC_API.set_message( p_app_name      => 'OKC',
17636                                    p_msg_name      => G_REQUIRED_VALUE,
17637                                    p_token1        => G_COL_NAME_TOKEN,
17638                                    p_token1_value  => 'Tax Call Type');
17639               RAISE OKL_API.G_EXCEPTION_ERROR;
17640           ELSE
17641             l_tax_call_type := upper(p_tax_call_type);
17642             IF l_tax_call_type NOT IN (G_ESTIMATED_CALL_TYPE, G_ACTUAL_CALL_TYPE) THEN
17643               OKC_API.set_message( p_app_name      => 'OKC',
17644                                    p_msg_name      => G_INVALID_VALUE,
17645                                    p_token1        => G_COL_NAME_TOKEN,
17646                                    p_token1_value  => 'Tax Call Type');
17647               RAISE OKL_API.G_EXCEPTION_ERROR;
17648             END IF;
17649           END IF;
17650 
17651           process_asset_loc_tax(p_api_version       =>   p_api_version,
17652                                 p_init_msg_list     =>   OKL_API.G_FALSE,
17653                                 x_return_status     =>   x_return_status,
17654                                 x_msg_count         =>   x_msg_count,
17655                                 x_msg_data          =>   x_msg_data,
17656                                 p_source_trx_id     =>   p_source_trx_id,
17657                                 p_source_trx_name   =>   p_source_trx_name,
17658                                 p_source_table      =>   l_source_table,
17659                                 p_tax_call_type     =>   p_tax_call_type,
17660                                 p_serialized_asset  =>   p_serialized_asset,
17661                                 p_request_id        =>   p_request_id,
17662                                 p_alc_final_call    =>   p_alc_final_call);
17663 
17664           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17665             OKL_API.set_message( p_app_name      => 'OKL',
17666                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17667                                  p_token1        => 'TRX_TYPE',
17668                                  p_token1_value  => p_source_trx_name);
17669 
17670             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17671               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17672             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17673               RAISE OKL_API.G_EXCEPTION_ERROR;
17674             END IF;
17675           END IF;
17676 
17677         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17678           OKL_API.set_message(   p_app_name      => 'OKL',
17679                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
17680                                  p_token1        => 'TAX_CALL_TYPE',
17681                                  p_token1_value  => 'Upfront Tax');
17682         END IF;
17683       ELSIF p_source_trx_name = 'Split Asset' THEN
17684         process_split_asset_tax(p_api_version     =>   p_api_version,
17685                                 p_init_msg_list   =>   OKL_API.G_FALSE,
17686                                 x_return_status   =>   x_return_status,
17687                                 x_msg_count       =>   x_msg_count,
17688                                 x_msg_data        =>   x_msg_data,
17689                                 p_source_trx_id   =>   p_source_trx_id,
17690                                 p_source_trx_name =>   p_source_trx_name,
17691                                 p_source_table    =>   l_source_table);
17692 
17693         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17694           OKL_API.set_message(   p_app_name      => 'OKL',
17695                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17696                                  p_token1        => 'TRX_TYPE',
17697                                  p_token1_value  => p_source_trx_name);
17698 
17699           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17700             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17701           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17702             RAISE OKL_API.G_EXCEPTION_ERROR;
17703           END IF;
17704         END IF;
17705 
17706       ELSIF ( p_source_trx_name = 'Booking') THEN
17707         IF l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17708           IF p_tax_call_type IS NULL THEN
17709             OKC_API.set_message( p_app_name      => 'OKC',
17710                                  p_msg_name      => G_REQUIRED_VALUE,
17711                                  p_token1        => G_COL_NAME_TOKEN,
17712                                  p_token1_value  => 'Tax Call Type');
17713             RAISE OKL_API.G_EXCEPTION_ERROR;
17714           ELSE
17715             l_tax_call_type := upper(p_tax_call_type);
17716             IF l_tax_call_type NOT IN (G_ESTIMATED_CALL_TYPE, G_ACTUAL_CALL_TYPE) THEN
17717               OKC_API.set_message( p_app_name      => 'OKC',
17718                                    p_msg_name      => G_INVALID_VALUE,
17719                                    p_token1        => G_COL_NAME_TOKEN,
17720                                    p_token1_value  => 'Tax Call Type');
17721               RAISE OKL_API.G_EXCEPTION_ERROR;
17722             END IF;
17723           END IF;
17724 
17725           process_booking_upfront_tax(
17726                             p_api_version     =>   p_api_version,
17727                             p_init_msg_list   =>   OKL_API.G_FALSE,
17728                             x_return_status   =>   x_return_status,
17729                             x_msg_count       =>   x_msg_count,
17730                             x_msg_data        =>   x_msg_data,
17731                             p_source_trx_id   =>   p_source_trx_id,
17732                             p_source_trx_name =>   p_source_trx_name,
17733                             p_source_table    =>   l_source_table,
17734                             p_tax_call_type   =>   p_tax_call_type);
17735 
17736           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17737             OKL_API.set_message(p_app_name      => 'OKL',
17738                                 p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17739                                 p_token1        => 'TRX_TYPE',
17740                                 p_token1_value  => p_source_trx_name);
17741 
17742             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17743               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17744             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17745               RAISE OKL_API.G_EXCEPTION_ERROR;
17746             END IF;
17747           END IF;
17748 
17749         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17750           OKL_API.set_message(   p_app_name      => 'OKL',
17751                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
17752                                  p_token1        => 'TAX_CALL_TYPE',
17753                                  p_token1_value  => 'Upfront Tax');
17754         END IF;
17755         -- Authoring will create a CS request during Booking (no tax schedule call during pre-booking) for Tax Schedule
17756         -- and then make the Tax Schedule call directly using that trx
17757 
17758       ELSIF  p_source_trx_name = 'Rebook' AND p_tax_call_type = G_ESTIMATED_CALL_TYPE THEN
17759         IF l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17760           process_pre_rbk_upfront_tax(
17761                             p_api_version     =>   p_api_version,
17762                             p_init_msg_list   =>   OKL_API.G_FALSE,
17763                             x_return_status   =>   x_return_status,
17764                             x_msg_count       =>   x_msg_count,
17765                             x_msg_data        =>   x_msg_data,
17766                             p_source_trx_id   =>   p_source_trx_id,
17767                             p_source_trx_name =>   p_source_trx_name,
17768                             p_source_table    =>   l_source_table,
17769                             p_tax_call_type   =>   p_tax_call_type);
17770 
17771           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17772             OKL_API.set_message( p_app_name      => 'OKL',
17773                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17774                                  p_token1        => 'TRX_TYPE',
17775                                  p_token1_value  => p_source_trx_name);
17776 
17777             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17778               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17779             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17780               RAISE OKL_API.G_EXCEPTION_ERROR;
17781             END IF;
17782           END IF;
17783         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17784           OKL_API.set_message(   p_app_name      => 'OKL',
17785                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
17786                                  p_token1        => 'TAX_CALL_TYPE',
17787                                  p_token1_value  => 'Upfront Tax');
17788         END IF;
17789 
17790       ELSIF  p_source_trx_name = 'Rebook' AND p_tax_call_type = G_ACTUAL_CALL_TYPE THEN
17791         IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17792           process_rebook_upfront_tax(
17793                             p_api_version       =>   p_api_version,
17794                             p_init_msg_list     =>   OKL_API.G_FALSE,
17795                             x_return_status     =>   x_return_status,
17796                             x_msg_count         =>   x_msg_count,
17797                             x_msg_data          =>   x_msg_data,
17798                             p_source_trx_id     =>   p_source_trx_id,
17799                             p_source_trx_name   =>   p_source_trx_name,
17800                             p_source_table      =>   l_source_table);
17801 
17802           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17803             OKL_API.set_message( p_app_name      => 'OKL',
17804                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17805                                  p_token1        => 'TRX_TYPE',
17806                                  p_token1_value  => p_source_trx_name);
17807 
17808             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17809               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17810             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17811               RAISE OKL_API.G_EXCEPTION_ERROR;
17812             END IF;
17813           END IF;
17814 
17815         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17816           OKL_API.set_message(   p_app_name      => 'OKL',
17817                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
17818                                  p_token1        => 'TAX_CALL_TYPE',
17819                                  p_token1_value  => 'Upfront Tax');
17820         END IF;
17821 
17822       ELSIF p_source_trx_name = 'Reverse' THEN
17823       -- No need to check "tax_upfront_yn" flag in case of contract reversal
17824         process_contract_reversal_tax(
17825                             p_api_version     =>   p_api_version,
17826                             p_init_msg_list   =>   OKL_API.G_FALSE,
17827                             x_return_status   =>   x_return_status,
17828                             x_msg_count       =>   x_msg_count,
17829                             x_msg_data        =>   x_msg_data,
17830                             p_source_trx_id   =>   p_source_trx_id,
17831                             p_source_trx_name =>   p_source_trx_name,
17832                             p_source_table    =>   l_source_table);
17833 
17834         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17835           OKL_API.set_message(   p_app_name      => 'OKL',
17836                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17837                                  p_token1        => 'TRX_TYPE',
17838                                  p_token1_value  => p_source_trx_name);
17839 
17840           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17841             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17842           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17843             RAISE OKL_API.G_EXCEPTION_ERROR;
17844           END IF;
17845         END IF;
17846 
17847       ELSIF  p_source_trx_name = 'Sales Quote'  THEN
17848         IF  l_ou_tax_upfront_yn = 'Y' THEN -- OU allows upfront type of call
17849           process_quoting_upfront_tax(
17850                             p_api_version     =>   p_api_version,
17851                             p_init_msg_list   =>   OKL_API.G_FALSE,
17852                             x_return_status   =>   x_return_status,
17853                             x_msg_count       =>   x_msg_count,
17854                             x_msg_data        =>   x_msg_data,
17855                             p_source_trx_id   =>   p_source_trx_id,
17856                             p_source_trx_name =>   p_source_trx_name,
17857                             p_source_table    =>   l_source_table);
17858 
17859           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
17860             OKL_API.set_message( p_app_name      => 'OKL',
17861                                  p_msg_name      => 'OKL_TX_INTERFACE_ERROR',
17862                                  p_token1        => 'TRX_TYPE',
17863                                  p_token1_value  => p_source_trx_name);
17864 
17865             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17866               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17867             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17868               RAISE OKL_API.G_EXCEPTION_ERROR;
17869             END IF;
17870           END IF;
17871         ELSE -- SECHAWLA 12-DEC-05 4690074 : added else section
17872           OKL_API.set_message(   p_app_name      => 'OKL',
17873                                  p_msg_name      => 'OKL_TX_OU_NO_TAX',
17874                                  p_token1        => 'TAX_CALL_TYPE',
17875                                  p_token1_value  => 'Upfront Tax');
17876         END IF;
17877 
17878       ELSE
17879         OKC_API.set_message( p_app_name      => 'OKC',
17880                              p_msg_name      => G_INVALID_VALUE,
17881                              p_token1        => G_COL_NAME_TOKEN,
17882                              p_token1_value  => 'Transaction Type');
17883         RAISE OKL_API.G_EXCEPTION_ERROR;
17884       END IF;
17885 
17886       x_return_status := l_return_status; -- added for 12.0 since the above code that sets
17887                                          -- x_return_status is commented
17888       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17889         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ','End(-)');
17890       END IF;
17891 
17892       -- End the transaction
17893       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
17894 
17895     EXCEPTION
17896       WHEN OKL_API.G_EXCEPTION_ERROR THEN
17897 
17898         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17899           FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ',
17900                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
17901         END IF;
17902 
17903         IF l_systemparams_csr%ISOPEN THEN
17904           CLOSE l_systemparams_csr;
17905         END IF;
17906 
17907         IF l_tax_schedule_csr%ISOPEN THEN
17908           CLOSE l_tax_schedule_csr;
17909         END IF;
17910 
17911         x_return_status := OKL_API.HANDLE_EXCEPTIONS
17912         (
17913           l_api_name,
17914           G_PKG_NAME,
17915           'OKL_API.G_RET_STS_ERROR',
17916           x_msg_count,
17917           x_msg_data,
17918           '_PVT'
17919         );
17920       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
17921         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17922           FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ',
17923                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
17924         END IF;
17925 
17926         IF l_systemparams_csr%ISOPEN THEN
17927           CLOSE l_systemparams_csr;
17928         END IF;
17929 
17930         IF l_tax_schedule_csr%ISOPEN THEN
17931           CLOSE l_tax_schedule_csr;
17932         END IF;
17933 
17934         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
17935         (
17936           l_api_name,
17937           G_PKG_NAME,
17938           'OKL_API.G_RET_STS_UNEXP_ERROR',
17939           x_msg_count,
17940           x_msg_data,
17941           '_PVT'
17942         );
17943       WHEN OTHERS THEN
17944 
17945         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17946           FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ',
17947                     'EXCEPTION :'||sqlerrm);
17948         END IF;
17949 
17950         IF l_systemparams_csr%ISOPEN THEN
17951           CLOSE l_systemparams_csr;
17952         END IF;
17953 
17954         IF l_tax_schedule_csr%ISOPEN THEN
17955           CLOSE l_tax_schedule_csr;
17956         END IF;
17957 
17958         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
17959         (
17960           l_api_name,
17961           G_PKG_NAME,
17962           'OTHERS',
17963           x_msg_count,
17964           x_msg_data,
17965           '_PVT'
17966         );
17967 
17968         x_return_status := l_return_status; -- added for 12.0 since the above code that sets
17969         IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
17970           FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.calculate_sales_tax ','End(-)');
17971         END IF;
17972 
17973         -- end the transaction
17974         OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
17975 
17976     END calculate_sales_tax;
17977 
17978 /*========================================================================
17979  | PUBLIC PROCEDURE set_tax_security_context
17980  |
17981  | DESCRIPTION
17982  |    This procedure is called by update tax common components for setting the
17983  |    tax security context before invoking Tax Determinant Lov's
17984  |
17985  | CALLED FROM                                  Tax Common components
17986  |
17987  |
17988  | CALLS PROCEDURES/FUNCTIONS
17989  |     OKL_TAX_INTERFACE_PVT.set_tax_security_context
17990  |
17991  |
17992  | PARAMETERS
17993  |      p_internal_org_id               -- Operatng Unit Identifier
17994  |      p_legal_entity_id       -- Legal Entity Identifier
17995  |      p_transaction_date      -- Transaction Date
17996  |
17997  | KNOWN ISSUES
17998  |
17999  | NOTES
18000  |
18001  |
18002  | MODIFICATION HISTORY
18003  | Date          Author     Description of Changes
18004  | 24-JAN-07    RRAVIKIR      Created
18005  *=======================================================================*/
18006   PROCEDURE set_tax_security_context(
18007     p_api_version                       IN  NUMBER,
18008     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18009     x_return_status                     OUT NOCOPY VARCHAR2,
18010     x_msg_count                         OUT NOCOPY NUMBER,
18011     x_msg_data                          OUT NOCOPY VARCHAR2,
18012     p_internal_org_id                           IN  NUMBER,
18013     p_legal_entity_id               IN  NUMBER,
18014     p_transaction_date              IN  DATE) IS
18015 
18016     l_api_version            CONSTANT NUMBER := 1;
18017     l_api_name               CONSTANT VARCHAR2(30) := 'set_tax_security_context';
18018     l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
18019 
18020     x_effective_date         DATE;
18021 
18022   BEGIN
18023 
18024     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18025         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context','Begin(+)');
18026     END IF;
18027 
18028     --Print Input Variables
18029     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18030          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18031               'p_init_msg_list :'||p_init_msg_list);
18032          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18033               'p_internal_org_id :'||to_char(p_internal_org_id));
18034          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18035               'p_legal_entity_id :'||p_legal_entity_id);
18036          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18037               'p_transaction_date :'||p_transaction_date);
18038     END IF;
18039 
18040     --Check API version, initialize message list and create savepoint.
18041     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
18042                                               G_PKG_NAME,
18043                                               p_init_msg_list,
18044                                               l_api_version,
18045                                               p_api_version,
18046                                               '_PVT',
18047                                               x_return_status);
18048 
18049     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18050       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18051     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18052       RAISE OKL_API.G_EXCEPTION_ERROR;
18053     END IF;
18054 
18055     -- Required Values
18056     IF p_internal_org_id IS NULL THEN
18057        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18058                             p_token1        => G_COL_NAME_TOKEN,
18059                             p_token1_value  => 'INTERNAL_ORG_ID');
18060        RAISE OKL_API.G_EXCEPTION_ERROR;
18061     END IF;
18062 
18063     IF p_legal_entity_id IS NULL THEN
18064        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18065                             p_token1        => G_COL_NAME_TOKEN,
18066                             p_token1_value  => 'LEGAL_ENTITY_ID');
18067        RAISE OKL_API.G_EXCEPTION_ERROR;
18068     END IF;
18069 
18070     IF p_transaction_date IS NULL THEN
18071        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18072                             p_token1        => G_COL_NAME_TOKEN,
18073                             p_token1_value  => 'TRANSACTION_DATE');
18074        RAISE OKL_API.G_EXCEPTION_ERROR;
18075     END IF;
18076 
18077     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18078          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18079               'Calling OKL_TAX_INTERFACE_PVT.set_tax_security_context');
18080     END IF;
18081 
18082     -- Set Tax Security Context
18083     OKL_TAX_INTERFACE_PVT.set_tax_security_context(p_api_version           => p_api_version,
18084                                                    p_init_msg_list         => p_init_msg_list,
18085                                                    x_return_status         => l_return_status,
18086                                                    x_msg_count             => x_msg_count,
18087                                                    x_msg_data              => x_msg_data,
18088                                                    p_internal_org_id       => p_internal_org_id,
18089                                                    p_legal_entity_id       => p_legal_entity_id,
18090                                                    p_transaction_date      => p_transaction_date);
18091 
18092     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18093          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context.',
18094               'Return Status' || l_return_status);
18095     END IF;
18096 
18097     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18098       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18099     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18100       RAISE OKL_API.G_EXCEPTION_ERROR;
18101     END IF;
18102 
18103     x_return_status := l_return_status;
18104 
18105     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18106       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ','End(-)');
18107     END IF;
18108 
18109     -- end the transaction
18110     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18111 
18112 
18113    EXCEPTION
18114     WHEN OKL_API.G_EXCEPTION_ERROR THEN
18115 
18116       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18117          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ',
18118                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18119       END IF;
18120 
18121       x_return_status := OKL_API.HANDLE_EXCEPTIONS
18122       (
18123         l_api_name,
18124         G_PKG_NAME,
18125         'OKL_API.G_RET_STS_ERROR',
18126         x_msg_count,
18127         x_msg_data,
18128         '_PVT'
18129       );
18130     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
18131       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18132          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ',
18133                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
18134       END IF;
18135 
18136       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18137       (
18138         l_api_name,
18139         G_PKG_NAME,
18140         'OKL_API.G_RET_STS_UNEXP_ERROR',
18141         x_msg_count,
18142         x_msg_data,
18143         '_PVT'
18144       );
18145     WHEN OTHERS THEN
18146 
18147       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18148          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.set_tax_security_context ',
18149                   'EXCEPTION :'||sqlerrm);
18150       END IF;
18151 
18152       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18153       (
18154         l_api_name,
18155         G_PKG_NAME,
18156         'OTHERS',
18157         x_msg_count,
18158         x_msg_data,
18159         '_PVT'
18160       );
18161   END set_tax_security_context;
18162 
18163 /*========================================================================
18164  | PUBLIC PROCEDURE process_tax_determ_override
18165  |
18166  | DESCRIPTION
18167  |    This procedure is called by 'BOOKING', 'REBOOK' and 'ASSET LOCATION
18168  |    CHANGE' transactions to override tax determinants
18169  |
18170  | CALLED FROM                                  OLM Tax Events
18171  |
18172  |
18173  | CALLS PROCEDURES/FUNCTIONS
18174  |
18175  |
18176  | PARAMETERS
18177  |      p_trx_id                     -- Transaction Identifier
18178  |      p_tax_sources_id                 -- Tax Sources table unique Identifier
18179  |      p_trx_business_category      -- Transaction Business Category (Tax Determinant)
18180  |      p_product_category           -- Product Category (Tax Determinant)
18181  |      p_user_defined_fisc_class    -- User defined fiscal class (Tax Determinant)
18182  |      p_line_intended_use          -- Line intended use (Tax Determinant)
18183  |
18184  | KNOWN ISSUES
18185  |
18186  | NOTES
18187  |
18188  |
18189  | MODIFICATION HISTORY
18190  | Date          Author     Description of Changes
18191  | 01-FEB-07    RRAVIKIR      Created
18192  | 05-Jun-08    SECHAWLA      6844953  : Added nvl to the IF condition that
18193  |                                       checks whether determinants need
18194  |                                       to be modified
18195  |
18196  *=======================================================================*/
18197   PROCEDURE process_tax_determ_override(
18198     p_api_version                       IN  NUMBER,
18199     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18200     x_return_status                     OUT NOCOPY VARCHAR2,
18201     x_msg_count                         OUT NOCOPY NUMBER,
18202     x_msg_data                          OUT NOCOPY VARCHAR2,
18203     p_trx_id                        IN  NUMBER,
18204     p_tax_sources_id                IN  NUMBER,
18205     p_trx_business_category         IN  VARCHAR2,
18206     p_product_category                          IN  VARCHAR2,
18207     p_user_defined_fisc_class       IN  VARCHAR2,
18208     p_line_intended_use             IN  VARCHAR2,
18209     p_request_id                    IN  NUMBER DEFAULT NULL,
18210     p_asset_id                      IN  NUMBER DEFAULT NULL) IS
18211 
18212     -- Local variables
18213     l_api_version                   CONSTANT NUMBER := 1;
18214     l_api_name                      CONSTANT VARCHAR2(30) := 'process_tax_determ';
18215     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
18216     lx_doc_level_recalc_flag        VARCHAR2(1);
18217     l_total_tax_amount              NUMBER;
18218 
18219     -- Local data structure
18220     l_txsv_rec                    txsv_rec_type;
18221     lx_txsv_rec                   txsv_rec_type;
18222 
18223     l_transaction_rec             transaction_rec_type;
18224 
18225     -- Cursors
18226     CURSOR l_taxsources_csr(cp_tax_sources_id IN NUMBER) IS
18227     SELECT org_id, trx_line_id, application_id, event_class_code,
18228            entity_code, trx_level_type, khr_id, product_category, user_defined_fisc_class,
18229            trx_business_category, line_intended_use, alc_serialized_yn
18230     FROM  okl_tax_sources
18231     WHERE id = cp_tax_sources_id;
18232 
18233     CURSOR l_zxlinestotaltax_csr(cp_trx_id  IN NUMBER, cp_trx_line_id   IN NUMBER,
18234                                  cp_application_id  IN NUMBER, cp_event_class_code IN VARCHAR2,
18235                                  cp_entity_code  IN VARCHAR2, cp_trx_level_type  IN VARCHAR2) IS
18236     SELECT  SUM(zx_lines.tax_amt) total_tax
18237     FROM    zx_lines
18238     WHERE   trx_id = cp_trx_id
18239     AND     trx_line_id = cp_trx_line_id
18240     AND     application_id = cp_application_id
18241     AND     event_class_code = cp_event_class_code
18242     AND     entity_code = cp_entity_code
18243     AND     trx_level_type = cp_trx_level_type
18244     AND     nvl(cancel_flag, 'N') <> 'Y';
18245 
18246     -- Cursor Records
18247     l_taxsources_rec         l_taxsources_csr%ROWTYPE;
18248 
18249     l_values_changed         BOOLEAN := FALSE;
18250     l_alc_event              BOOLEAN := FALSE;
18251 
18252   BEGIN
18253     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18254         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override','Begin(+)');
18255     END IF;
18256 
18257     --Print Input Variables
18258     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18259          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18260               'p_init_msg_list :'||p_init_msg_list);
18261          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18262               'p_trx_id :'||p_trx_id);
18263          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18264               'p_tax_sources_id :'||p_tax_sources_id);
18265          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18266               'p_trx_business_category :'||p_trx_business_category);
18267          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18268               'p_product_category :'||p_product_category);
18269          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18270               'p_user_defined_fisc_class :'||p_user_defined_fisc_class);
18271          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18272               'p_line_intended_use :'||p_line_intended_use);
18273     END IF;
18274 
18275     --Check API version, initialize message list and create savepoint.
18276     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
18277                                               G_PKG_NAME,
18278                                               p_init_msg_list,
18279                                               l_api_version,
18280                                               p_api_version,
18281                                               '_PVT',
18282                                               x_return_status);
18283 
18284     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18285       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18286     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18287       RAISE OKL_API.G_EXCEPTION_ERROR;
18288     END IF;
18289 
18290     -- Required Values
18291     IF p_tax_sources_id IS NULL THEN
18292        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18293                             p_token1        => G_COL_NAME_TOKEN,
18294                             p_token1_value  => 'TAX_SOURCES_ID');
18295        RAISE OKL_API.G_EXCEPTION_ERROR;
18296     END IF;
18297 
18298     IF p_trx_business_category IS NULL THEN
18299        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18300                             p_token1        => G_COL_NAME_TOKEN,
18301                             p_token1_value  => 'TRX_BUSINESS_CATEGORY');
18302        RAISE OKL_API.G_EXCEPTION_ERROR;
18303     END IF;
18304 
18305     IF p_trx_id IS NULL THEN
18306        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18307                             p_token1        => G_COL_NAME_TOKEN,
18308                             p_token1_value  => 'TRX_ID');
18309        RAISE OKL_API.G_EXCEPTION_ERROR;
18310     END IF;
18311     -- End required values
18312 
18313     -- Fetch Tax Sources details
18314     OPEN l_taxsources_csr(cp_tax_sources_id  =>  p_tax_sources_id);
18315     FETCH l_taxsources_csr INTO l_taxsources_rec;
18316     CLOSE l_taxsources_csr;
18317 
18318     -- Check if the tax determinant values are changed
18319     -- SECHAWLA 05-Jun-08 6844953 : Added nvl
18320     IF (nvl(l_taxsources_rec.trx_business_category,'XYZ') <> nvl(p_trx_business_category,'XYZ') OR
18321         nvl(l_taxsources_rec.product_category,'XYZ') <> nvl(p_product_category,'XYZ') OR
18322         nvl(l_taxsources_rec.user_defined_fisc_class,'XYZ') <> nvl(p_user_defined_fisc_class,'XYZ') OR
18323         nvl(l_taxsources_rec.line_intended_use,'XYZ') <> nvl(p_line_intended_use,'XYZ')) THEN
18324       l_values_changed := TRUE;
18325     END IF;
18326 
18327     IF (l_values_changed) THEN
18328       -- Populate Tax Sources data structure and update tax determinants
18329       l_txsv_rec.id := p_tax_sources_id;
18330       l_txsv_rec.trx_business_category := p_trx_business_category;
18331       l_txsv_rec.product_category := p_product_category;
18332       l_txsv_rec.user_defined_fisc_class := p_user_defined_fisc_class;
18333       l_txsv_rec.line_intended_use := p_line_intended_use;
18334 
18335       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18336          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18337               'Calling okl_tax_sources_pub.update_tax_sources for Updating Tax determinants');
18338       END IF;
18339 
18340       okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
18341                                             ,p_init_msg_list   => p_init_msg_list
18342                                             ,x_return_status   => l_return_status
18343                                             ,x_msg_count       => x_msg_count
18344                                             ,x_msg_data        => x_msg_data
18345                                             ,p_txsv_rec        => l_txsv_rec
18346                                             ,x_txsv_rec        => lx_txsv_rec);
18347 
18348       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18349         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18350               'Return Status' || l_return_status);
18351       END IF;
18352 
18353       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18354         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18355       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18356         RAISE OKL_API.G_EXCEPTION_ERROR;
18357       END IF;
18358       -- End tax determinants update
18359 
18360       -- Recalculate Tax based on modified determinants
18361       -- Populate transaction record
18362       l_transaction_rec.trx_id := p_trx_id;
18363       l_transaction_rec.application_id           := l_taxsources_rec.application_id;
18364       l_transaction_rec.internal_organization_id := l_taxsources_rec.org_id;
18365       l_transaction_rec.entity_code              := l_taxsources_rec.entity_code ;
18366       l_transaction_rec.event_class_code         := l_taxsources_rec.event_class_code ;
18367 
18368       IF l_taxsources_rec.event_class_code = 'BOOKING' THEN
18369         l_transaction_rec.event_type_code       := G_BOOK_UPD_EVENT_CODE;
18370       ELSIF l_taxsources_rec.event_class_code = 'ASSET_RELOCATION' THEN
18371         l_transaction_rec.event_type_code       := G_ALC_UPD_EVENT_CODE;
18372         l_alc_event := TRUE;
18373           END IF;
18374 
18375       -- Recalculate tax with new determinants
18376       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18377         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18378               'Calling OKL_TAX_INTERFACE_PVT.process_tax_determ_override');
18379       END IF;
18380 
18381       OKL_TAX_INTERFACE_PVT.process_tax_determ_override(p_api_version             => p_api_version,
18382                                                         p_init_msg_list           => p_init_msg_list,
18383                                                         x_return_status           => l_return_status,
18384                                                         x_msg_count               => x_msg_count,
18385                                                         x_msg_data                => x_msg_data,
18386                                                         p_trx_id                  => p_trx_id,
18387                                                         p_tax_sources_id          => p_tax_sources_id,
18388                                                         p_trx_business_category   => p_trx_business_category,
18389                                                         p_product_category                => p_product_category,
18390                                                         p_user_defined_fisc_class => p_user_defined_fisc_class,
18391                                                         p_line_intended_use       => p_line_intended_use,
18392                                                         p_transaction_rec         => l_transaction_rec,
18393                                                         x_doc_level_recalc_flag   => lx_doc_level_recalc_flag);
18394 
18395       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18396         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18397               'Return Status' || l_return_status);
18398       END IF;
18399 
18400       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18401         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18402       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18403         RAISE OKL_API.G_EXCEPTION_ERROR;
18404       END IF;
18405 
18406       -- Action based on return status
18407       IF (lx_doc_level_recalc_flag = 'Y') THEN
18408         -- Recalculation of tax for this particular taxable line has changed the tax
18409         -- for other taxable lines as well, so update the total_tax column for all
18410         -- the transaction lines including the one for which tax call was made
18411 
18412         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18413           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18414             'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
18415         END IF;
18416 
18417         IF (l_alc_event) THEN
18418           update_tax_sources_total(p_api_version    => p_api_version,
18419                                    p_init_msg_list  => p_init_msg_list,
18420                                    x_return_status  => l_return_status,
18421                                    x_msg_count      => x_msg_count,
18422                                    x_msg_data       => x_msg_data,
18423                                    p_source_trx_id  => p_trx_id,
18424                                    p_source_trx_name => 'Asset Relocation');
18425 
18426           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18427             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18428           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18429             RAISE OKL_API.G_EXCEPTION_ERROR;
18430           END IF;
18431 
18432         ELSE
18433           update_tax_sources_total(p_api_version    => p_api_version,
18434                                    p_init_msg_list  => p_init_msg_list,
18435                                    x_return_status  => l_return_status,
18436                                    x_msg_count      => x_msg_count,
18437                                    x_msg_data       => x_msg_data,
18438                                    p_source_trx_id  => p_trx_id);
18439           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18440             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18441           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18442             RAISE OKL_API.G_EXCEPTION_ERROR;
18443           END IF;
18444 
18445         END IF;
18446 
18447         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18448           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18449             'Return Status' || l_return_status);
18450         END IF;
18451 
18452         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18453           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18454         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18455           RAISE OKL_API.G_EXCEPTION_ERROR;
18456         END IF;
18457 
18458       ELSIF (lx_doc_level_recalc_flag = 'N') THEN
18459 
18460         -- Recalculation of tax for this particular taxable line has not changed the
18461         -- tax for other taxable lines, so update the total_tax column for this
18462         -- transaction line only
18463         OPEN l_zxlinestotaltax_csr(cp_trx_id           => p_trx_id,
18464                                    cp_trx_line_id      => l_taxsources_rec.trx_line_id,
18465                                    cp_application_id   => l_taxsources_rec.application_id,
18466                                    cp_event_class_code => l_taxsources_rec.event_class_code,
18467                                    cp_entity_code      => l_taxsources_rec.entity_code,
18468                                    cp_trx_level_type   => l_taxsources_rec.trx_level_type);
18469         FETCH l_zxlinestotaltax_csr INTO l_total_tax_amount;
18470         CLOSE l_zxlinestotaltax_csr;
18471 
18472         -- Populate Tax Sources data structure and update total tax
18473         l_txsv_rec.id := p_tax_sources_id;
18474         l_txsv_rec.total_tax := l_total_tax_amount;
18475 
18476         IF (l_alc_event) THEN
18477           l_txsv_rec.alc_serialized_total_tax := l_total_tax_amount;
18478         END IF;
18479 
18480         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18481           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18482               'Calling okl_tax_sources_pub.update_tax_sources for updating Total Tax for current line in Tax Sources');
18483         END IF;
18484 
18485         okl_tax_sources_pub.update_tax_sources(p_api_version     => p_api_version
18486                                               ,p_init_msg_list   => p_init_msg_list
18487                                               ,x_return_status   => l_return_status
18488                                               ,x_msg_count       => x_msg_count
18489                                               ,x_msg_data        => x_msg_data
18490                                               ,p_txsv_rec        => l_txsv_rec
18491                                               ,x_txsv_rec        => lx_txsv_rec);
18492 
18493         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18494           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override.',
18495             'Return Status' || l_return_status);
18496         END IF;
18497 
18498         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18499          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18500         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18501           RAISE OKL_API.G_EXCEPTION_ERROR;
18502         END IF;
18503       END IF;
18504       -- End actions based on return status
18505       -- End Recalculate tax
18506 
18507       -- Condition to populate 'ALC_SERIALIZED_TOTAL_TAX' column of tax sources
18508       IF (l_alc_event AND l_taxsources_rec.alc_serialized_yn = 'Y') THEN
18509         populate_alc_total_tax(p_api_version    => p_api_version,
18510                                p_init_msg_list  => p_init_msg_list,
18511                                x_return_status  => l_return_status,
18512                                x_msg_count      => x_msg_count,
18513                                x_msg_data       => x_msg_data,
18514                                p_asset_id       => p_asset_id,
18515                                p_request_id     => p_request_id);
18516 
18517         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18518           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18519         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18520           RAISE OKL_API.G_EXCEPTION_ERROR;
18521         END IF;
18522       END IF;
18523 
18524       -- Call Authoring package to sync tax values for 'BOOKING' and 'REBOOK' transactions
18525       IF (l_taxsources_rec.event_class_code = 'BOOKING' OR
18526           l_taxsources_rec.event_class_code = 'REBOOK') THEN
18527         OKL_LA_SALES_TAX_PVT.process_tax_override(
18528                                               p_api_version      => p_api_version,
18529                                               p_init_msg_list    => p_init_msg_list,
18530                                               p_chr_id           => l_taxsources_rec.khr_id,
18531                                               p_transaction_id   => p_trx_id,
18532                                               x_return_status    => l_return_status,
18533                                               x_msg_count        => x_msg_count,
18534                                               x_msg_data         => x_msg_data );
18535         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18536           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18537         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18538           RAISE OKL_API.G_EXCEPTION_ERROR;
18539         END IF;
18540       END IF;
18541       -- End call to Authoring package
18542 
18543     END IF;
18544 
18545     x_return_status := l_return_status;
18546 
18547     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18548       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ','End(-)');
18549     END IF;
18550 
18551     -- end the transaction
18552     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18553 
18554   EXCEPTION
18555 
18556     WHEN OKL_API.G_EXCEPTION_ERROR THEN
18557 
18558       IF (l_zxlinestotaltax_csr%ISOPEN) THEN
18559         CLOSE l_zxlinestotaltax_csr;
18560       END IF;
18561 
18562       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18563          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ',
18564                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18565       END IF;
18566 
18567       x_return_status := OKL_API.HANDLE_EXCEPTIONS
18568       (
18569         l_api_name,
18570         G_PKG_NAME,
18571         'OKL_API.G_RET_STS_ERROR',
18572         x_msg_count,
18573         x_msg_data,
18574         '_PVT'
18575       );
18576     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
18577 
18578       IF (l_zxlinestotaltax_csr%ISOPEN) THEN
18579         CLOSE l_zxlinestotaltax_csr;
18580       END IF;
18581 
18582       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18583          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ',
18584                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
18585       END IF;
18586 
18587       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18588       (
18589         l_api_name,
18590         G_PKG_NAME,
18591         'OKL_API.G_RET_STS_UNEXP_ERROR',
18592         x_msg_count,
18593         x_msg_data,
18594         '_PVT'
18595       );
18596     WHEN OTHERS THEN
18597 
18598       IF (l_zxlinestotaltax_csr%ISOPEN) THEN
18599         CLOSE l_zxlinestotaltax_csr;
18600       END IF;
18601 
18602       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18603          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_determ_override ',
18604                   'EXCEPTION :'||sqlerrm);
18605       END IF;
18606 
18607       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18608       (
18609         l_api_name,
18610         G_PKG_NAME,
18611         'OTHERS',
18612         x_msg_count,
18613         x_msg_data,
18614         '_PVT'
18615       );
18616   END process_tax_determ_override;
18617 
18618 /*========================================================================
18619  | PUBLIC PROCEDURE process_tax_details_override
18620  |
18621  | DESCRIPTION
18622  |    This procedure is called by 'BOOKING', 'REBOOK' and 'ASSET LOCATION
18623  |    CHANGE' transactions to override tax details
18624  |
18625  | CALLED FROM                                  OLM Tax Events
18626  |
18627  |
18628  | CALLS PROCEDURES/FUNCTIONS
18629  |
18630  |
18631  | PARAMETERS
18632  |      p_event_id                               -- Tax Lines window will return an event id
18633  |                                      when there are any user overrides. It is
18634  |                                      this event id value that needs to be passed
18635  |                                      by OA Tax Override and Forms Tax Override Uis,
18636  |                                      to this API
18637  |      p_internal_organization_id   -- Organization Identifier
18638  |      p_trx_id                     -- Transaction Identifier
18639  |      p_application_id             -- Application Identifier
18640  |      p_entity_code                -- Entity code
18641  |      p_event_class_code           -- Event class code
18642  |
18643  | KNOWN ISSUES
18644  |
18645  | NOTES
18646  |
18647  |
18648  | MODIFICATION HISTORY
18649  | Date          Author     Description of Changes
18650  | 22-FEB-07    RRAVIKIR      Created
18651  |
18652  *=======================================================================*/
18653   PROCEDURE process_tax_details_override(
18654     p_api_version                       IN  NUMBER,
18655     p_init_msg_list                     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18656     x_return_status                     OUT NOCOPY VARCHAR2,
18657     x_msg_count                         OUT NOCOPY NUMBER,
18658     x_msg_data                          OUT NOCOPY VARCHAR2,
18659     p_event_id                      IN  NUMBER,
18660     p_internal_organization_id      IN  NUMBER,
18661     p_trx_id                        IN  NUMBER,
18662     p_application_id                IN  NUMBER,
18663     p_entity_code                                   IN  VARCHAR2,
18664     p_event_class_code              IN  VARCHAR2) IS
18665 
18666     -- Local variables
18667     l_api_version                   CONSTANT NUMBER := 1;
18668     l_api_name                      CONSTANT VARCHAR2(30) := 'process_tax_details';
18669     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
18670     l_total_tax_amount              NUMBER;
18671 
18672     -- Local data structure
18673     l_txsv_rec                    txsv_rec_type;
18674     lx_txsv_rec                   txsv_rec_type;
18675     l_transaction_rec             transaction_rec_type;
18676 
18677     -- Cursors
18678   BEGIN
18679 
18680     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18681         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override','Begin(+)');
18682     END IF;
18683 
18684     --Print Input Variables
18685     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18686          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18687               'p_init_msg_list :'||p_init_msg_list);
18688          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18689               'p_trx_id :'||p_trx_id);
18690          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18691               'p_event_id :'||p_event_id);
18692          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18693               'p_internal_organization_id :'||p_internal_organization_id);
18694          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18695               'p_application_id :'||p_application_id);
18696          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18697               'p_entity_code :'||p_entity_code);
18698          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18699               'p_event_class_code :'||p_event_class_code);
18700     END IF;
18701 
18702     --Check API version, initialize message list and create savepoint.
18703     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
18704                                               G_PKG_NAME,
18705                                               p_init_msg_list,
18706                                               l_api_version,
18707                                               p_api_version,
18708                                               '_PVT',
18709                                               x_return_status);
18710 
18711     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18712       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18713     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18714       RAISE OKL_API.G_EXCEPTION_ERROR;
18715     END IF;
18716 
18717     -- Required Values
18718     IF p_application_id IS NULL THEN
18719        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18720                             p_token1        => G_COL_NAME_TOKEN,
18721                             p_token1_value  => 'APPLICATION_ID');
18722        RAISE OKL_API.G_EXCEPTION_ERROR;
18723     END IF;
18724 
18725     IF p_entity_code IS NULL THEN
18726        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18727                             p_token1        => G_COL_NAME_TOKEN,
18728                             p_token1_value  => 'ENTITY_CODE');
18729        RAISE OKL_API.G_EXCEPTION_ERROR;
18730     END IF;
18731 
18732     IF p_event_class_code IS NULL THEN
18733        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18734                             p_token1        => G_COL_NAME_TOKEN,
18735                             p_token1_value  => 'EVENT_CLASS_CODE');
18736        RAISE OKL_API.G_EXCEPTION_ERROR;
18737     END IF;
18738 
18739     IF p_internal_organization_id IS NULL THEN
18740        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18741                             p_token1        => G_COL_NAME_TOKEN,
18742                             p_token1_value  => 'INTERNAL_ORGANIZATION_ID');
18743        RAISE OKL_API.G_EXCEPTION_ERROR;
18744     END IF;
18745 
18746     IF p_trx_id IS NULL THEN
18747        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
18748                             p_token1        => G_COL_NAME_TOKEN,
18749                             p_token1_value  => 'TRX_ID');
18750        RAISE OKL_API.G_EXCEPTION_ERROR;
18751     END IF;
18752     -- End required values
18753 
18754     -- Populate Transaction record
18755     l_transaction_rec.application_id    := p_application_id;
18756     l_transaction_rec.entity_code       := p_entity_code;
18757     l_transaction_rec.event_class_code  := p_event_class_code;
18758 
18759     IF  p_event_class_code = 'BOOKING' THEN
18760       l_transaction_rec.event_type_code  := G_BOOK_OVERRIDE_EVENT;
18761     ELSIF p_event_class_code = 'ASSET_RELOCATION' THEN
18762       l_transaction_rec.event_type_code  := G_ALC_OVERRIDE_EVENT;
18763     END IF;
18764 
18765     l_transaction_rec.trx_id  := p_trx_id;
18766     l_transaction_rec.internal_organization_id := p_internal_organization_id;
18767 
18768     -- Override tax with new values
18769     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18770          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18771               'Calling OKL_TAX_INTERFACE_PVT.process_tax_details_override');
18772     END IF;
18773 
18774     OKL_TAX_INTERFACE_PVT.process_tax_details_override
18775         (p_api_version           => p_api_version,
18776          p_init_msg_list         => p_init_msg_list,
18777          x_return_status         => l_return_status,
18778          x_msg_count             => x_msg_count,
18779          x_msg_data              => x_msg_data,
18780          p_transaction_rec       => l_transaction_rec,
18781          p_override_level        => G_OVERRIDE_LEVEL,
18782          p_event_id              => p_event_id);
18783 
18784     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18785          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18786               'Return Status' || l_return_status);
18787     END IF;
18788 
18789     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18790       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18791     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18792       RAISE OKL_API.G_EXCEPTION_ERROR;
18793     END IF;
18794 
18795     -- Overriding a tax line can impact the tax lines of other transaction lines
18796     -- Get the modified tax lines from zx_lines, sum up the total tax amount
18797     -- and store in total_tax column of okl_tax_sources
18798 
18799     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18800       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18801           'Calling "update_tax_sources_total" for updating Total Tax for all Lines in Tax Sources');
18802     END IF;
18803 
18804     update_tax_sources_total(p_api_version    => p_api_version,
18805                              p_init_msg_list  => p_init_msg_list,
18806                              x_return_status  => l_return_status,
18807                              x_msg_count      => x_msg_count,
18808                              x_msg_data       => x_msg_data,
18809                              p_source_trx_id  => p_trx_id);
18810 
18811     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18812       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override.',
18813           'Return Status' || l_return_status);
18814     END IF;
18815 
18816     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18817       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18818     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
18819       RAISE OKL_API.G_EXCEPTION_ERROR;
18820     END IF;
18821 
18822     x_return_status := l_return_status;
18823 
18824     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18825       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ','End(-)');
18826     END IF;
18827 
18828     -- end the transaction
18829     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
18830 
18831   EXCEPTION
18832     WHEN OKL_API.G_EXCEPTION_ERROR THEN
18833 
18834       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18835          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ',
18836                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
18837       END IF;
18838 
18839       x_return_status := OKL_API.HANDLE_EXCEPTIONS
18840       (
18841         l_api_name,
18842         G_PKG_NAME,
18843         'OKL_API.G_RET_STS_ERROR',
18844         x_msg_count,
18845         x_msg_data,
18846         '_PVT'
18847       );
18848     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
18849       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18850          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ',
18851                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
18852       END IF;
18853 
18854       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18855       (
18856         l_api_name,
18857         G_PKG_NAME,
18858         'OKL_API.G_RET_STS_UNEXP_ERROR',
18859         x_msg_count,
18860         x_msg_data,
18861         '_PVT'
18862       );
18863     WHEN OTHERS THEN
18864 
18865       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
18866          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.process_tax_details_override ',
18867                   'EXCEPTION :'||sqlerrm);
18868       END IF;
18869 
18870       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
18871       (
18872         l_api_name,
18873         G_PKG_NAME,
18874         'OTHERS',
18875         x_msg_count,
18876         x_msg_data,
18877         '_PVT'
18878       );
18879   END process_tax_details_override;
18880 
18881   /*========================================================================
18882    | PUBLIC PROCEDURE get_tax_determinants
18883    |
18884    | DESCRIPTION
18885    |    This procedure will be called by Billing and P2P transactions to derive
18886    |    tax determinants. Billing -  Invoice tax is to be reported from AR. Pass
18887    |    reporting flag as 'Y' in autoinvoice interface P2P - PRODUCT_CATEGORY,
18888    |    LINE_INTENDED_USE, USER_DEFINED_FISC_CLASS are not applicable in case of
18889    |    P2P, hence the out parameters will be null in this case. Tax reporting
18890    |    flag not in AP interface table - Not applicable
18891    |
18892    | CALLED FROM          OLM Billing and Disbursement Modules
18893    |
18894    |
18895    | CALLS PROCEDURES/FUNCTIONS
18896    |       okl_am_util_pvt.get_formula_value()
18897    |
18898    | PARAMETERS
18899    |   - Billing
18900    |      p_source_trx_id   -- OKL_TXD_AR_LN_DTLS_B.ID
18901    |      p_source_trx_name   -- Billing / Credit Memo transaction
18902    |      p_source_table      -- OKL_TXD_AR_LN_DTLS_B
18903    |   - P2P
18904    |      p_source_trx_id   -- OKL_TXL_AP_INV_LNS_ALL_B.ID
18905    |      p_source_trx_name   -- Funding / Disbursements transaction
18906    |      p_source_table      -- OKL_TXL_AP_INV_LNS_ALL_B
18907    |
18908    | KNOWN ISSUES
18909    |
18910    | NOTES
18911    |
18912    |
18913    | MODIFICATION HISTORY
18914    | Date          Author   Description of Changes
18915    | 01-MAR-07    RRAVIKIR  Created
18916    | 04-Jan-08    SECHAWLA  6651621 Added 3 additional parameters to taxable basis override formula -
18917  |                            'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
18918    |
18919    *=======================================================================*/
18920     PROCEDURE get_tax_determinants(
18921       p_api_version                   IN  NUMBER,
18922       p_init_msg_list                 IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
18923       x_return_status                 OUT NOCOPY VARCHAR2,
18924       x_msg_count                     OUT NOCOPY NUMBER,
18925       x_msg_data                      OUT NOCOPY VARCHAR2,
18926       p_source_trx_id                 IN  NUMBER,
18927       p_source_trx_name               IN  VARCHAR2,
18928       p_source_table                  IN  VARCHAR2,
18929       x_tax_det_rec                   OUT NOCOPY tax_det_rec_type) IS
18930 
18931       -- Billing / Credit Memo Cursors
18932       -- Get the billing details
18933           CURSOR l_billingdtls_csr(cp_det_line_id IN NUMBER) IS
18934           SELECT hdr.id hdr_id, hdr.khr_id, hdr.date_invoiced, hdr.try_id try_id,
18935              hdr.qte_id, hdr.ibt_id , hdr.legal_entity_id, line.id line_id, line.kle_id,
18936              line.isl_id, det.sty_id, det.amount
18937       FROM   okl_trx_ar_invoices_b hdr, okl_txl_ar_inv_lns_b line,
18938              okl_txd_ar_ln_dtls_b det
18939       WHERE  det.id = cp_det_line_id
18940       AND    det.til_id_details = line.id
18941       AND    line.tai_id = hdr.id;
18942 
18943       -- Get the quote details
18944       CURSOR l_trxquotes_csr(cp_qte_id IN NUMBER) IS
18945       SELECT qtp_code, qrs_code, early_termination_yn
18946       FROM   okl_trx_quotes_b
18947       WHERE  id = cp_qte_id;
18948 
18949       -- Get stream type purpose for a given stream type id
18950       CURSOR l_strmtype_csr(cp_sty_id IN NUMBER) IS
18951       SELECT stream_type_purpose
18952       FROM   okl_strm_type_b
18953       WHERE  id = cp_sty_id;
18954 
18955       -- Get the line type
18956       CURSOR l_okclinestyle_csr(cp_kle_id IN NUMBER) IS
18957       SELECT lse.lty_code
18958           FROM   okc_k_lines_b line, okc_line_styles_b lse
18959           WHERE  line.lse_id = lse.id
18960           AND    line.id = cp_kle_id;
18961 
18962       -- Get line name
18963           CURSOR l_okclines_csr(cp_line_id IN NUMBER) IS
18964           SELECT name
18965           FROM   okc_k_lines_v
18966           WHERE  id = cp_line_id;
18967 
18968       -- Get the financial asset associated with a given subline
18969       CURSOR l_finasset_csr(cp_fee_serviced_asset_line_id IN NUMBER, cp_line_type IN VARCHAR2) IS
18970       SELECT cim.object1_id1
18971       FROM   okc_k_lines_b cle, okc_line_styles_b lse, okc_k_items cim
18972       WHERE  cle.lse_id = lse.id
18973       AND    lse.lty_code = cp_line_type
18974       AND    cim.cle_id = cle.id
18975       AND    cle.id = cp_fee_serviced_asset_line_id;
18976 
18977       -- get the inventory item from the sales order
18978       CURSOR l_oeorderlines_csr(cp_line_id IN NUMBER) IS
18979       SELECT inventory_item_id, ship_from_org_id, ship_to_org_id
18980       FROM   oe_order_lines_all
18981       WHERE  line_id = cp_line_id;
18982 
18983       -- get the inventory item id and inventory item org for a financial asset
18984       CURSOR l_invitem_csr(cp_fin_asset_id IN NUMBER) IS
18985       SELECT cim_model.object1_id1,
18986              cim_model.object1_id2
18987       FROM   okc_k_items cim_model,
18988              okc_k_lines_b cleb_model,
18989              okc_line_styles_b lseb_model
18990       WHERE  cim_model.cle_id    = cleb_model.id
18991       AND    cleb_model.cle_id   = cp_fin_asset_id
18992       AND    lseb_model.id       = cleb_model.lse_id
18993       AND    lseb_model.lty_code = 'ITEM';
18994 
18995       CURSOR c_get_set_of_books_id(cp_org_id IN NUMBER) IS
18996       SELECT set_of_books_id
18997       FROM   ar_system_parameters_all
18998       WHERE  org_id = cp_org_id;
18999 
19000       -- Check if tax basis override formula exists
19001       CURSOR l_txbasisoverride_csr(cp_try_id IN NUMBER) IS
19002       SELECT fma_id
19003       FROM   okl_tax_basis_override
19004       WHERE  try_id = cp_try_id
19005       AND    org_id = MO_GLOBAL.get_current_org_id;
19006 
19007       -- get formula name
19008       CURSOR l_formulae_csr(cp_fma_id IN NUMBER) IS
19009       SELECT name
19010       FROM   okl_formulae_b
19011       WHERE  id = cp_fma_id;
19012 
19013       -- Funding / Debit Memo / Disbursement Cursors
19014           CURSOR l_disbdtls_csr(cp_line_id IN NUMBER) IS
19015           SELECT hdr.id hdr_id, line.khr_id, hdr.date_invoiced, hdr.try_id try_id,
19016              hdr.qte_id, hdr.legal_entity_id, line.id line_id, line.kle_id,
19017              line.sty_id, line.amount, hdr.ipvs_id
19018       FROM   okl_trx_ap_invoices_b hdr, okl_txl_ap_inv_lns_b line
19019       WHERE  line.id = cp_line_id
19020       AND    line.tap_id = hdr.id;
19021 
19022       CURSOR l_get_vendor_csr(cp_vendor_site_id IN NUMBER) IS
19023       SELECT vendor_id
19024       FROM   po_vendor_sites
19025       WHERE  vendor_site_id = cp_vendor_site_id;
19026 
19027       -- Record types
19028       l_billingdtls_rec               l_billingdtls_csr%ROWTYPE;
19029       l_disbdtls_rec                  l_disbdtls_csr%ROWTYPE;
19030       l_add_params                                        okl_execute_formula_pub.ctxt_val_tbl_type;
19031 
19032       -- Local variables
19033       l_api_version                   CONSTANT NUMBER := 1;
19034       l_api_name                      CONSTANT VARCHAR2(30) := 'get_tax_determinants';
19035 
19036       l_qtp_code                      okl_trx_quotes_b.qtp_code%TYPE;
19037       l_qte_reason                    okl_trx_quotes_b.qrs_code%TYPE;
19038       l_early_term_yn                 okl_trx_quotes_b.early_termination_yn%TYPE;
19039       l_purpose_code                  okl_strm_type_b.stream_type_purpose%TYPE;
19040       l_product_type                  VARCHAR2(30);
19041       l_def_tax_country               VARCHAR2(2);
19042       l_reporting_flag                VARCHAR2(1);
19043 
19044       lx_cust_acct_id                 NUMBER;
19045       lx_currency_code                VARCHAR2(15);
19046       lx_precision                    NUMBER;
19047       lx_minimum_accountable_unit     NUMBER;
19048       lx_cust_trx_type_id             NUMBER;
19049 
19050       lx_pb_prch_opt_det              VARCHAR2(450);
19051       lx_pb_fin_prod_id_det           NUMBER;
19052       lx_pb_int_disclosed_det         VARCHAR2(30);
19053       lx_bill_to_party_site_id        NUMBER;
19054       lx_bill_to_location_id          NUMBER;
19055       lx_bill_to_party_id             NUMBER;
19056       lx_bill_to_siteuseid            NUMBER;
19057       lx_ship_to_party_site_id        NUMBER;
19058       lx_ship_to_location_id          NUMBER;
19059       lx_ship_to_party_id             NUMBER;
19060       lx_ship_to_siteuseid            NUMBER;
19061 
19062       lx_org_id                       NUMBER;
19063       lx_book_class_code              VARCHAR2(30);
19064       lx_currency_conversion_type     VARCHAR2(30);
19065       lx_currency_conversion_rate     NUMBER;
19066       lx_currency_conversion_date     DATE;
19067       lx_contract_start_date          DATE;
19068       lx_transfer_of_title            VARCHAR2(30);
19069       lx_sale_lease_back              VARCHAR2(30);
19070       lx_purchase_of_lease            VARCHAR2(30);
19071       lx_usage_of_equipment           VARCHAR2(450);
19072       lx_age_of_equipment             NUMBER;
19073       lx_vendor_site_id               NUMBER;
19074       lx_tbc_code                     VARCHAR2(240);
19075       lx_pc_code                      VARCHAR2(240);
19076       lx_ufc_code                     VARCHAR2(240);
19077       lx_tax_classification_code      VARCHAR2(50);
19078       lx_assessable_value             NUMBER;
19079 
19080       l_line_type                     VARCHAR2(100);
19081       l_fin_asset_id                  NUMBER;
19082       l_inv_item_id                   NUMBER;
19083       l_inv_item_org_id               NUMBER;
19084       l_name                          VARCHAR2(30);
19085       l_set_of_books_id               NUMBER;
19086       l_fma_id                        NUMBER;
19087       l_formula_name                  VARCHAR2(150);
19088       l_event_class_code              VARCHAR2(30);
19089       l_asset_exists                  BOOLEAN := FALSE;
19090       l_vendor_id                     NUMBER;
19091       lx_tax_valid_code               VARCHAR2(1);
19092 
19093     BEGIN
19094 
19095       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19096         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants','Begin(+)');
19097       END IF;
19098 
19099       --Print Input Variables
19100       IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19101         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19102                 'p_init_msg_list :'||p_init_msg_list);
19103         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19104                 'p_source_trx_id :'||p_source_trx_id);
19105         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19106                 'p_source_trx_name :'||p_source_trx_name);
19107         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19108                 'p_source_table :'||p_source_table);
19109       END IF;
19110 
19111       --Check API version, initialize message list and create savepoint.
19112       x_return_status := OKL_API.START_ACTIVITY(l_api_name,
19113                                                 G_PKG_NAME,
19114                                                 p_init_msg_list,
19115                                                 l_api_version,
19116                                                 p_api_version,
19117                                                 '_PVT',
19118                                                 x_return_status);
19119       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19120         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19121       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19122         RAISE OKL_API.G_EXCEPTION_ERROR;
19123       END IF;
19124 
19125       IF p_source_trx_name IN ('Billing', 'Credit Memo', 'Rollover Billing',
19126                                'Rollover Credit Memo', 'Release Billing',
19127                                'Release Credit Memo') THEN
19128 
19129         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19130           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19131                   'Call to (Billing, Credit Memo, Rollover Billing, Rollover Credit Memo,
19132                             Release Billing, Release Credit Memo) .. ');
19133         END IF;
19134 
19135         -- Validate source trx id
19136         OPEN  l_billingdtls_csr(p_source_trx_id);
19137         FETCH l_billingdtls_csr INTO l_billingdtls_rec;
19138         IF l_billingdtls_csr %NOTFOUND THEN
19139           OKC_API.set_message( p_app_name      => 'OKC',
19140                                p_msg_name      => G_INVALID_VALUE,
19141                                p_token1        => G_COL_NAME_TOKEN,
19142                                p_token1_value  => 'SOURCE_TRX_ID');
19143           RAISE OKL_API.G_EXCEPTION_ERROR;
19144         END IF;
19145         CLOSE l_billingdtls_csr;
19146 
19147         IF l_billingdtls_rec.qte_id IS NOT NULL THEN  -- Invoice created for a quote
19148           OPEN  l_trxquotes_csr(l_billingdtls_rec.qte_id);
19149           FETCH l_trxquotes_csr INTO l_qtp_code, l_qte_reason, l_early_term_yn;
19150           CLOSE l_trxquotes_csr;
19151         END IF;
19152 
19153         IF l_billingdtls_rec.sty_id IS NOT NULL THEN
19154           OPEN  l_strmtype_csr(l_billingdtls_rec.sty_id);
19155           FETCH l_strmtype_csr INTO l_purpose_code;
19156           CLOSE l_strmtype_csr;
19157         END IF;
19158 
19159         l_product_type := G_SERVICES;
19160         l_def_tax_country := get_default_taxation_country(x_return_status     => x_return_status,
19161                                                           x_msg_count         => x_msg_count,
19162                                                           x_msg_data          => x_msg_data,
19163                                                           p_legal_entity_id   => l_billingdtls_rec.legal_entity_id);
19164             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19165           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19166         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19167           RAISE OKL_API.G_EXCEPTION_ERROR;
19168         END IF;
19169 
19170         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19171           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19172                 ' l_qtp_code :'||l_qtp_code);
19173           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19174                 ' l_qte_reason :'||l_qte_reason);
19175           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19176                 ' l_early_term_yn :'||l_early_term_yn);
19177           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19178                 ' l_purpose_code :'||l_purpose_code);
19179           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19180                 ' l_def_tax_country :'||l_def_tax_country);
19181         END IF;
19182 
19183         l_reporting_flag := 'Y';
19184 
19185         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19186           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19187                   'Call to (Billing, Credit Memo, Rollover Billing, Rollover Credit Memo,
19188                             Release Billing, Release Credit Memo) .. ');
19189         END IF;
19190         -- get header level tax parameters
19191         get_k_hdr_tax_params( p_api_version                  => p_api_version,
19192                               p_init_msg_list                => p_init_msg_list,
19193                               x_return_status                => x_return_status,
19194                               x_msg_count                    => x_msg_count,
19195                               x_msg_data                     => x_msg_data,
19196                               p_khr_id                       => l_billingdtls_rec.khr_id,
19197                               p_source_trx_name              => p_source_trx_name,
19198                               p_source_table                 => p_source_table,
19199                               x_cust_acct_id                 => lx_cust_acct_id,
19200                               x_bill_to_siteuseid            => lx_bill_to_siteuseid,
19201                               x_currency_code                => lx_currency_code,
19202                               x_cust_trx_type_id             => lx_cust_trx_type_id,
19203                               x_precision                    => lx_precision,
19204                               x_minimum_accountable_unit     => lx_minimum_accountable_unit,
19205                               x_prch_opt_det                 => lx_pb_prch_opt_det,
19206                               x_fin_prod_id_det              => lx_pb_fin_prod_id_det,
19207                               x_int_disclosed_det            => lx_pb_int_disclosed_det,
19208                               x_org_id                       => lx_org_id,
19209                               x_book_class_code              => lx_book_class_code,
19210                               x_bill_to_party_site_id        => lx_bill_to_party_site_id,
19211                               x_bill_to_party_id             => lx_bill_to_party_id,
19212                               x_bill_to_location_id          => lx_bill_to_location_id,
19213                               x_currency_conversion_type     => lx_currency_conversion_type,
19214                               x_currency_conversion_rate     => lx_currency_conversion_rate,
19215                               x_currency_conversion_date     => lx_currency_conversion_date,
19216                               x_contract_start_date          => lx_contract_start_date);
19217         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19218           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19219         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19220           RAISE OKL_API.G_EXCEPTION_ERROR;
19221         END IF;
19222 
19223         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19224           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19225                 ' l_billingdtls_rec.khr_id :'||l_billingdtls_rec.khr_id);
19226           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19227                 ' lx_cust_acct_id :'||lx_cust_acct_id);
19228           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19229                 ' lx_bill_to_siteuseid :'||lx_bill_to_siteuseid);
19230           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19231                 ' lx_currency_code :'||lx_currency_code);
19232           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19233                 ' lx_cust_trx_type_id :'||lx_cust_trx_type_id);
19234           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19235                 ' lx_precision :'||lx_precision);
19236           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19237                 ' lx_minimum_accountable_unit :'||lx_minimum_accountable_unit);
19238           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19239                 ' lx_pb_prch_opt_det :'||lx_pb_prch_opt_det);
19240           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19241                 ' lx_pb_fin_prod_id_det :'||lx_pb_fin_prod_id_det);
19242           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19243                 ' lx_pb_int_disclosed_det :'||lx_pb_int_disclosed_det);
19244           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19245                 ' lx_org_id :'||lx_org_id);
19246           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19247                 ' lx_book_class_code :'||lx_book_class_code);
19248           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19249                 ' lx_bill_to_party_site_id :'||lx_bill_to_party_site_id);
19250           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19251                 ' lx_bill_to_party_id :'||lx_bill_to_party_id);
19252           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19253                 ' lx_bill_to_location_id :'||l_def_tax_country);
19254           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19255                 ' lx_currency_conversion_type :'||lx_currency_conversion_type);
19256           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19257                 ' lx_currency_conversion_rate :'||lx_currency_conversion_rate);
19258           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19259                 ' lx_currency_conversion_date :'||lx_currency_conversion_date);
19260           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19261                 ' lx_contract_start_date :'||lx_contract_start_date);
19262         END IF;
19263 
19264         -- Line level Invoice
19265         IF l_billingdtls_rec.kle_id IS NOT NULL THEN
19266 
19267           OPEN  l_okclinestyle_csr(l_billingdtls_rec.kle_id);
19268           FETCH l_okclinestyle_csr INTO l_line_type;
19269           CLOSE l_okclinestyle_csr;
19270 
19271           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19272             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants',
19273                   'line level inv '||' l_line_type = '||l_line_type);
19274           END IF;
19275 
19276           IF l_line_type IN ('FREE_FORM1','LINK_SERV_ASSET','LINK_FEE_ASSET') THEN
19277 
19278             l_asset_exists := TRUE;
19279 
19280             -- For regular stream billing, l_line_type can have any of the above 3 values
19281             -- For transaction billing, l_line_type can only be FREE_FORM1
19282             OPEN  l_okclines_csr(l_billingdtls_rec.kle_id);
19283             FETCH l_okclines_csr INTO l_name;
19284             CLOSE l_okclines_csr;
19285 
19286             IF l_line_type = 'FREE_FORM1' THEN
19287               l_fin_asset_id := l_billingdtls_rec.kle_id;
19288             ELSE
19289               -- If subline level, get the attached fin asset id
19290                   OPEN  l_finasset_csr(l_billingdtls_rec.kle_id, l_line_type);
19291                   FETCH l_finasset_csr INTO l_fin_asset_id;
19292                   CLOSE l_finasset_csr;
19293             END IF;
19294 
19295             -- Get the asset level determinants
19296             get_asset_tax_params(
19297                                 p_api_version                  => p_api_version,
19298                         p_init_msg_list                => p_init_msg_list,
19299                         x_return_status                => x_return_status,
19300                         x_msg_count                    => x_msg_count,
19301                         x_msg_data                     => x_msg_data,
19302                         p_khr_id                       => l_billingdtls_rec.khr_id,
19303                         p_kle_id                       => l_fin_asset_id,
19304                         p_source_trx_name              => p_source_trx_name,
19305                         p_source_table                 => p_source_table,
19306                         p_qtp_code                     => l_qtp_code,
19307                         p_purpose_code                 => l_purpose_code,
19308                         x_transfer_of_title                        => lx_transfer_of_title,
19309                         x_sale_lease_back                          => lx_sale_lease_back,
19310                         x_purchase_of_lease                        => lx_purchase_of_lease,
19311                         x_usage_of_equipment               => lx_usage_of_equipment,
19312                                 x_age_of_equipment                         => lx_age_of_equipment,
19313                                 x_vendor_site_id                       => lx_vendor_site_id);
19314                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19315                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19316             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19317                   RAISE OKL_API.G_EXCEPTION_ERROR;
19318             END IF;
19319 
19320             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19321               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19322                 ' l_fin_asset_id :'||l_fin_asset_id);
19323               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19324                 ' lx_transfer_of_title :'||lx_transfer_of_title);
19325               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19326                 ' lx_sale_lease_back :'||lx_sale_lease_back);
19327               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19328                 ' lx_purchase_of_lease :'||lx_purchase_of_lease);
19329               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19330                 ' lx_usage_of_equipment :'||lx_usage_of_equipment);
19331               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19332                 ' lx_age_of_equipment :'||lx_age_of_equipment);
19333               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19334                 ' lx_vendor_site_id :'||lx_vendor_site_id);
19335               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19336                 ' l_billingdtls_rec.qte_id :'||l_billingdtls_rec.qte_id);
19337             END IF;
19338 
19339             -- Equipment Type(inventory item id)
19340             -- Get the inventory item id
19341             IF l_billingdtls_rec.qte_id IS NULL AND l_purpose_code = 'AMBSPR' THEN -- Remarketing billing
19342               l_product_type := G_GOODS;
19343 
19344               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19345                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19346                   ' AMBSPR ');
19347               END IF;
19348 
19349               OPEN  l_oeorderlines_csr(l_billingdtls_rec.isl_id);
19350                   FETCH l_oeorderlines_csr INTO l_inv_item_id, l_inv_item_org_id, lx_ship_to_siteuseid;
19351                   -- ship_to_org_id from oe_order_lines_all is the site_use_id value from hz_cust_site_uses_all
19352                   -- which is the ship_to_site_use_id
19353                   IF l_oeorderlines_csr%NOTFOUND THEN
19354                     OKC_API.set_message( p_app_name      => 'OKC',
19355                                      p_msg_name      => G_INVALID_VALUE,
19356                                      p_token1        => G_COL_NAME_TOKEN,
19357                                      p_token1_value  => 'ISL_ID');
19358                 RAISE OKL_API.G_EXCEPTION_ERROR;
19359               END IF;
19360               CLOSE l_oeorderlines_csr;
19361 
19362             ELSIF l_purpose_code = 'CURE' THEN -- vendor cure billing
19363 
19364               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19365                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19366                   ' CURE ');
19367               END IF;
19368 
19369                   l_inv_item_id := NULL;
19370                   l_inv_item_org_id := NULL;
19371 
19372             ELSE
19373                           OPEN  l_invitem_csr(l_fin_asset_id);
19374                           FETCH l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
19375                           IF l_invitem_csr%NOTFOUND THEN
19376                             OKL_API.set_message(
19377                                              p_app_name      => 'OKL',
19378                          p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
19379                                  p_token1        => 'ASSET_NUMBER',
19380                                                  p_token1_value  => l_name);
19381 
19382                             RAISE OKL_API.G_EXCEPTION_ERROR;
19383                           END IF;
19384                           CLOSE l_invitem_csr;
19385             END IF;
19386 
19387             -- At this point l_bill_to_siteuseid has Bill To of the K (derived in
19388             -- call to get_k_hdr_tax_params above)
19389             -- l_bill_to_siteuseid will be overridden below depending upon the
19390             -- type of invoice
19391             IF l_qtp_code LIKE 'REP%' OR l_purpose_code IN ('CURE','REPAIR_CHARGE') THEN
19392               -- Ship to is not applicable for Repurchase quote billing, vendor
19393               -- cure billing and asset repair billing
19394               lx_ship_to_siteuseid := NULL;
19395               IF l_qtp_code LIKE 'REP%' OR l_purpose_code = 'CURE' THEN
19396                 IF l_billingdtls_rec.ibt_id IS NULL THEN
19397                   OKL_API.set_message(  p_app_name      => 'OKL',
19398                                             p_msg_name      => 'OKL_TX_NO_INV_BILL_TO');
19399 
19400                       RAISE OKL_API.G_EXCEPTION_ERROR;
19401 
19402                 ELSE
19403                   lx_bill_to_siteuseid := l_billingdtls_rec.ibt_id;
19404                 END IF;
19405               ELSE -- asset repair invoice
19406                 IF l_billingdtls_rec.ibt_id IS NOT NULL THEN
19407                   -- ibt_id is populated if asset repair is billed to vendor
19408                   -- If billed to lessee, ibt_id will be null. So use bill to from K
19409                   lx_bill_to_siteuseid := l_billingdtls_rec.ibt_id;
19410                 END IF;
19411               END IF;
19412 
19413             ELSIF l_purpose_code = 'AMBSPR' THEN -- Remarketing billing
19414               IF l_billingdtls_rec.ibt_id IS NULL THEN
19415                 OKL_API.set_message(    p_app_name      => 'OKL',
19416                                             p_msg_name      => 'OKL_TX_NO_INV_BILL_TO');
19417 
19418                         RAISE OKL_API.G_EXCEPTION_ERROR;
19419               ELSE
19420                 lx_bill_to_siteuseid := l_billingdtls_rec.ibt_id;
19421               END IF;
19422               --ship to (lx_ship_to_siteuseid) is already derived above for Remarketing billing
19423 
19424             ELSE
19425 
19426                           -- get the Location Party ID's
19427                           get_location_party_ids(
19428                                                                         p_api_version                  => p_api_version,
19429                                                                 p_init_msg_list                => p_init_msg_list,
19430                                                                 x_return_status                => x_return_status,
19431                                                                 x_msg_count                    => x_msg_count,
19432                                                                 x_msg_data                     => x_msg_data,
19433                                                                 p_cust_acct_id                 => lx_cust_acct_id,
19434                                                                 p_fin_asset_id                 => l_fin_asset_id,
19435                                     p_khr_id                       => l_billingdtls_rec.khr_id,
19436                                     x_bill_to_party_site_id        => lx_bill_to_party_site_id,
19437                                     x_bill_to_location_id          => lx_bill_to_location_id,
19438                                     x_bill_to_party_id             => lx_bill_to_party_id,
19439                                     x_bill_to_site_use_id                  => lx_bill_to_siteuseid,
19440                                     x_ship_to_party_site_id        => lx_ship_to_party_site_id,
19441                                     x_ship_to_location_id          => lx_ship_to_location_id,
19442                                     x_ship_to_party_id             => lx_ship_to_party_id,
19443                                     x_ship_to_site_use_id                  => lx_ship_to_siteuseid);
19444 
19445                           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19446                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19447                           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19448                 RAISE OKL_API.G_EXCEPTION_ERROR;
19449                           END IF;
19450 
19451               IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19452                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19453                 ' lx_bill_to_party_site_id :'||lx_bill_to_party_site_id);
19454                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19455                 ' lx_bill_to_location_id :'||lx_bill_to_location_id);
19456                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19457                 ' lx_bill_to_party_id :'||lx_bill_to_party_id);
19458                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19459                 ' lx_bill_to_siteuseid :'||lx_bill_to_siteuseid);
19460                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19461                 ' lx_ship_to_party_site_id :'||lx_ship_to_party_site_id);
19462                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19463                 ' lx_ship_to_location_id :'||lx_ship_to_location_id);
19464                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19465                 ' lx_ship_to_party_id :'||lx_ship_to_party_id);
19466                 FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19467                 ' lx_ship_to_siteuseid :'||lx_ship_to_siteuseid);
19468               END IF;
19469 
19470                         END IF;
19471 
19472               END IF;
19473         END IF;
19474 
19475         -- Asset doesn't exist
19476         IF (NOT l_asset_exists) THEN
19477           lx_transfer_of_title      := null;
19478           lx_sale_lease_back        := null;
19479           lx_purchase_of_lease      := null;
19480           lx_usage_of_equipment     := null;
19481                   lx_age_of_equipment       := null;
19482                   lx_vendor_site_id         := null;
19483           lx_ship_to_party_site_id  := null;
19484           lx_ship_to_location_id    := null;
19485           lx_ship_to_party_id       := null;
19486           lx_ship_to_siteuseid      := null;
19487           l_inv_item_id             := null;
19488           l_inv_item_org_id         := null;
19489           l_fin_asset_id            := null;
19490         END IF;
19491 
19492         -- Get TBC code
19493         get_tbc_code(p_api_version                 => p_api_version,
19494                      p_init_msg_list               => p_init_msg_list,
19495                      x_return_status               => x_return_status,
19496                      x_msg_count                   => x_msg_count,
19497                      x_msg_data                    => x_msg_data,
19498                      p_sty_id                      => l_billingdtls_rec.sty_id,
19499                      p_try_id                      => l_billingdtls_rec.try_id,
19500                      p_book_class_code             => lx_book_class_code,
19501                      p_tax_country_code            => l_def_tax_country,
19502                      x_tbc_code                    => lx_tbc_code);
19503 
19504         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19505           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19506         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19507           RAISE OKL_API.G_EXCEPTION_ERROR;
19508         END IF;
19509 
19510         -- Validate TBC Code
19511         IF lx_tbc_code IS NOT NULL THEN
19512           validate_tax_code(
19513             p_api_version     => p_api_version,
19514             p_init_msg_list   => p_init_msg_list,
19515             x_return_status   => x_return_status,
19516             x_msg_count       => x_msg_count,
19517             x_msg_data        => x_msg_data,
19518             p_trx_date        => l_billingdtls_rec.date_invoiced,
19519             p_tbc_code        => lx_tbc_code,
19520             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
19521 
19522           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19523             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19524           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19525             RAISE OKL_API.G_EXCEPTION_ERROR;
19526           END IF;
19527         END IF;
19528 
19529         IF (lx_tbc_code IS NULL OR lx_tax_valid_code = 'F') THEN
19530           lx_tbc_code := 'SALES_TRANSACTION';
19531         END IF;
19532 
19533         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19534           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19535               'lx_tbc_code '||lx_tbc_code);
19536         END IF;
19537 
19538         -- Get PC code
19539         get_pc_code(p_api_version                 => p_api_version,
19540                     p_init_msg_list               => p_init_msg_list,
19541                     x_return_status               => x_return_status,
19542                     x_msg_count                   => x_msg_count,
19543                     x_msg_data                    => x_msg_data,
19544                     p_sty_id                      => l_billingdtls_rec.sty_id,
19545                     p_purchase_option_code        => lx_pb_prch_opt_det,
19546                     p_int_disclosed_code          => lx_pb_int_disclosed_det,
19547                     p_title_trnsfr_code           => lx_transfer_of_title,
19548                     p_sale_lease_back_code        => lx_sale_lease_back,
19549                     p_lease_purchased_code        => lx_purchase_of_lease,
19550                     p_tax_country_code            => l_def_tax_country,
19551                     x_pc_code                     => lx_pc_code);
19552         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19553           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19554         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19555           RAISE OKL_API.G_EXCEPTION_ERROR;
19556         END IF;
19557 
19558         -- Validate PC Code
19559         IF lx_pc_code IS NOT NULL THEN
19560           validate_tax_code(
19561             p_api_version     => p_api_version,
19562             p_init_msg_list   => p_init_msg_list,
19563             x_return_status   => x_return_status,
19564             x_msg_count       => x_msg_count,
19565             x_msg_data        => x_msg_data,
19566             p_trx_date        => l_billingdtls_rec.date_invoiced,
19567             p_pc_code         => lx_pc_code,
19568             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
19569 
19570           IF (lx_tax_valid_code = 'F') THEN
19571             lx_pc_code := null;
19572           END IF;
19573 
19574           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19575             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19576           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19577             RAISE OKL_API.G_EXCEPTION_ERROR;
19578           END IF;
19579         END IF;
19580 
19581         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19582           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19583                   'lx_pc_code '||lx_pc_code);
19584         END IF;
19585 
19586         -- Get UFC code
19587         get_ufc_code(p_api_version                 => p_api_version,
19588                      p_init_msg_list               => p_init_msg_list,
19589                      x_return_status               => x_return_status,
19590                      x_msg_count                   => x_msg_count,
19591                      x_msg_data                    => x_msg_data,
19592                      p_purchase_option             => lx_pb_prch_opt_det,
19593                      p_fin_product_id              => lx_pb_fin_prod_id_det,
19594                      p_try_id                      => l_billingdtls_rec.try_id,
19595                      p_sty_id                      => l_billingdtls_rec.sty_id,
19596                      p_int_disclosed_code          => lx_pb_int_disclosed_det,
19597                      p_title_trnsfr_code           => lx_transfer_of_title,
19598                      p_sale_lease_back_code        => lx_sale_lease_back,
19599                      p_lease_purchased_code        => lx_purchase_of_lease,
19600                      p_equip_usage_code            => lx_usage_of_equipment ,
19601                      p_vendor_site_id              => lx_vendor_site_id,
19602                      p_age_of_equip                => lx_age_of_equipment,
19603                      p_term_quote_type_code        => null,
19604                      p_term_quote_reason_code      => null,
19605                      p_tax_country_code            => l_def_tax_country,
19606                      x_ufc_code                    => lx_ufc_code);
19607         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19608           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19609         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19610           RAISE OKL_API.G_EXCEPTION_ERROR;
19611         END IF;
19612 
19613         -- Validate UFC Code
19614         IF lx_ufc_code IS NOT NULL THEN
19615           validate_tax_code(
19616             p_api_version     => p_api_version,
19617             p_init_msg_list   => p_init_msg_list,
19618             x_return_status   => x_return_status,
19619             x_msg_count       => x_msg_count,
19620             x_msg_data        => x_msg_data,
19621             p_trx_date        => l_billingdtls_rec.date_invoiced,
19622             p_ufc_code        => lx_ufc_code,
19623             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
19624 
19625           IF (lx_tax_valid_code = 'F') THEN
19626             lx_ufc_code := null;
19627           END IF;
19628 
19629           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19630             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19631           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19632             RAISE OKL_API.G_EXCEPTION_ERROR;
19633           END IF;
19634         END IF;
19635 
19636         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19637           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19638                   'lx_ufc_code '||lx_ufc_code);
19639         END IF;
19640 
19641         -- Get the tax classification code
19642         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19643           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19644                   'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
19645         END IF;
19646 
19647         -- Get Set of Books ID
19648         OPEN c_get_set_of_books_id(cp_org_id  =>  lx_org_id);
19649         FETCH c_get_set_of_books_id INTO l_set_of_books_id;
19650         CLOSE c_get_set_of_books_id;
19651 
19652         IF p_source_trx_name IN ('Billing', 'Rollover Billing', 'Release Billing') THEN
19653           l_event_class_code := G_INVOICE_EVENT_CLASS_CODE;
19654         ELSIF p_source_trx_name IN ('Credit Memo', 'Rollover Credit Memo', 'Release Credit Memo') THEN
19655           l_event_class_code := G_CRE_MEM_EVENT_CLASS_CODE;
19656         END IF;
19657 
19658         OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
19659                         x_return_status                 =>  x_return_status,
19660                         p_ship_to_site_use_id           =>  lx_ship_to_siteuseid,
19661                         p_bill_to_site_use_id           =>  lx_bill_to_siteuseid,
19662                         p_inventory_item_id             =>  l_inv_item_id,
19663                         p_organization_id               =>  lx_org_id,
19664                         p_set_of_books_id               =>  l_set_of_books_id,
19665                         p_trx_date                      =>  l_billingdtls_rec.date_invoiced,
19666                         p_trx_type_id                   =>  null,
19667                         p_entity_code                   =>  G_AR_ENTITY_CODE,
19668                         p_event_class_code              =>  l_event_class_code,
19669                         p_application_id                =>  G_AR_APPLICATION_ID,
19670                         p_internal_organization_id      =>  lx_org_id,
19671                         x_tax_classification_code       =>  lx_tax_classification_code );
19672 
19673         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19674           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19675                 'Return Status '|| x_return_status);
19676         END IF;
19677 
19678         -- Check if taxable basis override applies to Billing / Credit Memo
19679         OPEN  l_txbasisoverride_csr(l_billingdtls_rec.try_id);
19680         FETCH l_txbasisoverride_csr INTO l_fma_id;
19681         CLOSE l_txbasisoverride_csr;
19682 
19683         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19684           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19685                 ' l_fma_id :'||l_fma_id);
19686         END IF;
19687 
19688         IF l_fma_id IS NOT NULL THEN
19689           OPEN  l_formulae_csr(l_fma_id);
19690           FETCH l_formulae_csr INTO l_formula_name;
19691 
19692           IF l_formulae_csr%NOTFOUND THEN
19693             OKC_API.set_message( p_app_name      => 'OKC',
19694                                  p_msg_name      => G_INVALID_VALUE,
19695                                  p_token1        => G_COL_NAME_TOKEN,
19696                                  p_token1_value  => 'FMA_ID');
19697             RAISE OKL_API.G_EXCEPTION_ERROR;
19698           END IF;
19699           CLOSE l_formulae_csr;
19700 
19701           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19702             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19703                     'l_formula_name '||l_formula_name );
19704           END IF;
19705 
19706           -- execute tax basis override formula, pass tax determinants
19707           l_add_params(1).name  := 'PURCHASE_OPTION';
19708           l_add_params(1).value := lx_pb_prch_opt_det;
19709 
19710           l_add_params(2).name  := 'FINANCIAL_PRODUCT_ID';
19711           l_add_params(2).value := lx_pb_fin_prod_id_det;
19712 
19713           l_add_params(3).name  := 'TRX_TYPE_ID';
19714           l_add_params(3).value := l_billingdtls_rec.try_id;
19715 
19716           l_add_params(4).name  := 'STREAM_TYPE_ID';
19717           l_add_params(4).value := l_billingdtls_rec.sty_id;
19718 
19719           l_add_params(5).name  := 'INTEREST_DISCLOSED';
19720           l_add_params(5).value := lx_pb_int_disclosed_det;
19721 
19722           l_add_params(6).name  := 'TRANSFER_OF_TITLE';
19723           l_add_params(6).value := lx_transfer_of_title;
19724 
19725           l_add_params(7).name  := 'SALE_LEASE_BACK';
19726           l_add_params(7).value := lx_sale_lease_back;
19727 
19728           l_add_params(8).name  := 'PURCHASE_OF_LEASE';
19729           l_add_params(8).value := lx_purchase_of_lease;
19730 
19731           l_add_params(9).name  := 'USAGE_OF_EQUIPMENT';
19732           l_add_params(9).value := lx_usage_of_equipment;
19733 
19734           l_add_params(10).name := 'VENDOR_SITE_ID';
19735           l_add_params(10).value := lx_vendor_site_id;
19736 
19737           l_add_params(11).name := 'AGE_OF_EQUIPMENT';
19738           l_add_params(11).value  := lx_age_of_equipment;
19739 
19740           l_add_params(12).name := 'BOOK_CLASS';
19741           l_add_params(12).value  := lx_book_class_code;
19742 
19743           l_add_params(13).name := 'BILL_TO_PARTY_SITE_ID';
19744           l_add_params(13).value  := lx_bill_to_party_site_id;
19745 
19746           l_add_params(14).name := 'BILL_TO_LOCATION_ID';
19747           l_add_params(14).value  := lx_bill_to_location_id;
19748 
19749           l_add_params(15).name := 'BILL_TO_PARTY_ID';
19750           l_add_params(15).value  := lx_bill_to_party_id;
19751 
19752           l_add_params(16).name := 'SHIP_TO_PARTY_SITE_ID';
19753           l_add_params(16).value  :=  null;
19754 
19755           l_add_params(17).name := 'SHIP_TO_LOCATION_ID';
19756           l_add_params(17).value  :=  null;
19757 
19758           l_add_params(18).name := 'SHIP_TO_PARTY_ID';
19759           l_add_params(18).value  :=  null;
19760 
19761           l_add_params(19).name := 'BILL_TO_SITE_USE_ID';
19762           l_add_params(19).value  :=  lx_bill_to_siteuseid;
19763 
19764           l_add_params(20).name := 'INVENTORY_ITEM_ID';
19765           l_add_params(20).value  := l_inv_item_id;
19766 
19767           l_add_params(21).name := 'SHIP_TO_SITE_USE_ID';
19768           l_add_params(21).value  := lx_ship_to_siteuseid;
19769 
19770           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - begin
19771           --'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
19772           l_add_params(22).name := 'LINE_NAME';
19773           l_add_params(22).value  := Null; -- Line name is not relevant for billing and disbursement type of calls
19774 
19775           l_add_params(23).name := 'SOURCE_TRX_NAME';
19776           l_add_params(23).value  := p_source_trx_name;
19777 
19778           l_add_params(24).name := 'DEFAULT_TAXABLE_BASIS';
19779           l_add_params(24).value  := l_billingdtls_rec.amount;
19780           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - end
19781 
19782           okl_am_util_pvt.get_formula_value( p_formula_name           => l_formula_name,
19783                                              p_chr_id                 => l_billingdtls_rec.khr_id,
19784                                              p_cle_id                 => l_fin_asset_id,
19785                                              p_additional_parameters  => l_add_params,
19786                                              x_formula_value          => lx_assessable_value,
19787                                              x_return_status          => x_return_status);
19788 
19789           IF (x_return_status IN (OKL_API.G_RET_STS_UNEXP_ERROR, OKL_API.G_RET_STS_ERROR)) THEN
19790             OKL_API.init_msg_list('T');
19791             OKL_API.set_message(p_app_name      => 'OKL',
19792                                 p_msg_name      => 'OKL_TX_FRM_TXN_ERR',
19793                                 p_token1        => 'FMA_NAME',
19794                                 p_token1_value  => l_formula_name,
19795                                 p_token2        => 'TRX_NAME ',
19796                                                             p_token2_value  => p_source_trx_name);
19797             RAISE OKL_API.G_EXCEPTION_ERROR;
19798           END IF;
19799 
19800           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19801             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19802                 'calculated l_assessable_value '||lx_assessable_value);
19803           END IF;
19804 
19805         ELSE
19806           lx_assessable_value := l_billingdtls_rec.amount;
19807         END IF; --IF l_fma_id IS NOT NULL THEN
19808 
19809         x_tax_det_rec.x_tax_code                   :=  lx_tax_classification_code;
19810         x_tax_det_rec.x_trx_business_category      :=  lx_tbc_code;
19811         x_tax_det_rec.x_product_category           :=  lx_pc_code;
19812         x_tax_det_rec.x_product_type               :=  l_product_type;
19813         x_tax_det_rec.x_line_intended_use          :=  lx_usage_of_equipment;
19814         x_tax_det_rec.x_user_defined_fisc_class    :=  lx_ufc_code;
19815         x_tax_det_rec.x_assessable_value           :=  lx_assessable_value;
19816         x_tax_det_rec.x_default_taxation_country   :=  l_def_tax_country;
19817         x_tax_det_rec.x_upstream_trx_reported_flag :=  l_reporting_flag;
19818 
19819       ELSIF p_source_trx_name IN ('Funding', 'Disbursement', 'Debit Memo') THEN
19820 
19821         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19822           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19823                   'Call to (Funding, Disbursement, Debit Memo) .. ');
19824         END IF;
19825 
19826         -- Validate source trx id
19827         OPEN  l_disbdtls_csr(p_source_trx_id);
19828         FETCH l_disbdtls_csr INTO l_disbdtls_rec;
19829         IF l_disbdtls_csr %NOTFOUND THEN
19830           OKC_API.set_message( p_app_name      => 'OKC',
19831                                p_msg_name      => G_INVALID_VALUE,
19832                                p_token1        => G_COL_NAME_TOKEN,
19833                                p_token1_value  => 'SOURCE_TRX_ID');
19834           RAISE OKL_API.G_EXCEPTION_ERROR;
19835         END IF;
19836         CLOSE l_disbdtls_csr;
19837 
19838         IF (l_disbdtls_rec.ipvs_id IS NOT NULL) THEN
19839           OPEN  l_get_vendor_csr(l_disbdtls_rec.ipvs_id);
19840           FETCH l_get_vendor_csr INTO l_vendor_id;
19841           CLOSE l_get_vendor_csr;
19842         END IF;
19843 
19844         IF l_disbdtls_rec.qte_id IS NOT NULL THEN  -- Invoice created for a quote
19845           OPEN  l_trxquotes_csr(l_disbdtls_rec.qte_id);
19846           FETCH l_trxquotes_csr INTO l_qtp_code, l_qte_reason, l_early_term_yn;
19847           CLOSE l_trxquotes_csr;
19848         END IF;
19849 
19850         IF l_disbdtls_rec.sty_id IS NOT NULL THEN
19851           OPEN  l_strmtype_csr(l_disbdtls_rec.sty_id);
19852           FETCH l_strmtype_csr INTO l_purpose_code;
19853           CLOSE l_strmtype_csr;
19854         END IF;
19855 
19856         l_product_type := G_SERVICES;
19857         l_def_tax_country := get_default_taxation_country(x_return_status     => x_return_status,
19858                                                           x_msg_count         => x_msg_count,
19859                                                           x_msg_data          => x_msg_data,
19860                                                           p_legal_entity_id   => l_disbdtls_rec.legal_entity_id);
19861             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19862           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19863         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19864           RAISE OKL_API.G_EXCEPTION_ERROR;
19865         END IF;
19866 
19867         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19868           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19869                 ' l_qtp_code :'||l_qtp_code);
19870           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19871                 ' l_qte_reason :'||l_qte_reason);
19872           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19873                 ' l_early_term_yn :'||l_early_term_yn);
19874           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19875                 ' l_purpose_code :'||l_purpose_code);
19876           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19877                 ' l_def_tax_country :'||l_def_tax_country);
19878         END IF;
19879 
19880         -- get header level tax parameters
19881         get_k_hdr_tax_params( p_api_version                  => p_api_version,
19882                               p_init_msg_list                => p_init_msg_list,
19883                               x_return_status                => x_return_status,
19884                               x_msg_count                    => x_msg_count,
19885                               x_msg_data                     => x_msg_data,
19886                               p_khr_id                       => l_disbdtls_rec.khr_id,
19887                               p_source_trx_name              => p_source_trx_name,
19888                               p_source_table                 => p_source_table,
19889                               x_cust_acct_id                 => lx_cust_acct_id,
19890                               x_bill_to_siteuseid            => lx_bill_to_siteuseid,
19891                               x_currency_code                => lx_currency_code,
19892                               x_cust_trx_type_id             => lx_cust_trx_type_id,
19893                               x_precision                    => lx_precision,
19894                               x_minimum_accountable_unit     => lx_minimum_accountable_unit,
19895                               x_prch_opt_det                 => lx_pb_prch_opt_det,
19896                               x_fin_prod_id_det              => lx_pb_fin_prod_id_det,
19897                               x_int_disclosed_det            => lx_pb_int_disclosed_det,
19898                               x_org_id                       => lx_org_id,
19899                               x_book_class_code              => lx_book_class_code,
19900                               x_bill_to_party_site_id        => lx_bill_to_party_site_id,
19901                               x_bill_to_party_id             => lx_bill_to_party_id,
19902                               x_bill_to_location_id          => lx_bill_to_location_id,
19903                               x_currency_conversion_type     => lx_currency_conversion_type,
19904                               x_currency_conversion_rate     => lx_currency_conversion_rate,
19905                               x_currency_conversion_date     => lx_currency_conversion_date,
19906                               x_contract_start_date          => lx_contract_start_date);
19907         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19908           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19909         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19910           RAISE OKL_API.G_EXCEPTION_ERROR;
19911         END IF;
19912 
19913         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19914           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19915                 ' l_billingdtls_rec.khr_id :'||l_billingdtls_rec.khr_id);
19916           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19917                 ' lx_cust_acct_id :'||lx_cust_acct_id);
19918           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19919                 ' lx_bill_to_siteuseid :'||lx_bill_to_siteuseid);
19920           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19921                 ' lx_currency_code :'||lx_currency_code);
19922           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19923                 ' lx_cust_trx_type_id :'||lx_cust_trx_type_id);
19924           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19925                 ' lx_precision :'||lx_precision);
19926           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19927                 ' lx_minimum_accountable_unit :'||lx_minimum_accountable_unit);
19928           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19929                 ' lx_pb_prch_opt_det :'||lx_pb_prch_opt_det);
19930           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19931                 ' lx_pb_fin_prod_id_det :'||lx_pb_fin_prod_id_det);
19932           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19933                 ' lx_pb_int_disclosed_det :'||lx_pb_int_disclosed_det);
19934           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19935                 ' lx_org_id :'||lx_org_id);
19936           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19937                 ' lx_book_class_code :'||lx_book_class_code);
19938           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19939                 ' lx_bill_to_party_site_id :'||lx_bill_to_party_site_id);
19940           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19941                 ' lx_bill_to_party_id :'||lx_bill_to_party_id);
19942           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19943                 ' lx_bill_to_location_id :'||l_def_tax_country);
19944           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19945                 ' lx_currency_conversion_type :'||lx_currency_conversion_type);
19946           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19947                 ' lx_currency_conversion_rate :'||lx_currency_conversion_rate);
19948           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19949                 ' lx_currency_conversion_date :'||lx_currency_conversion_date);
19950           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
19951                 ' lx_contract_start_date :'||lx_contract_start_date);
19952         END IF;
19953 
19954         -- Line level Invoice
19955         IF l_disbdtls_rec.kle_id IS NOT NULL THEN
19956 
19957           OPEN  l_okclinestyle_csr(l_disbdtls_rec.kle_id);
19958           FETCH l_okclinestyle_csr INTO l_line_type;
19959           CLOSE l_okclinestyle_csr;
19960 
19961           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
19962             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants',
19963                   'line level inv '||' l_line_type = '||l_line_type);
19964           END IF;
19965 
19966           IF l_line_type IN ('FREE_FORM1','LINK_SERV_ASSET','LINK_FEE_ASSET') THEN
19967 
19968             l_asset_exists := TRUE;
19969 
19970             -- For regular stream billing, l_line_type can have any of the above 3 values
19971             -- For transaction billing, l_line_type can only be FREE_FORM1
19972             OPEN  l_okclines_csr(l_disbdtls_rec.kle_id);
19973             FETCH l_okclines_csr INTO l_name;
19974             CLOSE l_okclines_csr;
19975 
19976             IF l_line_type = 'FREE_FORM1' THEN
19977               l_fin_asset_id := l_disbdtls_rec.kle_id;
19978             ELSE
19979               -- If subline level, get the attached fin asset id
19980                   OPEN  l_finasset_csr(l_disbdtls_rec.kle_id, l_line_type);
19981                   FETCH l_finasset_csr INTO l_fin_asset_id;
19982                   CLOSE l_finasset_csr;
19983             END IF;
19984 
19985             -- Get the asset level determinants
19986             get_asset_tax_params(
19987                                 p_api_version                  => p_api_version,
19988                         p_init_msg_list                => p_init_msg_list,
19989                         x_return_status                => x_return_status,
19990                         x_msg_count                    => x_msg_count,
19991                         x_msg_data                     => x_msg_data,
19992                         p_khr_id                       => l_disbdtls_rec.khr_id,
19993                         p_kle_id                       => l_fin_asset_id,
19994                         p_source_trx_name              => p_source_trx_name,
19995                         p_source_table                 => p_source_table,
19996                         p_qtp_code                     => l_qtp_code,
19997                         p_purpose_code                 => l_purpose_code,
19998                         x_transfer_of_title                        => lx_transfer_of_title,
19999                         x_sale_lease_back                          => lx_sale_lease_back,
20000                         x_purchase_of_lease                        => lx_purchase_of_lease,
20001                         x_usage_of_equipment               => lx_usage_of_equipment,
20002                                 x_age_of_equipment                         => lx_age_of_equipment,
20003                                 x_vendor_site_id                       => lx_vendor_site_id);
20004                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20005                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20006             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20007                   RAISE OKL_API.G_EXCEPTION_ERROR;
20008             END IF;
20009 
20010             IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20011               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20012                 ' l_fin_asset_id :'||l_fin_asset_id);
20013               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20014                 ' lx_transfer_of_title :'||lx_transfer_of_title);
20015               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20016                 ' lx_sale_lease_back :'||lx_sale_lease_back);
20017               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20018                 ' lx_purchase_of_lease :'||lx_purchase_of_lease);
20019               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20020                 ' lx_usage_of_equipment :'||lx_usage_of_equipment);
20021               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20022                 ' lx_age_of_equipment :'||lx_age_of_equipment);
20023               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20024                 ' lx_vendor_site_id :'||lx_vendor_site_id);
20025               FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20026                 ' l_billingdtls_rec.qte_id :'||l_billingdtls_rec.qte_id);
20027             END IF;
20028 
20029             -- Get the inventory item id
20030                         OPEN  l_invitem_csr(l_fin_asset_id);
20031                 FETCH l_invitem_csr INTO l_inv_item_id, l_inv_item_org_id;
20032                         IF l_invitem_csr%NOTFOUND THEN
20033                           OKL_API.set_message(
20034                                              p_app_name      => 'OKL',
20035                          p_msg_name      => 'OKL_TX_INV_ITEM_ERR',
20036                                  p_token1        => 'ASSET_NUMBER',
20037                                                  p_token1_value  => l_name);
20038 
20039                           RAISE OKL_API.G_EXCEPTION_ERROR;
20040                         END IF;
20041                         CLOSE l_invitem_csr;
20042 
20043           END IF;
20044         END IF;
20045 
20046         -- Asset doesn't exist
20047         IF (NOT l_asset_exists) THEN
20048           lx_transfer_of_title      := null;
20049           lx_sale_lease_back        := null;
20050           lx_purchase_of_lease      := null;
20051           lx_usage_of_equipment     := null;
20052                   lx_age_of_equipment       := null;
20053                   lx_vendor_site_id         := null;
20054           lx_ship_to_party_site_id  := null;
20055           lx_ship_to_location_id    := null;
20056           lx_ship_to_party_id       := null;
20057           lx_ship_to_siteuseid      := null;
20058           l_inv_item_id             := null;
20059           l_inv_item_org_id         := null;
20060           l_fin_asset_id            := null;
20061         END IF;
20062 
20063         -- Get TBC code
20064         get_tbc_code(p_api_version                 => p_api_version,
20065                      p_init_msg_list               => p_init_msg_list,
20066                      x_return_status               => x_return_status,
20067                      x_msg_count                   => x_msg_count,
20068                      x_msg_data                    => x_msg_data,
20069                      p_sty_id                      => l_disbdtls_rec.sty_id,
20070                      p_try_id                      => l_disbdtls_rec.try_id,
20071                      p_book_class_code             => lx_book_class_code,
20072                      p_tax_country_code            => l_def_tax_country,
20073                      x_tbc_code                    => lx_tbc_code);
20074 
20075         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20076           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20077         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20078           RAISE OKL_API.G_EXCEPTION_ERROR;
20079         END IF;
20080 
20081         -- Validate TBC Code
20082         IF lx_tbc_code IS NOT NULL THEN
20083           validate_tax_code(
20084             p_api_version     => p_api_version,
20085             p_init_msg_list   => p_init_msg_list,
20086             x_return_status   => x_return_status,
20087             x_msg_count       => x_msg_count,
20088             x_msg_data        => x_msg_data,
20089             p_trx_date        => l_disbdtls_rec.date_invoiced,
20090             p_tbc_code        => lx_tbc_code,
20091             x_valid_code      => lx_tax_valid_code); -- 'S' --> Success, 'F' --> Failure
20092 
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         END IF;
20099 
20100         IF (lx_tbc_code IS NULL OR lx_tax_valid_code = 'F') THEN
20101           lx_tbc_code := 'PURCHASE_TRANSACTION';
20102         END IF;
20103 
20104         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20105           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20106               'lx_tbc_code '||lx_tbc_code);
20107         END IF;
20108 
20109         -- Get the tax classification code
20110         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20111           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20112                'Calling  OKL_TAX_INTERFACE_PVT.get_tax_classification_code .. ');
20113         END IF;
20114 
20115         -- Get Set of Books ID
20116         OPEN c_get_set_of_books_id(cp_org_id  =>  lx_org_id);
20117         FETCH c_get_set_of_books_id INTO l_set_of_books_id;
20118         CLOSE c_get_set_of_books_id;
20119 
20120         OKL_TAX_INTERFACE_PVT.get_tax_classification_code (
20121                         x_return_status                 =>  x_return_status,
20122                         p_ship_to_site_use_id           =>  lx_ship_to_siteuseid,
20123                         p_bill_to_site_use_id           =>  lx_bill_to_siteuseid,
20124                         p_inventory_item_id             =>  l_inv_item_id,
20125                         p_organization_id               =>  lx_org_id,
20126                         p_set_of_books_id               =>  l_set_of_books_id,
20127                         p_trx_date                      =>  l_disbdtls_rec.date_invoiced,
20128                         p_trx_type_id                   =>  null,
20129                         p_entity_code                   =>  G_AP_ENTITY_CODE,
20130                         p_event_class_code              =>  G_AP_EVENT_CLASS_CODE,
20131                         p_application_id                =>  G_AP_APPLICATION_ID,
20132                         p_internal_organization_id      =>  lx_org_id,
20133                         p_vendor_id                                 =>  l_vendor_id,
20134                         p_vendor_site_id                        =>  l_disbdtls_rec.ipvs_id,
20135                         x_tax_classification_code       =>  lx_tax_classification_code );
20136 
20137         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20138           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20139                 'Return Status '|| x_return_status);
20140         END IF;
20141 
20142         OPEN  l_txbasisoverride_csr(l_disbdtls_rec.try_id);
20143         FETCH l_txbasisoverride_csr INTO l_fma_id;
20144         CLOSE l_txbasisoverride_csr;
20145 
20146         IF l_fma_id IS NOT NULL THEN
20147           OPEN  l_formulae_csr(l_fma_id);
20148           FETCH l_formulae_csr INTO l_formula_name;
20149 
20150           IF l_formulae_csr%NOTFOUND THEN
20151             OKC_API.set_message( p_app_name      => 'OKC',
20152                                  p_msg_name      => G_INVALID_VALUE,
20153                                  p_token1        => G_COL_NAME_TOKEN,
20154                                  p_token1_value  => 'FMA_ID');
20155             RAISE OKL_API.G_EXCEPTION_ERROR;
20156           END IF;
20157           CLOSE l_formulae_csr;
20158 
20159           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20160             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20161                 'l_formula_name '||l_formula_name );
20162           END IF;
20163 
20164           -- execute tax basis override formula, pass tax determinants
20165           l_add_params(1).name  := 'PURCHASE_OPTION';
20166           l_add_params(1).value := lx_pb_prch_opt_det;
20167 
20168           l_add_params(2).name  := 'FINANCIAL_PRODUCT_ID';
20169           l_add_params(2).value := lx_pb_fin_prod_id_det;
20170 
20171           l_add_params(3).name  := 'TRX_TYPE_ID';
20172           l_add_params(3).value := l_disbdtls_rec.try_id;
20173 
20174           l_add_params(4).name  := 'STREAM_TYPE_ID';
20175           l_add_params(4).value := l_disbdtls_rec.sty_id;
20176 
20177           l_add_params(5).name  := 'INTEREST_DISCLOSED';
20178           l_add_params(5).value := lx_pb_int_disclosed_det;
20179 
20180           l_add_params(6).name  := 'TRANSFER_OF_TITLE';
20181           l_add_params(6).value := lx_transfer_of_title;
20182 
20183           l_add_params(7).name  := 'SALE_LEASE_BACK';
20184           l_add_params(7).value := lx_sale_lease_back;
20185 
20186           l_add_params(8).name  := 'PURCHASE_OF_LEASE';
20187           l_add_params(8).value := lx_purchase_of_lease;
20188 
20189           l_add_params(9).name  := 'USAGE_OF_EQUIPMENT';
20190           l_add_params(9).value := lx_usage_of_equipment;
20191 
20192           l_add_params(10).name := 'VENDOR_SITE_ID';
20193           l_add_params(10).value := lx_vendor_site_id;
20194 
20195           l_add_params(11).name := 'AGE_OF_EQUIPMENT';
20196           l_add_params(11).value  := lx_age_of_equipment;
20197 
20198           l_add_params(12).name := 'BOOK_CLASS';
20199           l_add_params(12).value  := lx_book_class_code;
20200 
20201           l_add_params(13).name := 'BILL_TO_PARTY_SITE_ID';
20202           l_add_params(13).value  := lx_bill_to_party_site_id;
20203 
20204           l_add_params(14).name := 'BILL_TO_LOCATION_ID';
20205           l_add_params(14).value  := lx_bill_to_location_id;
20206 
20207           l_add_params(15).name := 'BILL_TO_PARTY_ID';
20208           l_add_params(15).value  := lx_bill_to_party_id;
20209 
20210           l_add_params(16).name := 'SHIP_TO_PARTY_SITE_ID';
20211           l_add_params(16).value  :=  null;
20212 
20213           l_add_params(17).name := 'SHIP_TO_LOCATION_ID';
20214           l_add_params(17).value  :=  null;
20215 
20216           l_add_params(18).name := 'SHIP_TO_PARTY_ID';
20217           l_add_params(18).value  :=  null;
20218 
20219               -- Directly Mapped
20220           l_add_params(19).name := 'BILL_TO_SITE_USE_ID';
20221           l_add_params(19).value  :=  lx_bill_to_siteuseid;
20222 
20223           l_add_params(20).name := 'INVENTORY_ITEM_ID';
20224           l_add_params(20).value  := l_inv_item_id;
20225 
20226           l_add_params(21).name := 'SHIP_TO_SITE_USE_ID';
20227           l_add_params(21).value  := lx_ship_to_siteuseid;
20228 
20229           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - begin
20230           --'LINE_NAME', 'DEFAULT_TAXABLE_BASIS', 'SOURCE_TRX_NAME'
20231           l_add_params(22).name := 'LINE_NAME';
20232           l_add_params(22).value  := Null; -- Line name is not relevant for billing and disbursement type of calls
20233 
20234           l_add_params(23).name := 'SOURCE_TRX_NAME';
20235           l_add_params(23).value  := p_source_trx_name;
20236 
20237           l_add_params(24).name := 'DEFAULT_TAXABLE_BASIS';
20238           l_add_params(24).value  := l_disbdtls_rec.amount;
20239           --SECHAWLA 04-Jan-08 6651621 - Added 3 additional parameters - end
20240 
20241 
20242           okl_am_util_pvt.get_formula_value( p_formula_name           => l_formula_name,
20243                                              p_chr_id                 => l_disbdtls_rec.khr_id,
20244                                              p_cle_id                 => l_fin_asset_id,
20245                                              p_additional_parameters  => l_add_params,
20246                                              x_formula_value          => lx_assessable_value,
20247                                              x_return_status          => x_return_status);
20248 
20249           IF (x_return_status IN (OKL_API.G_RET_STS_UNEXP_ERROR, OKL_API.G_RET_STS_ERROR)) THEN
20250             OKL_API.init_msg_list('T');
20251             OKL_API.set_message(p_app_name      => 'OKL',
20252                                 p_msg_name      => 'OKL_TX_FRM_TXN_ERR',
20253                                 p_token1        => 'FMA_NAME',
20254                                 p_token1_value  => l_formula_name,
20255                                 p_token2        => 'TRX_NAME ',
20256                                                             p_token2_value  => p_source_trx_name);
20257             RAISE OKL_API.G_EXCEPTION_ERROR;
20258           END IF;
20259 
20260           IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20261             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants.',
20262             'calculated l_assessable_value '||lx_assessable_value);
20263           END IF;
20264 
20265         ELSE
20266           lx_assessable_value := l_disbdtls_rec.amount;
20267         END IF; --IF l_fma_id IS NOT NULL THEN
20268 
20269         x_tax_det_rec.x_tax_code                   :=  lx_tax_classification_code;
20270         x_tax_det_rec.x_trx_business_category      :=  lx_tbc_code;
20271         x_tax_det_rec.x_product_type               :=  l_product_type;
20272         x_tax_det_rec.x_assessable_value           :=  lx_assessable_value;
20273         x_tax_det_rec.x_default_taxation_country   :=  l_def_tax_country;
20274         x_tax_det_rec.x_product_category           :=  null;
20275         x_tax_det_rec.x_line_intended_use          :=  null;
20276         x_tax_det_rec.x_user_defined_fisc_class    :=  null;
20277         x_tax_det_rec.x_upstream_trx_reported_flag :=  null;
20278 
20279       ELSE
20280         OKC_API.set_message( p_app_name      => 'OKC',
20281                              p_msg_name      => G_INVALID_VALUE,
20282                              p_token1        => G_COL_NAME_TOKEN,
20283                              p_token1_value  => 'SOURCE_TRX_NAME');
20284         RAISE OKL_API.G_EXCEPTION_ERROR;
20285       END IF;
20286 
20287       IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20288         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ','End(-)');
20289       END IF;
20290 
20291       -- End the transaction
20292       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
20293 
20294     EXCEPTION
20295       WHEN OKL_API.G_EXCEPTION_ERROR THEN
20296 
20297         IF (l_billingdtls_csr%ISOPEN) THEN
20298           CLOSE l_billingdtls_csr;
20299         END IF;
20300 
20301         IF (l_trxquotes_csr%ISOPEN) THEN
20302           CLOSE l_trxquotes_csr;
20303         END IF;
20304 
20305         IF (l_strmtype_csr%ISOPEN) THEN
20306           CLOSE l_strmtype_csr;
20307         END IF;
20308 
20309         IF (l_okclinestyle_csr%ISOPEN) THEN
20310           CLOSE l_okclinestyle_csr;
20311         END IF;
20312 
20313         IF (l_okclines_csr%ISOPEN) THEN
20314           CLOSE l_okclines_csr;
20315         END IF;
20316 
20317         IF (l_finasset_csr%ISOPEN) THEN
20318           CLOSE l_finasset_csr;
20319         END IF;
20320 
20321         IF (l_oeorderlines_csr%ISOPEN) THEN
20322           CLOSE l_oeorderlines_csr;
20323         END IF;
20324 
20325         IF (l_invitem_csr%ISOPEN) THEN
20326           CLOSE l_invitem_csr;
20327         END IF;
20328 
20329         IF (c_get_set_of_books_id%ISOPEN) THEN
20330           CLOSE c_get_set_of_books_id;
20331         END IF;
20332 
20333         IF (l_txbasisoverride_csr%ISOPEN) THEN
20334           CLOSE l_txbasisoverride_csr;
20335         END IF;
20336 
20337         IF (l_formulae_csr%ISOPEN) THEN
20338           CLOSE l_formulae_csr;
20339         END IF;
20340 
20341         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20342            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ',
20343                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20344         END IF;
20345 
20346         x_return_status := OKL_API.HANDLE_EXCEPTIONS
20347         (
20348           l_api_name,
20349           G_PKG_NAME,
20350           'OKL_API.G_RET_STS_ERROR',
20351           x_msg_count,
20352           x_msg_data,
20353           '_PVT');
20354 
20355       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20356 
20357         IF (l_billingdtls_csr%ISOPEN) THEN
20358           CLOSE l_billingdtls_csr;
20359         END IF;
20360 
20361         IF (l_trxquotes_csr%ISOPEN) THEN
20362           CLOSE l_trxquotes_csr;
20363         END IF;
20364 
20365         IF (l_strmtype_csr%ISOPEN) THEN
20366           CLOSE l_strmtype_csr;
20367         END IF;
20368 
20369         IF (l_okclinestyle_csr%ISOPEN) THEN
20370           CLOSE l_okclinestyle_csr;
20371         END IF;
20372 
20373         IF (l_okclines_csr%ISOPEN) THEN
20374           CLOSE l_okclines_csr;
20375         END IF;
20376 
20377         IF (l_finasset_csr%ISOPEN) THEN
20378           CLOSE l_finasset_csr;
20379         END IF;
20380 
20381         IF (l_oeorderlines_csr%ISOPEN) THEN
20382           CLOSE l_oeorderlines_csr;
20383         END IF;
20384 
20385         IF (l_invitem_csr%ISOPEN) THEN
20386           CLOSE l_invitem_csr;
20387         END IF;
20388 
20389         IF (c_get_set_of_books_id%ISOPEN) THEN
20390           CLOSE c_get_set_of_books_id;
20391         END IF;
20392 
20393         IF (l_txbasisoverride_csr%ISOPEN) THEN
20394           CLOSE l_txbasisoverride_csr;
20395         END IF;
20396 
20397         IF (l_formulae_csr%ISOPEN) THEN
20398           CLOSE l_formulae_csr;
20399         END IF;
20400 
20401         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20402            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ',
20403                     'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20404         END IF;
20405 
20406         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
20407         (
20408           l_api_name,
20409           G_PKG_NAME,
20410           'OKL_API.G_RET_STS_UNEXP_ERROR',
20411           x_msg_count,
20412           x_msg_data,
20413           '_PVT');
20414 
20415       WHEN OTHERS THEN
20416 
20417         IF (l_billingdtls_csr%ISOPEN) THEN
20418           CLOSE l_billingdtls_csr;
20419         END IF;
20420 
20421         IF (l_trxquotes_csr%ISOPEN) THEN
20422           CLOSE l_trxquotes_csr;
20423         END IF;
20424 
20425         IF (l_strmtype_csr%ISOPEN) THEN
20426           CLOSE l_strmtype_csr;
20427         END IF;
20428 
20429         IF (l_okclinestyle_csr%ISOPEN) THEN
20430           CLOSE l_okclinestyle_csr;
20431         END IF;
20432 
20433         IF (l_okclines_csr%ISOPEN) THEN
20434           CLOSE l_okclines_csr;
20435         END IF;
20436 
20437         IF (l_finasset_csr%ISOPEN) THEN
20438           CLOSE l_finasset_csr;
20439         END IF;
20440 
20441         IF (l_oeorderlines_csr%ISOPEN) THEN
20442           CLOSE l_oeorderlines_csr;
20443         END IF;
20444 
20445         IF (l_invitem_csr%ISOPEN) THEN
20446           CLOSE l_invitem_csr;
20447         END IF;
20448 
20449         IF (c_get_set_of_books_id%ISOPEN) THEN
20450           CLOSE c_get_set_of_books_id;
20451         END IF;
20452 
20453         IF (l_txbasisoverride_csr%ISOPEN) THEN
20454           CLOSE l_txbasisoverride_csr;
20455         END IF;
20456 
20457         IF (l_formulae_csr%ISOPEN) THEN
20458           CLOSE l_formulae_csr;
20459         END IF;
20460 
20461         IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20462            FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_tax_determinants ',
20463                     'EXCEPTION :'||sqlerrm);
20464         END IF;
20465 
20466         x_return_status :=OKL_API.HANDLE_EXCEPTIONS
20467         (
20468           l_api_name,
20469           G_PKG_NAME,
20470           'OTHERS',
20471           x_msg_count,
20472           x_msg_data,
20473           '_PVT');
20474 
20475         -- End the transaction
20476         OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
20477 
20478     END get_tax_determinants;
20479 
20480 /*========================================================================
20481  | PUBLIC FUNCTION get_default_taxation_country
20482  |
20483  | DESCRIPTION
20484  |    This function is called by Tax component consumers to derive the default
20485  |    taxation country based on legal entity
20486  |
20487  | CALLED FROM                                  Tax consumers (Booking, Sales etc.,)
20488  |
20489  |
20490  | CALLS PROCEDURES/FUNCTIONS
20491  |
20492  |
20493  | PARAMETERS
20494  |      p_legal_entity_id            -- Legal Entity Identifier
20495  |
20496  | KNOWN ISSUES
20497  |
20498  | NOTES
20499  |
20500  |
20501  | MODIFICATION HISTORY
20502  | Date          Author     Description of Changes
20503  | 05-MAR-07    RRAVIKIR      Created
20504  |
20505  *=======================================================================*/
20506   FUNCTION get_default_taxation_country(x_return_status     OUT NOCOPY VARCHAR2,
20507                                         x_msg_count         OUT NOCOPY NUMBER,
20508                                         x_msg_data          OUT NOCOPY VARCHAR2,
20509                                         p_legal_entity_id   IN NUMBER)
20510     RETURN VARCHAR2 IS
20511 
20512     -- Local variables
20513     l_api_name                    CONSTANT VARCHAR2(30) := 'get_default_taxation_country';
20514     l_return_status               VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
20515 
20516     -- Local data structure
20517     lx_legal_entity_rec    legal_entity_rec_type;
20518 
20519   BEGIN
20520     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20521         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country','Begin(+)');
20522     END IF;
20523 
20524     --Print Input Variables
20525     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20526          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country.',
20527               'p_legal_entity_id :'||p_legal_entity_id);
20528     END IF;
20529 
20530     xle_utilities_grp.get_legalentity_info(x_return_status      => l_return_status,
20531                                                     x_msg_count             => x_msg_count,
20532                                                     x_msg_data              => x_msg_data,
20533                                                 p_party_id          => null,
20534                                                 p_legalentity_id        => p_legal_entity_id,
20535                                                 x_legalentity_info  => lx_legal_entity_rec);
20536     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20537       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20538     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20539       RAISE OKL_API.G_EXCEPTION_ERROR;
20540     END IF;
20541 
20542     x_return_status := l_return_status;
20543 
20544     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20545       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ','End(-)');
20546     END IF;
20547 
20548     RETURN lx_legal_entity_rec.country;
20549 
20550   EXCEPTION
20551     WHEN OKL_API.G_EXCEPTION_ERROR THEN
20552 
20553       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20554          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ',
20555                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20556       END IF;
20557 
20558       x_return_status := OKL_API.G_RET_STS_ERROR;
20559 
20560     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20561       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20562          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ',
20563                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20564       END IF;
20565 
20566       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
20567 
20568     WHEN OTHERS THEN
20569 
20570       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20571          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_default_taxation_country ',
20572                   'EXCEPTION :'||sqlerrm);
20573       END IF;
20574 
20575       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
20576       -- unexpected error
20577       OKL_API.set_message(p_app_name      => g_app_name,
20578                           p_msg_name      => g_unexpected_error,
20579                           p_token1        => g_sqlcode_token,
20580                           p_token1_value  => sqlcode,
20581                           p_token2        => g_sqlerrm_token,
20582                           p_token2_value  => sqlerrm);
20583 
20584   END get_default_taxation_country;
20585 
20586 /*========================================================================
20587  | PUBLIC FUNCTION get_line_intended_use_name
20588  |
20589  | DESCRIPTION
20590  |    This function derives the line intended use name basing on the code
20591  |
20592  | CALLED FROM                                  Sales objects
20593  |
20594  |
20595  | CALLS PROCEDURES/FUNCTIONS
20596  |
20597  |
20598  | PARAMETERS
20599  |      p_intend_use_code            -- Intended use for tax code
20600  |
20601  | KNOWN ISSUES
20602  |
20603  | NOTES
20604  |
20605  |
20606  | MODIFICATION HISTORY
20607  | Date          Author     Description of Changes
20608  | 05-MAR-07    RRAVIKIR      Created
20609  |
20610  *=======================================================================*/
20611   FUNCTION get_line_intended_use_name(p_intend_use_code   IN VARCHAR2)
20612     RETURN VARCHAR2 IS
20613 
20614     -- Local variables
20615     l_intend_use_name     VARCHAR2(240);
20616 
20617     -- Cursors
20618     CURSOR l_get_intend_use_name_csr IS
20619     SELECT classification_name
20620     FROM zx_fc_intended_use_v
20621     WHERE classification_code = p_intend_use_code;
20622   BEGIN
20623     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20624         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name','Begin(+)');
20625     END IF;
20626 
20627     --Print Input Variables
20628     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20629          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name.',
20630               'p_intend_use_code :'||p_intend_use_code);
20631     END IF;
20632 
20633     OPEN l_get_intend_use_name_csr;
20634     FETCH l_get_intend_use_name_csr INTO l_intend_use_name;
20635     CLOSE l_get_intend_use_name_csr;
20636 
20637     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20638       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ','End(-)');
20639     END IF;
20640 
20641     RETURN l_intend_use_name;
20642 
20643   EXCEPTION
20644     WHEN OKL_API.G_EXCEPTION_ERROR THEN
20645 
20646       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20647          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ',
20648                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20649       END IF;
20650 
20651       IF (l_get_intend_use_name_csr%ISOPEN) THEN
20652         CLOSE l_get_intend_use_name_csr;
20653       END IF;
20654 
20655     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20656       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20657          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ',
20658                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20659       END IF;
20660 
20661       IF (l_get_intend_use_name_csr%ISOPEN) THEN
20662         CLOSE l_get_intend_use_name_csr;
20663       END IF;
20664 
20665     WHEN OTHERS THEN
20666 
20667       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20668          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.get_line_intended_use_name ',
20669                   'EXCEPTION :'||sqlerrm);
20670       END IF;
20671 
20672       IF (l_get_intend_use_name_csr%ISOPEN) THEN
20673         CLOSE l_get_intend_use_name_csr;
20674       END IF;
20675 
20676   END get_line_intended_use_name;
20677 
20678 /*========================================================================
20679  | PUBLIC PROCEDURE cancel_document_tax
20680  |
20681  | DESCRIPTION
20682  |    This procedure is called by 'Pre-Rebook' and 'Rebook' processes to cancel
20683  |    the tax
20684  |
20685  | CALLED FROM                                  OLM Rebook Module
20686  |
20687  |
20688  | CALLS PROCEDURES/FUNCTIONS
20689  |
20690  |
20691  | PARAMETERS
20692  |      p_source_trx_id         --  OKL_TRX_CONTRACTS.ID (ID of Pre-Rebook or Rebook transaction)
20693  |      p_source_trx_name   -- Pre-Rebook (used for upgrade) or Rebook
20694  |      p_source_table      -- OKL_TRX_CONTRACTS
20695  |
20696  | KNOWN ISSUES
20697  |
20698  | NOTES
20699  |
20700  |
20701  | MODIFICATION HISTORY
20702  | Date          Author     Description of Changes
20703  | 01-MAR-07    RRAVIKIR      Created
20704  |
20705  *=======================================================================*/
20706   PROCEDURE cancel_document_tax (
20707     p_api_version                   IN NUMBER,
20708     p_init_msg_list                 IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
20709     x_return_status                 OUT NOCOPY VARCHAR2,
20710     x_msg_count                     OUT NOCOPY NUMBER,
20711     x_msg_data                      OUT NOCOPY VARCHAR2,
20712     p_source_trx_id                 IN  NUMBER,
20713     p_source_trx_name               IN  VARCHAR2,
20714     p_source_table                  IN  VARCHAR2) IS
20715 
20716     -- Local variables
20717     l_api_version                   CONSTANT NUMBER := 1;
20718     l_api_name                      CONSTANT VARCHAR2(30) := 'cancel_document_tax';
20719     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
20720 
20721     l_internal_org_id               NUMBER;
20722     l_application_id                NUMBER;
20723     l_entity_code                   VARCHAR2(30);
20724     l_event_class_code              VARCHAR2(30);
20725     i                               NUMBER;
20726 
20727     -- Local record structure
20728     l_txsv_tbl                      txsv_tbl_type;
20729     lx_txsv_tbl                     txsv_tbl_type;
20730     l_transaction_rec               transaction_rec_type;
20731 
20732     -- Cursor
20733     -- This cursor wll pick all the tax sources coresponding to the Rebook validate transaction
20734     -- Rebook can be abandoned only prior to Rebook activation. Hence tax sources
20735     -- picked by this cursor will --be the ones created at the time of validation
20736     CURSOR l_taxsources_csr(cp_trx_id IN NUMBER) IS
20737     SELECT id, org_id, application_id, entity_code, event_class_code
20738     FROM okl_tax_sources
20739     WHERE trx_id = cp_trx_id
20740     AND application_id = G_OKL_APPLICATION_ID
20741     AND TAX_CALL_TYPE_CODE = G_UPFRONT_TAX
20742     AND TAX_LINE_STATUS_CODE = G_ACTIVE_STATUS;
20743 
20744     CURSOR l_taxsources_prbk_csr(cp_trx_id IN NUMBER) IS
20745     SELECT id, org_id, entity_code, event_class_code
20746     FROM okl_tax_sources
20747     WHERE trx_id = cp_trx_id
20748     AND TAX_CALL_TYPE_CODE = G_UPFRONT_TAX
20749     AND TAX_LINE_STATUS_CODE = G_ACTIVE_STATUS;
20750 
20751     CURSOR l_trxcontracts_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
20752     SELECT '1'
20753     FROM   okl_trx_contracts a , okl_trx_types_tl b
20754     WHERE  a.id = cp_trx_id
20755     AND    a.try_id = b.id
20756     AND    b.name = cp_trx_type_name
20757     AND    language = 'US';
20758 
20759     CURSOR l_trxcontracts_base_csr(cp_trx_id IN NUMBER, cp_trx_type_name IN VARCHAR2) IS
20760     SELECT '1'
20761     FROM   okl_trx_contracts_all a , okl_trx_types_tl b
20762     WHERE  a.id = cp_trx_id
20763     AND    a.try_id = b.id
20764     AND    b.name = cp_trx_type_name
20765     AND    language = 'US';
20766 
20767   BEGIN
20768     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20769       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax','Begin(+)');
20770     END IF;
20771 
20772     --Print Input Variables
20773     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20774       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20775               'p_init_msg_list :'||p_init_msg_list);
20776       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20777               'p_source_trx_id :'||p_source_trx_id);
20778       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20779               'p_source_trx_name :'||p_source_trx_name);
20780       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20781               'p_source_table :'||p_source_table);
20782     END IF;
20783 
20784     --Check API version, initialize message list and create savepoint.
20785     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
20786                                               G_PKG_NAME,
20787                                               p_init_msg_list,
20788                                               l_api_version,
20789                                               p_api_version,
20790                                               '_PVT',
20791                                               x_return_status);
20792 
20793     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20794       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20795     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20796       RAISE OKL_API.G_EXCEPTION_ERROR;
20797     END IF;
20798 
20799     -- Required Values
20800     IF p_source_trx_id IS NULL THEN
20801        OKL_API.set_message( p_msg_name      => G_REQUIRED_VALUE,
20802                             p_token1        => G_COL_NAME_TOKEN,
20803                             p_token1_value  => 'SOURCE_TRX_ID');
20804        RAISE OKL_API.G_EXCEPTION_ERROR;
20805     END IF;
20806 
20807     -- validate the source trx id
20808     IF (p_source_trx_name = 'Pre-Rebook') THEN
20809       OPEN  l_trxcontracts_base_csr(p_source_trx_id, p_source_trx_name);
20810       IF l_trxcontracts_base_csr%NOTFOUND THEN
20811         -- source trx id is invalid
20812         OKC_API.set_message( p_app_name      => 'OKC',
20813                              p_msg_name      => G_INVALID_VALUE,
20814                              p_token1        => G_COL_NAME_TOKEN,
20815                              p_token1_value  => 'SOURCE_TRX_ID');
20816         RAISE OKL_API.G_EXCEPTION_ERROR;
20817       END IF;
20818       CLOSE l_trxcontracts_base_csr;
20819     ELSIF (p_source_trx_name = 'Rebook') THEN
20820       OPEN  l_trxcontracts_csr(p_source_trx_id, p_source_trx_name);
20821       IF l_trxcontracts_csr%NOTFOUND THEN
20822         -- source trx id is invalid
20823         OKC_API.set_message( p_app_name      => 'OKC',
20824                              p_msg_name      => G_INVALID_VALUE,
20825                              p_token1        => G_COL_NAME_TOKEN,
20826                              p_token1_value  => 'SOURCE_TRX_ID');
20827         RAISE OKL_API.G_EXCEPTION_ERROR;
20828       END IF;
20829       CLOSE l_trxcontracts_csr;
20830     END IF;
20831 
20832     IF (p_source_trx_name IN ('Pre-Rebook','Rebook')) THEN -- Main condition
20833       -- 'Pre-Rebook' condition is called as part of upgrade, to cancel pending
20834       -- rebook transactions cancel tax lines in OKL schema
20835 
20836       -- 'Rebook' condition is called after the upgrade to cancel tax lines,
20837       -- when a rebook is abandoned cancel tax lines in OKL and ebTax schema
20838           -- Rebook validation tax call would have been made using transaction type
20839       -- 'Rebook' and event class 'BOOKING'
20840 
20841       i := 1;
20842       IF (p_source_trx_name = 'Pre-Rebook') THEN
20843 
20844         FOR l_taxsources_prbk_rec in l_taxsources_prbk_csr(cp_trx_id  => p_source_trx_id) LOOP
20845 
20846           UPDATE okl_tax_sources SET tax_line_status_code = G_CANCELLED_STATUS
20847           WHERE id = l_taxsources_prbk_rec.id;
20848 
20849         END LOOP;
20850 
20851       ELSIF (p_source_trx_name = 'Rebook') THEN
20852 
20853         FOR l_taxsources_rec in l_taxsources_csr(cp_trx_id  => p_source_trx_id) LOOP
20854 
20855           l_txsv_tbl(i).id                   := l_taxsources_rec.id;
20856               l_txsv_tbl(i).tax_line_status_code := G_CANCELLED_STATUS;
20857 
20858           IF (i = 1) THEN
20859             l_internal_org_id   := l_taxsources_rec.org_id;
20860             l_application_id    := l_taxsources_rec.application_id;
20861             l_entity_code       := l_taxsources_rec.entity_code;
20862             l_event_class_code  := l_taxsources_rec.event_class_code;
20863           END IF;
20864 
20865           i := i + 1;
20866 
20867         END LOOP;
20868 
20869       END IF;
20870 
20871       IF (i > 1 AND p_source_trx_name = 'Rebook') THEN -- Update Tax Sources
20872 
20873         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20874           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20875                'Calling OKL_TAX_SOURCES_PUB.update_tax_sources ');
20876         END IF;
20877 
20878         OKL_TAX_SOURCES_PUB.update_tax_sources(p_api_version     => p_api_version
20879                                               ,p_init_msg_list   => p_init_msg_list
20880                                               ,x_return_status   => l_return_status
20881                                               ,x_msg_count       => x_msg_count
20882                                               ,x_msg_data        => x_msg_data
20883                                               ,p_txsv_tbl        => l_txsv_tbl
20884                                               ,x_txsv_tbl        => lx_txsv_tbl);
20885 
20886         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20887           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20888               'Return Status' || l_return_status);
20889         END IF;
20890 
20891         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20892           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20893         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20894           RAISE OKL_API.G_EXCEPTION_ERROR;
20895         END IF;
20896 
20897         -- 'Rebook' specific condition to cancel tax lines in ebTax schema
20898         l_transaction_rec.internal_organization_id := l_internal_org_id;
20899         l_transaction_rec.application_id           := l_application_id;
20900         l_transaction_rec.entity_code              := l_entity_code;
20901         l_transaction_rec.event_class_code         := l_event_class_code;
20902         l_transaction_rec.event_type_code          := G_BOOKING_CANCEL;
20903         l_transaction_rec.trx_id                   :=  p_source_trx_id;
20904 
20905         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20906           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20907             'Calling  OKL_TAX_INTERFACE_PVT.cancel_document_tax ');
20908         END IF;
20909 
20910         OKL_TAX_INTERFACE_PVT.update_document(p_api_version     => p_api_version,
20911                                               p_init_msg_list   => p_init_msg_list,
20912                                               x_return_status   => l_return_status,
20913                                               x_msg_count       => x_msg_count,
20914                                               x_msg_data        => x_msg_data,
20915                                               p_transaction_rec => l_transaction_rec);
20916 
20917         IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20918           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax.',
20919             'Return Status' || l_return_status);
20920         END IF;
20921 
20922         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20923           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20924         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20925           RAISE OKL_API.G_EXCEPTION_ERROR;
20926         END IF;
20927 
20928       END IF; -- Update Tax Sources
20929 
20930     END IF; -- Main condition
20931 
20932     x_return_status := l_return_status;
20933 
20934     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20935       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ','End(-)');
20936     END IF;
20937 
20938     -- end the transaction
20939     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
20940   EXCEPTION
20941     WHEN OKL_API.G_EXCEPTION_ERROR THEN
20942 
20943       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20944          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ',
20945                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
20946       END IF;
20947 
20948       IF (l_taxsources_csr%ISOPEN) THEN
20949         CLOSE l_taxsources_csr;
20950       END IF;
20951 
20952       IF (l_trxcontracts_csr%ISOPEN) THEN
20953         CLOSE l_trxcontracts_csr;
20954       END IF;
20955 
20956       IF (l_trxcontracts_base_csr%ISOPEN) THEN
20957         CLOSE l_trxcontracts_base_csr;
20958       END IF;
20959 
20960       IF (l_taxsources_prbk_csr%ISOPEN) THEN
20961         CLOSE l_taxsources_prbk_csr;
20962       END IF;
20963 
20964       x_return_status := OKL_API.HANDLE_EXCEPTIONS
20965       ( l_api_name,
20966         G_PKG_NAME,
20967         'OKL_API.G_RET_STS_ERROR',
20968         x_msg_count,
20969         x_msg_data,
20970         '_PVT');
20971     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
20972 
20973       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
20974          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ',
20975                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
20976       END IF;
20977 
20978       IF (l_taxsources_csr%ISOPEN) THEN
20979         CLOSE l_taxsources_csr;
20980       END IF;
20981 
20982       IF (l_trxcontracts_csr%ISOPEN) THEN
20983         CLOSE l_trxcontracts_csr;
20984       END IF;
20985 
20986       IF (l_trxcontracts_base_csr%ISOPEN) THEN
20987         CLOSE l_trxcontracts_base_csr;
20988       END IF;
20989 
20990       IF (l_taxsources_prbk_csr%ISOPEN) THEN
20991         CLOSE l_taxsources_prbk_csr;
20992       END IF;
20993 
20994       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
20995       ( l_api_name,
20996         G_PKG_NAME,
20997         'OKL_API.G_RET_STS_UNEXP_ERROR',
20998         x_msg_count,
20999         x_msg_data,
21000         '_PVT');
21001     WHEN OTHERS THEN
21002 
21003       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21004          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.cancel_document_tax ',
21005                   'EXCEPTION :'||sqlerrm);
21006       END IF;
21007 
21008       IF (l_taxsources_csr%ISOPEN) THEN
21009         CLOSE l_taxsources_csr;
21010       END IF;
21011 
21012       IF (l_trxcontracts_csr%ISOPEN) THEN
21013         CLOSE l_trxcontracts_csr;
21014       END IF;
21015 
21016       IF (l_trxcontracts_base_csr%ISOPEN) THEN
21017         CLOSE l_trxcontracts_base_csr;
21018       END IF;
21019 
21020       IF (l_taxsources_prbk_csr%ISOPEN) THEN
21021         CLOSE l_taxsources_prbk_csr;
21022       END IF;
21023 
21024       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21025       ( l_api_name,
21026         G_PKG_NAME,
21027         'OTHERS',
21028         x_msg_count,
21029         x_msg_data,
21030         '_PVT');
21031   END cancel_document_tax;
21032 
21033 /*========================================================================
21034  | PUBLIC PROCEDURE copy_global_tax_data
21035  |
21036  | DESCRIPTION
21037  |    This procedure is called by tax module to populate tax data into ZX global
21038  |    session table. eBtax uses this table to show the tax data for Quote
21039  |    objects (Sales Quote, Lease Application and Termination Quote)
21040  |
21041  | CALLED FROM                                  OLM Tax Module
21042  |
21043  |
21044  | CALLS PROCEDURES/FUNCTIONS
21045  |     OKL_TAX_INTERFACE_PVT.copy_global_tax_data
21046  |
21047  | PARAMETERS
21048  |      p_trx_id                     -- Transaction Identifier
21049  |      p_trx_line_id                -- Transaction Line Identifier
21050  |      p_application_id             -- Application Identifier
21051  |      p_trx_level_type             -- Transaction level type
21052  |      p_entity_code                -- Entity code
21053  |      p_event_class_code           -- Event class code
21054  |
21055  | KNOWN ISSUES
21056  |
21057  | NOTES
21058  |
21059  |
21060  | MODIFICATION HISTORY
21061  | Date          Author     Description of Changes
21062  | 04-APR-07    RRAVIKIR      Created
21063  |
21064  *=======================================================================*/
21065   PROCEDURE copy_global_tax_data (
21066     p_api_version                   IN NUMBER,
21067     p_init_msg_list                 IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
21068     x_return_status                 OUT NOCOPY VARCHAR2,
21069     x_msg_count                     OUT NOCOPY NUMBER,
21070     x_msg_data                      OUT NOCOPY VARCHAR2,
21071     p_trx_id                        IN  NUMBER,
21072     p_trx_line_id                   IN  NUMBER,
21073     p_application_id                IN  NUMBER,
21074     p_trx_level_type                        IN  VARCHAR2,
21075     p_entity_code                                   IN  VARCHAR2,
21076     p_event_class_code              IN  VARCHAR2) IS
21077 
21078     -- Local variables
21079     l_api_version                   CONSTANT NUMBER := 1;
21080     l_api_name                      CONSTANT VARCHAR2(30) := 'copy_global_tax_data';
21081     l_return_status                 VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
21082 
21083   BEGIN
21084     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21085         FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data','Begin(+)');
21086     END IF;
21087 
21088     --Print Input Variables
21089     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21090          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21091               'p_init_msg_list :'||p_init_msg_list);
21092          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21093               'p_trx_id :'||p_trx_id);
21094          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21095               'p_trx_line_id :'||p_trx_line_id);
21096          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21097               'p_application_id :'||p_application_id);
21098          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21099               'p_trx_level_type :'||p_trx_level_type);
21100          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21101               'p_entity_code :'||p_entity_code);
21102          FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21103               'p_event_class_code :'||p_event_class_code);
21104     END IF;
21105 
21106     --Check API version, initialize message list and create savepoint.
21107     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
21108                                               G_PKG_NAME,
21109                                               p_init_msg_list,
21110                                               l_api_version,
21111                                               p_api_version,
21112                                               '_PVT',
21113                                               x_return_status);
21114 
21115     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21116       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21117     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21118       RAISE OKL_API.G_EXCEPTION_ERROR;
21119     END IF;
21120 
21121     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21122       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21123           'Calling OKL_TAX_INTERFACE_PVT.copy_global_tax_data');
21124     END IF;
21125 
21126     OKL_TAX_INTERFACE_PVT.copy_global_tax_data(p_api_version          => p_api_version,
21127                                                p_init_msg_list        => p_init_msg_list,
21128                                                x_return_status        => l_return_status,
21129                                                x_msg_count            => x_msg_count,
21130                                                x_msg_data             => x_msg_data,
21131                                                p_trx_id               => p_trx_id,
21132                                                p_trx_line_id          => p_trx_line_id,
21133                                                p_application_id       => p_application_id,
21134                                                p_trx_level_type           => p_trx_level_type,
21135                                                p_entity_code              => p_entity_code,
21136                                                p_event_class_code     => p_event_class_code);
21137 
21138     IF (G_DEBUG_LEVEL_STATEMENT >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21139       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data.',
21140           'After calling OKL_TAX_INTERFACE_PVT.copy_global_tax_data - Return Status ' || l_return_status);
21141     END IF;
21142 
21143     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21144       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21145     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21146       RAISE OKL_API.G_EXCEPTION_ERROR;
21147     END IF;
21148 
21149     x_return_status := l_return_status;
21150 
21151     IF (G_DEBUG_LEVEL_PROCEDURE >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21152       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ','End(-)');
21153     END IF;
21154 
21155     -- end the transaction
21156     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
21157   EXCEPTION
21158     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21159 
21160       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21161          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ',
21162                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
21163       END IF;
21164 
21165       x_return_status := OKL_API.HANDLE_EXCEPTIONS
21166       (
21167         l_api_name,
21168         G_PKG_NAME,
21169         'OKL_API.G_RET_STS_ERROR',
21170         x_msg_count,
21171         x_msg_data,
21172         '_PVT'
21173       );
21174     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
21175       IF (G_DEBUG_LEVEL_EXCEPTION >= G_DEBUG_CURRENT_RUNTIME_LEVEL) THEN
21176          FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,'OKL_PROCESS_SALES_TAX_PVT.copy_global_tax_data ',
21177                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
21178       END IF;
21179 
21180       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21181       (
21182         l_api_name,
21183         G_PKG_NAME,
21184         'OKL_API.G_RET_STS_UNEXP_ERROR',
21185         x_msg_count,
21186         x_msg_data,
21187         '_PVT'
21188       );
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.copy_global_tax_data ',
21193                   'EXCEPTION :'||sqlerrm);
21194       END IF;
21195 
21196       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
21197       (
21198         l_api_name,
21199         G_PKG_NAME,
21200         'OTHERS',
21201         x_msg_count,
21202         x_msg_data,
21203         '_PVT'
21204       );
21205   END copy_global_tax_data;
21206 
21207 END OKL_PROCESS_SALES_TAX_PVT;