DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKS_AUTH_UTIL_PVT

Source


1 PACKAGE BODY OKS_AUTH_UTIL_PVT AS
2     /* $Header: OKSRAUTB.pls 120.24 2007/12/24 06:31:26 rriyer ship $ */
3 
4         ------------------------ Internal Type Declarations ---------------------------------
5     TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
6     TYPE date_tbl_type IS TABLE OF DATE INDEX BY BINARY_INTEGER;
7     TYPE chr_tbl_type IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8 
9 
10     --GLOBAL VARIABLES
11     g_clvl_filter_rec      clvl_filter_rec;
12     g_clvl_selections_tbl  clvl_selections_tbl;
13     g_chr_id               NUMBER;
14 
15     -- This procedure is to create a table of party ids based on Default criteria Customer/Related or Both
16 
17     FUNCTION Get_selling_price(p_order_line_id IN NUMBER)
18     RETURN NUMBER
19     IS
20     CURSOR l_csr_get_selling_price(p_order_line_id IN NUMBER  )
21         IS
22         SELECT unit_selling_price
23         FROM   oe_order_lines_all
24         WHERE  line_id = p_order_line_id;
25 
26     l_selling_price NUMBER := 0;
27     BEGIN
28         OPEN l_csr_get_selling_price(p_order_line_id);
29         FETCH l_csr_get_selling_price INTO l_selling_price;
30         IF l_Csr_get_selling_price%NOTFOUND THEN
31             l_selling_price := 0;
32         END IF;
33         CLOSE l_csr_get_selling_price;
34 
35 
36         RETURN l_selling_price;
37 
38     END;
39 
40     PROCEDURE get_item_name_desc(p_inv_id IN NUMBER,
41                                  x_name   OUT NOCOPY VARCHAR2,
42                                  x_description OUT NOCOPY VARCHAR2   )
43     IS
44     CURSOR l_csr_get_name_desc(p_inv_id IN NUMBER) IS
45         SELECT name, description
46         FROM   OKX_SYSTEM_ITEMS_V
47         WHERE  id1 = p_inv_id
48         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE)) ;
49 
50     l_sp_flag VARCHAR2(1);
51     l_name    OKX_SYSTEM_ITEMS_V.name%TYPE;
52     l_description OKX_SYSTEM_ITEMS_V.name%TYPE;
53 
54     BEGIN
55         OPEN  l_csr_get_name_desc(p_inv_id) ;
56         FETCH l_csr_get_name_desc INTO l_name, l_description ;
57         x_name := l_name;
58         x_description := l_description;
59         CLOSE l_csr_get_name_desc;
60 
61     END;
62 
63     PROCEDURE get_party_id(p_default       IN   VARCHAR2,
64                            p_party_id      IN   NUMBER,
65                            p_org_id        IN   NUMBER,
66                            x_party_id_tbl  OUT  NOCOPY party_id_tbl )
67     IS
68 
69 
70     CURSOR l_csr_cust_party (p_party_id IN NUMBER)
71         IS
72         SELECT id1, name
73         FROM okx_parties_v
74         WHERE id1 = p_party_id;
75 
76     CURSOR l_csr_rel_party (p_party_id IN NUMBER,
77                             p_org_id   IN NUMBER)  IS
78         SELECT P.id1, P.name
79         FROM   OKX_PARTIES_V P,
80                OKX_CUSTOMER_ACCOUNTS_V CA1
81         WHERE  P.id1 = CA1.party_id
82         AND    CA1.id1  IN(SELECT  A.related_cust_account_id
83                            FROM   OKX_CUST_ACCT_RELATE_ALL_V A,
84                            OKX_CUSTOMER_ACCOUNTS_V  B
85                            WHERE  B.ID1 = A.CUST_ACCOUNT_ID
86                            AND    B.party_id = p_party_id
87                            AND    B.status = 'A'
88                            AND    A.status = 'A'
89                            AND    A.org_id = p_org_id)
90         AND CA1.status = 'A';
91 
92     CURSOR l_csr_both_party(p_party_id IN NUMBER,
93                             p_org_id   IN NUMBER) IS
94         SELECT id1, name
95         FROM   okx_parties_v
96         WHERE  id1 = p_party_id
97         UNION
98         SELECT P.id1, p.name
99         FROM   OKX_PARTIES_V P,
100                OKX_CUSTOMER_ACCOUNTS_V CA1
101         WHERE  P.id1 = CA1.party_id
102         AND    CA1.id1  IN(SELECT  A.related_cust_account_id
103                            FROM   OKX_CUST_ACCT_RELATE_ALL_V A,
104                            OKX_CUSTOMER_ACCOUNTS_V  B
105                            WHERE  B.ID1 = A.CUST_ACCOUNT_ID
106                            AND    B.party_id = p_party_id
107                            AND    B.status = 'A'
108                            AND    A.status = 'A'
109                            AND    A.org_id = p_org_id)
110         AND CA1.status = 'A';
111 
112     i                 NUMBER := 1;
113     l_party_id        OKX_PARTIES_V.id1%TYPE;
114     l_party_name      OKX_PARTIES_V.name%TYPE;
115     BEGIN
116         IF p_default = 'CUSTOMER' THEN
117 
118             OPEN l_csr_cust_party(p_party_id
119                                   );
120             FETCH l_csr_cust_party INTO l_party_id, l_party_name;
121             IF l_csr_cust_party%FOUND THEN
122                 x_party_id_tbl(1).party_id := l_party_id;
123                 x_party_id_tbl(1).party_name := l_party_name;
124             END IF;
125             CLOSE l_csr_cust_party;
126 
127         ELSIF p_default = 'RELATED' THEN
128 
129             OPEN l_csr_rel_party(p_party_id,
130                                  p_org_id   );
131             LOOP
132 
133                 FETCH l_csr_rel_party INTO l_party_id, l_party_name;
134                 EXIT WHEN l_csr_rel_party%NOTFOUND;
135                 x_party_id_tbl(i).party_id := l_party_id;
136                 x_party_id_tbl(i).party_name := l_party_name;
137                 i := i + 1;
138             END LOOP ;
139             CLOSE l_csr_rel_party;
140         ELSIF p_default = 'BOTH' THEN
141             OPEN l_csr_both_party(p_party_id,
142                                   p_org_id   );
143             LOOP
144 
145                 FETCH l_csr_both_party INTO l_party_id, l_party_name;
146                 EXIT WHEN l_csr_both_party%NOTFOUND;
147                 x_party_id_tbl(i).party_id := l_party_id;
148                 x_party_id_tbl(i).party_name := l_party_name;
149                 i := i + 1;
150             END LOOP ;
151             CLOSE l_csr_both_party;
152         -- Bug 5054171 --
153 	ELSIF p_default = 'ALL' THEN
154 
155             OPEN l_csr_cust_party(p_party_id
156                                   );
157             FETCH l_csr_cust_party INTO l_party_id, l_party_name;
158             IF l_csr_cust_party%FOUND THEN
159                 x_party_id_tbl(1).party_id := l_party_id;
160                 x_party_id_tbl(1).party_name := l_party_name;
161             END IF;
162             CLOSE l_csr_cust_party;
163         END IF;
164 	-- Bug 5054171 --
165 
166     END ;
167 
168     -- This procedure is to create a table of customer ids based on Default criteria Customer/Related or Both
169     PROCEDURE get_customer_id(p_default IN  VARCHAR2,
170                               p_party_id IN NUMBER,
171                               p_org_id   IN NUMBER,
172                               x_cust_id_tbl  OUT  NOCOPY cust_id_tbl )
173     IS
174 
175     CURSOR l_csr_customer (p_party_id IN NUMBER,
176                            p_org_id   IN NUMBER)
177         IS
178         SELECT CA1.Id1, CA1.name
179         FROM   OKX_CUSTOMER_ACCOUNTS_V CA1
180         WHERE  CA1.party_id = p_party_id
181         AND    CA1.status = 'A'
182         ORDER BY ca1.name ;
183 
184 
185     CURSOR l_csr_rel_customer (p_party_id IN NUMBER,
186                                p_org_id   IN NUMBER)  IS
187         SELECT CA2.id1, CA2.name
188         FROM   OKX_CUSTOMER_ACCOUNTS_V CA2
189         WHERE  CA2.id1 IN(SELECT A.RELATED_CUST_ACCOUNT_ID
190                           FROM   OKX_CUST_ACCT_RELATE_ALL_V A,
191                           OKX_CUSTOMER_ACCOUNTS_V  B
192                           WHERE  B.ID1 = A.CUST_ACCOUNT_ID
193                           AND    B.party_id = p_party_id
194                           AND    B.status = 'A'
195                           AND    A.status = 'A'
196                           AND    A.org_id = p_org_id)
197         AND CA2.status = 'A'
198         ORDER BY ca2.name ;
199 
200     CURSOR l_csr_both_customer(p_party_id IN NUMBER,
201                                p_org_id   IN NUMBER) IS
202         SELECT CA1.Id1, CA1.name
203         FROM   OKX_CUSTOMER_ACCOUNTS_V CA1
204         WHERE  CA1.party_id = p_party_id
205         AND    CA1.status = 'A'
206         UNION
207         SELECT CA2.id1, CA2.name
208         FROM   OKX_CUSTOMER_ACCOUNTS_V CA2
209         WHERE  CA2.id1 IN(SELECT A.RELATED_CUST_ACCOUNT_ID
210                           FROM   OKX_CUST_ACCT_RELATE_ALL_V A,
211                           OKX_CUSTOMER_ACCOUNTS_V  B
212                           WHERE  B.ID1 = A.CUST_ACCOUNT_ID
213                           AND    B.party_id = p_party_id
214                           AND    B.status = 'A'
215                           AND    A.status = 'A'
216                           AND    A.org_id = p_org_id)
217        AND CA2.status = 'A'
218        ORDER BY 2 ;
219 
220     i                 NUMBER := 1;
221     l_customer_id     OKX_CUSTOMER_ACCOUNTS_V.id1%TYPE;
222     l_customer_name   OKX_CUSTOMER_ACCOUNTS_V.name%TYPE;
223 
224     BEGIN
225         --------------------------------errorout(' IN customer id func '||p_default||' '||p_party_id||' '||p_org_id);
226 
227         IF p_default = 'CUSTOMER' THEN
228 
229             OPEN l_csr_customer(p_party_id,
230                                 p_org_id   );
231             LOOP
232 
233                 FETCH l_csr_customer INTO l_customer_id, l_customer_name;
234                 EXIT WHEN l_csr_customer%NOTFOUND;
235 
236                 x_cust_id_tbl(i).customer_id := l_customer_id;
237                 x_cust_id_tbl(i).customer_name := l_customer_name;
238                 i := i + 1;
239             END LOOP ;
240             CLOSE l_csr_customer;
241         ELSIF p_default = 'RELATED' THEN
242             OPEN l_csr_rel_customer(p_party_id,
243                                     p_org_id   );
244             LOOP
245 
246                 FETCH l_csr_rel_customer INTO l_customer_id, l_customer_name;
247                 EXIT WHEN l_csr_rel_customer%NOTFOUND;
248                 x_cust_id_tbl(i).customer_id := l_customer_id;
249                 x_cust_id_tbl(i).customer_name := l_customer_name;
250                 i := i + 1;
251             END LOOP ;
252             CLOSE l_csr_rel_customer;
253         ELSIF p_default = 'BOTH' THEN
254             OPEN l_csr_both_customer(p_party_id,
255                                      p_org_id   );
256             LOOP
257                 ----------------------------------errorout(' In loop for both ');
258                 FETCH l_csr_both_customer INTO l_customer_id, l_customer_name;
259                 IF l_csr_both_customer%NOTFOUND THEN
260                     EXIT;
261                 ELSE
262                     ----------------------------------------errorout(' both customer_id '||l_customer_id);
263                     x_cust_id_tbl(i).customer_id := l_customer_id;
264                     x_cust_id_tbl(i).customer_name := l_customer_name;
265                     i := i + 1;
266                 END IF;
267             END LOOP ;
268             CLOSE l_csr_both_customer;
269         END IF;
270 
271     END ;
272 
273 
274     /*****************************************************************/
275     PROCEDURE get_products(p_filter          IN VARCHAR2,
276                            p_id              IN NUMBER DEFAULT NULL,
277                            p_default         IN VARCHAR2,
278                            p_cust_id_list    IN VARCHAR2,
279                            p_party_id        IN VARCHAR2,
280                            p_org_id          IN NUMBER,
281                            p_organization_id IN NUMBER,
282                            x_prod_tbl OUT NOCOPY prod_tbl)
283     IS
284 
285 
286     /* Select Products for a single customer or for all  customers belonging to a Party */
287     -- This cursor is not used --
288     CURSOR l_csr_party_products(p_party_id IN NUMBER,
289                                 p_organization_id IN NUMBER)
290         IS
291         SELECT CII.instance_id id1,
292                CII.install_location_id,
293                CII.quantity,
294                CII.instance_number,
295                CII.unit_of_measure,
296                     0,
297                CII.inventory_item_id,
298                CII.serial_number,
299                '#' id2,
300                CII.last_oe_order_line_id
301             FROM   CSI_ITEM_INSTANCES CII,
302                CSI_INSTANCE_STATUSES CIS
303         WHERE  CII.owner_party_account_id IN
304                              (SELECT id1 FROM okx_customer_accounts_v
305                               WHERE  party_id = p_party_id)
306         AND  CII.Instance_status_id = CIS.instance_status_id
307         AND    CIS.service_order_allowed_flag = 'Y';
308 
309 
310     l_get_prod_rec get_prod_rec;
311 
312     TYPE var_cur_type IS REF CURSOR ;
313 
314     csr_get_products    var_cur_type;
315     get_prod_sql        VARCHAR2(5000);
316     l_prod_rec          prod_rec;
317     l_id                NUMBER;
318     i                   NUMBER := 1;
319     l_add_condition_sql VARCHAR2(500) := '';
320     l_customer_id       OKX_CUSTOMER_ACCOUNTS_V.id1%TYPE ;
321     l_org_id            NUMBER;get_prod_sql_all    VARCHAR2(5000);
322     l_order_by         VARCHAR2(2000);
323     get_prod_sql_cust  VARCHAR2(10000);
324     get_prod_sql_rel  VARCHAR2(10000);
325     get_prod_sql_both  VARCHAR2(10000);
326 
327     BEGIN
328 
329 
330         ----------------------errorout_an(' in get product ');
331 
332         get_prod_sql := ' SELECT CII.instance_id id1    '
333         ||', CII.install_location_id install_location_id '
334         ||', CII.quantity quantity '
335         ||', CII.instance_number instance_number '
336         ||', CII.unit_of_measure unit_of_measure '
337         ||', 0  '
338         ||', CII.inventory_item_id   inventory_item_id'
339         ||', CII.serial_number serial_number '
340         ||', ''#'' id2 '
341         ||', CII.last_oe_order_line_id '
342         ||', CII.external_reference ' -- new bug 4372877
343         ||'  FROM   CSI_ITEM_INSTANCES CII, CSI_INSTANCE_STATUSES  CIS '
344         ||'  WHERE   '
345         ||'  CIS.instance_status_id = CII.instance_status_id '
346         ||'  AND    CIS.service_order_allowed_flag = ''Y''' ;
347 
348 
349         /*** These queries will hold when filter = Item/Site/System/Party  ***/
350 
351         /**** Get products when default = customer ***/
352 
353         get_prod_sql_cust := ' SELECT CII.instance_id id1    '
354         ||', CII.install_location_id install_location_id '
355         ||', CII.quantity quantity '
356         ||', CII.instance_number instance_number '
357         ||', CII.unit_of_measure unit_of_measure '
358         ||', 0  unit_selling_price '
359         ||', CII.inventory_item_id   inventory_item_id'
360         ||', CII.serial_number serial_number '
361         ||', ''#'' id2 '
362         ||', CII.last_oe_order_line_id '
363         ||', CII.external_reference ' -- new bug 4372877
364         ||'  FROM   CSI_ITEM_INSTANCES CII, CSI_INSTANCE_STATUSES  CIS , MTL_SYSTEM_ITEMS_KFV IT'
365         ||'  WHERE IT.inventory_item_id = CII.inventory_item_id '
366         ||'  AND  IT.serviceable_product_flag = ''Y'''
367         ||'  AND  IT.organization_id = :p_organization_id '
368         ||'  AND  CIS.instance_status_id = CII.instance_status_id '
369         ||'  AND  CIS.service_order_allowed_flag = ''Y'''
370         ||'  AND    CII.owner_party_account_id in (select id1 '
371         ||' from okx_customer_accounts_v '
372         ||' where party_id =  :l_party_id ) ';
373 
374 
375         /**** Get products when default = related ***/
376 
377         get_prod_sql_rel := ' SELECT CII.instance_id id1    '
378         ||', CII.install_location_id install_location_id '
379         ||', CII.quantity quantity '
380         ||', CII.instance_number instance_number '
381         ||', CII.unit_of_measure unit_of_measure '
382         ||', 0  unit_selling_price '
383         ||', CII.inventory_item_id   inventory_item_id'
384         ||', CII.serial_number serial_number '
385         ||', ''#'' id2 '
386         ||', last_oe_order_line_id '
387         ||', CII.external_reference ' -- new bug 4372877
388         ||'  FROM   CSI_ITEM_INSTANCES CII, CSI_INSTANCE_STATUSES  CIS , MTL_SYSTEM_ITEMS_KFV IT'
389         ||'  WHERE IT.inventory_item_id = CII.inventory_item_id '
390         ||'  AND  IT.serviceable_product_flag = ''Y'''
391         ||'  AND  IT.organization_id = :p_organization_id '
392         ||'  AND  '
393         ||'     CIS.instance_status_id = CII.instance_status_id '
394         ||'  AND  CIS.service_order_allowed_flag = ''Y'''
395         ||'  AND    CII.owner_party_account_id in  '
396         ||'  (select A.RELATED_CUST_ACCOUNT_ID '
397         ||'   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, '
398         ||'          OKX_CUSTOMER_ACCOUNTS_V  B '
399         ||'   WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
400         ||'   AND    B.party_id =   :l_party_id '
401         ||'   AND    B.status = ''A'''
402         ||'   AND    A.status = ''A'''
403         ||'   AND    A.org_id =  :l_org_id '
404         ||'  ) '                        ;
405 
406         /**** Get products when default = both ***/
407 
408         get_prod_sql_both := ' SELECT CII.instance_id id1    '
409         ||', CII.install_location_id install_location_id '
410         ||', CII.quantity quantity '
411         ||', CII.instance_number instance_number '
412         ||', CII.unit_of_measure unit_of_measure '
413         ||',0  unit_selling_price '
414         ||', CII.inventory_item_id   inventory_item_id'
415         ||', CII.serial_number serial_number '
416         ||', ''#'' id2 '
417         ||', last_oe_order_line_id '
418         ||', CII.external_reference ' -- new bug 4372877
419         ||'  FROM   CSI_ITEM_INSTANCES CII, CSI_INSTANCE_STATUSES  CIS , MTL_SYSTEM_ITEMS_KFV IT'
420         ||'  WHERE IT.inventory_item_id = CII.inventory_item_id '
421         ||'  AND  IT.serviceable_product_flag = ''Y'''
422         ||'  AND  IT.organization_id = :p_organization_id '
423         ||'  AND   '
424         ||'     CIS.instance_status_id = CII.instance_status_id '
425         ||'  AND  CIS.service_order_allowed_flag = ''Y'''
426         ||'  AND    CII.owner_party_account_id in (select id1 '
427         ||' from okx_customer_accounts_v '
428         ||' where party_id = to_char(:l_party_id) '
429         ||' UNION '
430         ||'  select A.RELATED_CUST_ACCOUNT_ID '
431         ||'   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, '
432         ||'          OKX_CUSTOMER_ACCOUNTS_V  B '
433         ||'   WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
434 
435         ||'   AND    B.party_id = :l_party_id'
436         ||'   AND    B.status = ''A'''
437         ||'   AND    A.status = ''A'''
438         ||'   AND    A.org_id =  :l_org_id '
439         ||'  ) ';
440 
441 
442         get_prod_sql_all := ' SELECT CII.instance_id id1    '
443         ||', CII.install_location_id install_location_id '
444         ||', CII.quantity quantity '
445         ||', CII.instance_number instance_number '
446         ||', CII.unit_of_measure unit_of_measure '
447         ||', 0  unit_selling_price '
448         ||', CII.inventory_item_id   inventory_item_id'
449         ||', CII.serial_number serial_number '
450         ||', ''#'' id2 '
451         ||', CII.last_oe_order_line_id '
452         ||', CII.external_reference ' -- new bug 4372877
453         ||'  FROM   CSI_ITEM_INSTANCES CII, CSI_INSTANCE_STATUSES  CIS ,  MTL_SYSTEM_ITEMS_KFV IT'
454         ||'  WHERE IT.inventory_item_id = CII.inventory_item_id '
455         ||'  AND  IT.serviceable_product_flag = ''Y'''
456         ||'  AND  IT.organization_id = :p_organization_id '
457         ||'  AND   '
458         ||'         CIS.instance_status_id = CII.instance_status_id '
459         ||'  AND  CIS.service_order_allowed_flag = ''Y''';
460 
461 
462         l_order_by := ' Order by CII.serial_number, CII.instance_number ';
463         -- removed CII.instance_id for bug3944182
464 
465         l_id := p_id;
466         l_org_id := p_org_id;
467 
468         -----------------------errorout('before condition '||get_prod_sql);
469         -- errorout('before condition '||get_prod_sql);
470 
471         --------------errorout_ad('before condition '||get_prod_sql);
472 
473         IF  p_filter <> ('Model') THEN
474 
475 
476             /* If filter = Customer, then the above additional criteria is not required */
477 
478             IF p_filter NOT IN ('Party', 'Customer') THEN   /** these two conditions are handled seperately **/
479                 -- errorout( 'P_filter ' || p_filter);
480                 IF p_default = 'CUSTOMER' THEN
481 
482                     IF p_filter = 'Item' THEN
483                         IF l_id IS NOT   NULL THEN
484                             get_prod_sql_cust := get_prod_sql_cust ||' '||' AND CII.inventory_item_id = :l_id'||' '|| l_order_by;
485                             OPEN csr_get_products FOR get_prod_sql_cust USING p_organization_id, p_party_id, l_id ;
486                         ELSE
487                             get_prod_sql_cust := get_prod_sql_cust ||' '|| l_order_by;
488                             OPEN csr_get_products FOR get_prod_sql_cust USING p_organization_id, p_party_id ;
489                         END IF;
490                     ELSE
491                         IF p_filter = 'Site' THEN
492                             l_add_condition_sql := ' AND CII.install_location_id = :l_id';
493                         ELSIF p_filter = 'System' THEN
494                             l_add_condition_sql := ' AND CII.system_id = :l_id';
495                         END IF;
496                         --                ------------------------errorout_an('after condition '||get_prod_sql_cust);
497                         get_prod_sql_cust := get_prod_sql_cust ||' '|| l_add_condition_sql ||' '|| l_order_by;
498                         OPEN csr_get_products FOR get_prod_sql_cust USING p_organization_id, p_party_id, l_id ;
499                     END IF;
500 
501                 ELSIF p_default = 'RELATED' THEN
502 
503                     IF p_filter = 'Item' THEN
504                         IF l_id IS NOT   NULL THEN
505                             get_prod_sql_rel := get_prod_sql_rel ||' '||' AND CII.inventory_item_id = :l_id'||' '|| l_order_by;
506                             OPEN csr_get_products FOR get_prod_sql_rel USING p_organization_id, p_party_id, l_org_id, l_id ;
507                         ELSE
508                             get_prod_sql_rel := get_prod_sql_rel ||' '|| l_order_by;
509                             OPEN csr_get_products FOR get_prod_sql_rel USING p_organization_id, p_party_id, l_org_id;
510                         END IF;
511                     ELSE
512                         IF p_filter = 'Site' THEN
513                             l_add_condition_sql := ' AND CII.install_location_id = :l_id';
514                         ELSIF p_filter = 'System' THEN
515                             l_add_condition_sql := ' AND CII.system_id = :l_id';
516                         END IF;
517                         get_prod_sql_rel := get_prod_sql_rel ||' '|| l_add_condition_sql ||' '|| l_order_by;
518                         OPEN csr_get_products FOR get_prod_sql_rel USING p_organization_id, p_party_id, l_org_id, l_id ;
519                     END IF;
520 
521                 ELSIF p_default = 'BOTH' THEN
522                     IF p_filter = 'Item' THEN
523                         IF l_id IS NOT   NULL THEN
524                             get_prod_sql_both := get_prod_sql_both ||' '||' AND CII.inventory_item_id = :l_id'||' '|| l_order_by;
525                             OPEN csr_get_products FOR get_prod_sql_both USING p_organization_id, p_party_id, p_party_id, l_org_id, l_id ;
526                         ELSE
527                             get_prod_sql_both := get_prod_sql_both ||' '|| l_order_by;
528                             OPEN csr_get_products FOR get_prod_sql_both USING p_organization_id, p_party_id, p_party_id, l_org_id ;
529                         END IF;
530                     ELSE
531                         IF p_filter = 'Site' THEN
532                             l_add_condition_sql := ' AND CII.install_location_id = :l_id';
533                         ELSIF p_filter = 'System' THEN
534                             l_add_condition_sql := ' AND CII.system_id = :l_id';
535                         END IF;
536 
537                         get_prod_sql_both := get_prod_sql_both ||' '|| l_add_condition_sql ||' '|| l_order_by;
538                         --                ------------------errorout_an('after condition both '||get_prod_sql_both);
539                         OPEN csr_get_products FOR get_prod_sql_both USING p_organization_id, p_party_id, p_party_id, l_org_id, l_id ;
540                     END IF;
541 
542                 ELSIF p_default = 'ALL' THEN
543                     IF p_filter = 'Item' THEN
544                         IF l_id IS NOT   NULL THEN
545                             get_prod_sql_all := get_prod_sql_all ||' '||' AND CII.inventory_item_id = :l_id'||' '|| l_order_by;
546                             -- BUG 3643410  31-MAY-2004 --
547                             -- GCHADHA --
548                             -- OPEN csr_get_products FOR get_prod_sql_all USING l_id, p_organization_id;
549                             OPEN csr_get_products FOR get_prod_sql_all USING p_organization_id, l_id;
550                             -- GCHADHA --
551                         ELSE
552                             -- BUG 3643410  31-MAY-2004 --
553                             -- GCHADHA --
554                             --   get_prod_sql_all  := get_prod_sql_both||' '||' AND CII.inventory_item_id = :l_id'||l_order_by;
555                             get_prod_sql_all := get_prod_sql_all ||' '|| l_order_by;
556                             -- OPEN csr_get_products FOR get_prod_sql_all USING l_id, p_organization_id;
557                             OPEN csr_get_products FOR get_prod_sql_all USING p_organization_id;
558                             -- END GCHADHA --
559                         END IF;
560                     ELSE
561                         IF l_id IS NOT NULL THEN
562                             IF p_filter = 'Site' THEN
563                                 l_add_condition_sql := ' AND CII.install_location_id = :l_id';
564                             ELSIF p_filter = 'System' THEN
565                                 l_add_condition_sql := ' AND CII.system_id = :l_id';
566                             END IF;
567                             get_prod_sql_all := get_prod_sql_all ||' '|| l_add_condition_sql ||' '|| l_order_by;
568                             -- BUG 3643410  31-MAY-2004 --
569                             -- GCHADHA --
570                             --   OPEN csr_get_products FOR get_prod_sql_all USING l_id, p_organization_id ;
571                             OPEN csr_get_products FOR get_prod_sql_all USING p_organization_id, l_id ;
572                             -- GCHADHA --
573                         ELSE
574                             get_prod_sql_all := get_prod_sql_all ||' '|| l_order_by;
575                             OPEN csr_get_products FOR get_prod_sql_all USING p_organization_id ;
576                         END IF;
577 
578                     END IF;
579 
580                 END IF;
581 
582             ELSIF p_filter = 'Party' THEN
583                 --           ----------------errorout_an(' party id  '||p_party_id);
584 
585                 IF l_id IS NOT NULL THEN
586                     OPEN csr_get_products FOR get_prod_sql_cust USING p_organization_id, l_id;
587                 ELSE
588 
589                     IF p_default = 'CUSTOMER'  THEN
590                         get_prod_sql_cust := get_prod_sql_cust ||' '|| l_order_by;
591                         OPEN csr_get_products FOR get_prod_sql_cust USING p_organization_id, p_party_id;
592                     ELSIF p_default = 'RELATED' THEN
593                         get_prod_sql_rel := get_prod_sql_rel ||' '|| l_order_by;
594                         OPEN csr_get_products FOR get_prod_sql_rel USING p_organization_id, p_party_id, p_org_id;
595                     ELSIF p_default = 'BOTH' THEN
596                         get_prod_sql_both := get_prod_sql_both ||' '|| l_order_by;
597                         OPEN csr_get_products FOR get_prod_sql_both USING p_organization_id, p_party_id, p_party_id, p_org_id ;
598                     ELSIF p_default = 'ALL' THEN
599                         -- Bug 5054171 --
600 			-- P_cust_id_list is not null when the
601 			-- name field is not Null
602 			If p_cust_id_list is not NULL
603                         THEN
604                              get_prod_sql_cust := get_prod_sql_cust ||' '|| l_order_by;
605                         OPEN csr_get_products FOR get_prod_sql_cust USING p_organization_id, p_party_id;
606 
607                         ELSE
608                             get_prod_sql_all := get_prod_sql_all ||' '|| l_order_by;
609                             OPEN csr_get_products FOR get_prod_sql_all USING p_organization_id ; -- USING
610                         END IF;
611                         -- Bug 5054171 --
612                     END IF;
613                 END IF;
614 
615 
616             ELSIF p_filter = 'Customer' THEN
617                 l_add_condition_sql := ' AND CII.owner_party_account_id = :p_id';
618                 get_prod_sql := get_prod_sql ||' '|| l_add_condition_sql ||' '|| l_order_by;
619                 --         --------------errorout_an('after condition customer '||get_prod_sql||' l_id '||l_id ||' p_id '||p_id);
620                 OPEN csr_get_products FOR get_prod_sql USING p_id ;
621             END IF;
622 
623 
624             LOOP
625 
626                 FETCH csr_get_products INTO l_get_prod_rec;
627                 IF csr_get_products%NOTFOUND THEN
628                     EXIT;
629                 ELSE
630                     x_prod_tbl(i).id1 := l_get_prod_rec.id1;
631                     x_prod_tbl(i).install_location_Id := l_get_prod_rec.install_location_id ;
632                     x_prod_tbl(i).quantity := l_get_prod_rec.quantity;
633                     x_prod_tbl(i).instance_number := l_get_prod_rec.instance_number;
634                     x_prod_tbl(i).unit_of_measure := l_get_prod_rec.unit_of_measure;
635                     x_prod_tbl(i).unit_selling_price := get_selling_price(l_get_prod_rec.oe_line_id);
636                     x_prod_tbl(i).inventory_item_id := l_get_prod_rec.inventory_item_id;
637                     x_prod_tbl(i).serial_number := l_get_prod_rec.serial_number;
638                     x_prod_tbl(i).id2 := l_get_prod_rec.id2;
639                     -- GCHADHA --
640                     -- 4372877 --
641                     -- 5/25/2005 --
642                     x_prod_tbl(i).external_reference := l_get_prod_rec.external_reference;
643                     -- END GCHADHA --
644                     i := i + 1 ;
645 
646                 END IF;
647             END LOOP;
648             CLOSE csr_get_products;
649             --------------------------errorout_an(' inv id '||l_id||' count '||x_prod_tbl.count);
650         END IF;
651     END ;
652 
653 
654 
655     /*****************************************************************/
656 
657 
658     PROCEDURE populate_table(p_prod_tbl         IN    prod_tbl,
659                              p_filter           IN    VARCHAR2,
660                              px_rowcount        IN OUT NOCOPY NUMBER,
661                              p_display_pref     IN    VARCHAR2,
662                              x_prod_selections_tbl  IN OUT NOCOPY  prod_selections_tbl )
663     IS
664     l_price              NUMBER;
665     l_name               VARCHAR2(1000);
666     l_install_site_id    OKX_PARTY_SITES_V.id1%TYPE;
667     -- Bug 4915711 --
668     -- l_install_site_name  OKX_PARTY_SITES_V.DESCRIPTION%TYPE;
669     l_install_site_name  VARCHAR2(2000);
670     -- Bug 4915711 --
671 
672     rowcount             NUMBER ;
673     l_display_name       VARCHAR2(2000); -- 4915711 --
674     j                    NUMBER;
675     l_uom_desc           OKx_UNITS_OF_MEASURE_v.unit_of_measure_tl%TYPE;
676 
677     CURSOR l_site_name_csr(l_install_site_id NUMBER) IS
678         SELECT S.DESCRIPTION
679         FROM   OKX_PARTY_SITES_V S
680         WHERE  S.ID1 = l_install_site_id;
681 
682     CURSOR l_csr_uom_desc(p_uom_code IN VARCHAR2)
683         IS
684         SELECT unit_of_measure_tl
685         FROM OKX_UNITS_OF_MEASURE_V
686         WHERE uom_code = p_uom_code ;
687 
688 
689     l_gen_name           OKX_SYSTEM_ITEMS_V.name%TYPE;
690     l_gen_desc           OKX_SYSTEM_ITEMS_V.description%TYPE;
691     BEGIN
692         rowcount := px_rowcount;
693 
694         ----------------------errorout_an(' in populate table ');
695 
696         FOR j IN 1 .. p_prod_tbl.COUNT LOOP
697             x_prod_selections_tbl(rowcount).rec_type := 'C';
698             x_prod_selections_tbl(rowcount).rec_name := p_filter;
699             x_prod_selections_tbl(rowcount).rec_no := rowcount;
700             x_prod_selections_tbl(rowcount).cp_id := p_prod_tbl(j).id1;
701 
702             IF p_filter = 'Model' THEN
703                 x_prod_selections_tbl(rowcount).config_parent_id := p_prod_tbl(j).config_parent_id;
704                 x_prod_selections_tbl(rowcount).model_level := p_prod_tbl(j).model_level;
705 
706             END IF;
707 
708             x_prod_selections_tbl(rowcount).cp_id2 := p_prod_tbl(j).id2;
709             x_prod_selections_tbl(rowcount).ser_number := p_prod_tbl(j).serial_number ;
710             x_prod_selections_tbl(rowcount).ref_number := p_prod_tbl(j).instance_number ;
711             x_prod_selections_tbl(rowcount).quantity := p_prod_tbl(j).quantity;
712             x_prod_selections_tbl(rowcount).orig_net_amt := p_prod_tbl(j).unit_selling_price;
713             -- GCHADHA --
714             -- BUG 4372877 --
715             -- 5/25/2005 --
716             x_prod_selections_tbl(rowcount).ext_reference := p_prod_tbl(j).external_reference;
717 
718             -- END GCHADHA --
719 
720 
721 
722 
723             IF NVL(p_prod_tbl(j).quantity, 1) = 0 THEN
724                 l_price := 0 ;
725             ELSE
726                 l_price := p_prod_tbl(j).unit_selling_price / NVL(p_prod_tbl(j).quantity, 1);
727             END IF;
728 
729 
730             x_prod_selections_tbl(rowcount).price := l_price;
731             x_prod_selections_tbl(rowcount).inventory_item_id := p_prod_tbl(j).inventory_item_id;
732             x_prod_selections_tbl(rowcount).site_id := p_prod_tbl(j).install_location_id;
733             x_prod_selections_tbl(rowcount).uom_code := p_prod_tbl(j).unit_of_measure;
734 
735             l_install_site_id := p_prod_tbl(j).install_location_id;
736             l_install_site_name := '';
737 
738             IF l_install_site_id IS NOT NULL THEN
739                 OPEN  l_site_name_csr(l_install_site_id);
740                 FETCH l_site_name_csr INTO l_install_site_name;
741                 CLOSE l_site_name_csr;
742             END IF;
743 
744             --               l_install_site_name := ' Install description ';
745             x_prod_selections_tbl(rowcount).orig_net_amt := get_selling_price(p_prod_tbl(j).oe_line_id);
746 
747 
748 
749             OPEN l_csr_uom_desc(p_prod_tbl(j).unit_of_measure);
750             FETCH l_csr_uom_desc INTO l_uom_desc;
751             CLOSE l_csr_uom_desc;
752 
753             -- Get item name and description for the inventory item id
754 
755             get_item_name_desc(p_prod_tbl(j).inventory_item_id, l_gen_name, l_gen_desc) ;
756 
757             IF p_display_pref = 'DISPLAY_DESC' THEN
758                 x_prod_selections_tbl(rowcount).name := l_gen_name;
759                 x_prod_selections_tbl(rowcount).description := l_gen_desc;
760 
761             ELSIF p_display_pref = 'DISPLAY_NAME' THEN
762                 x_prod_selections_tbl(rowcount).name := l_gen_desc;
763                 x_prod_selections_tbl(rowcount).description := l_gen_name;
764             END IF;
765 
766             x_prod_selections_tbl(rowcount).site_name := l_install_site_name;
767 
768             /*bugfix 5698684 - FP of 5675692 */
769             IF p_filter = 'Item' THEN
770                   l_display_name := g_serial_number || NVL(p_prod_tbl(j).serial_number, 'N/A') ||
771                                     g_ref || NVL(p_prod_tbl(j).instance_number, 'N/A') ||
772                                     g_quantity || to_char(p_prod_tbl(j).quantity) || '/' || l_uom_desc ||
773                                     g_installed_at || NVL(l_install_site_name, 'N/A');
774             ELSE
775                   l_display_name := x_prod_selections_tbl(rowcount).name||'; '||g_serial_number ||
776                                     NVL(p_prod_tbl(j).serial_number, 'N/A') ||
777                                     g_ref || NVL(p_prod_tbl(j).instance_number, 'N/A') ||
778                                     g_quantity || to_char(p_prod_tbl(j).quantity) || '/' || l_uom_desc ||
779                                     g_installed_at || NVL(l_install_site_name, 'N/A');
780             END IF;
781             /*bugfix 5698684 - FP of 5675692 */
782 
783             x_prod_selections_tbl(rowcount).display_name := l_display_name;
784 
785             rowcount := rowcount + 1;
786 
787         END LOOP;
788         px_rowcount := rowcount - 1;
789         ----------------------errorout(' after populate table count '||rowcount);
790     END populate_table;
791 
792 
793 
794     /************************** get model ***************************/
795 
796     PROCEDURE get_model(p_organization_id IN NUMBER,
797                         p_clvl_id         IN NUMBER,
798                         p_party_id     IN NUMBER,
799                         p_display_pref IN VARCHAR2,
800                         p_default      IN VARCHAR2,
801                         p_org_id       IN VARCHAR2,
802                         x_prod_selections_tbl IN OUT NOCOPY OKS_AUTH_UTIL_PVT.prod_selections_tbl)
803 
804     IS
805     /* Cursor to select all Model  having Covered Products for a given Party ID */
806     CURSOR l_csr_all_models(p_party_id IN NUMBER,
807                             p_organization_id IN NUMBER)
808         IS
809         SELECT DISTINCT id1,
810                name,
811                description
812         FROM okx_system_items_v it
813         WHERE id1 IN
814         (SELECT  inventory_item_id FROM
815          csi_item_instances
816          WHERE instance_id IN (SELECT PR.object_id
817                                FROM csi_ii_relationships PR
818                                WHERE relationship_type_code = 'COMPONENT-OF'
819                                AND NOT EXISTS (SELECT cp.subject_id FROM csi_ii_relationships cp
820                                                WHERE pr.object_id = cp.subject_id )))
821         AND IT.serviceable_product_flag = 'Y'
822         --And IT.organization_id = p_organization_id
823         AND SYSDATE BETWEEN nvl(it.start_date_active, SYSDATE) AND nvl(it.end_date_active, SYSDATE)  ;
824 
825 
826 
827     /** get parent child hierarchy from csi_ii_realtionships **/
828     CURSOR l_csr_configuration (p_inventory_id  IN NUMBER,
829                                 p_party_id   IN NUMBER)
830         IS
831         SELECT ciir.object_id  config_parent_id,
832                ciir.subject_id cp_id,
833                LEVEL
834         FROM   csi_ii_relationships ciir
835         WHERE active_end_date IS NULL
836         START WITH subject_id
837                       IN (SELECT ciir_pr.subject_id
838                           FROM   csi_ii_relationships ciir_pr
839                           WHERE  object_id  IN
840                           (SELECT instance_id
841                            FROM   csi_item_instances
842                            WHERE  inventory_item_id = p_inventory_id
843                            AND    owner_party_account_id IN (SELECT id1
844                                                              FROM okx_customer_accounts_v
845                                                              WHERE party_id = p_party_id)))
846         CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ;
847 
848     /** Cursor to get product + system item details for select instance id ***/
849 
850 
851     CURSOR l_csr_model_products(p_instance_id IN NUMBER,
852                                 p_organization_id       IN NUMBER
853                                 )
854         IS
855         SELECT CII.instance_id
856               , IT.name
857               , IT.description
858               , CII.install_location_id
859               , CII.quantity
860               , CII.instance_number
861               , CII.unit_of_measure
862               , CII.inventory_item_id
863               , CII.serial_number
864               , OOL.unit_selling_price
865               , '#' id2
866               , CII.external_reference -- bug 4372877
867         FROM  CSI_ITEM_INSTANCES CII
868            , CSI_INSTANCE_STATUSES CIS
869            , OE_ORDER_LINES_ALL OOL
870            , OKX_SYSTEM_ITEMS_V IT
871         WHERE CII.INSTANCE_ID = p_instance_id
872         AND   CII.inventory_item_id = IT.id1
873         AND   IT.serviceable_product_flag = 'Y'
874         AND   IT.organization_id = p_organization_id
875         AND   SYSDATE BETWEEN nvl(it.start_date_active, SYSDATE) AND nvl(it.end_date_active, SYSDATE)
876         AND   CII.last_oe_order_line_id = OOL.line_id ( + )
877         AND   CII.instance_status_id = CIS.instance_status_id
878         AND   CIS.service_order_allowed_flag = 'Y'   ;
879 
880     l_config_parent_id    CSI_II_RELATIONSHIPS.object_id%TYPE :=  - 99;
881     l_config_rec          l_csr_configuration%ROWTYPE;
882     l_model_prod_rec      l_csr_model_products%ROWTYPE;
883     l_id                  CSI_ITEM_INSTANCES.inventory_item_id%TYPE;
884     l_inv_id          NUMBER :=  - 99;
885     l_id_old             NUMBER :=  - 99;
886     rowcount              NUMBER := 1;
887     i                     NUMBER := 1;
888     l_display_pref        VARCHAR2(20) := p_display_pref;
889     l_name                VARCHAR2(500);
890 
891     l_prod_tbl  prod_tbl;
892 
893     TYPE var_cur_type5  IS REF CURSOR ;
894     csr_model_config  var_cur_type5;
895 
896     l_config_cust         VARCHAR2(10000);
897     l_config_rel        VARCHAR2(10000);
898     l_config_both         VARCHAR2(10000);
899     l_config_all         VARCHAR2(10000);
900 
901     BEGIN
902         rowcount := 1;
903 
904 
905         /** Set up dynamic queries to fetch config items **/
906 
907         l_config_cust := 'SELECT ciir.object_id  config_parent_id,'
908         ||'ciir.subject_id cp_id,'
909         ||'level '
910         ||' FROM   csi_ii_relationships ciir '
911         ||' WHERE active_end_date IS NULL '
912         ||' START WITH subject_id '
913         ||' IN (SELECT ciir_pr.subject_id '
914         ||' FROM   csi_ii_relationships ciir_pr '
915         ||' WHERE  object_id  IN '
916         ||' ( SELECT instance_id '
917         ||' FROM   csi_item_instances '
918         ||' WHERE  inventory_item_id = to_char(:l_id)'
919         ||' AND    owner_party_account_id in (select id1 '
920         ||' from okx_customer_accounts_v '
921         ||' where party_id =  to_char(:p_party_id) ))) '
922         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
923 
924 
925         l_config_rel := 'SELECT ciir.object_id  config_parent_id,'
926         ||'ciir.subject_id cp_id,'
927         ||'level '
928         ||' FROM   csi_ii_relationships ciir '
929         ||' WHERE active_end_date IS NULL '
930         ||' START WITH subject_id '
931         ||' IN (SELECT ciir_pr.subject_id '
932         ||' FROM   csi_ii_relationships ciir_pr '
933         ||' WHERE  object_id  IN '
934         ||' ( SELECT instance_id '
935         ||' FROM   csi_item_instances '
936         ||' WHERE  inventory_item_id =  to_char(:l_id ) '
937         ||' AND    owner_party_account_id in  '
938         ||'  (select A.RELATED_CUST_ACCOUNT_ID '
939         ||'   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, '
940         ||'          OKX_CUSTOMER_ACCOUNTS_V  B '
941         ||'   WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
942         ||'   AND    B.party_id =   to_char(:p_party_id) '
943         ||'   AND    B.status = ''A'''
944         ||'   AND    A.status = ''A'''
945         ||'   AND    A.org_id =  to_char(:p_org_id) '
946         ||'  ))) '
947         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
948 
949         l_config_both := 'SELECT ciir.object_id  config_parent_id,'
950         ||'ciir.subject_id cp_id,'
951         ||'level '
952         ||' FROM   csi_ii_relationships ciir '
953         ||' WHERE active_end_date IS NULL '
954         ||' START WITH subject_id '
955         ||' IN (SELECT ciir_pr.subject_id '
956         ||' FROM   csi_ii_relationships ciir_pr '
957         ||' WHERE  object_id  IN '
958         ||' ( SELECT instance_id '
959         ||' FROM   csi_item_instances '
960         ||' WHERE  inventory_item_id =  to_char(:l_id)'
961         ||' AND    owner_party_account_id in (select id1 '
962         ||' from okx_customer_accounts_v '
963         ||' where party_id = to_char(:p_party_id)) '
964         ||' UNION '
965         ||'  (select A.RELATED_CUST_ACCOUNT_ID '
966         ||'   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, '
967         ||'          OKX_CUSTOMER_ACCOUNTS_V  B '
968         ||'   WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
969         ||'   AND    B.party_id = to_char(:p_party_id)'
970         ||'   AND    B.status = ''A'''
971         ||'   AND    A.status = ''A'''
972         ||'   AND    A.org_id =  to_Char(:p_org_id) '
973         ||'  ))) '
974         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
975 
976         l_config_all := 'SELECT ciir.object_id  config_parent_id,'
977         ||'ciir.subject_id cp_id,'
978         ||'level '
979         ||' FROM   csi_ii_relationships ciir '
980         ||' WHERE active_end_date IS NULL '
981         ||' START WITH subject_id '
982         ||' IN (SELECT ciir_pr.subject_id '
983         ||' FROM   csi_ii_relationships ciir_pr '
984         ||' WHERE  object_id  IN '
985         ||' ( SELECT instance_id '
986         ||' FROM   csi_item_instances '
987         ||' WHERE  inventory_item_id = to_char(:l_id))) '
988         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
989 
990 
991         IF p_clvl_id IS NULL THEN /* 1st if */
992 
993             /* Select all Items for given party first */
994 
995             FOR l_get_all_models_rec IN l_csr_all_models(p_party_id, p_organization_id)
996                 LOOP /** 1st loop **/
997 
998                 l_id := l_get_all_models_rec.id1;
999 
1000                 /** Get config items for an inventory_item_id **/
1001 
1002                 IF  p_default = 'CUSTOMER' THEN
1003                     OPEN csr_model_config FOR l_config_cust USING l_id, p_party_id;
1004                 ELSIF p_default = 'RELATED' THEN
1005                     OPEN csr_model_config FOR l_config_rel USING l_id, p_party_id, p_org_id;
1006                 ELSIF p_default = 'BOTH' THEN
1007                     OPEN csr_model_config FOR l_config_both USING l_id, p_party_id, p_party_id, p_org_id ;
1008                 ELSIF p_default = 'ALL' THEN
1009                     OPEN csr_model_config FOR l_config_all USING l_id, p_party_id, p_org_id;
1010                 END IF;
1011 
1012                 LOOP
1013                     FETCH csr_model_config INTO l_config_rec;
1014                     IF csr_model_config%NOTFOUND THEN /* 2nd if */
1015                         CLOSE csr_model_config;
1016                         EXIT;
1017                     ELSE
1018 
1019                         IF (l_prod_tbl.COUNT > 0) THEN
1020 
1021                             populate_table (l_prod_tbl,
1022                                             'Model',
1023                                             rowcount,
1024                                             l_display_pref,
1025                                             x_prod_selections_tbl);
1026 
1027                             l_prod_tbl.DELETE;
1028                             rowcount := rowcount + 1;
1029                             i := 1;
1030                         END IF;
1031                         IF l_config_parent_id <> l_config_rec.config_parent_id  AND l_config_rec.LEVEL = 1 THEN /* 3rd if */
1032 
1033                             /* select product details for config parent */
1034                             /** Build parent **/
1035                             OPEN l_csr_model_products(l_config_rec.config_parent_id,
1036                                                       p_organization_id);
1037                             FETCH l_csr_model_products INTO l_model_prod_rec;
1038                             IF l_csr_model_products%FOUND THEN
1039 
1040                                 IF l_id <> l_id_old THEN
1041                                     /* Populate parent records */
1042                                     x_prod_selections_tbl(rowcount).cp_id := l_model_prod_rec.instance_id;
1043                                     x_prod_selections_tbl(rowcount).config_parent_id := '';
1044                                     x_prod_selections_tbl(rowcount).name := l_model_prod_rec.name;
1045 
1046                                     x_prod_selections_tbl(rowcount).description := l_model_prod_rec.description;
1047 
1048                                     IF l_display_pref = 'DISPLAY_DESC' THEN /* 5 if */
1049                                         l_name := rpad(l_model_prod_rec.name, 30, ' ') || rpad(l_model_prod_rec.description, 40,' ');
1050                                     ELSIF l_display_pref = 'DISPLAY_NAME' THEN
1051                                         x_prod_selections_tbl(rowcount).description := l_model_prod_rec.name;
1052                                         x_prod_selections_tbl(rowcount).name := l_model_prod_rec.description;
1053                                         l_name := rpad(l_model_prod_rec.description, 40,' ') || rpad(l_model_prod_rec.name, 30, ' ');
1054                                     END IF; /* end if 5 */
1055 
1056                                     x_prod_selections_tbl(rowcount).name := l_name;
1057                                     x_prod_selections_tbl(rowcount).rec_type := 'P';
1058                                     x_prod_selections_tbl(rowcount).rec_name := 'Model';
1059                                     x_prod_selections_tbl(rowcount).rec_no := rowcount;
1060                                     x_prod_selections_tbl(rowcount).model_level := l_config_rec.LEVEL;
1061                                     x_prod_selections_tbl(rowcount).cp_id2 := '';
1062                                     x_prod_selections_tbl(rowcount).ser_number := '';
1063                                     x_prod_selections_tbl(rowcount).ref_number := '' ;
1064                                     x_prod_selections_tbl(rowcount).quantity := '';
1065                                     x_prod_selections_tbl(rowcount).orig_net_amt := '';
1066                                     x_prod_selections_tbl(rowcount).price := '';
1067                                     x_prod_selections_tbl(rowcount).inventory_item_id := '';
1068                                     x_prod_selections_tbl(rowcount).site_id := '';
1069                                     x_prod_selections_tbl(rowcount).uom_code := '';
1070                                     x_prod_selections_tbl(rowcount).display_name := '';
1071                                     x_prod_selections_tbl(rowcount).site_name := '';
1072                                     x_prod_selections_tbl(rowcount).model_level :=  - 1;
1073                                     -- BUG 4372877 --
1074                                     -- GCHADHA --
1075                                     -- 5/25/2005 --
1076                                     x_prod_selections_tbl(rowcount).ext_reference := '';
1077                                     -- END GCHADHA --
1078 
1079 
1080 
1081                                     l_id_old := l_id;
1082                                     rowcount := rowcount + 1;
1083                                 END IF;
1084 
1085                                 l_config_parent_id := l_config_rec.config_parent_id;
1086 
1087                                 /* populate product details of the model */
1088                                 l_prod_tbl(i).id1 := l_config_rec.config_parent_id;
1089                                 l_prod_tbl(i).config_parent_id := '';
1090 
1091                                 l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1092                                 l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1093                                 l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1094                                 l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1095                                 l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1096                                 l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1097                                 l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1098                                 l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1099                                 l_prod_tbl(i).model_level := 0;
1100                                 -- BUG 4372877 --
1101                                 -- GCHADHA --
1102                                 -- 5/25/2005 --
1103                                 l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1104                                 -- END GCHADHA --
1105 
1106                                 i := i + 1 ;
1107                             END IF; /* end if l_csr_model_products */
1108 
1109                             CLOSE l_csr_model_products;
1110 
1111                         END IF ; /* Populate parent records end if 3 */
1112                         --                END IF; /** items found csr_configuration cursor end if 2 **/
1113 
1114                         /* populate product details of the model */
1115 
1116                         OPEN l_csr_model_products(l_config_rec.cp_id,
1117                                                   p_organization_id);
1118                         FETCH l_csr_model_products INTO l_model_prod_rec;
1119                         IF l_csr_model_products%FOUND THEN /** if 3 */
1120 
1121                             l_prod_tbl(i).id1 := l_config_rec.cp_id;
1122                             l_prod_tbl(i).config_parent_id := l_config_rec.config_parent_id;
1123 
1124                             l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1125                             l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1126                             l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1127                             l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1128                             l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1129                             l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1130                             l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1131                             l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1132                             l_prod_tbl(i).model_level := l_config_rec.LEVEL;
1133                             -- BUG 4372877 --
1134                             -- GCHADHA --
1135                             -- 5/25/2005 --
1136                             l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1137                             -- END GCHADHA --
1138 
1139                             i := i + 1 ;
1140                         END IF; /* end if 3 */
1141                         CLOSE l_csr_model_products;
1142 
1143                     END IF;
1144                 END LOOP;   /* end loop of l_csr_configuration cursror end loop 2*/
1145                 -- ----------------------errorout(' before populate table '||l_prod_tbl.count);
1146 
1147             END LOOP; /* end loop of inventory item id  end loop 1 */
1148 
1149         ELSIF p_clvl_id IS NOT NULL THEN
1150             l_id := p_clvl_id;
1151             /** Get config items for an inventory_item_id **/
1152             IF  p_default = 'CUSTOMER' THEN
1153                 OPEN csr_model_config FOR l_config_cust USING l_id, p_party_id;
1154             ELSIF p_default = 'RELATED' THEN
1155                 OPEN csr_model_config FOR l_config_rel USING l_id, p_party_id, p_org_id;
1156             ELSIF p_default = 'BOTH' THEN
1157                 OPEN csr_model_config FOR l_config_both USING l_id, p_party_id, p_party_id, p_org_id ;
1158             ELSIF p_default = 'ALL' THEN
1159                 OPEN csr_model_config FOR l_config_all USING l_id; --, p_party_id, p_org_id;
1160             END IF;
1161 
1162             LOOP
1163                 FETCH csr_model_config INTO l_config_rec;
1164                 IF csr_model_config%NOTFOUND THEN /* 2nd if */
1165                     CLOSE csr_model_config;
1166                     EXIT;
1167                 ELSE
1168 
1169                     IF (l_prod_tbl.COUNT > 0) THEN
1170 
1171                         populate_table (l_prod_tbl,
1172                                         'Model',
1173                                         rowcount,
1174                                         l_display_pref,
1175                                         x_prod_selections_tbl);
1176 
1177                         l_prod_tbl.DELETE;
1178                         rowcount := rowcount + 1;
1179                         i := 1;
1180                     END IF;
1181                     IF l_config_parent_id <> l_config_rec.config_parent_id  AND l_config_rec.LEVEL = 1 THEN /* 3rd if */
1182 
1183                         /* select product details for config parent */
1184                         /** Build parent **/
1185                         OPEN l_csr_model_products(l_config_rec.config_parent_id,
1186                                                   p_organization_id);
1187                         FETCH l_csr_model_products INTO l_model_prod_rec;
1188                         IF l_csr_model_products%FOUND THEN
1189 
1190                             IF l_id <> l_id_old THEN
1191                                 /* Populate parent records */
1192                                 x_prod_selections_tbl(rowcount).cp_id := l_model_prod_rec.instance_id;
1193                                 x_prod_selections_tbl(rowcount).config_parent_id := '';
1194                                 x_prod_selections_tbl(rowcount).name := l_model_prod_rec.name;
1195 
1196                                 x_prod_selections_tbl(rowcount).description := l_model_prod_rec.description;
1197 
1198                                 IF l_display_pref = 'DISPLAY_DESC' THEN /* 5 if */
1199                                     l_name := rpad(l_model_prod_rec.name, 30, ' ') || rpad(l_model_prod_rec.description, 40,' ');
1200                                 ELSIF l_display_pref = 'DISPLAY_NAME' THEN
1201                                     x_prod_selections_tbl(rowcount).description := l_model_prod_rec.name;
1202                                     x_prod_selections_tbl(rowcount).name := l_model_prod_rec.description;
1203                                     l_name := rpad(l_model_prod_rec.description, 40,' ') || rpad(l_model_prod_rec.name, 30, ' ');
1204                                 END IF; /* end if 5 */
1205 
1206                                 x_prod_selections_tbl(rowcount).name := l_name;
1207                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
1208                                 x_prod_selections_tbl(rowcount).rec_name := 'Model';
1209                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
1210                                 x_prod_selections_tbl(rowcount).model_level := l_config_rec.LEVEL;
1211                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
1212                                 x_prod_selections_tbl(rowcount).ser_number := '';
1213                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
1214                                 x_prod_selections_tbl(rowcount).quantity := '';
1215                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
1216                                 x_prod_selections_tbl(rowcount).price := '';
1217                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
1218                                 x_prod_selections_tbl(rowcount).site_id := '';
1219                                 x_prod_selections_tbl(rowcount).uom_code := '';
1220                                 x_prod_selections_tbl(rowcount).display_name := '';
1221                                 x_prod_selections_tbl(rowcount).site_name := '';
1222                                 x_prod_selections_tbl(rowcount).model_level :=  - 1;
1223                                 -- BUG 4372877 --
1224                                 -- GCHADHA --
1225                                 -- 5/25/2005 --
1226                                 x_prod_selections_tbl(rowcount).ext_reference := '';
1227                                 -- END GCHADHA --
1228                                 l_id_old := l_id;
1229                                 rowcount := rowcount + 1;
1230                             END IF;
1231 
1232                             l_config_parent_id := l_config_rec.config_parent_id;
1233 
1234                             /* populate product details of the model */
1235                             l_prod_tbl(i).id1 := l_config_rec.config_parent_id;
1236                             l_prod_tbl(i).config_parent_id := '';
1237                             l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1238                             l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1239                             l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1240                             l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1241                             l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1242                             l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1243                             l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1244                             l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1245                             l_prod_tbl(i).model_level := 0;
1246                             -- BUG 4372877 --
1247                             -- GCHADHA --
1248                             -- 5/25/2005 --
1249                             l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1250                             -- END GCHADHA --
1251 
1252 
1253                             i := i + 1 ;
1254                         END IF; /* end if l_csr_model_products */
1255 
1256                         CLOSE l_csr_model_products;
1257 
1258                     END IF ; /* Populate parent records end if 3 */
1259 
1260                     /* populate product details of the model */
1261 
1262                     OPEN l_csr_model_products(l_config_rec.cp_id,
1263                                               p_organization_id);
1264                     FETCH l_csr_model_products INTO l_model_prod_rec;
1265                     IF l_csr_model_products%FOUND THEN /** if 3 */
1266 
1267                         l_prod_tbl(i).id1 := l_config_rec.cp_id;
1268                         l_prod_tbl(i).config_parent_id := l_config_rec.config_parent_id;
1269 
1270                         l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1271                         l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1272                         l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1273                         l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1274                         l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1275                         l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1276                         l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1277                         l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1278                         l_prod_tbl(i).model_level := l_config_rec.LEVEL;
1279                         -- BUG 4372877 --
1280                         -- GCHADHA --
1281                         -- 5/25/2005 --
1282                         l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1283                         -- END GCHADHA --
1284 
1285 
1286                         i := i + 1 ;
1287                     END IF; /* end if 3 */
1288                     CLOSE l_csr_model_products;
1289 
1290                 END IF;
1291             END LOOP;   /* end loop of l_csr_configuration cursror end loop 2*/
1292 
1293             /*******************/
1294 
1295         END IF;
1296     END ; /** end of procedure get_model **/
1297 
1298     /*********************************/
1299 
1300 
1301     PROCEDURE get_product_selection(p_clvl_filter_rec IN clvl_filter_rec,
1302                                     x_prod_selections_tbl OUT NOCOPY prod_selections_tbl)
1303     IS
1304 
1305     l_param_organization_id  NUMBER := okc_context.get_okc_organization_id;
1306     l_find                   NUMBER := p_clvl_filter_rec.clvl_find_id;
1307 
1308     TYPE items_rec IS RECORD (inventory_item_id MTL_SYSTEM_ITEMS_KFV.inventory_item_id%TYPE,
1309                               description       VARCHAR2(10000),
1310                               name              VARCHAR2(10000));
1311 
1312 
1313     l_items_rec items_rec;
1314 
1315     -- Setting up cursor types + record types to fetch Party Sites using Dynamic cursor
1316     l_get_all_sites_sql  VARCHAR2(2000);
1317     TYPE var_cur_type1  IS REF CURSOR ;
1318     l_csr_get_all_sites  var_cur_type1;
1319     TYPE get_all_sites_rec IS RECORD (id1   OKX_PARTY_SITES_V.id1%TYPE,
1320                                       name  OKX_PARTY_SITES_V.name%TYPE,
1321                                       party_site_number OKX_PARTY_SITES_V.party_site_number%TYPE,
1322                                       -- description       OKX_PARTY_SITES_V.description%TYPE -- Bug 4915711
1323                                       description       VARCHAR2(2000));
1324 
1325     l_get_all_sites_rec get_all_sites_rec;
1326 
1327     -- Setting up cursor types + record types to fetch Systems using Dynamic cursor
1328     l_get_all_systems_sql  VARCHAR2(2000);
1329     TYPE var_cur_type IS REF CURSOR;
1330     l_csr_get_all_systems  var_cur_type;
1331 
1332     TYPE get_all_systems_rec IS RECORD (id1  CSI_SYSTEMS_B.system_id%TYPE,
1333                                         NAME CSI_SYSTEMS_TL.name%TYPE,
1334                                         Description CSI_SYSTEMS_TL.description%TYPE);
1335 
1336     l_get_all_systems_rec get_all_systems_rec;
1337 
1338     l_item_cust VARCHAR2(2000);
1339     l_item_rel  VARCHAR2(2000);
1340     l_item_both VARCHAR2(2000);
1341     l_item_all  VARCHAR2(2000);
1342     l_select_for_name VARCHAR2(2000);
1343     l_select_for_desc VARCHAR2(2000);
1344     l_order_by_name VARCHAR2(2000);
1345     l_order_by_desc VARCHAR2(2000);
1346 
1347     TYPE var_cur_item IS REF CURSOR;
1348     l_get_items var_cur_item;
1349 
1350     l_party_id  NUMBER;
1351     l_org_id    NUMBER;
1352     l_clvl_id   NUMBER ;
1353     l_customer_id VARCHAR2(10);
1354     l_clvl_filter  VARCHAR2(15);
1355     l_id        NUMBER;
1356     l_prod_tbl  prod_tbl;
1357     l_price     NUMBER;
1358     l_default   VARCHAR2(15);
1359     rowcount    NUMBER := 1;
1360     l_prod_selections_tbl prod_selections_tbl;
1361     l_cust_id_tbl         cust_id_tbl;
1362     l_party_id_tbl        party_id_tbl;
1363     cust_count  NUMBER := 1;
1364     l_organization_id     NUMBER;
1365     l_display_pref        VARCHAR2(25);
1366     l_config_parent_id    NUMBER :=  - 99 ;
1367     l_name                VARCHAR2(500);
1368 
1369     l_get_all_systems_sql_c  VARCHAR2(2000);
1370     l_get_all_systems_sql_r  VARCHAR2(2000);
1371     l_get_all_systems_sql_b  VARCHAR2(2000);
1372     l_get_all_systems_sql_a  VARCHAR2(2000);
1373 
1374     l_get_all_sites_sql_c  VARCHAR2(2000);
1375     l_get_all_sites_sql_r  VARCHAR2(2000);
1376     l_get_all_sites_sql_b  VARCHAR2(2000);
1377     l_get_all_sites_sql_a  VARCHAR2(2000);
1378 
1379     l_chk_id_flag      VARCHAR2(1) := 'N' ;
1380     id_counter         NUMBER := 1;
1381     l_cust_id_list      VARCHAR2(500);
1382 
1383     k                     NUMBER := 1;
1384     j   NUMBER := 1;
1385     start_sort NUMBER := 1;
1386     l_prod_tbl_sort  prod_tbl  ;
1387     l_inv_id   NUMBER ;
1388     l_old_inv_id NUMBER :=  - 99;
1389     l_gen_name           VARCHAR2(2000);
1390     l_gen_desc           VARCHAR2(2000);
1391     l_tmp_prod_tbl      prod_tbl;
1392 
1393 
1394     BEGIN
1395 
1396         l_default := p_clvl_filter_rec.clvl_default;
1397         l_party_id := p_clvl_filter_rec.clvl_party_id;
1398         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
1399         l_clvl_id := p_clvl_filter_rec.clvl_find_id;
1400         l_clvl_filter := p_clvl_filter_rec.clvl_filter;
1401         l_organization_id := p_clvl_filter_rec.clvl_organization_id;
1402         l_display_pref := p_clvl_filter_rec.clvl_display_pref;
1403 
1404 
1405         g_serial_number := p_clvl_filter_rec.lbl_serial_number;
1406         g_quantity := p_clvl_filter_rec.lbl_quantity;
1407         g_price := p_clvl_filter_rec.lbl_price;
1408         g_installed_at := p_clvl_filter_rec.lbl_installed_at;
1409         g_ref := p_clvl_filter_rec.lbl_ref;
1410 
1411         --IF l_default IN ('CUSTOMER','RELATED','BOTH') THEN
1412 
1413         IF l_clvl_filter <> 'Party' THEN  /* if filter is Party then party id and name should be fetched */
1414 
1415 
1416             IF l_clvl_filter = 'Item' THEN
1417 
1418                 /*CURSOR l_csr_item_name_cust(p_party_id IN NUMBER, l_organization_id IN NUMBER)
1419                 IS
1420                 select inventory_item_id, concatenated_segments name  ,  description description */
1421 
1422                 l_select_for_name := 'select inventory_item_id, concatenated_segments name  ,  description description ';
1423                 l_select_for_desc := 'select inventory_item_id,   description description , concatenated_segments name  ';
1424 
1425 
1426 
1427                 l_order_by_name := ' order by name ' ;
1428 
1429                 l_order_by_desc := ' order by description ';
1430 
1431                 l_item_cust := ' from mtl_system_items_kfv  '
1432                 ||' where inventory_item_id in ( select inventory_item_id from csi_item_instances  '
1433                 ||' where owner_party_account_id in (select id1  '
1434                 ||'  FROM okx_customer_accounts_v '
1435                 ||'  WHERE party_id = :l_party_id)) '
1436                 ||' and organization_id = :l_organization_id '
1437                 ||' and serviceable_product_flag = ''Y''';
1438 
1439                 l_item_rel := ' FROM  mtl_system_items_kfv  '
1440                 ||' where inventory_item_id in ( select inventory_item_id from csi_item_instances  '
1441                 ||' where owner_party_account_id in   (select A.RELATED_CUST_ACCOUNT_ID  '
1442                 ||' FROM   OKX_CUST_ACCT_RELATE_ALL_V A,  '
1443                 ||'        OKX_CUSTOMER_ACCOUNTS_V  B  '
1444                 ||' WHERE  B.ID1 = A.CUST_ACCOUNT_ID  '
1445                 ||' AND    B.party_id =  :l_party_id '
1446                 ||' AND    B.status = ''A'''
1447                 ||' AND    A.status = ''A'''
1448                 ||' AND    A.org_id =  :l_org_id '
1449                 ||' )) '
1450                 ||' and organization_id = :l_organization_id '
1451                 ||' and serviceable_product_flag = ''Y''';
1452 
1453                 l_item_both := ' from mtl_system_items_kfv '
1454                 ||' where inventory_item_id in ( select inventory_item_id from csi_item_instances  '
1455                 ||' where owner_party_account_id in  (select id1  '
1456                 ||' FROM okx_customer_accounts_v '
1457                 ||' WHERE party_id = :p_party_id '
1458                 ||' UNION '
1459                 ||' select A.RELATED_CUST_ACCOUNT_ID  '
1460                 ||' FROM   OKX_CUST_ACCT_RELATE_ALL_V A,  '
1461                 ||' OKX_CUSTOMER_ACCOUNTS_V  B  '
1462                 ||' WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
1463                 ||' AND    B.party_id =  :l_party_id '
1464                 ||' AND    B.status = ''A'''
1465                 ||' AND    A.status = ''A'''
1466                 ||' AND    A.org_id =  :l_org_id '
1467                 ||' )) '
1468                 ||' and organizatioN_id = :l_organization_id '
1469                 ||' and serviceable_product_flag = ''Y''';
1470 
1471                 l_item_all := ' from mtl_system_items_kfv '
1472                 ||' where organizatioN_id = :l_organization_id '
1473                 ||' and serviceable_product_flag = ''Y''';
1474 
1475                 IF l_clvl_id IS NULL THEN
1476                     /* Select all Items for given party first */
1477                     IF l_default = 'CUSTOMER' THEN
1478                         IF l_display_pref = 'NAME' THEN
1479                             l_item_cust := l_select_for_name ||' '|| l_item_cust ||' '|| l_order_by_name;
1480                         ELSE
1481                             l_item_cust := l_select_for_desc ||' '|| l_item_cust ||' '|| l_order_by_desc;
1482                         END IF;
1483                         --------------------------------------------------------errorout_an(' item customer '||l_item_cust);
1484 
1485                         OPEN l_get_items FOR l_item_cust USING l_party_id, l_organization_id;
1486                     ELSIF l_default = 'RELATED' THEN
1487                         IF l_display_pref = 'NAME' THEN
1488                             l_item_rel := l_select_for_name ||' '|| l_item_rel ||' '|| l_order_by_name;
1489                         ELSE
1490                             l_item_rel := l_select_for_desc ||' '|| l_item_rel ||' '|| l_order_by_desc;
1491                         END IF;
1492                         --             ----------------------errorout_an(' item rel '||l_item_rel);
1493                         --             ----------------------errorout_an(' party '||l_party_id||' org id '||l_org_id||' '||l_organization_id);
1494                         OPEN l_get_items FOR l_item_rel USING l_party_id, l_org_id, l_organization_id;
1495                     ELSIF l_default = 'BOTH' THEN
1496                         IF l_display_pref = 'NAME' THEN
1497                             l_item_both := l_select_for_name ||' '|| l_item_both ||' '|| l_order_by_name;
1498                         ELSE
1499                             l_item_both := l_select_for_desc ||' '|| l_item_both ||' '|| l_order_by_desc;
1500                         END IF;
1501                         OPEN l_get_items FOR l_item_both USING l_party_id, l_party_id, l_org_id, l_organization_id;
1502                         --------------------------------------------------------errorout_an(' item both '||l_item_both);
1503                     ELSIF l_default = 'ALL' THEN
1504                         IF l_display_pref = 'NAME' THEN
1505                             l_item_all := l_select_for_name ||' '|| l_item_all ||' '|| l_order_by_name;
1506                         ELSE
1507                             l_item_all := l_select_for_desc ||' '|| l_item_all ||' '|| l_order_by_desc;
1508                         END IF;
1509                         OPEN l_get_items FOR l_item_all USING l_organization_id;
1510                         --------------------------------------------------------errorout_an(' item all '||l_item_all);
1511                     END IF;
1512 
1513 
1514                     /* Find cp id in the record group */
1515 
1516                     LOOP
1517                         ------errorout_an(' in loop ');
1518                         FETCH l_get_items INTO l_items_rec ;
1519                         IF l_get_items%NOTFOUND THEN
1520                             EXIT;
1521                         ELSE
1522                             ------errorout_an(' before get prod ');
1523 
1524                             get_products(l_clvl_filter,
1525                                          l_items_rec.inventory_item_id,
1526                                          l_default,
1527                                          l_cust_id_list,
1528                                          l_party_id,
1529                                          l_org_id,
1530                                          l_organization_id,
1531                                          l_prod_tbl);
1532 
1533                             IF l_prod_tbl.COUNT > 0 THEN
1534 
1535                                 x_prod_selections_tbl(rowcount).cp_id := l_items_rec.inventory_item_id;
1536                                 x_prod_selections_tbl(rowcount).name := l_items_rec.name;
1537                                 x_prod_selections_tbl(rowcount).description := l_items_rec.description;
1538 
1539                                 IF l_display_pref = 'DISPLAY_NAME' THEN
1540                                     l_name := rpad(l_items_rec.name, 30, ' ') || rpad(l_items_rec.description, 40,' ');
1541                                 ELSIF l_display_pref = 'DISPLAY_DESC' THEN
1542                                     l_name := rpad(l_items_rec.description, 30, ' ') || rpad(l_items_rec.name, 40,' ');
1543                                 END IF;
1544 
1545                                 x_prod_selections_tbl(rowcount).name := l_name;
1546                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
1547                                 x_prod_selections_tbl(rowcount).rec_name := 'Item';
1548                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
1549                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
1550                                 x_prod_selections_tbl(rowcount).ser_number := '';
1551                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
1552                                 x_prod_selections_tbl(rowcount).quantity := '';
1553                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
1554                                 x_prod_selections_tbl(rowcount).price := '';
1555                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
1556                                 x_prod_selections_tbl(rowcount).site_id := '';
1557                                 x_prod_selections_tbl(rowcount).uom_code := '';
1558                                 x_prod_selections_tbl(rowcount).display_name := '';
1559                                 x_prod_selections_tbl(rowcount).site_name := '';
1560                                 -- GCHADHA --
1561                                 -- BUG 4372877 --
1562                                 -- 5/25/2005 --
1563                                 x_prod_selections_tbl(rowcount).ext_reference := '';
1564                                 -- END GCHADHA --
1565 
1566                                 rowcount := rowcount + 1;
1567 
1568                                 /* Populate child records  */
1569 
1570                                 populate_table (l_prod_tbl,
1571                                                 l_clvl_filter,
1572                                                 rowcount,
1573                                                 l_display_pref,
1574                                                 x_prod_selections_tbl);
1575 
1576                                 rowcount := rowcount + 1;
1577                             END IF;
1578 
1579                         END IF ; /* End of ITems cursor */
1580                         --     ------------------------------------------errorout_an(' out of cursors ');
1581                     END LOOP; /* End of Cursor Loop */
1582 
1583 
1584                 ELSIF l_clvl_id IS NOT NULL THEN
1585 
1586                     get_products(l_clvl_filter,
1587                                  l_clvl_id,
1588                                  l_default,
1589                                  l_cust_id_list,
1590                                  l_party_id,
1591                                  l_org_id,
1592                                  l_organization_id,
1593                                  l_prod_tbl);
1594 
1595 
1596                     IF l_prod_tbl.COUNT > 0 THEN
1597                         /* Populate parent records */
1598                         x_prod_selections_tbl(rowcount).cp_id := l_clvl_id;
1599 
1600                         l_name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
1601                         x_prod_selections_tbl(rowcount).name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
1602                         x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
1603                         x_prod_selections_tbl(rowcount).rec_type := 'P';
1604                         x_prod_selections_tbl(rowcount).rec_name := 'Item';
1605                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
1606                         x_prod_selections_tbl(rowcount).cp_id2 := '';
1607                         x_prod_selections_tbl(rowcount).ser_number := '';
1608                         x_prod_selections_tbl(rowcount).ref_number := '' ;
1609                         x_prod_selections_tbl(rowcount).quantity := '';
1610                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
1611                         x_prod_selections_tbl(rowcount).price := '';
1612                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
1613                         x_prod_selections_tbl(rowcount).site_id := '';
1614                         x_prod_selections_tbl(rowcount).uom_code := '';
1615                         x_prod_selections_tbl(rowcount).display_name := '';
1616                         x_prod_selections_tbl(rowcount).site_name := '';
1617                         -- BUG 4372877 --
1618                         -- GCHADHA --
1619                         -- 5/25/2005 --
1620                         x_prod_selections_tbl(rowcount).ext_reference := '';
1621                         -- END GCHADHA --
1622 
1623 
1624                         rowcount := rowcount + 1;
1625 
1626                         populate_table (l_prod_tbl,
1627                                         l_clvl_filter,
1628                                         rowcount,
1629                                         l_display_pref,
1630                                         x_prod_selections_tbl);
1631 
1632 
1633                     END IF;
1634 
1635                 END IF;
1636 
1637             ELSIF  l_clvl_filter = 'System' THEN
1638                 IF  l_clvl_id IS NULL THEN
1639 
1640                     /** Setting up dynamic cursor for Systems **/
1641 
1642 
1643                     -- Bug 5041892 --
1644                     l_get_all_systems_sql_c := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
1645                     || ' FROM   CSI_SYSTEMS_B   CSB, '
1646                     || '        CSI_SYSTEMS_TL  CST '
1647                     || ' WHERE  CSB.system_id = CST.system_id  '
1648                     || ' AND    CSB.system_id IN  (Select CII.system_id '
1649                     || ' From   CSI_ITEM_INSTANCES CII, '
1650                     || '        CSI_INSTANCE_STATUSES  CIS '
1651                     || '       , MTL_SYSTEM_ITEMS_B IT '
1652                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
1653                     || ' AND   IT.serviceable_product_flag = ''Y'''
1654                     || ' AND   IT.organization_id = :l_organization_id '
1655                     || ' AND  CII.owner_party_account_id in (select cust_account_id '
1656                     ||' from hz_cust_accounts '
1657                     ||' where party_id =  :p_party_id ) '
1658                     || ' And    CIS.instance_status_id = CII.instance_status_id '
1659                     || ' And    CIS.service_order_allowed_flag = ''Y'''
1660                     || ' And    sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
1661                     || ' And    CII.system_id is not null ) '
1662                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
1663                     || ' Order by CST.name ';
1664 
1665 
1666                     -- Bug 5041892 --
1667                     l_get_all_systems_sql_b := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
1668                     || ' FROM   CSI_SYSTEMS_B   CSB, '
1669                     || '        CSI_SYSTEMS_TL  CST '
1670                     || ' WHERE  CSB.system_id = CST.system_id  '
1671                     || ' AND    CSB.system_id IN  '
1672                     ||' (SELECT CII.system_id '
1673                     ||'  FROM   CSI_ITEM_INSTANCES CII, '
1674                     ||'         CSI_INSTANCE_STATUSES  CIS '
1675                     ||'       , MTL_SYSTEM_ITEMS_B IT '
1676                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
1677                     || ' AND   IT.serviceable_product_flag = ''Y'''
1678                     || ' AND   IT.organization_id = :l_organization_id '
1679                     || ' AND   CII.owner_party_account_id in (select cust_account_id '
1680                     ||' from HZ_CUST_ACCOUNTS '
1681                     ||' where party_id =  :p_party_id  '
1682                     ||' UNION ALL'
1683                     ||'  select A.RELATED_CUST_ACCOUNT_ID '
1684                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
1685                     ||'          HZ_CUST_ACCOUNTS  B '
1686                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
1687                     ||'   AND    B.party_id =   :p_party_id '
1688                     ||'   AND    B.status = ''A'''
1689                     ||'   AND    A.status = ''A'''
1690                     ||'   AND    A.org_id =  :p_org_id '
1691                     ||'  ) '
1692                     || ' And    CIS.instance_status_id = CII.instance_status_id '
1693                     || ' And    CIS.service_order_allowed_flag = ''Y'''
1694                     || ' And    sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
1695                     || ' And    CII.system_id is not null ) '
1696                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
1697                     || ' Order by CST.name ';
1698 
1699                     -- Bug 5041892 --
1700                     l_get_all_systems_sql_r := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
1701                     || ' FROM   CSI_SYSTEMS_B   CSB, '
1702                     || '        CSI_SYSTEMS_TL  CST '
1703                     || ' WHERE  CSB.system_id = CST.system_id  '
1704                     || ' AND    CSB.system_id IN  (Select CII.system_id '
1705                     || ' From  CSI_ITEM_INSTANCES CII, '
1706                     || '       CSI_INSTANCE_STATUSES  CIS '
1707                     ||' ,       MTL_SYSTEM_ITEMS_B IT '
1708                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
1709                     || ' AND   IT.serviceable_product_flag = ''Y'''
1710                     || ' AND   IT.organization_id = :l_organization_id '
1711                     || ' AND   CII.owner_party_account_id in  '
1712                     ||'  (select A.RELATED_CUST_ACCOUNT_ID '
1713                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
1714                     ||'          HZ_CUST_ACCOUNTS  B '
1715                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
1716                     ||'   AND    B.party_id =   :p_party_id '
1717                     ||'   AND    B.status = ''A'''
1718                     ||'   AND    A.status = ''A'''
1719                     ||'   AND    A.org_id =  :p_org_id '
1720                     ||'  ) '
1721                     || ' And    CIS.instance_status_id = CII.instance_status_id '
1722                     || ' And    CIS.service_order_allowed_flag = ''Y'''
1723                     || ' And    sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
1724                     || ' And    system_id is not null ) '
1725                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
1726                     || ' Order by CST.name ';
1727 
1728 
1729                     l_get_all_systems_sql_a := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
1730                     || ' FROM   CSI_SYSTEMS_B   CSB, '
1731                     || '        CSI_SYSTEMS_TL  CST '
1732                     || ' WHERE  CSB.system_id = CST.system_id  '
1733                     || ' AND    CSB.system_id IN  (Select CII.system_id '
1734                     || ' From   CSI_ITEM_INSTANCES CII, '
1735                     || '        CSI_INSTANCE_STATUSES  CIS '
1736                     ||' ,       MTL_SYSTEM_ITEMS_B IT '
1737                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
1738                     || ' AND   IT.serviceable_product_flag = ''Y'''
1739                     || ' AND   IT.organization_id = :l_organization_id '
1740                     || ' AND   CIS.instance_status_id = CII.instance_status_id '
1741                     || ' And   CIS.service_order_allowed_flag = ''Y'''
1742                     || ' And   sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
1743                     || ' And   CII.system_id is not null ) '
1744                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
1745                     || ' Order by CST.name ';
1746 
1747                     /* Select all Items for given party first */
1748 
1749                     IF l_default = 'CUSTOMER' THEN
1750                         ------------------------------errorout_an(l_get_all_systems_sql_c);
1751                         l_get_all_systems_sql := l_get_all_systems_sql_c;
1752                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id, l_party_id;
1753                     ELSIF l_default = 'RELATED' THEN
1754                         ------------------------------errorout_an(l_get_all_systems_sql_r);
1755                         l_get_all_systems_sql := l_get_all_systems_sql_r;
1756                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id, l_party_id, l_org_id;
1757                     ELSIF l_default = 'BOTH' THEN
1758                         ------------------------------errorout_an(l_get_all_systems_sql_b);
1759                         l_get_all_systems_sql := l_get_all_systems_sql_b;
1760                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id, l_party_id, l_party_id, l_org_id ;
1761                     ELSIF l_default = 'ALL' THEN
1762                         ------------------------------errorout_an(l_get_all_systems_sql_b);
1763                         l_get_all_systems_sql := l_get_all_systems_sql_a;
1764                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id ;
1765                     END IF;
1766 
1767 
1768                     LOOP
1769                         FETCH l_csr_get_all_systems INTO l_get_all_systems_rec;
1770                         IF l_csr_get_all_systems%NOTFOUND THEN
1771                             CLOSE l_csr_get_all_systems;
1772                             EXIT;
1773                         END IF;
1774 
1775                         l_id := l_get_all_systems_rec.id1;
1776 
1777                         FOR  id_counter IN 1 .. x_prod_selections_tbl.COUNT LOOP
1778                             IF x_prod_selections_tbl(id_counter).rec_type = 'P' THEN
1779 
1780                                 IF x_prod_selections_tbl(id_counter).cp_id = l_id THEN
1781                                     l_chk_id_flag := 'Y';
1782                                     EXIT;
1783                                 ELSE
1784                                     l_chk_id_flag := 'N';
1785                                 END IF;
1786                             END IF;
1787                         END LOOP;
1788 
1789                         IF l_chk_id_flag = 'N' THEN
1790 
1791                             get_products(l_clvl_filter,
1792                                          l_id,
1793                                          l_default,
1794                                          l_cust_id_list,
1795                                          l_party_id,
1796                                          l_org_id,
1797                                          l_organization_id,
1798                                          l_prod_tbl);
1799 
1800                             IF l_prod_tbl.COUNT > 0 THEN
1801 
1802                                 x_prod_selections_tbl(rowcount).cp_id := l_get_all_systems_rec.id1;
1803                                 l_name := rpad(l_get_all_systems_rec.name, 30, ' ') || rpad(l_get_all_systems_rec.description, 40,' ');
1804                                 x_prod_selections_tbl(rowcount).name := l_name;
1805                                 x_prod_selections_tbl(rowcount).description := l_get_all_systems_rec.description;
1806                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
1807                                 x_prod_selections_tbl(rowcount).rec_name := 'System';
1808                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
1809                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
1810                                 x_prod_selections_tbl(rowcount).ser_number := '';
1811                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
1812                                 x_prod_selections_tbl(rowcount).quantity := '';
1813                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
1814                                 x_prod_selections_tbl(rowcount).price := '';
1815                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
1816                                 x_prod_selections_tbl(rowcount).site_id := '';
1817                                 x_prod_selections_tbl(rowcount).uom_code := '';
1818                                 x_prod_selections_tbl(rowcount).display_name := '';
1819                                 x_prod_selections_tbl(rowcount).site_name := '';
1820                                 -- BUG 4372877 --
1821                                 -- GCHADHA --
1822                                 -- 5/25/2005 --
1823                                 x_prod_selections_tbl(rowcount).ext_reference := '';
1824                                 -- END GCHADHA --
1825 
1826 
1827                                 rowcount := rowcount + 1;
1828 
1829                                 populate_table (l_prod_tbl,
1830                                                 l_clvl_filter,
1831                                                 rowcount,
1832                                                 l_display_pref,
1833                                                 x_prod_selections_tbl);
1834 
1835                                 rowcount := rowcount + 1;
1836                             END IF;
1837                         END IF;
1838                     END LOOP;
1839 
1840                 ELSIF l_clvl_id IS NOT NULL THEN
1841 
1842 
1843                     get_products(l_clvl_filter,
1844                                  l_clvl_id,
1845                                  l_default,
1846                                  l_cust_id_list,
1847                                  l_party_id,
1848                                  l_org_id,
1849                                  l_organization_id,
1850                                  l_prod_tbl);
1851 
1852 
1853                     IF l_prod_tbl.COUNT > 0 THEN
1854                         -- Populate parent record in table, only if products exist
1855                         x_prod_selections_tbl(rowcount).cp_id := l_clvl_id;
1856                         l_name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
1857 
1858                         x_prod_selections_tbl(rowcount).name := l_name;
1859                         x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
1860                         x_prod_selections_tbl(rowcount).rec_type := 'P';
1861                         x_prod_selections_tbl(rowcount).rec_name := 'System';
1862                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
1863                         x_prod_selections_tbl(rowcount).cp_id2 := '';
1864                         x_prod_selections_tbl(rowcount).ser_number := '';
1865                         x_prod_selections_tbl(rowcount).ref_number := '' ;
1866                         x_prod_selections_tbl(rowcount).quantity := '';
1867                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
1868                         x_prod_selections_tbl(rowcount).price := '';
1869                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
1870                         x_prod_selections_tbl(rowcount).site_id := '';
1871                         x_prod_selections_tbl(rowcount).uom_code := '';
1872                         x_prod_selections_tbl(rowcount).display_name := '';
1873                         x_prod_selections_tbl(rowcount).site_name := '';
1874                         -- BUG 4372877 --
1875                         -- GCHADHA --
1876                         -- 5/25/2005 --
1877                         x_prod_selections_tbl(rowcount).ext_reference := '';
1878                         -- END GCHADHA --
1879 
1880                         rowcount := rowcount + 1;
1881 
1882                         populate_table (l_prod_tbl,
1883                                         l_clvl_filter,
1884                                         rowcount,
1885                                         l_display_pref,
1886                                         x_prod_selections_tbl);
1887 
1888 
1889                     END IF;
1890                 END IF;
1891 
1892             ELSIF  l_clvl_filter = 'Site' THEN
1893                 IF  l_clvl_id IS NULL THEN
1894                     /* Select all Items for given party first */
1895 		    -- Bug 5004778 --
1896 	            -- Modified Query to reduce shared memory Usage
1897 		    -- Replaced views to base tables where ever possible
1898                     l_get_all_sites_sql_c := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
1899                     || ' FROM    OKX_PARTY_SITES_V   SI '
1900                     || ' WHERE  exists   (SELECT CII.install_location_Id '
1901                     ||'  FROM   CSI_ITEM_INSTANCES CII, '
1902                     ||'         CSI_INSTANCE_STATUSES   CIS, '
1903                     ||'         MTL_SYSTEM_ITEMS_B IT '
1904                     ||'  WHERE IT.inventory_item_id = CII.inventory_item_id '
1905                     ||'  AND   IT.serviceable_product_flag = ''Y'''
1906                     ||'  AND   IT.organization_id = :l_organization_id '
1907                     ||'  AND   CII.install_location_id = SI.id1 '
1908                     ||'  AND   CII.owner_party_account_id in '
1909                     ||'(select cust_account_id '
1910                     ||' from hz_cust_accounts '
1911                     ||' where party_id =  :p_party_id ) '
1912                     ||'        And    CIS.instance_Status_id = CII.instance_status_id '
1913                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
1914                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
1915                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
1916                     -- TCA Changes --
1917                     /*  ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
1918                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
1919                     || 'AND SI.STATUS = ''A'''
1920                     -- TCA Changes --
1921                     ||' ORDER BY si.party_site_number, si.name ';
1922 
1923 		    -- Bug 5004778 --
1924 		    -- Modified Query to reduce shared memory Usage
1925 		    -- Replaced views to base tables where ever possible
1926                     l_get_all_sites_sql_r := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
1927                     || ' FROM    OKX_PARTY_SITES_V   SI '
1928                     || ' WHERE  exists  (SELECT CII.install_location_Id '
1929                     ||'   FROM   CSI_ITEM_INSTANCES CII, '
1930                     ||'          CSI_INSTANCE_STATUSES   CIS '
1931                     ||' ,        MTL_SYSTEM_ITEMS_B IT '
1932                     ||'   WHERE IT.inventory_item_id = CII.inventory_item_id '
1933                     ||'   AND   IT.serviceable_product_flag = ''Y'''
1934                     ||'   AND   IT.organization_id = :l_organization_id '
1935                     ||'   AND   CII.install_location_id = SI.id1 '
1936                     ||'   AND   CII.owner_party_account_id in '
1937                     ||'  (select A.RELATED_CUST_ACCOUNT_ID '
1938                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
1939                     ||'          HZ_CUST_ACCOUNTS  B '
1940                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
1941                     ||'   AND    B.party_id =   :l_party_id '
1942                     ||'   AND    B.status = ''A'''
1943                     ||'   AND    A.status = ''A'''
1944                     ||'   AND    A.org_id =  :p_org_id '
1945                     ||'  ) '
1946                     ||'        And    CIS.instance_Status_id = CII.instance_status_id '
1947                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
1948                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
1949                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
1950                     -- TCA Changes --
1951                     /* ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
1952                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
1953                     || 'AND SI.STATUS = ''A'''
1954                     -- TCA Changes --
1955                     ||' ORDER BY si.party_site_number, si.name ';
1956 
1957 		    -- Bug 5004778 --
1958 		    -- Modified Query to reduce shared memory Usage
1959 		    -- Replaced views to base tables where ever possible
1960                     l_get_all_sites_sql_b := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
1961                     || ' FROM    OKX_PARTY_SITES_V   SI '
1962                     || ' WHERE  exists   (SELECT CII.install_location_Id '
1963                     || '   FROM   CSI_ITEM_INSTANCES CII, '
1964                     ||'           CSI_INSTANCE_STATUSES   CIS '
1965                     ||'  ,        MTL_SYSTEM_ITEMS_B IT '
1966                     ||'   WHERE IT.inventory_item_id = CII.inventory_item_id '
1967                     ||'   AND   IT.serviceable_product_flag = ''Y'''
1968                     ||'   AND   IT.organization_id = :l_organization_id '
1969                     ||'   AND     CII.install_location_id = SI.id1 '
1970                     ||'  AND    CII.owner_party_account_id in '
1971                     ||' (select cust_account_id '
1972                     ||' from hz_cust_accounts '
1973                     ||' where party_id =  :p_party_id  '
1974                     ||' UNION '
1975                     ||'  select  A.RELATED_CUST_ACCOUNT_ID '
1976                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
1977                     ||'          HZ_CUST_ACCOUNTS  B '
1978                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
1979                     ||'   AND    B.party_id =   :p_party_id '
1980                     ||'   AND    B.status = ''A'''
1981                     ||'   AND    A.status = ''A'''
1982                     ||'   AND    A.org_id =  :p_org_id '
1983                     ||'  ) '
1984                     ||'        And    CIS.instance_Status_id = CII.instance_status_id '
1985                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
1986                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
1987                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
1988                     -- TCA Changes --
1989                     /* ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
1990                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
1991                     || 'AND SI.STATUS = ''A'''
1992                     -- TCA Changes --
1993                     ||' ORDER BY si.party_site_number, si.name ';
1994 		    -- Bug 5004778 --
1995 
1996                     l_get_all_sites_sql_a := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
1997                     || ' FROM    OKX_PARTY_SITES_V   SI '
1998                     || ' WHERE  exists   (SELECT CII.install_location_Id '
1999                     || '   FROM   CSI_ITEM_INSTANCES CII, '
2000                     ||'           CSI_INSTANCE_STATUSES   CIS '
2001                     ||'  ,        MTL_SYSTEM_ITEMS_KFV IT '
2002                     ||'   WHERE IT.inventory_item_id = CII.inventory_item_id '
2003                     ||'   AND   IT.serviceable_product_flag = ''Y'''
2004                     ||'   AND   IT.organization_id = :l_organization_id '
2005                     ||'   AND   CII.install_location_id = SI.id1 '
2006                     ||'   AND   CIS.instance_Status_id = CII.instance_status_id '
2007                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
2008                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
2009                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
2010                     -- TCA Changes --
2011                     /* ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
2012                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
2013                     || 'AND SI.STATUS = ''A''';
2014                     -- TCA Changes --
2015 
2016 
2017                     IF l_default = 'CUSTOMER' THEN
2018                         l_get_all_sites_sql := l_get_all_sites_sql_c;
2019                         --          ----------------------errorout_an(' get sites info cust '||l_get_all_sites_sql);
2020                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id, l_party_id;
2021                     ELSIF l_default = 'RELATED' THEN
2022                         l_get_all_sites_sql := l_get_all_sites_sql_r;
2023                         --          ----------------------errorout_an(' get sites info rel '||l_get_all_sites_sql||' '||l_party_id||' '||l_org_id);
2024                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id, l_party_id, l_org_id;
2025                     ELSIF l_default = 'BOTH' THEN
2026                         l_get_all_sites_sql := l_get_all_sites_sql_b;
2027                         --          ----------------------errorout_an(' get sites info both '||l_get_all_sites_sql);
2028                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id, l_party_id, l_party_id, l_org_id;
2029                     ELSIF l_default = 'ALL' THEN
2030                         l_get_all_sites_sql := l_get_all_sites_sql_a;
2031                         --          ----------------------errorout_an(' get sites info both '||l_get_all_sites_sql);
2032                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id;
2033 
2034                     END IF;
2035 
2036 
2037                     --         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_party_id;
2038                     LOOP         FETCH l_csr_get_all_sites INTO l_get_all_sites_rec;
2039                         IF l_csr_get_all_sites%NOTFOUND THEN
2040                             CLOSE l_csr_Get_all_sites;
2041                             EXIT;
2042                         END IF;
2043 
2044                         l_id := l_get_all_sites_rec.id1;
2045 
2046                         FOR  id_counter IN 1 .. x_prod_selections_tbl.COUNT LOOP
2047                             IF x_prod_selections_tbl(id_counter).rec_type = 'P' THEN
2048 
2049                                 IF x_prod_selections_tbl(id_counter).cp_id = l_id THEN
2050                                     l_chk_id_flag := 'Y';
2051                                     EXIT;
2052                                 ELSE
2053                                     l_chk_id_flag := 'N';
2054                                 END IF;
2055                             END IF;
2056                         END LOOP;
2057 
2058 
2059                         IF l_chk_id_flag = 'N' THEN
2060                             get_products(l_clvl_filter,
2061                                          l_id,
2062                                          l_default,
2063                                          l_cust_id_list,
2064                                          l_party_id,
2065                                          l_org_id,
2066                                          l_organization_id,
2067                                          l_prod_tbl);
2068 
2069                             IF l_prod_tbl.COUNT > 0 THEN
2070 
2071                                 x_prod_selections_tbl(rowcount).cp_id := l_get_all_sites_rec.id1;
2072 
2073                                 --l_name := rpad(l_get_all_sites_rec.party_site_number || '-' || l_get_all_sites_rec.name, 30) || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
2074 
2075                                 --bug 5243637 (forward port for bug 5221204/2749830)
2076                                 l_name := rpad(l_get_all_sites_rec.party_site_number||'-'||l_get_all_sites_rec.name,30)
2077                                 ||' '||rpad(l_get_all_sites_rec.description,40,' ');
2078 
2079                                 x_prod_selections_tbl(rowcount).name := l_name;
2080                                 x_prod_selections_tbl(rowcount).description := l_get_all_sites_rec.description;
2081                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
2082                                 x_prod_selections_tbl(rowcount).rec_name := 'Site';
2083                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
2084                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
2085                                 x_prod_selections_tbl(rowcount).ser_number := '';
2086                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
2087                                 x_prod_selections_tbl(rowcount).quantity := '';
2088                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
2089                                 x_prod_selections_tbl(rowcount).price := '';
2090                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
2091                                 x_prod_selections_tbl(rowcount).site_id := '';
2092                                 x_prod_selections_tbl(rowcount).uom_code := '';
2093                                 x_prod_selections_tbl(rowcount).display_name := '';
2094                                 x_prod_selections_tbl(rowcount).site_name := '';
2095                                 -- BUG 4372877 --
2096                                 -- GCHADHA --
2097                                 -- 5/25/2005 --
2098                                 x_prod_selections_tbl(rowcount).ext_reference := '';
2099                                 -- END GCHADHA --
2100 
2101 
2102                                 rowcount := rowcount + 1;
2103 
2104                                 populate_table (l_prod_tbl,
2105                                                 l_clvl_filter,
2106                                                 rowcount,
2107                                                 l_display_pref,
2108                                                 x_prod_selections_tbl);
2109 
2110                                 -- BUG 4113113 --
2111                                 -- GCHADHA --
2112                                 rowcount := rowcount + 1;
2113                                 -- END GCHADHA --
2114                             END IF;
2115                         END IF;
2116                     END LOOP;
2117                 ELSIF l_clvl_id IS NOT NULL THEN
2118 
2119                     get_products(l_clvl_filter,
2120                                  l_clvl_id,
2121                                  l_default,
2122                                  l_cust_id_list,
2123                                  l_party_id,
2124                                  l_org_id,
2125                                  l_organization_id,
2126                                  l_prod_tbl);
2127 
2128                     IF l_prod_tbl.COUNT > 0 THEN
2129 
2130                         x_prod_selections_tbl(rowcount).cp_id := l_clvl_id;
2131                         l_name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
2132                         x_prod_selections_tbl(rowcount).name := l_name;
2133                         x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
2134                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2135                         x_prod_selections_tbl(rowcount).rec_name := 'Site';
2136                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2137                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2138                         x_prod_selections_tbl(rowcount).ser_number := '';
2139                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2140                         x_prod_selections_tbl(rowcount).quantity := '';
2141                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2142                         x_prod_selections_tbl(rowcount).price := '';
2143                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2144                         x_prod_selections_tbl(rowcount).site_id := '';
2145                         x_prod_selections_tbl(rowcount).uom_code := '';
2146                         x_prod_selections_tbl(rowcount).display_name := '';
2147                         x_prod_selections_tbl(rowcount).site_name := '';
2148                         -- BUG 4372877 --
2149                         -- GCHADHA --
2150                         -- 5/25/2005 --
2151                         x_prod_selections_tbl(rowcount).ext_reference := '';
2152                         -- END GCHADHA --
2153 
2154 
2155                         rowcount := rowcount + 1;
2156 
2157                         populate_table (l_prod_tbl,
2158                                         l_clvl_filter,
2159                                         rowcount,
2160                                         l_display_pref,
2161                                         x_prod_selections_tbl);
2162 
2163 
2164 
2165                     END IF;
2166 
2167                 END IF;
2168 
2169             ELSIF  l_clvl_filter = 'Customer' THEN
2170                 IF  l_clvl_id IS NULL THEN
2171                     /* Select all Items for given party first */
2172                     get_customer_id(p_default => l_default,
2173                                     p_party_id => l_party_id,
2174                                     p_org_id => l_org_id,
2175                                     x_cust_id_tbl => l_cust_id_tbl);
2176 
2177                     --           ----------------------errorout_an(' cust count   '||l_cust_id_tbl.count);
2178 
2179                     FOR cust_count IN 1..l_cust_id_tbl.COUNT LOOP
2180 
2181                         l_id := l_cust_id_tbl(cust_count).customer_id;
2182                         l_name := l_cust_id_tbl(cust_count).customer_name ;
2183 
2184                         --           ----------------------errorout_an(' before get products '||l_id);
2185 
2186                         get_products(l_clvl_filter,
2187                                      l_id,
2188                                      l_default,
2189                                      l_id,
2190                                      l_org_id,
2191                                      l_party_id,
2192                                      l_organization_id,
2193                                      l_prod_tbl);
2194 
2195                         --           ----------------------errorout_an(' after get products '||l_prod_tbl.count);
2196                         IF l_prod_tbl.COUNT > 0 THEN
2197 
2198                             x_prod_selections_tbl(rowcount).cp_id := l_id;
2199                             x_prod_selections_tbl(rowcount).name := l_name;
2200                             --              x_prod_selections_tbl(rowcount).description := l_get_all_customer_rec.description;
2201                             x_prod_selections_tbl(rowcount).rec_type := 'P';
2202                             x_prod_selections_tbl(rowcount).rec_name := 'Customer';
2203                             x_prod_selections_tbl(rowcount).rec_no := rowcount;
2204                             x_prod_selections_tbl(rowcount).cp_id2 := '';
2205                             x_prod_selections_tbl(rowcount).ser_number := '';
2206                             x_prod_selections_tbl(rowcount).ref_number := '' ;
2207                             x_prod_selections_tbl(rowcount).quantity := '';
2208                             x_prod_selections_tbl(rowcount).orig_net_amt := '';
2209                             x_prod_selections_tbl(rowcount).price := '';
2210                             x_prod_selections_tbl(rowcount).inventory_item_id := '';
2211                             x_prod_selections_tbl(rowcount).site_id := '';
2212                             x_prod_selections_tbl(rowcount).uom_code := '';
2213                             x_prod_selections_tbl(rowcount).display_name := '';
2214                             x_prod_selections_tbl(rowcount).site_name := '';
2215                             -- BUG 4372877 --
2216                             -- GCHADHA --
2217                             -- 5/25/2005 --
2218                             x_prod_selections_tbl(rowcount).ext_reference := '';
2219                             -- END GCHADHA --
2220 
2221 
2222                             rowcount := rowcount + 1;
2223 
2224                             populate_table (l_prod_tbl,
2225                                             l_clvl_filter,
2226                                             rowcount,
2227                                             l_display_pref,
2228                                             x_prod_selections_tbl);
2229 
2230                             -- BUG 4113113 --
2231                             -- GCHADHA --
2232                             rowcount := rowcount + 1;
2233                             -- END GCHADHA --
2234                         END IF;
2235                     END LOOP;
2236                 ELSIF l_clvl_id IS NOT NULL THEN
2237 
2238                     get_products(l_clvl_filter,
2239                                  l_clvl_id,
2240                                  l_default,
2241                                  l_clvl_id,
2242                                  l_party_id,
2243                                  l_org_id,
2244                                  l_organization_id,
2245                                  l_prod_tbl);
2246 
2247                     IF l_prod_tbl.COUNT > 0 THEN
2248 
2249                         x_prod_selections_tbl(rowcount).cp_id := l_customer_id;
2250                         x_prod_selections_tbl(rowcount).name := p_clvl_filter_rec.clvl_name;
2251                         --              x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
2252                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2253                         x_prod_selections_tbl(rowcount).rec_name := 'Customer';
2254                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2255                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2256                         x_prod_selections_tbl(rowcount).ser_number := '';
2257                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2258                         x_prod_selections_tbl(rowcount).quantity := '';
2259                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2260                         x_prod_selections_tbl(rowcount).price := '';
2261                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2262                         x_prod_selections_tbl(rowcount).site_id := '';
2263                         x_prod_selections_tbl(rowcount).uom_code := '';
2264                         x_prod_selections_tbl(rowcount).display_name := '';
2265                         x_prod_selections_tbl(rowcount).site_name := '';
2266                         -- BUG 4372877 --
2267                         -- GCHADHA --
2268                         -- 5/25/2005 --
2269                         x_prod_selections_tbl(rowcount).ext_reference := '';
2270                         -- END GCHADHA --
2271 
2272 
2273                         rowcount := rowcount + 1;
2274 
2275                         populate_table (l_prod_tbl,
2276                                         l_clvl_filter,
2277                                         rowcount,
2278                                         l_display_pref,
2279                                         x_prod_selections_tbl);
2280 
2281 
2282 
2283                     END IF;
2284                 END IF;
2285 
2286             ELSIF l_clvl_filter = 'Model' THEN
2287 
2288                 get_model(l_organization_id,
2289                           l_clvl_id,
2290                           l_party_id,
2291                           l_display_pref,
2292                           l_default,
2293                           l_org_id,
2294                           x_prod_selections_tbl );
2295 
2296 
2297             END IF; /** l_clvl_filter  in  item/system/site/customer/model **/
2298 
2299         ELSIF   l_clvl_filter = 'Party' THEN
2300 
2301             IF  l_clvl_id IS NOT NULL OR l_default = 'CUSTOMER' THEN
2302                 l_clvl_id := NVL(l_clvl_id, l_party_id);
2303 
2304 
2305                 --       IF l_default = 'CUSTOMER' THEN
2306                 get_party_id(p_default => l_default,
2307                              p_party_id => l_clvl_id,
2308                              p_org_id => l_org_id,
2309                              x_party_id_tbl => l_party_id_tbl );
2310 
2311                 l_name := l_party_id_tbl(1).party_name;
2312 
2313 
2314                 --      END IF;
2315 
2316                 get_products(l_clvl_filter,
2317                              NULL,
2318                              l_default,
2319                              l_clvl_id,
2320                              l_clvl_id,
2321                              l_org_id,
2322                              l_organization_id,
2323                              l_prod_tbl);
2324 
2325                 IF l_prod_tbl.COUNT > 0 THEN
2326                     x_prod_selections_tbl(rowcount).cp_id := l_party_id;
2327                     x_prod_selections_tbl(rowcount).name := l_name;
2328                     x_prod_selections_tbl(rowcount).description := l_name;
2329                     x_prod_selections_tbl(rowcount).rec_type := 'P';
2330                     x_prod_selections_tbl(rowcount).rec_name := 'Party';
2331                     x_prod_selections_tbl(rowcount).rec_no := rowcount;
2332                     x_prod_selections_tbl(rowcount).cp_id2 := '';
2333                     x_prod_selections_tbl(rowcount).ser_number := '';
2334                     x_prod_selections_tbl(rowcount).ref_number := '' ;
2335                     x_prod_selections_tbl(rowcount).quantity := '';
2336                     x_prod_selections_tbl(rowcount).price := '';
2337                     x_prod_selections_tbl(rowcount).inventory_item_id := '';
2338                     x_prod_selections_tbl(rowcount).site_id := '';
2339                     x_prod_selections_tbl(rowcount).uom_code := '';
2340                     x_prod_selections_tbl(rowcount).display_name := '';
2341                     x_prod_selections_tbl(rowcount).site_name := '';
2342                     -- BUG 4372877 --
2343                     -- GCHADHA --
2344                     -- 5/25/2005 --
2345                     x_prod_selections_tbl(rowcount).ext_reference := '';
2346                     -- END GCHADHA --
2347 
2348 
2349                     rowcount := rowcount + 1;
2350 
2351                     populate_table (l_prod_tbl,
2352                                     l_clvl_filter,
2353                                     rowcount,
2354                                     l_display_pref,
2355                                     x_prod_selections_tbl);
2356 
2357                 END IF;
2358 
2359             ELSIF  l_clvl_id IS NULL THEN
2360                 /* Select all Items for given party first */
2361 
2362                 get_party_id(p_default => l_default,
2363                              p_party_id => l_party_id,
2364                              p_org_id => l_org_id,
2365                              x_party_id_tbl => l_party_id_tbl );
2366 
2367                 FOR i IN 1..l_party_id_tbl.COUNT LOOP
2368 
2369                     l_party_id := l_party_id_tbl(i).party_id;
2370 
2371 
2372                     get_products(l_clvl_filter,
2373                                  NULL,
2374                                  l_default,
2375                                  l_clvl_id,
2376                                  l_party_id,
2377                                  l_org_id,
2378                                  l_organization_id,
2379                                  l_prod_tbl);
2380 
2381 
2382                     IF l_prod_tbl.COUNT > 0 THEN
2383 
2384                         x_prod_selections_tbl(rowcount).cp_id := l_party_id_tbl(i).party_id;
2385                         x_prod_selections_tbl(rowcount).name := l_party_id_tbl(i).party_name;
2386                         x_prod_selections_tbl(rowcount).description := l_party_id_tbl(i).party_name;
2387                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2388                         x_prod_selections_tbl(rowcount).rec_name := 'Party';
2389                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2390                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2391                         x_prod_selections_tbl(rowcount).ser_number := '';
2392                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2393                         x_prod_selections_tbl(rowcount).quantity := '';
2394                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2395                         x_prod_selections_tbl(rowcount).price := '';
2396                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2397                         x_prod_selections_tbl(rowcount).site_id := '';
2398                         x_prod_selections_tbl(rowcount).uom_code := '';
2399                         x_prod_selections_tbl(rowcount).display_name := '';
2400                         x_prod_selections_tbl(rowcount).site_name := '';
2401                         -- BUG 4372877 --
2402                         -- GCHADHA --
2403                         -- 5/25/2005 --
2404                         x_prod_selections_tbl(rowcount).ext_reference := '';
2405                         -- END GCHADHA --
2406 
2407 
2408                         rowcount := rowcount + 1;
2409 
2410                         populate_table (l_prod_tbl,
2411                                         l_clvl_filter,
2412                                         rowcount,
2413                                         l_display_pref,
2414                                         x_prod_selections_tbl);
2415                         -- BUG 4113113 --
2416                         -- GCHADHA --
2417                         rowcount := rowcount + 1;
2418                         -- END GCHADHA --
2419 
2420                     END IF; /* end if or prod tbl count > 0 */
2421                 END LOOP; /* End loop of prod tbl loop */
2422 
2423             END IF; /* Clvl Id is NULL */
2424 
2425 
2426         END IF; /** If l_clvl_filter <> 'Party' **/
2427 
2428     END;
2429 
2430     /******* PROC 2 ************/
2431 
2432 
2433 
2434     /*******************************************/
2435 
2436     PROCEDURE Get_customer_selections(p_clvl_filter_rec IN clvl_filter_rec,
2437                                       x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
2438     IS
2439 
2440     CURSOR l_csr_get_customer(p_party_id IN NUMBER ) IS
2441         SELECT cust_acc.party_id party_id, parties.name party_name, parties.description description,
2442                cust_acc.id1 id1, cust_acc.name name, cust_acc.id2 id2, cust_acc.description account_number
2443         FROM   OKX_CUSTOMER_ACCOUNTS_V cust_acc,
2444                OKX_PARTIES_V parties
2445         WHERE  cust_acc.party_id = p_party_id
2446         AND    cust_acc.party_id = parties.id1
2447         AND    cust_acc.status = 'A';
2448 
2449     CURSOR l_csr_get_party_name(p_party_id IN NUMBER) IS
2450         SELECT parties.id1 party_id, parties.name party_name
2451         FROM OKX_PARTIES_V parties
2452         WHERE parties.id1 = p_party_id ;
2453 
2454     CURSOR l_csr_get_all_customers IS
2455         SELECT cust_acc.party_id party_id, parties.name party_name, parties.description description,
2456                cust_acc.id1 id1, cust_acc.name name, cust_acc.id2 id2, cust_acc.description account_number
2457         FROM   OKX_CUSTOMER_ACCOUNTS_V cust_acc,
2458                OKX_PARTIES_V parties
2459         WHERE  cust_acc.party_id = parties.id1
2460         AND    cust_acc.status = 'A';
2461 
2462     l_csr_cust_rec  l_csr_get_customer%ROWTYPE;
2463     l_csr_party_rec l_csr_get_party_name%ROWTYPE;
2464 
2465     l_default   VARCHAR2(15);
2466     l_party_id  OKX_PARTIES_V.id1%TYPE;
2467     i           NUMBER ;
2468     rowcount    NUMBER := 1;
2469     l_org_id    NUMBER ;
2470     l_customer_id   NUMBER ;
2471     l_cust_id_tbl cust_id_tbl;
2472     l_party_id_tbl party_id_tbl;
2473 
2474     l_old_party_Id NUMBER :=  - 99;
2475     l_party_selected OKX_PARTIES_V.ID1%TYPE;
2476     BEGIN
2477         l_default := p_clvl_filter_rec.clvl_default;
2478         l_party_id := p_clvl_filter_rec.clvl_party_id;
2479         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
2480         l_party_selected := p_clvl_filter_rec.clvl_find_id;
2481 
2482         l_party_id := NVL(l_party_selected, l_party_id);
2483 
2484         IF l_party_selected IS NOT NULL THEN
2485             OPEN l_csr_get_party_name(l_party_selected);
2486             FETCH l_csr_get_party_name INTO l_csr_party_rec;
2487             CLOSE l_csr_get_party_name;
2488 
2489             /*** Set parent records ***/
2490 
2491             x_clvl_selections_tbl(rowcount).rec_type := 'P';
2492             x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
2493             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2494             x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec.party_id;
2495             x_clvl_selections_tbl(rowcount).name := l_csr_party_rec.party_name;
2496             x_clvl_selections_tbl(rowcount).lse_id := 35;
2497             x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
2498 
2499             rowcount := rowcount + 1;
2500 
2501             FOR l_cust_csr_rec IN l_csr_get_customer(l_party_selected) LOOP
2502 
2503                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
2504                 x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
2505                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2506                 x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.id1;
2507                 x_clvl_selections_tbl(rowcount).id2 := l_cust_csr_rec.id2;
2508                 x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.name;
2509                 x_clvl_selections_tbl(rowcount).clvl_id := l_cust_csr_rec.id1;
2510                 x_clvl_selections_tbl(rowcount).clvl_name := l_cust_csr_rec.name;
2511                 x_clvl_selections_tbl(rowcount).display_name := l_cust_csr_rec.name || ',' || l_cust_csr_rec.account_number;
2512                 x_clvl_selections_tbl(rowcount).party_id := l_cust_csr_rec.party_id;
2513                 x_clvl_selections_tbl(rowcount).party_name := l_cust_csr_rec.party_name;
2514                 x_clvl_selections_tbl(rowcount).description := l_cust_csr_Rec.description;
2515                 x_clvl_selections_tbl(rowcount).lse_id := 35;
2516                 x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
2517                 rowcount := rowcount + 1;
2518             END LOOP;
2519 
2520         ELSE
2521             IF   l_default <> 'ALL' THEN
2522 
2523                 get_party_id(p_default => l_default,
2524                              p_party_id => l_party_id,
2525                              p_org_id => l_org_id,
2526                              x_party_id_tbl => l_party_id_tbl);
2527 
2528                 FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
2529                     l_party_selected := l_party_id_tbl(i).party_id;
2530 
2531                     FOR l_cust_csr_rec IN l_csr_get_customer(l_party_selected) LOOP
2532                         l_party_id := l_cust_csr_rec.party_id;
2533                         IF l_old_party_id <> l_party_id THEN
2534                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
2535                             x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
2536                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2537                             x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.party_id;
2538                             x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.party_name;
2539                             x_clvl_selections_tbl(rowcount).lse_id := 35;
2540                             x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
2541 
2542                             l_old_party_id := l_party_id;
2543 
2544                             rowcount := rowcount + 1;
2545                             /* Set parent record */
2546                         END IF;
2547 
2548                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
2549                         x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
2550                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2551                         x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.id1;
2552                         x_clvl_selections_tbl(rowcount).id2 := l_cust_csr_rec.id2;
2553                         x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.name;
2554                         x_clvl_selections_tbl(rowcount).clvl_id := l_cust_csr_rec.id1;
2555                         x_clvl_selections_tbl(rowcount).clvl_name := l_cust_csr_rec.name;
2556                         x_clvl_selections_tbl(rowcount).display_name := l_cust_csr_rec.name || ',' || l_cust_csr_rec.account_number;
2557                         x_clvl_selections_tbl(rowcount).party_id := l_cust_csr_rec.party_id;
2558                         x_clvl_selections_tbl(rowcount).party_name := l_cust_csr_rec.party_name;
2559                         x_clvl_selections_tbl(rowcount).description := l_cust_csr_Rec.description;
2560                         x_clvl_selections_tbl(rowcount).lse_id := 35;
2561                         x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
2562                         rowcount := rowcount + 1;
2563                     END LOOP;
2564 
2565                 END LOOP; /* end of customer id loop */
2566 
2567             ELSIF l_default = 'ALL' THEN
2568                 FOR l_cust_csr_rec IN l_csr_get_all_customers LOOP
2569 
2570                     l_party_id := l_cust_csr_rec.party_id;
2571 
2572                     IF l_old_party_id <> l_party_id THEN
2573 
2574                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
2575                         x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
2576                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2577                         x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.party_id;
2578                         x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.party_name;
2579                         x_clvl_selections_tbl(rowcount).lse_id := 35;
2580                         x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
2581 
2582                         l_old_party_id := l_party_id;
2583                         rowcount := rowcount + 1;
2584                         /* Set parent record */
2585                     END IF;
2586 
2587                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
2588                     x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
2589                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2590                     x_clvl_selections_tbl(rowcount).clvl_id := l_cust_csr_rec.id1;
2591                     x_clvl_selections_tbl(rowcount).id2 := l_cust_csr_rec.id2;
2592                     x_clvl_selections_tbl(rowcount).clvl_name := l_cust_csr_rec.name;
2593                     x_clvl_selections_tbl(rowcount).display_name := l_cust_csr_rec.name || ',' || l_cust_csr_rec.account_number;
2594                     x_clvl_selections_tbl(rowcount).party_id := l_cust_csr_rec.party_id;
2595                     x_clvl_selections_tbl(rowcount).party_name := l_cust_csr_rec.party_name;
2596                     x_clvl_selections_tbl(rowcount).description := l_cust_csr_Rec.account_number;
2597                     x_clvl_selections_tbl(rowcount).lse_id := 35;
2598                     x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
2599                     rowcount := rowcount + 1;
2600                 END LOOP;
2601             END IF; /* L_default id <> 'ALL' */
2602         END IF;
2603 
2604     END get_customer_selections;
2605 
2606 
2607 
2608     /*******************************************/
2609 
2610 
2611     PROCEDURE Get_party_selections(p_clvl_filter_rec IN clvl_filter_rec,
2612                                    x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
2613     IS
2614 
2615     CURSOR l_csr_party_customer(p_party_id IN NUMBER ) IS
2616         SELECT id1, id2, Name, Description
2617         FROM   OKX_PARTIES_V
2618         WHERE  id1 = p_party_id
2619         AND    status = 'A';
2620 
2621     CURSOR l_csr_party_related(p_party_id IN NUMBER,
2622                                p_org_id   IN NUMBER) IS
2623         SELECT P1.id1, P1.id2, P1.name, P1.description
2624         FROM OKX_PARTIES_V P1, OKX_CUSTOMER_ACCOUNTS_V CA1
2625         WHERE P1.id1 = CA1.party_id
2626         AND CA1.id1 IN (SELECT rel_acc.cust_account_id
2627                         FROM  OKX_CUSTOMER_ACCOUNTS_V    cust_acc,
2628                         OKX_CUST_ACCT_RELATE_ALL_V rel_acc
2629                         WHERE rel_acc.related_cust_account_id = cust_acc.id1
2630                         AND   cust_acc.party_id = p_party_id
2631                         AND   cust_acc.status = 'A'
2632                         AND   rel_acc.org_id = p_org_id
2633                         AND   rel_acc.status = 'A')
2634         AND P1.status = 'A'
2635         AND CA1.status = 'A';
2636 
2637     CURSOR l_csr_party_both(p_party_id IN NUMBER,
2638                             p_org_id   IN NUMBER ) IS
2639         SELECT id1, id2, Name, Description
2640         FROM   OKX_PARTIES_V
2641         WHERE  id1 = p_party_id
2642         AND    status = 'A'
2643         UNION
2644         SELECT P1.id1, P1.id2, P1.name, P1.description
2645         FROM OKX_PARTIES_V P1, OKX_CUSTOMER_ACCOUNTS_V CA1
2646         WHERE P1.id1 = CA1.party_id
2647         AND CA1.id1 IN (SELECT rel_acc.cust_account_id
2648                         FROM  OKX_CUSTOMER_ACCOUNTS_V    cust_acc,
2649                         OKX_CUST_ACCT_RELATE_ALL_V rel_acc
2650                         WHERE rel_acc.related_cust_account_id = cust_acc.id1
2651                         AND   cust_acc.party_id = p_party_id
2652                         AND   cust_acc.status = 'A'
2653                         AND   rel_acc.org_id = p_org_id
2654                         AND   rel_acc.status = 'A')
2655         AND P1.status = 'A'
2656         AND CA1.status = 'A';
2657 
2658     CURSOR l_csr_party_all IS
2659         SELECT id1, id2, Name, Description
2660         FROM   OKX_PARTIES_V
2661         WHERE  status = 'A';
2662 
2663     l_csr_party_rec  l_csr_party_customer%ROWTYPE;
2664 
2665     l_default   VARCHAR2(15);
2666     l_party_id  OKX_PARTIES_V.id1%TYPE;
2667     i           NUMBER ;
2668     rowcount    NUMBER := 1;
2669     l_org_id    NUMBER ;
2670     l_party_selected NUMBER;
2671 
2672     BEGIN
2673         l_default := p_clvl_filter_rec.clvl_default;
2674         l_party_id := p_clvl_filter_rec.clvl_party_id;
2675         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
2676         l_party_selected := p_clvl_filter_rec.clvl_find_id;
2677 
2678 
2679         IF l_default = 'CUSTOMER' OR l_party_selected IS NOT NULL THEN
2680             IF l_party_selected IS NOT NULL THEN
2681                 l_party_id := l_party_selected ;
2682             END IF;
2683 
2684             FOR l_csr_party_rec_c IN l_csr_party_customer(l_party_id) LOOP
2685                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
2686                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2687                 x_clvl_selections_tbl(rowcount).rec_name := 'Party';
2688                 x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec_c.id1;
2689                 x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec_c.name;
2690                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_c.id2;
2691                 x_clvl_selections_tbl(rowcount).name := l_csr_party_rec_c.name;
2692                 x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec_c.name || ',' || l_csr_party_Rec_c.description;
2693                 x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec_c.id1;
2694                 x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec_c.name;
2695                 x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec_c.description;
2696                 x_clvl_selections_tbl(rowcount).lse_id := 8;
2697                 x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
2698                 rowcount := rowcount + 1;
2699             END LOOP;
2700         ELSIF l_default = 'ALL' THEN
2701             FOR l_csr_party_rec_a IN l_csr_party_all LOOP
2702                 l_party_id := l_csr_party_rec_a.id1 ;
2703                 FOR l_csr_party_rec IN l_Csr_party_customer(l_party_id) LOOP
2704                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
2705                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2706                     x_clvl_selections_tbl(rowcount).rec_name := 'Party';
2707                     x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec.id1;
2708                     x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec.id2;
2709                     x_clvl_selections_tbl(rowcount).name := l_csr_party_rec.name;
2710                     x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec.name || ',' || l_csr_party_Rec.description;
2711                     x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec.id1;
2712                     x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec.name;
2713                     x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec.id1;
2714                     x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec.name;
2715                     x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec.description;
2716                     x_clvl_selections_tbl(rowcount).lse_id := 8;
2717                     x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
2718                     rowcount := rowcount + 1;
2719                 END LOOP;
2720             END LOOP;
2721         ELSIF l_default = 'RELATED' THEN
2722             FOR l_csr_party_rec_r IN l_Csr_party_related(l_party_id, l_org_id ) LOOP
2723                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
2724                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2725                 x_clvl_selections_tbl(rowcount).rec_name := 'Party';
2726                 x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec_r.id1;
2727                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_r.id2;
2728                 x_clvl_selections_tbl(rowcount).name := l_csr_party_rec_r.name;
2729                 x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec_r.id1;
2730                 x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec_r.name;
2731                 x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec_r.name || ',' || l_csr_party_Rec.description;
2732                 x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec_r.id1;
2733                 x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec_r.name;
2734                 x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec_r.description;
2735                 x_clvl_selections_tbl(rowcount).lse_id := 8;
2736                 x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
2737                 rowcount := rowcount + 1;
2738             END LOOP;
2739         ELSIF l_default = 'BOTH' THEN
2740             FOR l_csr_party_rec_b IN l_Csr_party_both(l_party_id, l_org_id ) LOOP
2741                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
2742                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2743                 x_clvl_selections_tbl(rowcount).rec_name := 'Party';
2744                 x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec_b.id1;
2745                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_b.id2;
2746                 x_clvl_selections_tbl(rowcount).name := l_csr_party_rec_b.name;
2747                 x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec_b.id1;
2748                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_b.id2;
2749                 x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec_b.name;
2750                 x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec_b.name || ',' || l_csr_party_Rec.description;
2751                 x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec_b.id1;
2752                 x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec_b.name;
2753                 x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec_b.description;
2754                 x_clvl_selections_tbl(rowcount).lse_id := 8;
2755                 x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
2756                 rowcount := rowcount + 1;
2757             END LOOP;
2758         END IF;
2759 
2760     END get_party_selections;
2761 
2762     PROCEDURE Get_site_selections(p_clvl_filter_rec IN clvl_filter_rec,
2763                                   x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
2764     IS
2765 
2766     CURSOR l_csr_get_site(p_party_id IN NUMBER ) IS
2767         SELECT DISTINCT parties.name party_name, parties.id1 party_id,
2768                party_site.id1 id1, party_site.party_site_number, party_site.id2,
2769                party_site.name party_site_name, party_site.description
2770         FROM   OKX_PARTIES_V parties,
2771                OKX_PARTY_SITES_V party_site
2772         WHERE  parties.id1 = p_party_id
2773         AND    party_site.party_id = parties.id1
2774         AND    party_site.status = 'A'
2775         ORDER BY parties.name ;
2776 
2777     CURSOR l_csr_get_all_sites  IS
2778         SELECT DISTINCT parties.name party_name, parties.id1 party_id,
2779                party_site.id1 id1, party_site.party_site_number, party_site.id2,
2780                party_site.name  party_site_name, party_site.description
2781         FROM   OKX_PARTIES_V parties,
2782                OKX_PARTY_SITES_V party_site
2783         WHERE  party_site.party_id = parties.id1
2784         AND    party_site.status = 'A'
2785         ORDER BY parties.name ;
2786 
2787     -- Bug 4915711--
2788     -- l_csr_cust_rec  l_csr_get_site%ROWTYPE;
2789     -- Bug 4915711--
2790 
2791     l_default      VARCHAR2(15);
2792     l_party_id     OKX_PARTIES_V.id1%TYPE;
2793     l_old_party_id     NUMBER :=  - 99;
2794     i              NUMBER ;
2795     rowcount       NUMBER := 1;
2796     l_org_id       NUMBER ;
2797     l_cust_id_tbl cust_id_tbl;
2798     l_party_id_tbl party_id_tbl;
2799     l_party_selected VARCHAR2(15);
2800 
2801     l_old_customer_id NUMBER :=  - 99 ;
2802     l_customer_id NUMBER ;
2803     -- BUG 4915711 --
2804     TYPE get_all_sites_rec IS RECORD (
2805                                       party_name OKX_PARTIES_V.NAME%TYPE,
2806                                       party_Id1  OKX_PARTIES_V.ID1%TYPE,
2807                                       party_sites_Id1  OKX_PARTY_SITES_V.ID1%TYPE,
2808                                       Party_Sites_Number OKX_PARTY_SITES_V.party_site_number%TYPE,
2809                                       party_sites_Id2  OKX_PARTY_SITES_V.ID2%TYPE,
2810                                       party_sites_name OKX_PARTY_SITES_V.NAME%TYPE,
2811                                       party_desc VARCHAR2(2000)
2812                                       );
2813 
2814     l_get_all_sites_rec get_all_sites_rec;
2815     -- BUG 4915711 --
2816 
2817     BEGIN
2818         l_default := p_clvl_filter_rec.clvl_default;
2819         l_party_id := p_clvl_filter_rec.clvl_party_id;
2820         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
2821 
2822         IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN
2823             l_party_id := p_clvl_filter_rec.clvl_find_id;
2824         ELSE
2825             IF l_default = 'CUSTOMER' THEN
2826                 l_party_selected := l_party_Id;
2827             END IF ;
2828         END IF;
2829 
2830 
2831         IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN /* If default = CUSTOMER, or find id has a value then select covered sites only for given party id */
2832             -- BUG 4915711 --
2833             --  FOR l_site_csr_rec IN l_csr_get_site(l_party_id) LOOP
2834             OPEN l_csr_get_site(l_party_id);
2835             LOOP
2836                 FETCH l_csr_get_site INTO l_get_all_sites_rec;
2837                 IF l_csr_get_site%NOTFOUND THEN
2838                     CLOSE l_csr_get_site;
2839                     EXIT;
2840                 END IF;
2841                 IF rowcount = 1 THEN
2842                     x_clvl_selections_tbl(rowcount).rec_type := 'P';
2843                     x_clvl_selections_tbl(rowcount).rec_name := 'Site';
2844                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2845                     --  x_clvl_selections_tbl(rowcount).id1    := l_site_csr_rec.party_id; -- Bug 4915711
2846                     --  x_clvl_selections_tbl(rowcount).name   := l_site_csr_rec.party_name; -- Bug 4915711
2847                     x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_id1;
2848                     x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_name;
2849                     x_clvl_selections_tbl(rowcount).lse_id := 10;
2850                     x_clvl_selections_tbl(rowcount).lse_name := 'Site';
2851                     rowcount := rowcount + 1;
2852                     /* Set parent record */
2853                 END IF;
2854 
2855                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
2856                 x_clvl_selections_tbl(rowcount).rec_name := 'Site';
2857                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2858 
2859                 x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_sites_id1;
2860                 x_clvl_selections_tbl(rowcount).id2 := l_get_all_sites_rec.party_sites_id2;
2861                 x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
2862                 x_clvl_selections_tbl(rowcount).display_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name ||' '|| l_get_all_sites_rec.party_desc;
2863                 x_clvl_selections_tbl(rowcount).clvl_id := l_get_all_sites_rec.party_sites_id1;
2864                 x_clvl_selections_tbl(rowcount).clvl_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
2865                 x_clvl_selections_tbl(rowcount).description := l_get_all_sites_rec.party_desc;
2866 
2867                 x_clvl_selections_tbl(rowcount).lse_id := 10;
2868 
2869                 x_clvl_selections_tbl(rowcount).lse_name := 'Site';
2870 
2871                 rowcount := rowcount + 1;
2872 
2873             END LOOP;
2874             -- Bug 4915711--
2875         ELSE  /* if find id is NULL */
2876 
2877             IF l_default <> 'ALL' THEN /* if default is BOTH or RELATED */
2878 
2879                 get_party_id(p_default => l_default,
2880                              p_party_id => l_party_id,
2881                              p_org_id => l_org_id,
2882                              x_party_id_tbl => l_party_id_tbl);
2883 
2884                 FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
2885 
2886                     l_party_id := l_party_id_tbl(i).party_id;
2887                     -- Bug 4915711--
2888                     -- FOR l_site_csr_rec IN l_csr_get_site(l_party_Id) LOOP
2889                     OPEN l_csr_get_site(l_party_id);
2890                     LOOP
2891                         FETCH l_csr_get_site INTO l_get_all_sites_rec;
2892                         IF l_csr_get_site%NOTFOUND THEN
2893                             CLOSE l_csr_get_site;
2894                             EXIT;
2895                         END IF;
2896                         -- l_party_id := l_site_csr_rec.party_id;
2897                         l_party_id := l_get_all_sites_rec.party_id1;
2898                         IF l_old_party_id <> l_party_id THEN
2899                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
2900                             x_clvl_selections_tbl(rowcount).rec_name := 'Site';
2901                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2902                             --x_clvl_selections_tbl(rowcount).id1 := l_site_csr_rec.party_id;
2903                             -- x_clvl_selections_tbl(rowcount).name := l_site_csr_rec.party_name;
2904                             x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_id1;
2905                             x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_name;
2906 
2907                             x_clvl_selections_tbl(rowcount).lse_id := 10;
2908                             x_clvl_selections_tbl(rowcount).lse_name := 'Site';
2909 
2910                             l_old_party_id := l_party_id;
2911                             rowcount := rowcount + 1;
2912                             /* Set parent record */
2913                         END IF;
2914 
2915                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
2916                         x_clvl_selections_tbl(rowcount).rec_name := 'Site';
2917                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2918 
2919                         x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_sites_id1;
2920                         x_clvl_selections_tbl(rowcount).id2 := l_get_all_sites_rec.party_sites_id2;
2921                         x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
2922                         x_clvl_selections_tbl(rowcount).display_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name ||' '|| l_get_all_sites_rec.party_desc;
2923                         x_clvl_selections_tbl(rowcount).clvl_id := l_get_all_sites_rec.party_sites_id1;
2924                         x_clvl_selections_tbl(rowcount).clvl_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
2925                         x_clvl_selections_tbl(rowcount).description := l_get_all_sites_rec.party_desc;
2926 
2927                         x_clvl_selections_tbl(rowcount).lse_id := 10;
2928                         x_clvl_selections_tbl(rowcount).lse_name := 'Site';
2929 
2930                         rowcount := rowcount + 1;
2931 
2932                     END LOOP;
2933                     -- Bug 4915711 --
2934                 END LOOP;
2935 
2936 
2937             ELSIF l_default = 'ALL' THEN
2938                 -- Bug 4915711 --
2939                 -- FOR l_site_csr_rec IN l_csr_get_all_sites  LOOP
2940                 OPEN l_csr_get_all_sites;
2941                 LOOP
2942                     FETCH l_csr_get_all_sites INTO l_get_all_sites_rec;
2943                     IF l_csr_get_all_sites%NOTFOUND THEN
2944                         CLOSE l_csr_get_all_sites;
2945                         EXIT;
2946                     END IF;
2947                     -- l_party_id := l_site_csr_rec.party_id;
2948                     l_party_id := l_get_all_sites_rec.party_id1;
2949 
2950                     IF l_old_party_id <> l_party_id THEN
2951 
2952                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
2953                         x_clvl_selections_tbl(rowcount).rec_name := 'Site';
2954                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2955                         /*
2956                         x_clvl_selections_tbl(rowcount).id1 := l_site_csr_rec.party_id;
2957                         x_clvl_selections_tbl(rowcount).name := l_site_csr_rec.party_name;
2958                         */
2959                         x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_id1;
2960                         x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_name;
2961 
2962                         x_clvl_selections_tbl(rowcount).lse_id := 10;
2963                         x_clvl_selections_tbl(rowcount).lse_name := 'Site';
2964                         --    l_old_site_id := l_site_id;
2965                         l_old_party_id := l_party_id;
2966                         rowcount := rowcount + 1;
2967                         /* Set parent record */
2968                     END IF;
2969 
2970                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
2971                     x_clvl_selections_tbl(rowcount).rec_name := 'Site';
2972                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
2973 
2974                     x_clvl_selections_tbl(rowcount).clvl_id := l_get_all_sites_rec.party_sites_id1;
2975                     x_clvl_selections_tbl(rowcount).id2 := l_get_all_sites_rec.party_sites_id2;
2976                     x_clvl_selections_tbl(rowcount).clvl_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
2977                     x_clvl_selections_tbl(rowcount).display_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name ||' '|| l_get_all_sites_rec.party_desc;
2978                     x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_sites_id1;
2979                     x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
2980                     x_clvl_selections_tbl(rowcount).description := l_get_all_sites_rec.party_desc;
2981 
2982                     x_clvl_selections_tbl(rowcount).lse_id := 10;
2983                     x_clvl_selections_tbl(rowcount).lse_name := 'Site';
2984 
2985                     rowcount := rowcount + 1;
2986 
2987                 END LOOP;
2988                 -- Bug 4915711--
2989             END IF;   /** end of default = ALL **/
2990         END IF;   /** Find id is not  null **/
2991     END get_site_selections;
2992 
2993     PROCEDURE Get_system_selections(p_clvl_filter_rec IN clvl_filter_rec,
2994                                     x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
2995     IS
2996 
2997     -- BUG 4171350 --
2998     -- Added check for Language used for Session
2999 
3000     /** Covered Systems by customer */
3001     CURSOR l_csr_get_cust_system(p_customer_id IN NUMBER ) IS
3002         SELECT cust_acc.id1, cust_acc.name,
3003                CSB.system_id, '#' id2, CSB.system_number,
3004                CST.description, CST.name system_name
3005         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_CUSTOMER_ACCOUNTS_V cust_acc
3006         WHERE cust_acc.id1 = p_customer_id
3007         AND   CSB.system_id = CST.system_id
3008         AND   CSB.Customer_id = cust_acc.id1
3009         AND   CST.language = userenv('lang') -- new
3010         AND   SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3011 
3012         ORDER BY cust_acc.id1, CSB.system_id;
3013 
3014 
3015     CURSOR l_csr_get_all_cust_system  IS
3016         SELECT cust_acc.id1, cust_acc.name,
3017                CSB.system_id, '#' id2, CSB.system_number,
3018                CST.description, CST.name system_name
3019         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_CUSTOMER_ACCOUNTS_V cust_acc
3020         WHERE  CSB.system_id = CST.system_id
3021         AND    CSB.Customer_id = cust_acc.id1
3022         AND    SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE)  AND NVL(CSB.end_date_active, SYSDATE)
3023         AND    CST.language = userenv('lang') -- new
3024         ORDER  BY cust_acc.id1, CSB.system_id;
3025 
3026 
3027     /** Covered System by party */
3028     CURSOR l_csr_get_party_system(p_party_id IN VARCHAR2)  IS
3029         SELECT parties.id1, parties.name, CSB.system_id, parties.id2 id2,
3030                CST.name system_name, CST.description, CSB.system_number
3031         FROM   CSI_SYSTEMS_B CSB,
3032                CSI_SYSTEMS_TL CST,
3033                OKX_PARTIES_V parties,
3034                OKX_CUSTOMER_ACCOUNTS_V cust_acc
3035         WHERE parties.id1 = p_party_id
3036         AND   cust_acc.party_id = parties.id1
3037         AND   CSB.system_id = CST.system_id
3038         AND   CSB.customer_id = cust_acc.id1
3039         AND    CST.language = userenv('lang') -- new
3040         AND   SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE);
3041 
3042 
3043     CURSOR l_csr_get_all_party_systems  IS
3044         SELECT parties.id1, parties.name, CSB.system_id, parties.id2 id2,
3045                CST.name system_name, CST.description,
3046                CSB.system_number
3047         FROM CSI_SYSTEMS_B CSB,
3048              CSI_SYSTEMS_TL CST,
3049              OKX_PARTIES_V parties,
3050              OKX_CUSTOMER_ACCOUNTS_V cust_acc
3051         WHERE cust_acc.party_id = parties.id1
3052         AND   CSB.system_id = CST.system_id
3053         AND   CSB.customer_id = cust_acc.id1
3054         AND    CST.language = userenv('lang') -- new
3055         AND   SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE)  AND NVL(CSB.end_date_active, SYSDATE);
3056 
3057 
3058     /** Covered System by Site **/
3059     CURSOR l_csr_get_site_system(p_party_site_id IN NUMBER)  IS
3060         SELECT party_site.id1, party_site.party_site_number || '-' || party_site.name party_site_name, CSB.system_id,
3061                '#', CST.name system_name, CST.description,
3062                CSB.system_number, party_site.id2 id2
3063         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_PARTY_SITES_V party_site
3064         WHERE  party_site.id1 = p_party_site_id
3065         AND    CSB.system_id = CST.system_id
3066         AND    SYSDATE BETWEEN  NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3067         AND    CSB.install_site_use_id = party_site.id1
3068         AND    CST.language = userenv('lang') -- new
3069         ORDER BY  party_site.id1, CSB.system_id;
3070 
3071     CURSOR l_csr_site_system_by_party(p_party_id IN NUMBER)  IS
3072         SELECT party_site.id1, party_site.party_site_number || '-' || party_site.name party_site_name, CSB.system_id,
3073                '#', CST.name system_name, CST.description,
3074                CSB.system_number, party_site.id2 id2
3075         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_PARTY_SITES_V party_site
3076         WHERE  party_site.party_id = p_party_id
3077         AND    CSB.system_id = CST.system_id
3078         AND    SYSDATE BETWEEN  NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3079         AND    CSB.install_site_use_id = party_site.id1
3080         AND    CST.language = userenv('lang') -- new
3081         ORDER BY  party_site.id1, CSB.system_id;
3082 
3083     CURSOR l_csr_get_all_site_systems  IS
3084         SELECT party_site.id1, party_site.party_site_number || '-' || party_site.name party_site_name,
3085                CSB.system_id, party_site.id2 id2, CST.name system_name, CST.description,
3086                CSB.system_number
3087         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_PARTY_SITES_V party_site
3088         WHERE  CSB.system_id = CST.system_id
3089         AND    SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3090         AND    CSB.install_site_use_id = party_site.id1
3091         AND    CST.language = userenv('lang') -- new
3092         ORDER BY  party_site.id1, CSB.system_id;
3093 
3094     l_csr_system_rec  l_csr_get_cust_system%ROWTYPE;
3095 
3096     l_default      VARCHAR2(15);
3097     l_party_id     NUMBER(15);
3098     l_customer_id  OKX_CUSTOMER_ACCOUNTS_V.id1%TYPE;
3099     i              NUMBER ;
3100     rowcount       NUMBER := 1;
3101     l_org_id       NUMBER ;
3102     l_party_id_tbl party_id_tbl;
3103     l_filter       VARCHAR2(15);
3104     l_old_customer_id  NUMBER :=  - 99;
3105     l_old_party_id     NUMBER :=  - 99;
3106     l_party_site_id    NUMBER;
3107     l_cust_id_tbl      cust_id_tbl;
3108     l_party_selected NUMBER;
3109     l_old_party_site_id   NUMBER :=  - 99;
3110 
3111 
3112     BEGIN
3113         l_default := p_clvl_filter_rec.clvl_default;
3114         l_party_id := p_clvl_filter_rec.clvl_party_id;
3115         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
3116         l_filter := p_clvl_filter_rec.clvl_filter;
3117 
3118         IF l_filter = 'Customer' THEN
3119             IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN
3120                 l_customer_id := p_clvl_filter_rec.clvl_find_id;
3121             END IF;
3122             --    ----------------errorout(' l customer id '||l_customer_id);
3123             IF p_clvl_filter_rec.clvl_find_id  IS NOT NULL THEN
3124 
3125                 --   ----------------errorout(' l customer id is NOT NULL ');
3126                 FOR l_system_csr_rec IN l_csr_get_cust_system(l_customer_Id) LOOP
3127                     --                               ----------------errorout(' in loop customer id is '||l_customer_id);
3128                     IF rowcount = 1 THEN
3129                         ----------------errorout(' systems selected ');
3130                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3131                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3132                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3133                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1 /** Customer id */ ;
3134                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name /* customer name */ ;
3135                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3136                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3137 
3138                         rowcount := rowcount + 1;
3139 
3140                         /* Set parent record */
3141 
3142                     END IF;
3143 
3144                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3145                     x_clvl_selections_tbl(rowcount).rec_name := 'System';
3146                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3147                     x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3148                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3149                     x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3150                     x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3151                     x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3152                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1; /** customer id **/
3153                     x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;  /** customer name **/
3154                     x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3155                     x_clvl_selections_tbl(rowcount).lse_id := 11;
3156                     x_clvl_selections_tbl(rowcount).lse_name := 'System';
3157 
3158                     rowcount := rowcount + 1;
3159 
3160                 END LOOP;
3161 
3162             ELSE  /* Customer id is NULL */
3163                 --     ----------------errorout(' l customer id IS NULL ');
3164                 IF l_default <> 'ALL' THEN
3165                     --       ----------------errorout(' default is not ALL ');
3166                     get_customer_id(p_default => l_default,
3167                                     p_party_id => l_party_id,  /* clvl_rec.party_id */
3168                                     p_org_id => l_org_id,
3169                                     x_cust_id_tbl => l_cust_id_tbl);
3170 
3171                     FOR i IN 1 .. l_cust_id_tbl.COUNT LOOP
3172 
3173                         l_customer_id := l_cust_id_tbl(i).customer_id;
3174                         --                ----------------errorout(' in loop customer id is '||l_customer_id);
3175                         FOR l_system_csr_rec IN l_csr_get_cust_system(l_customer_Id) LOOP
3176 
3177                             --                  ----------------errorout(' systems selected ');
3178                             IF l_old_customer_id <> l_customer_id THEN
3179                                 --                              ----------------errorout(' customer parent id is '||l_customer_id);
3180                                 x_clvl_selections_tbl(rowcount).rec_type := 'P';
3181                                 x_clvl_selections_tbl(rowcount).rec_name := 'System';
3182                                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3183                                 x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3184                                 x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3185                                 x_clvl_selections_tbl(rowcount).lse_id := 11;
3186                                 x_clvl_selections_tbl(rowcount).lse_name := 'System';
3187 
3188                                 rowcount := rowcount + 1;
3189                                 l_old_customer_id := l_customer_id;
3190 
3191                                 /* Set parent record */
3192 
3193                             END IF;
3194 
3195                             x_clvl_selections_tbl(rowcount).rec_type := 'C';
3196                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3197                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3198                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3199                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3200                             x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3201                             x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3202                             x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3203                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** customer id **/
3204                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** customer name **/
3205                             x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3206                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3207                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3208 
3209                             rowcount := rowcount + 1;
3210 
3211                         END LOOP; /* Select systems for given customer id */
3212                     END LOOP; /* Select customer id */
3213 
3214                 ELSE /** Default is ALL **/
3215 
3216                     FOR l_system_csr_rec IN l_csr_get_all_cust_system  LOOP
3217 
3218                         l_customer_id := l_system_csr_rec.id1;
3219                         IF l_old_customer_id <> l_customer_id THEN
3220                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3221                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3222                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3223                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3224                             x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3225                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3226                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3227 
3228                             l_old_customer_id := l_customer_id ;
3229                             rowcount := rowcount + 1;
3230 
3231                             /* Set parent record */
3232 
3233                         END IF;
3234 
3235                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3236                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3237                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3238                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3239                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3240                         x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3241                         x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3242                         x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3243                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1; /** customer id **/
3244                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;  /** customer name **/
3245                         x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3246                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3247                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3248 
3249                         rowcount := rowcount + 1;
3250 
3251                     END LOOP;  /** Select systems for all customers **/
3252                 END IF; /** Default <> 'ALL' **/
3253 
3254             END IF;  /** customer id is not null **/
3255 
3256         ELSIF l_filter = 'Site' THEN
3257 
3258             IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN
3259                 l_party_site_id := p_clvl_filter_rec.clvl_find_id;
3260             END IF;
3261 
3262             --    ----------------errorout(' party site id is '||l_party_site_id);
3263             IF l_party_site_id IS NOT NULL THEN
3264                 FOR l_system_csr_rec IN l_csr_get_site_system(l_party_site_Id) LOOP
3265                     IF l_old_party_site_id <> l_system_csr_rec.id1 THEN
3266                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3267                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3268                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3269                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3270 
3271                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.party_site_name;
3272                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3273                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;
3274                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3275                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3276                         rowcount := rowcount + 1;
3277 
3278                         l_old_party_site_id := l_system_csr_rec.id1;
3279                         /* Set parent record */
3280 
3281                     END IF;
3282 
3283                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3284                     x_clvl_selections_tbl(rowcount).rec_name := 'System';
3285                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3286                     x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3287                     x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3288                     x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3289                     x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3290                     x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3291                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3292                     x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;  /** party name **/
3293                     x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3294                     x_clvl_selections_tbl(rowcount).lse_id := 11;
3295                     x_clvl_selections_tbl(rowcount).lse_name := 'System';
3296 
3297 
3298                     rowcount := rowcount + 1;
3299 
3300                 END LOOP;
3301 
3302             ELSE  /* party site id is NULL */
3303                 IF l_default IN  ('CUSTOMER', 'RELATED', 'BOTH') THEN
3304                     get_party_id(p_default => l_default,
3305                                  p_party_id => l_party_id,
3306                                  p_org_id => l_org_id,
3307                                  x_party_id_tbl => l_party_id_tbl);
3308 
3309                     FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
3310                         l_party_id := l_party_id_tbl(i).party_id;
3311 
3312                         FOR l_system_csr_rec IN l_csr_site_system_by_party(l_party_Id) LOOP
3313 
3314                             IF l_old_party_site_id <> l_system_csr_rec.id1 THEN
3315                                 /* Build parent record */
3316                                 x_clvl_selections_tbl(rowcount).rec_type := 'P';
3317                                 x_clvl_selections_tbl(rowcount).rec_name := 'System';
3318                                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3319                                 x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3320                                 x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.party_site_name;
3321                                 x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3322 
3323                                 x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;
3324                                 x_clvl_selections_tbl(rowcount).lse_id := 11;
3325                                 x_clvl_selections_tbl(rowcount).lse_name := 'System';
3326 
3327                                 l_old_party_site_id := l_system_csr_rec.id1;
3328 
3329                                 rowcount := rowcount + 1;
3330 
3331                                 /* Set parent record */
3332 
3333                             END IF;
3334 
3335                             x_clvl_selections_tbl(rowcount).rec_type := 'C';
3336                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3337                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3338                             x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3339                             x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3340                             x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3341                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3342                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3343                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3344                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;  /** party name **/
3345                             x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3346                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3347                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3348 
3349                             rowcount := rowcount + 1;
3350 
3351                         END LOOP; /* Select systems for given customer id */
3352                     END LOOP; /* Select customer id */
3353 
3354                 ELSIF l_default = 'ALL' THEN
3355 
3356                     FOR l_system_csr_rec IN l_csr_get_all_site_systems  LOOP
3357                         l_party_id := l_system_csr_rec.id1;
3358                         IF l_old_party_id <> l_party_id THEN
3359                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3360                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3361                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3362                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3363                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;
3364                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3365                             x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.party_site_name;
3366                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3367                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3368 
3369                             l_old_party_id := l_party_id ;
3370                             rowcount := rowcount + 1;
3371 
3372                             /* Set parent record */
3373 
3374                         END IF;
3375 
3376                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3377                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3378                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3379                         x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3380                         x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3381                         x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3382                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3383                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3384                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3385                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;  /** party name **/
3386                         x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3387                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3388                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3389 
3390                         rowcount := rowcount + 1;
3391 
3392                     END LOOP;  /** Select systems for all customers **/
3393                 END IF ; /** Default <> 'ALL' **/
3394 
3395             END IF;  /** customer id is not null **/
3396 
3397         ELSIF l_filter = 'Party' THEN
3398 
3399             IF l_default = 'CUSTOMER' THEN
3400                 l_party_selected := l_party_id;
3401             ELSE
3402                 l_party_selected := p_clvl_filter_rec.clvl_find_id;
3403             END IF;
3404             --   ----------------errorout(' party selected is '||l_party_selected);
3405             IF l_party_selected IS NOT NULL THEN
3406 
3407                 FOR l_system_csr_rec IN l_csr_get_party_system(l_party_selected) LOOP
3408                     IF rowcount = 1 THEN
3409                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3410                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3411                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3412                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3413                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3414                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3415                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3416                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;
3417                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3418                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3419                         rowcount := rowcount + 1;
3420 
3421                         /* Set parent record */
3422 
3423                     END IF;
3424 
3425                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3426                     x_clvl_selections_tbl(rowcount).rec_name := 'System';
3427                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3428                     x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3429                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3430                     x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3431                     x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3432                     x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3433                     x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3434                     x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** party name **/
3435                     x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3436                     x_clvl_selections_tbl(rowcount).lse_id := 11;
3437                     x_clvl_selections_tbl(rowcount).lse_name := 'System';
3438 
3439                     --                    ----------------errorout(' child record is '||x_clvl_selections_tbl(rowcount).clvl_name);
3440                     rowcount := rowcount + 1;
3441                 END LOOP;
3442 
3443             ELSE  /* party  id is NULL */
3444                 IF l_default IN  ('RELATED', 'BOTH') THEN
3445                     get_party_id(p_default => l_default,
3446                                  p_party_id => l_party_id,
3447                                  p_org_id => l_org_id,
3448                                  x_party_id_tbl => l_party_id_tbl);
3449 
3450 
3451                     FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
3452                         l_party_selected := l_party_id_tbl(i).party_id;
3453                         --                    ----------------errorout(' party selected is '||l_party_selected);
3454                         --                ----------------errorout(' party id is ' ||l_party_selected);
3455                         FOR l_system_csr_rec IN l_csr_get_party_system(l_party_selected) LOOP
3456 
3457                             IF rowcount = 1 THEN
3458                                 x_clvl_selections_tbl(rowcount).rec_type := 'P';
3459                                 x_clvl_selections_tbl(rowcount).rec_name := 'System';
3460                                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3461                                 x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3462                                 x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3463                                 x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3464                                 x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;
3465                                 x_clvl_selections_tbl(rowcount).lse_id := 11;
3466                                 x_clvl_selections_tbl(rowcount).lse_name := 'System';
3467                                 --                      ----------------errorout(' after setting parent record ');
3468                                 --                      ----------------errorout(' parent record is '||x_clvl_selections_tbl(rowcount).party_name);
3469                                 rowcount := rowcount + 1;
3470 
3471                                 /* Set parent record */
3472 
3473                             END IF;
3474 
3475                             x_clvl_selections_tbl(rowcount).rec_type := 'C';
3476                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3477                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3478                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3479                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3480                             x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3481                             x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3482                             x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3483                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3484                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** party name **/
3485                             x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3486                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3487                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3488                             --                    ----------------errorout(' in child rec '||x_clvl_selections_tbl(rowcount).party_name);
3489                             rowcount := rowcount + 1;
3490 
3491                         END LOOP; /* Select systems for given customer id */
3492                     END LOOP; /* Select customer id */
3493 
3494                 ELSIF l_default = 'ALL' THEN
3495 
3496                     FOR l_system_csr_rec IN l_csr_get_all_party_systems  LOOP
3497                         l_party_id := l_system_csr_rec.id1;
3498                         IF l_old_party_id <> l_party_id THEN
3499                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3500                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3501                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3502                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3503                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3504                             x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3505                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3506                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;
3507                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3508                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3509 
3510                             l_old_party_id := l_party_id ;
3511                             --                    ----------------errorout(' parent record is '||x_clvl_selections_tbl(rowcount).id1);
3512                             rowcount := rowcount + 1;
3513 
3514                             /* Set parent record */
3515 
3516                         END IF;
3517 
3518                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3519                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3520                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3521                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3522                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3523                         x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3524                         x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3525                         x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3526                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3527                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** party name **/
3528                         x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3529                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3530                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3531 
3532                         rowcount := rowcount + 1;
3533 
3534                     END LOOP;  /** Select systems for all customers **/
3535                 END IF ; /** Default <> 'ALL' **/
3536 
3537             END IF;  /** customer id is not null **/
3538 
3539         END IF;
3540     END get_system_selections;
3541 
3542     PROCEDURE GetSelections_Prod(p_api_version         IN  NUMBER
3543                                  , p_init_msg_list       IN  VARCHAR2
3544                                  , p_clvl_filter_rec     IN  clvl_filter_rec
3545                                  , x_return_status       OUT NOCOPY VARCHAR2
3546                                  , x_msg_count           OUT NOCOPY NUMBER
3547                                  , x_msg_data            OUT NOCOPY VARCHAR2
3548                                  , x_prod_selections_tbl OUT NOCOPY prod_selections_tbl)
3549     IS
3550     lf_prod_selections_tbl prod_selections_tbl;
3551     rowcount NUMBER := 1;
3552     BEGIN
3553 
3554         ------errorout(' before get_product selections ');
3555         get_product_selection(p_clvl_filter_rec,
3556                               lf_prod_selections_tbl);
3557 
3558         FOR rowcount IN 1 .. lf_prod_selections_tbl.COUNT LOOP
3559 
3560             x_prod_selections_tbl(rowcount).rec_type := lf_prod_selections_tbl(rowcount).rec_type;
3561             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).rec_type);
3562             x_prod_selections_tbl(rowcount).rec_name := 'Item';
3563             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).rec_name);
3564             x_prod_selections_tbl(rowcount).rec_no := rowcount;
3565             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).rec_no);
3566             x_prod_selections_tbl(rowcount).cp_id := lf_prod_selections_tbl(rowcount).cp_id;
3567             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).cp_id);
3568             x_prod_selections_tbl(rowcount).cp_id2 := lf_prod_selections_tbl(rowcount).cp_id2;
3569             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).cp_id2);
3570             x_prod_selections_tbl(rowcount).ser_number := lf_prod_selections_tbl(rowcount).ser_number;
3571             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).ser_number);
3572             x_prod_selections_tbl(rowcount).ref_number := lf_prod_selections_tbl(rowcount).ref_number ;
3573             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).ref_number);
3574             x_prod_selections_tbl(rowcount).quantity := lf_prod_selections_tbl(rowcount).quantity;
3575             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).quantity);
3576             x_prod_selections_tbl(rowcount).orig_net_amt := lf_prod_selections_tbl(rowcount).orig_net_amt;
3577             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).orig_net_amt);
3578             x_prod_selections_tbl(rowcount).price := lf_prod_selections_tbl(rowcount).price;
3579             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).price);
3580             x_prod_selections_tbl(rowcount).inventory_item_id := lf_prod_selections_tbl(rowcount).inventory_item_id;
3581             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).inventory_item_id);
3582             x_prod_selections_tbl(rowcount).site_id := lf_prod_selections_tbl(rowcount).site_id;
3583             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).site_id);
3584             x_prod_selections_tbl(rowcount).uom_code := lf_prod_selections_tbl(rowcount).uom_code;
3585             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).uom_code);
3586             x_prod_selections_tbl(rowcount).name := lf_prod_selections_tbl(rowcount).name;
3587             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).name);
3588             x_prod_selections_tbl(rowcount).display_name := lf_prod_selections_tbl(rowcount).display_name;
3589             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).display_name);
3590             x_prod_selections_tbl(rowcount).description := lf_prod_selections_tbl(rowcount).description;
3591             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).description);
3592             x_prod_selections_tbl(rowcount).model_level := lf_prod_selections_tbl(rowcount).model_level;
3593             x_prod_selections_tbl(rowcount).site_name := lf_prod_selections_tbl(rowcount).site_name;
3594             x_prod_selections_tbl(rowcount).model_level := lf_prod_selections_tbl(rowcount).model_level;
3595             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).site_name);
3596             -- GCHADHA --
3597             -- BUG 4372877 ---
3598             -- 5/25/2005 --
3599             x_prod_selections_tbl(rowcount).ext_reference := lf_prod_selections_tbl(rowcount).ext_reference;
3600             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).ext_reference);
3601             -- END GCHADHA --
3602 
3603 
3604 
3605         END LOOP;
3606 
3607         x_return_status := 'S';
3608         ------errorout(' out of getselections Product PVT ');
3609     END GetSelections_Prod;
3610 
3611 
3612     PROCEDURE GetSelections_other(p_api_version         IN  NUMBER
3613                                   , p_init_msg_list       IN  VARCHAR2
3614                                   , p_clvl_filter_rec     IN  clvl_filter_rec
3615                                   , x_return_status       OUT NOCOPY VARCHAR2
3616                                   , x_msg_count           OUT NOCOPY NUMBER
3617                                   , x_msg_data            OUT NOCOPY VARCHAR2
3618                                   , x_clvl_selections_tbl OUT  NOCOPY clvl_selections_tbl)
3619     IS
3620     l_clvl_selections_tbl  clvl_selections_tbl ;
3621     rowcount NUMBER := 1;
3622     BEGIN
3623 
3624         IF p_clvl_filter_rec.clvl_lse_id = 8 THEN   /* Covered Party */
3625             ------------------errorout(' in party selections ');
3626             get_party_selections(p_clvl_filter_rec,
3627                                  l_clvl_selections_tbl);
3628             --                          ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
3629             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
3630 
3631                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
3632                 --           ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
3633                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
3634                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
3635                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
3636                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
3637                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
3638                 ----------------errorout(x_clvl_selections_tbl(rowcount).id1 );
3639                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
3640                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
3641                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
3642                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
3643                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
3644                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
3645                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
3646                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
3647                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
3648                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
3649                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
3650                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3651                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
3652                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3653                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
3654                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
3655                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
3656                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
3657                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
3658                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
3659 
3660             END LOOP;
3661         ELSIF p_clvl_filter_rec.clvl_lse_id = 35 THEN   /* Covered Customer */
3662             ----------------errorout('in customer selections ');
3663 
3664             get_customer_selections(p_clvl_filter_rec,
3665                                     l_clvl_selections_tbl);
3666             --                            ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
3667             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
3668 
3669                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
3670                 --             ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
3671                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
3672                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
3673                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
3674                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
3675                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
3676 
3677                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
3678                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
3679                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
3680                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
3681                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
3682                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
3683                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
3684                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
3685                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
3686                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
3687                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
3688                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3689                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
3690                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3691                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
3692                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
3693                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
3694                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
3695                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
3696                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
3697 
3698             END LOOP;
3699         ELSIF p_clvl_filter_rec.clvl_lse_id = 10 THEN   /* Covered Site */
3700             --       ----------------errorout('in site selections ');
3701             get_site_selections(p_clvl_filter_rec,
3702                                 l_clvl_selections_tbl);
3703             ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
3704             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
3705 
3706                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
3707                 --           ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
3708                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
3709                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
3710                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
3711                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
3712                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
3713                 ----------------errorout(x_clvl_selections_tbl(rowcount).id1 );
3714                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
3715                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
3716                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
3717                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
3718                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
3719                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
3720                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
3721                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
3722                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
3723                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
3724                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
3725                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3726                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
3727                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3728                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
3729                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
3730                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
3731                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
3732                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
3733                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
3734 
3735             END LOOP;
3736         ELSIF p_clvl_filter_rec.clvl_lse_id = 11 THEN   /* Covered System */
3737 
3738 
3739 
3740             get_system_selections(p_clvl_filter_rec,
3741                                   l_clvl_selections_tbl);
3742 
3743             ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
3744             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
3745 
3746                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
3747                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
3748                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
3749                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
3750                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
3751                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
3752                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
3753                 ----------------errorout(x_clvl_selections_tbl(rowcount).id1 );
3754                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
3755                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
3756                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
3757                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
3758                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
3759                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
3760                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
3761                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
3762                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
3763                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
3764                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
3765                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3766                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
3767                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
3768                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
3769                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
3770                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
3771                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
3772                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
3773                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
3774 
3775             END LOOP;
3776         END IF;
3777 
3778     END GetSelections_other;
3779 
3780 
3781 
3782     FUNCTION get_item_name(p_inventory_item_id IN NUMBER)
3783     RETURN VARCHAR2
3784     IS
3785 
3786     CURSOR l_csr_get_item_name(p_inventory_item_Id IN NUMBER)
3787         IS
3788         SELECT name
3789         FROM OKX_SYSTEM_ITEMS_V
3790         WHERE id1 = p_inventory_item_id
3791         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
3792         AND ROWNUM < 2;
3793 
3794     l_item_name  OKX_SYSTEM_ITEMS_V.name%TYPE;
3795 
3796     BEGIN
3797 
3798         OPEN l_csr_Get_item_name(p_inventory_item_id);
3799         FETCH l_csr_get_item_name INTO l_item_name;
3800         CLOSE l_csr_Get_item_name;
3801 
3802         RETURN l_item_name;
3803 
3804 
3805     END;
3806 
3807 
3808     FUNCTION get_item_desc(p_inventory_item_id IN NUMBER)
3809     RETURN VARCHAR2
3810     IS
3811 
3812     CURSOR l_csr_get_item_desc(p_inventory_item_Id IN NUMBER)
3813         IS
3814         SELECT description
3815         FROM OKX_SYSTEM_ITEMS_V
3816         WHERE id1 = p_inventory_item_id
3817         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
3818         AND ROWNUM < 2;
3819 
3820     l_item_desc OKX_SYSTEM_ITEMS_V.description%TYPE;
3821 
3822     BEGIN
3823 
3824         OPEN l_csr_Get_item_desc(p_inventory_item_id);
3825         FETCH l_csr_get_item_desc INTO l_item_desc;
3826         CLOSE l_csr_Get_item_desc;
3827 
3828         RETURN l_item_desc;
3829 
3830     END;
3831 
3832 
3833     FUNCTION get_item_desc(p_inventory_item_id IN NUMBER,
3834                            p_organization_id   IN NUMBER)
3835     RETURN VARCHAR2
3836     IS
3837 
3838     CURSOR l_csr_get_item_desc(p_inventory_item_Id IN NUMBER,
3839                                p_organization_id IN NUMBER)
3840         IS
3841         SELECT description
3842         FROM OKX_SYSTEM_ITEMS_V
3843         WHERE inventory_item_id = p_inventory_item_id
3844         AND   organization_id = p_organization_id
3845         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
3846         AND ROWNUM < 2;
3847 
3848     l_item_desc MTL_SYSTEM_ITEMS_KFV.description%TYPE;
3849 
3850     BEGIN
3851 
3852         OPEN l_csr_Get_item_desc(p_inventory_item_id, p_organization_id);
3853         FETCH l_csr_get_item_desc INTO l_item_desc;
3854         CLOSE l_csr_Get_item_desc;
3855 
3856         RETURN l_item_desc;
3857 
3858     END;
3859 
3860 
3861     FUNCTION get_item_name(p_inventory_item_id IN NUMBER,
3862                            p_organization_id   IN NUMBER)
3863     RETURN VARCHAR2
3864     IS
3865 
3866     CURSOR l_csr_get_item_name(p_inventory_item_Id IN NUMBER,
3867                                p_organization_id IN  NUMBER)
3868         IS
3869         SELECT concatenated_segments name
3870         FROM MTL_SYSTEM_ITEMS_KFV
3871         WHERE inventory_item_id = p_inventory_item_id
3872         AND   organization_id = p_organization_id
3873         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
3874         AND ROWNUM < 2;
3875 
3876     l_item_name  MTL_SYSTEM_ITEMS_KFV.concatenated_segments%TYPE;
3877 
3878     BEGIN
3879 
3880         OPEN l_csr_Get_item_name(p_inventory_item_id, p_organization_id);
3881         FETCH l_csr_get_item_name INTO l_item_name;
3882         CLOSE l_csr_Get_item_name;
3883 
3884         RETURN l_item_name;
3885 
3886     END;
3887 
3888     /** Code for changing/splitting service lines **/
3889 
3890     PROCEDURE get_rev_distr(p_cle_id  IN NUMBER,
3891                             x_rev_tbl OUT NOCOPY OKS_REV_DISTR_PUB.rdsv_tbl_type)
3892     IS
3893     CURSOR rev_cur IS
3894         SELECT chr_id
3895               , cle_id
3896               , account_class
3897               , code_combination_id
3898               , PERCENT
3899         FROM  oks_rev_distributions
3900         WHERE cle_id = p_cle_id;
3901     i     NUMBER := 1;
3902     BEGIN
3903         FOR rev_rec IN rev_cur
3904             LOOP
3905             x_rev_tbl(i).id := OKC_API.G_MISS_NUM;
3906             x_rev_tbl(i).chr_id := rev_rec.chr_id;
3907             x_rev_tbl(i).account_class := rev_rec.account_class;
3908             x_rev_tbl(i).code_combination_id := rev_rec.code_combination_id;
3909             x_rev_tbl(i).PERCENT := rev_rec.PERCENT;
3910             x_rev_tbl(i).object_version_number := OKC_API.G_MISS_NUM;
3911             x_rev_tbl(i).created_by := OKC_API.G_MISS_NUM;
3912             x_rev_tbl(i).creation_date := OKC_API.G_MISS_DATE;
3913             x_rev_tbl(i).last_updated_by := OKC_API.G_MISS_NUM;
3914             x_rev_tbl(i).last_update_date := OKC_API.G_MISS_DATE;
3915             x_rev_tbl(i).last_update_login := OKC_API.G_MISS_NUM;
3916             i := i + 1;
3917         END LOOP;
3918     END get_rev_distr;
3919 
3920     PROCEDURE create_rev_distr(p_cle_id  IN NUMBER,
3921                                p_rev_tbl IN OUT NOCOPY OKS_REV_DISTR_PUB.rdsv_tbl_type,
3922                                x_status  OUT NOCOPY VARCHAR2)
3923     IS
3924     l_api_version  NUMBER := 1.0;
3925     l_msg_count    NUMBER;
3926     l_msg_data     VARCHAR2(2000);
3927     l_rev_tbl      OKS_REV_DISTR_PUB.rdsv_tbl_type;
3928     i              NUMBER;
3929     BEGIN
3930         i := p_rev_tbl.FIRST;
3931         LOOP
3932             p_rev_tbl(i).cle_id := p_cle_id;
3933             EXIT WHEN i = p_rev_tbl.LAST;
3934             i := p_rev_tbl.NEXT(i);
3935         END LOOP;
3936         OKS_REV_DISTR_PUB.insert_Revenue_Distr
3937         (p_api_version => l_api_version
3938          , x_return_status => x_status
3939          , x_msg_count => l_msg_count
3940          , x_msg_data => l_msg_data
3941          , p_rdsv_tbl => p_rev_tbl
3942          , x_rdsv_tbl => l_rev_tbl);
3943     END create_rev_distr;
3944 
3945     PROCEDURE get_sales_cred(p_cle_id  IN NUMBER,
3946                              x_scrv_tbl OUT NOCOPY OKS_SALES_CREDIT_PUB.scrv_tbl_type)
3947     IS
3948     CURSOR scrv_cur IS
3949         SELECT
3950           PERCENT,
3951           chr_id,
3952           ctc_id,
3953           sales_credit_type_id1,
3954           sales_credit_type_id2
3955         FROM OKS_K_SALES_CREDITS
3956         WHERE cle_id = p_cle_id;
3957     i     NUMBER := 1;
3958     BEGIN
3959         FOR scrv_rec IN scrv_cur
3960             LOOP
3961             x_scrv_tbl(i).id := OKC_API.G_MISS_NUM;
3962             x_scrv_tbl(i).PERCENT := scrv_rec.PERCENT;
3963             x_scrv_tbl(i).chr_id := scrv_rec.chr_id;
3964             x_scrv_tbl(i).ctc_id := scrv_rec.ctc_id;
3965             x_scrv_tbl(i).sales_credit_type_id1 := scrv_rec.sales_credit_type_id1;
3966             x_scrv_tbl(i).sales_credit_type_id2 := scrv_rec.sales_credit_type_id2;
3967             x_scrv_tbl(i).object_version_number := OKC_API.G_MISS_NUM;
3968             x_scrv_tbl(i).created_by := OKC_API.G_MISS_NUM;
3969             x_scrv_tbl(i).creation_date := OKC_API.G_MISS_DATE;
3970             x_scrv_tbl(i).last_updated_by := OKC_API.G_MISS_NUM;
3971             x_scrv_tbl(i).last_update_date := OKC_API.G_MISS_DATE;
3972             i := i + 1;
3973         END LOOP;
3974     END get_sales_cred;
3975 
3976     PROCEDURE create_sales_cred(p_cle_id   IN NUMBER,
3977                                 p_scrv_tbl IN OUT NOCOPY OKS_SALES_CREDIT_PUB.scrv_tbl_type,
3978                                 x_status   OUT NOCOPY VARCHAR2) IS
3979     l_api_version NUMBER := 1.0;
3980     l_msg_count NUMBER;
3981     l_msg_data VARCHAR2(2000);
3982     l_scrv_tbl OKS_SALES_CREDIT_PUB.scrv_tbl_type;
3983     i NUMBER;
3984     BEGIN
3985         i := p_scrv_tbl.FIRST;
3986         LOOP
3987             p_scrv_tbl(i).cle_id := p_cle_id;
3988             EXIT WHEN i = p_scrv_tbl.LAST;
3989             i := p_scrv_tbl.NEXT(i);
3990         END LOOP;
3991         OKS_SALES_CREDIT_PUB.insert_Sales_credit(
3992                                                  p_api_version => l_api_version,
3993                                                  x_return_status => x_status,
3994                                                  x_msg_count => l_msg_count,
3995                                                  x_msg_data => l_msg_data,
3996                                                  p_scrv_tbl => p_scrv_tbl,
3997                                                  x_scrv_tbl => l_scrv_tbl);
3998     END create_sales_cred;
3999 
4000     PROCEDURE update_line_item(p_cle_id   IN NUMBER,
4001                                p_item_id  IN VARCHAR2,
4002                                x_status   OUT NOCOPY VARCHAR2) IS
4003     l_api_version   NUMBER := 1.0;
4004     l_msg_count     NUMBER;
4005     l_msg_data      VARCHAR2(2000);
4006     l_cimv_rec_in   OKC_CONTRACT_ITEM_PUB.cimv_rec_type;
4007     l_cimv_rec_out  OKC_CONTRACT_ITEM_PUB.cimv_rec_type;
4008     CURSOR item_cur IS
4009         SELECT id
4010         FROM   okc_k_items_v
4011         WHERE  cle_id = p_cle_id;
4012     BEGIN
4013         OPEN  item_cur;
4014         FETCH item_cur INTO l_cimv_rec_in.id;
4015         CLOSE item_cur;
4016         l_cimv_rec_in.object1_id1 := p_item_id;
4017         OKC_CONTRACT_ITEM_PUB.update_contract_item(
4018                                                    p_api_version => l_api_version,
4019                                                    x_return_status => x_status,
4020                                                    x_msg_count => l_msg_count,
4021                                                    x_msg_data => l_msg_data,
4022                                                    p_cimv_rec => l_cimv_rec_in,
4023                                                    x_cimv_rec => l_cimv_rec_out);
4024     END update_line_item;
4025 
4026     PROCEDURE prorate_amount(p_cle_id     IN NUMBER,
4027                              p_percent    IN NUMBER,
4028                              p_amount     IN NUMBER,
4029                              x_status     OUT NOCOPY VARCHAR2) IS
4030     CURSOR subline_count IS
4031         SELECT COUNT( * )
4032         FROM  okc_k_lines_b
4033         WHERE cle_id = p_cle_id
4034         AND   lse_id IN (7, 8, 9, 10, 11, 35, 18, 25);
4035 
4036     CURSOR subline_cur IS
4037         SELECT id, price_negotiated
4038         FROM okc_k_lines_b
4039         WHERE cle_id = p_cle_id
4040         AND lse_id IN (7, 8, 9, 10, 11, 35, 18, 25);
4041 
4042     l_total_amt NUMBER := 0;
4043     l_count NUMBER;
4044     i NUMBER;
4045     l_api_version NUMBER := 1.0;
4046     l_msg_count NUMBER;
4047     l_msg_data VARCHAR2(2000);
4048     l_clev_tbl_in  OKC_CONTRACT_PUB.clev_tbl_type;
4049     l_clev_tbl_out OKC_CONTRACT_PUB.clev_tbl_type;
4050     BEGIN
4051         OPEN subline_count;
4052         FETCH subline_count INTO l_count;
4053         CLOSE subline_count;
4054         IF l_count = 0 THEN
4055             x_status := OKC_API.G_RET_STS_SUCCESS;
4056             RETURN;
4057         END IF;
4058         i := 1;
4059         FOR subline IN subline_cur
4060             LOOP
4061             l_clev_tbl_in(i).id := subline.id;
4062             IF i <> l_count THEN
4063                 l_clev_tbl_in(i).price_negotiated := subline.price_negotiated * p_percent / 100.0;
4064             ELSE
4065                 l_clev_tbl_in(i).price_negotiated := p_amount - l_total_amt;
4066             END IF;
4067             l_total_amt := l_total_amt + NVL(l_clev_tbl_in(i).price_negotiated, 0);
4068             i := i + 1;
4069         END LOOP;
4070         OKC_CONTRACT_PUB.update_contract_line(
4071                                               p_api_version => l_api_version,
4072                                               x_return_status => x_status,
4073                                               x_msg_count => l_msg_count,
4074                                               x_msg_data => l_msg_data,
4075                                               p_clev_tbl => l_clev_tbl_in,
4076                                               x_clev_tbl => l_clev_tbl_out);
4077     END prorate_amount;
4078 
4079     PROCEDURE refresh_bill_sch(p_cle_id   IN NUMBER,
4080                                --x_rgp_id   OUT NOCOPY NUMBER,
4081                                x_status   OUT NOCOPY VARCHAR2) IS
4082 
4083     l_rgp_id NUMBER;
4084 
4085     l_inv_rule_id NUMBER;
4086 
4087     CURSOR inv_rule_cur(p_id IN NUMBER) IS
4088         SELECT inv_rule_id
4089         FROM okc_k_lines_b
4090         WHERE id = p_id;
4091 
4092     l_sll_tbl OKS_BILL_SCH.StreamLvl_tbl;
4093     l_bill_sch_out_tbl OKS_BILL_SCH.ItemBillSch_tbl;
4094     l_bill_type OKS_K_LINES_V.billing_schedule_type%TYPE;
4095 
4096 
4097     PROCEDURE Populate_Sll_Table(p_cle_id IN NUMBER, x_sll_tbl OUT NOCOPY OKS_BILL_SCH.StreamLvl_tbl, x_bill_type OUT NOCOPY OKS_K_LINES_V.billing_schedule_type%TYPE)
4098     IS
4099     tbl_index NUMBER := 1;
4100     CURSOR sll_cur(p_cle_id IN NUMBER) IS
4101         SELECT id
4102               , chr_id
4103               , cle_id
4104               , dnz_chr_id
4105               , sequence_no
4106               , uom_code
4107               , start_date
4108               , end_date
4109               , level_periods
4110               , uom_per_period
4111               , advance_periods
4112               , level_amount
4113               , invoice_offset_days
4114               , interface_offset_days
4115               , comments
4116               , due_arr_yn
4117               , amount
4118               , lines_detailed_yn
4119         FROM oks_stream_levels_b
4120         WHERE cle_id = p_cle_id;
4121 
4122     CURSOR get_bill_type_cur(p_cle_id IN  NUMBER) IS
4123         SELECT billing_schedule_type
4124         FROM OKS_K_LINES_V
4125         WHERE cle_id = p_cle_id;
4126 
4127     l_bill_type OKS_K_LINES_V.billing_schedule_type%TYPE;
4128 
4129     BEGIN
4130 
4131         OPEN get_bill_type_cur(p_cle_id);
4132         FETCH get_bill_type_cur INTO l_bill_type;
4133         CLOSE get_bill_type_cur;
4134 
4135         x_bill_type := l_bill_type;
4136         FOR sll_rec IN sll_cur(p_cle_id)
4137             LOOP
4138             x_sll_tbl(tbl_index).Id := sll_rec.id;
4139             x_sll_tbl(tbl_index).chr_Id := sll_rec.chr_id;
4140             x_sll_tbl(tbl_index).cle_id := sll_rec.cle_id;
4141             x_sll_tbl(tbl_index).dnz_chr_id := sll_rec.dnz_chr_id;
4142             x_sll_tbl(tbl_index).sequence_no := sll_rec.sequence_no;
4143             x_sll_tbl(tbl_index).uom_code := sll_rec.uom_code;
4144             x_sll_tbl(tbl_index).start_date := sll_rec.start_date;
4145             x_sll_tbl(tbl_index).end_date := sll_rec.end_date;
4146             x_sll_tbl(tbl_index).level_periods := sll_rec.level_periods;
4147             x_sll_tbl(tbl_index).uom_per_period := sll_rec.uom_per_period;
4148             x_sll_tbl(tbl_index).level_amount := sll_rec.level_amount;
4149             x_sll_tbl(tbl_index).invoice_offset_days := sll_rec.invoice_offset_days;
4150             x_sll_tbl(tbl_index).interface_offset_days := sll_rec.interface_offset_days;
4151             x_sll_tbl(tbl_index).comments := sll_rec.comments;
4152             x_sll_tbl(tbl_index).due_arr_yn := sll_rec.due_arr_yn;
4153             x_sll_tbl(tbl_index).amount := sll_rec.amount;
4154             x_sll_tbl(tbl_index).lines_detailed_yn := sll_rec.lines_detailed_yn;
4155 
4156             tbl_index := tbl_index + 1;
4157         END LOOP;
4158 
4159     END Populate_Sll_Table;
4160 
4161     BEGIN
4162 
4163         OPEN  inv_rule_cur(p_cle_id);
4164         FETCH inv_rule_cur INTO l_inv_rule_id;
4165         CLOSE inv_rule_cur;
4166 
4167 
4168         populate_sll_table (p_cle_id, l_sll_tbl, l_bill_type);
4169 
4170         OKS_BILL_SCH.Create_Bill_Sch_Rules
4171         (p_billing_type => l_bill_type,
4172          p_sll_tbl => l_sll_tbl,
4173          p_invoice_rule_id => l_inv_rule_id,
4174          x_bil_sch_out_tbl => l_bill_sch_out_tbl,
4175          x_return_status => x_status);
4176     END refresh_bill_sch;
4177 
4178 
4179     /************/
4180 
4181     --ADDED FOR Bug# 2364507
4182     FUNCTION GetCoveragetemplate(p_item_id IN NUMBER) RETURN NUMBER
4183     IS
4184 
4185     l_org_id    NUMBER := OKC_CONTEXT.GET_OKC_ORGANIZATION_ID;
4186 
4187     --Bug 5041682, modifed the cursor to have a lower parse time, current query takes 3 seconds
4188     CURSOR l_covtemp_csr IS
4189         --SELECT coverage_template_id
4190         --FROM   okx_system_items_v
4191         --WHERE  id1 = p_item_id
4192         --AND    id2 = OKC_CONTEXT.GET_OKC_ORGANIZATION_ID;
4193         SELECT COVERAGE_SCHEDULE_ID
4194         FROM   mtl_system_items_b
4195         WHERE  inventory_item_id = p_item_id
4196         AND    organization_id = nvl(l_org_id, -99) ;
4197 
4198 
4199     l_covtemp_id   NUMBER := NULL;
4200     BEGIN
4201         OPEN  l_covtemp_csr;
4202         FETCH l_covtemp_csr INTO l_covtemp_id;
4203         CLOSE l_covtemp_csr;
4204         RETURN(l_covtemp_id);
4205     END GetCoverageTemplate;
4206 
4207     FUNCTION GetCoverage(p_cle_id IN NUMBER) RETURN NUMBER
4208     IS
4209     CURSOR l_cov_csr IS
4210         SELECT id
4211         FROM   okc_k_lines_b
4212         WHERE  cle_id = p_cle_id
4213         AND    lse_id IN(2, 20);
4214     l_cov_id   NUMBER := NULL;
4215     BEGIN
4216         OPEN  l_cov_csr;
4217         FETCH l_cov_csr INTO l_cov_id;
4218         CLOSE l_cov_csr;
4219         RETURN(l_cov_id);
4220     END GetCoverage;
4221 
4222     PROCEDURE calculate_tax(p_chr_id                   NUMBER,
4223                             p_amt                      NUMBER,
4224                             p_cle_id                   NUMBER,
4225                             x_return_status OUT NOCOPY VARCHAR2,
4226                             x_msg_data      OUT NOCOPY VARCHAR2,
4227                             x_msg_count     OUT NOCOPY NUMBER,
4228                             x_tax_value     OUT NOCOPY NUMBER,
4229                             x_AMOUNT_INCLUDES_TAX_FLAG OUT NOCOPY VARCHAR2,
4230                             x_total OUT NOCOPY NUMBER)
4231     IS
4232     l_calculate_tax            VARCHAR2(150);
4233     -- p_contract_line_rec        OKS_QP_INT_PVT.G_LINE_REC_TYPE;
4234     L_INDEX1                   BINARY_INTEGER;
4235     L_INDEX2                   BINARY_INTEGER;
4236     l_msg_count                NUMBER;
4237     l_msg_data                 VARCHAR2(2000);
4238     l_return_status            VARCHAR2(1) := 'S';
4239     G_RAIL_REC                 OKS_TAX_UTIL_PVT.ra_rec_type;
4240     l_UNIT_SELLING_PRICE       G_RAIL_REC.UNIT_SELLING_PRICE%TYPE;
4241     l_QUANTITY                 G_RAIL_REC.QUANTITY%TYPE;
4242     l_sub_total                G_RAIL_REC.AMOUNT%TYPE;
4243     l_total_amt                G_RAIL_REC.AMOUNT%TYPE;
4244     l_Tax_Code                 G_RAIL_REC.TAX_CODE%TYPE;
4245     l_TAX_RATE                 G_RAIL_REC.TAX_RATE%TYPE;
4246     l_total                    G_RAIL_REC.AMOUNT%TYPE;
4247     l_Tax_Value                G_RAIL_REC.TAX_VALUE%TYPE;
4248     l_AMOUNT_INCLUDES_TAX_FLAG G_RAIL_REC.AMOUNT_INCLUDES_TAX_FLAG%TYPE;
4249     l_price_negotiated         G_RAIL_REC.AMOUNT%TYPE;
4250     l_lse_id                   NUMBER;
4251     BEGIN
4252         G_RAIL_REC.AMOUNT := p_amt;
4253         OKS_TAX_UTIL_PVT.Get_Tax
4254         (
4255          p_api_version => 1.0,
4256          p_init_msg_list => OKC_API.G_TRUE,
4257          p_chr_id => p_chr_id,
4258          p_cle_id => p_cle_id,
4259          px_rail_rec => G_RAIL_REC,
4260          x_msg_count => l_msg_count,
4261          x_msg_data => l_msg_data,
4262          x_return_status => l_return_status
4263          );
4264 
4265         IF (l_return_status = 'S') THEN
4266 
4267             l_UNIT_SELLING_PRICE := G_RAIL_REC.UNIT_SELLING_PRICE;
4268             l_QUANTITY := G_RAIL_REC.QUANTITY;
4269             l_sub_total := G_RAIL_REC.AMOUNT;
4270             l_AMOUNT_INCLUDES_TAX_FLAG := G_RAIL_REC.AMOUNT_INCLUDES_TAX_FLAG;
4271             l_Tax_Code := G_RAIL_REC.TAX_CODE;
4272             l_TAX_RATE := G_RAIL_REC.TAX_RATE ;
4273             l_Tax_Value := G_RAIL_REC.TAX_VALUE;
4274 
4275             IF NVL(l_AMOUNT_INCLUDES_TAX_FLAG, 'N') = 'Y' THEN
4276                 l_tax_value := 0;
4277 
4278                 l_total := l_sub_total + l_Tax_Value;
4279             ELSE
4280                 l_total := l_sub_total + l_Tax_Value;
4281                 l_AMOUNT_INCLUDES_TAX_FLAG := 'N';
4282             END IF;
4283             x_total := l_total;
4284             x_Tax_Value := l_Tax_Value;
4285             x_AMOUNT_INCLUDES_TAX_FLAG := l_AMOUNT_INCLUDES_TAX_FLAG;
4286             x_return_status := l_return_status;
4287             x_msg_count := l_msg_count;
4288             x_msg_data := l_msg_data;
4289         ELSE
4290             x_return_status := l_return_status;
4291             x_msg_count := l_msg_count;
4292             x_msg_data := l_msg_data;
4293         END IF;
4294 
4295     END calculate_tax;
4296 
4297 
4298     FUNCTION GetFormattedInvoiceText(p_item_desc  IN VARCHAR2
4299                                      , p_start_date IN DATE
4300                                      , p_end_date   IN DATE) RETURN VARCHAR2
4301     IS
4302     BEGIN
4303         RETURN(SUBSTR(p_item_desc || ':' || p_start_date || ':' || p_end_date, 1, 450));
4304     END GetFormattedInvoiceText;
4305 
4306     PROCEDURE UpdateIRTRule(p_chr_id        IN  NUMBER
4307                             , p_cle_id        IN  NUMBER
4308                             , p_invoice_text  IN  VARCHAR2
4309                             , p_api_version   IN  NUMBER
4310                             , p_init_msg_list IN  VARCHAR2
4311                             , x_return_status OUT NOCOPY VARCHAR2
4312                             , x_tax_value     OUT NOCOPY NUMBER
4313                             , x_AMOUNT_INCLUDES_TAX_FLAG OUT NOCOPY VARCHAR2
4314                             , x_total         OUT NOCOPY NUMBER)
4315 
4316     IS
4317 
4318     l_khrv_tbl OKS_CONTRACT_HDR_PUB.khrv_tbl_type;
4319     lx_khrv_tbl OKS_CONTRACT_HDR_PUB.khrv_tbl_type;
4320 
4321     l_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
4322     lx_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
4323 
4324     CURSOR l_get_khr_id(p_chr_id IN NUMBER)
4325         IS
4326         SELECT id, object_version_number --BUG#4066428 hkamdar 01/21/05 added object_version_number
4327         FROM OKS_K_HEADERS_V
4328         WHERE chr_id = p_chr_id;
4329 
4330     CURSOR l_get_kln_id(p_dnz_chr_id IN NUMBER, p_cle_id IN NUMBER)
4331         IS
4332         SELECT id, object_version_number
4333         FROM OKS_K_LINES_V
4334         WHERE dnz_chr_id = p_dnz_chr_id
4335         AND cle_id = p_cle_id;
4336 
4337     /** Get tax values for each line for given contract id **/
4338     CURSOR l_get_tot_tax(p_dnz_chr_id IN NUMBER)
4339         IS
4340         SELECT cle.id, SUM(kln.tax_amount)
4341         FROM OKS_K_LINES_V kln, OKC_K_LINES_V cle
4342         WHERE cle.dnz_chr_id = p_dnz_chr_id
4343         AND cle.cle_id IS NULL
4344         AND kln.cle_id = cle.id;
4345 
4346 
4347     /*** Get sum of taxes at subline level **/
4348     CURSOR l_get_tot_tax_subline(p_dnz_chr_id IN NUMBER, p_cle_id IN NUMBER)
4349         IS
4350         SELECT MAX(kln.tax_amount)
4351         FROM OKS_K_LINES_V kln, OKC_K_LINES_V cle
4352         WHERE cle.dnz_chr_id = p_dnz_chr_id
4353         AND cle.cle_id = p_cle_id
4354         AND kln.cle_id = cle.id;
4355 
4356 
4357     l_return_status  VARCHAR2(1) := G_RET_STS_SUCCESS;
4358     l_msg_count      NUMBER;
4359     l_msg_data       VARCHAR2(2000);
4360 
4361     l_object_version_number NUMBER;
4362     l_khr_id         OKS_K_HEADERS_V.id%TYPE;
4363     l_kln_id         OKS_K_LINES_V.id%TYPE;
4364     l_validate_yn    VARCHAR2(1);
4365     --BUG#4066428 hkamdar 01/21/05 added object_version_number
4366     l_hdr_object_ver_num    OKS_K_HEADERS_V.object_version_number%TYPE;
4367 
4368     --LLC
4369 
4370     CURSOR	get_topline_tax_amt_csr (p_cle_id IN NUMBER) IS
4371         SELECT	nvl(SUM(nvl(tax_amount, 0)), 0)
4372         FROM    okc_k_lines_b cle, oks_k_lines_b sle
4373         WHERE   cle.cle_id = p_cle_id
4374         AND     cle.lse_id IN (7, 8, 9, 10, 11, 18, 25, 35)
4375         AND     cle.id = sle.cle_id
4376         AND     cle.dnz_chr_id = sle.dnz_chr_id
4377         AND     cle.date_cancelled IS NULL;
4378 
4379     CURSOR get_hdr_tax_amt_csr (p_chr_id IN NUMBER) IS
4380         SELECT  nvl(SUM(nvl(tax_amount, 0)), 0)
4381         FROM    okc_k_lines_b cle, oks_k_lines_b sle
4382         WHERE   cle.dnz_chr_id = p_chr_id
4383         AND     cle.lse_id IN (1, 12, 14, 19, 46)
4384         AND     cle.cle_id IS NULL
4385         AND     cle.id = sle.cle_id
4386         AND     cle.dnz_chr_id = sle.dnz_chr_id;
4387 
4388 
4389     l_topline_tax_amt        NUMBER;
4390     l_hdr_tax_amt               NUMBER;
4391 
4392     --LLC
4393 
4394     BEGIN
4395 
4396 
4397 
4398         OPEN l_get_kln_id(p_chr_id, p_cle_id);
4399         FETCH l_get_kln_id INTO l_kln_id, l_object_version_number;
4400         CLOSE l_get_kln_id;
4401 
4402         --LLC
4403 
4404         OPEN get_topline_tax_amt_csr(p_cle_id);
4405         FETCH get_topline_tax_amt_csr INTO l_topline_tax_amt;
4406         CLOSE get_topline_tax_amt_csr;
4407 
4408         --LLC
4409 
4410         l_klnv_tbl(1).id := l_kln_id;
4411         l_klnv_tbl(1).cle_id := p_cle_id;
4412         l_klnv_tbl(1).tax_amount := l_topline_tax_amt; --LLC
4413         l_klnv_tbl(1).invoice_text := p_invoice_text;
4414         l_klnv_tbl(1).tax_inclusive_yn := x_amount_includes_tax_flag;
4415         l_klnv_tbl(1).object_Version_number := l_object_version_number ;
4416 
4417 
4418         OKS_CONTRACT_LINE_PUB.update_line(
4419                                           p_api_version => p_api_version,
4420                                           p_init_msg_list => p_init_msg_list,
4421                                           x_return_status => l_return_status,
4422                                           x_msg_count => l_msg_count,
4423                                           x_msg_data => l_msg_data,
4424                                           p_klnv_tbl => l_klnv_tbl,
4425                                           x_klnv_tbl => lx_klnv_tbl,
4426                                           p_validate_yn => l_validate_yn);
4427 
4428 
4429 
4430         x_return_status := l_return_status;
4431 
4432 
4433 
4434         OPEN l_get_khr_id(p_chr_id);
4435         FETCH l_get_khr_id INTO l_khr_id,
4436         l_hdr_object_ver_num; --BUG#4066428 hkamdar 01/21/05 added object_version_number
4437         CLOSE l_get_khr_id;
4438 
4439         --LLC
4440 
4441         OPEN get_hdr_tax_amt_csr(p_chr_id);
4442         FETCH get_hdr_tax_amt_csr INTO l_hdr_tax_amt;
4443         CLOSE get_hdr_tax_amt_csr;
4444 
4445         --LLC
4446 
4447         l_khrv_tbl(1).id := l_khr_id;
4448         l_khrv_tbl(1).chr_id := p_chr_id;
4449         l_khrv_tbl(1).tax_amount := l_hdr_tax_amt; --LLC
4450         --BUG#4066428 hkamdar 01/21/05 added object_version_number
4451         l_khrv_tbl(1).object_version_number := l_hdr_object_ver_num;
4452 
4453 
4454         OKS_CONTRACT_HDR_PUB.update_header(p_api_version => p_api_version,
4455                                            p_init_msg_list => p_init_msg_list,
4456                                            x_return_status => l_return_status,
4457                                            x_msg_count => l_msg_count,
4458                                            x_msg_data => l_msg_data,
4459                                            p_khrv_tbl => l_khrv_tbl,
4460                                            x_khrv_tbl => lx_khrv_tbl,
4461                                            p_validate_yn => l_validate_yn);
4462 
4463         --errorout('After Update header in UpdateIRTRule-'||l_return_status);
4464         --BUG#4066428 hkamdar 01/21/05
4465         x_return_status := l_return_status;
4466         --End BUG#4066428
4467 
4468         IF l_return_status <> 'S' THEN
4469             RETURN;
4470         END IF;
4471 
4472 
4473     END UpdateIRTRule;
4474 
4475     /****************/
4476 
4477     PROCEDURE UpdateIRTRule_Subline(p_cle_id        IN  NUMBER
4478                                     , p_item_desc     IN  VARCHAR2
4479                                     , p_start_date    IN  DATE
4480                                     , p_end_date      IN  DATE
4481                                     , x_return_status OUT NOCOPY VARCHAR2
4482                                     )
4483     IS
4484 
4485     l_klnv_tbl_in OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
4486     lx_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
4487 
4488 
4489     CURSOR l_cle_csr(p_cle_id IN NUMBER) IS
4490         SELECT cle.lse_id
4491              , cle.id line_id
4492              , cle.start_date
4493              , cle.end_date
4494              , cle.price_negotiated amt
4495              , cle.dnz_chr_id chr_id
4496              , kln.id kln_id
4497              , kln.object_version_number
4498         FROM okc_k_lines_b cle,
4499              oks_k_lines_b kln
4500         WHERE cle.cle_id = p_cle_id
4501         AND  kln.cle_id = cle.id
4502         AND  lse_id NOT IN (2, 15, 20, 46);
4503 
4504 
4505     l_cle_rec       l_cle_csr%ROWTYPE;
4506     l_msg_count     NUMBER;
4507     l_msg_data      VARCHAR2(2000);
4508     l_init_msg_list  VARCHAR2(1000);
4509     l_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
4510     l_total                   NUMBER;
4511     l_Tax_Value                NUMBER;
4512     l_AMOUNT_INCLUDES_TAX_FLAG VARCHAR2(1);
4513     l_validate_yn   VARCHAR2(1);
4514 
4515     FUNCTION GetFormattedInvoiceText(p_cle_id      IN NUMBER
4516                                      , p_start_date  IN DATE
4517                                      , p_end_date    IN DATE
4518                                      , p_item_desc   IN VARCHAR2
4519                                      , p_lse_id      IN NUMBER) RETURN VARCHAR2
4520     IS
4521     CURSOR l_item_csr IS
4522         SELECT jtot_object1_code
4523               , object1_id1
4524               , object1_id2
4525               , number_of_items
4526         FROM  okc_k_items
4527         WHERE cle_id = p_cle_id;
4528     l_object_code             okc_k_items.jtot_object1_code%TYPE;
4529     l_object1_id1             okc_k_items.object1_id1%TYPE;
4530     l_object1_id2             okc_k_items.object1_id2%TYPE;
4531     l_no_of_items             okc_k_items.number_of_items%TYPE;
4532     l_name                    VARCHAR2(2000);
4533     l_desc                    VARCHAR2(2000);
4534     l_formatted_invoice_text  VARCHAR2(2000);
4535     BEGIN
4536         OPEN  l_item_csr;
4537         FETCH l_item_csr INTO l_object_code, l_object1_id1, l_object1_id2, l_no_of_items;
4538         CLOSE l_item_csr;
4539 
4540         IF l_object_code IS NULL THEN
4541             RETURN(NULL);
4542         END IF;
4543 
4544         OKC_UTIL.GET_NAME_DESC_FROM_JTFV
4545         (p_object_code => l_object_code
4546          , p_id1 => l_object1_id1
4547          , p_id2 => l_object1_id2
4548          , x_name => l_name
4549          , x_description => l_desc);
4550         IF p_lse_id IN(8, 10, 11, 35) THEN
4551             l_formatted_invoice_text := SUBSTR(p_item_desc || ':' || l_no_of_items || ':' || l_desc || ':' || p_start_date || ':' || p_end_date, 1, 450);
4552         ELSE
4553             IF fnd_profile.VALUE('OKS_ITEM_DISPLAY_PREFERENCE') = 'DISPLAY_DESC' THEN
4554                 l_desc := l_desc;
4555             ELSE
4556                 l_desc := l_name;
4557             END IF;
4558             l_formatted_invoice_text := SUBSTR(p_item_desc || ':' || l_no_of_items || ':' || l_desc || ':' || p_start_date || ':' || p_end_date, 1, 450);
4559         END IF;
4560         RETURN(l_formatted_invoice_text);
4561     END GetFormattedInvoiceText;
4562 
4563 
4564 
4565     BEGIN NULL;
4566 
4567         OPEN  l_cle_csr(p_cle_id);
4568         LOOP
4569             FETCH l_cle_csr INTO l_cle_rec;
4570             EXIT WHEN l_cle_csr%NOTFOUND;
4571             l_klnv_tbl_in(1).cle_id := l_cle_rec.line_id;
4572             l_klnv_tbl_in(1).id := l_cle_rec.kln_id;
4573             l_klnv_tbl_in(1).object_version_number := l_cle_rec.object_version_number;
4574             l_klnv_tbl_in(1).invoice_text := GetFormattedInvoiceText
4575             (l_cle_rec.line_id
4576              , l_cle_rec.start_date
4577              , l_cle_rec.end_date
4578              , p_item_desc
4579              , l_cle_rec.lse_id);
4580 
4581             --*
4582             calculate_tax(p_chr_id => l_cle_rec.chr_id,
4583                           p_amt => l_cle_rec.amt,
4584                           p_cle_id => l_cle_rec.line_id,
4585                           x_return_status => l_return_status,
4586                           x_msg_data => l_msg_data,
4587                           x_msg_count => l_msg_count,
4588                           x_tax_value => l_tax_value,
4589                           x_AMOUNT_INCLUDES_TAX_FLAG => l_AMOUNT_INCLUDES_TAX_FLAG,
4590                           x_total => l_total);
4591             --errorout('After Calculate Tax in UpdateIRTRule_Subline-'||l_return_status);
4592             --BUG#4066428 hkamdar 01/21/05
4593             x_return_status := l_return_status;
4594             --End BUG#4066428
4595 
4596             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4597                 x_return_status := l_return_status;
4598                 RAISE G_ERROR;
4599             END IF;
4600             l_klnv_tbl_in(1).tax_amount := l_tax_value;
4601             l_klnv_tbl_in(1).tax_inclusive_yn := l_AMOUNT_INCLUDES_TAX_FLAG;
4602             --      l_rulv_tbl_in(1).rule_information6 := l_total;
4603 
4604 
4605 
4606             oks_contract_line_pub.update_line (
4607                                                p_api_version => 1.0,
4608                                                p_init_msg_list => l_init_msg_list,
4609                                                x_return_status => l_return_status,
4610                                                x_msg_count => l_msg_count,
4611                                                x_msg_data => l_msg_data,
4612                                                p_klnv_tbl => l_klnv_tbl_in,
4613                                                x_klnv_tbl => lx_klnv_tbl,
4614                                                p_validate_yn => l_validate_yn) ;
4615             --errorout('After Update Line in UpdateIRTRule_Subline-'||l_return_status);
4616         END LOOP;
4617         CLOSE l_cle_csr;
4618         x_return_status := l_return_status;
4619 
4620     END UpdateIRTRule_Subline;
4621 
4622 
4623     --ADDED FOR Bug# 2364507
4624 
4625     PROCEDURE update_header_amount(p_cle_id IN NUMBER,
4626                                    x_status  OUT NOCOPY VARCHAR2) IS
4627     l_api_version  CONSTANT NUMBER := 1.0;
4628     l_init_msg_list VARCHAR2(2000) := OKC_API.G_FALSE;
4629     l_return_status VARCHAR2(1);
4630     l_msg_count  NUMBER;
4631     l_msg_data  VARCHAR2(2000);
4632     l_msg_index_out NUMBER;
4633     l_chrv_tbl_in             okc_contract_pub.chrv_tbl_type;
4634     l_chrv_tbl_out            okc_contract_pub.chrv_tbl_type;
4635 
4636     CURSOR total_amount(p_chr_id IN NUMBER) IS
4637         SELECT nvl(SUM(price_negotiated), 0) SUM
4638         FROM okc_k_lines_b
4639         WHERE dnz_chr_id = p_chr_id
4640         AND lse_id IN (7, 8, 9, 10, 11, 35, 13, 18, 25)
4641         AND date_cancelled IS NULL; --ignore cancelled sublines
4642 
4643     BEGIN
4644         x_status := OKC_API.G_RET_STS_SUCCESS;
4645         IF p_cle_id IS NOT NULL THEN
4646             FOR cur_total_amount IN total_amount(g_chr_id)
4647                 LOOP
4648                 l_chrv_tbl_in(1).id := g_chr_id;
4649                 l_chrv_tbl_in(1).estimated_amount := cur_total_amount.SUM;
4650                 okc_contract_pub.update_contract_header (
4651                                                          p_api_version => l_api_version,
4652                                                          p_init_msg_list => l_init_msg_list,
4653                                                          x_return_status => l_return_status,
4654                                                          x_msg_count => l_msg_count,
4655                                                          x_msg_data => l_msg_data,
4656                                                          p_chrv_tbl => l_chrv_tbl_in,
4657                                                          x_chrv_tbl => l_chrv_tbl_out );
4658                 x_status := l_return_status;
4659             END LOOP;
4660         END IF;
4661     END update_header_amount;
4662 
4663     PROCEDURE CopyService(p_api_version   IN  NUMBER
4664                           , p_init_msg_list IN  VARCHAR2
4665                           , p_source_rec    IN  copy_source_rec
4666                           , p_target_tbl    IN  copy_target_tbl
4667                           , x_return_status OUT NOCOPY VARCHAR2
4668                           , x_msg_count     OUT NOCOPY NUMBER
4669                           , x_msg_data      OUT NOCOPY VARCHAR2
4670                           , p_change_status IN VARCHAR2) -- Added an additional flag parameter, p_change_status,
4671     -- to decide whether to allow change of status of sublines
4672     -- of the topline during update service
4673     IS
4674 
4675     CURSOR header_cur IS
4676         SELECT dnz_chr_id, start_date, end_date, object_version_number, lse_id
4677         FROM   okc_k_lines_b
4678         WHERE  id = p_source_rec.cle_id;
4679 
4680     CURSOR get_contract_modifier_cur (p_chr_id NUMBER)
4681         IS
4682         SELECT contract_number_modifier
4683         FROM   okc_k_headers_b
4684         WHERE  id = p_chr_id;
4685 
4686 
4687     l_target_tbl        copy_target_tbl;
4688     idx                 NUMBER;
4689     l_rgp_id            NUMBER;
4690     l_return_status     VARCHAR2(20);
4691     l_rev_tbl           OKS_REV_DISTR_PUB.rdsv_tbl_type;
4692     l_salescr_tbl       OKS_SALES_CREDIT_PUB.scrv_tbl_type;
4693     l_msg_index         NUMBER;
4694     l_msg_data          VARCHAR2(2000);
4695     l_total_pct         NUMBER := 0;
4696     l_rev_found         BOOLEAN := FALSE;
4697     l_scr_found         BOOLEAN := FALSE;
4698     l_top_line_number   NUMBER := 0;
4699     G_ERROR             EXCEPTION;
4700     l_object_version_number  NUMBER;
4701 
4702     --ADDED FOR Bug# 2364507
4703     l_covtemp_id        NUMBER;
4704     l_cov_id            NUMBER;
4705     l_start_date        DATE;
4706     l_end_date          DATE;
4707     --l_ac_rec            OKS_COVERAGES_PUB.ac_rec_type;
4708     l_msg_count         NUMBER;
4709     l_oie_id            okc_operation_instances.id%TYPE;
4710     --ADDED FOR Bug# 2364507
4711     l_select_renewal_flag BOOLEAN;
4712     l_operation_lines_tbl opn_lines_tbl;
4713     l_contract_modifier okc_k_headers_b.contract_number_modifier%TYPE;
4714     l_init_msg_list             VARCHAR2(1000);
4715     l_curr_price_negotiated_amt NUMBER;
4716     l_curr_sum_negotiated_amt   NUMBER;
4717 
4718 
4719     --LLC
4720 
4721     l_curr_cancelled_amt	NUMBER;
4722     l_curr_sum_cancelled_amt	NUMBER;
4723     l_topline_cancelled_amt     NUMBER;
4724     l_prorated_cancelled_amt    NUMBER;
4725     l_adjusted_prorated_amt	NUMBER;
4726     l_cancelled_amt             NUMBER;
4727     l_sum_price_negotiated_lines    NUMBER;
4728     l_sum_cancelled_amt_lines   NUMBER;
4729     l_topline_tax_amount        NUMBER;
4730     l_curr_topline_tax_amt      NUMBER;
4731     l_hdr_tax_amt               NUMBER;
4732     l_curr_hdr_tax_amt          NUMBER;
4733 
4734     --LLC
4735 
4736     l_lse_id                    NUMBER;
4737     l_api_components_tbl        OKS_COPY_CONTRACT_PVT.api_components_tbl;
4738     l_lines_tbl                 OKS_COPY_CONTRACT_PVT.api_lines_tbl;
4739     l_published_line_ids_tbl_i  NUMBER;
4740     l_published_line_ids_tbl    OKS_COPY_CONTRACT_PVT.published_line_ids_tbl;
4741     lx_to_chr_id                NUMBER;
4742 
4743 
4744     /*   CURSOR rule_group_cur(p_cle_id IN NUMBER) IS
4745     SELECT id
4746     FROM  okc_rule_groups_b
4747     WHERE cle_id = p_cle_id; */
4748 
4749     CURSOR item_cur (p_cle_id IN NUMBER) IS
4750         SELECT object1_id1, object1_id2, jtot_object1_code
4751         FROM   okc_k_items
4752         WHERE cle_id = p_cle_id;
4753 
4754     item_rec    item_cur%ROWTYPE;
4755 
4756     --TAX
4757 
4758     CURSOR get_price_negotiated_amt_csr (p_cle_id IN NUMBER) IS
4759         SELECT nvl(SUM(price_negotiated), 0) amt
4760         FROM   okc_k_lines_b
4761         WHERE  cle_id = p_cle_id
4762         AND	   date_cancelled IS NULL; ---Added condition to exclude cancelled sublines
4763 
4764     get_price_negotiated_amt_rec		get_price_negotiated_amt_csr%ROWTYPE;
4765 
4766     CURSOR sum_price_negotiated_lines_csr (p_chr_id NUMBER) IS
4767         SELECT nvl(SUM(price_negotiated), 0) amt
4768         FROM   okc_k_lines_b
4769         WHERE  dnz_chr_id = p_chr_id
4770         AND cle_id IS NULL
4771         AND	 date_cancelled IS NULL; ---Added condition to exclude cancelled lines
4772 
4773     CURSOR l_hdr_curr(p_chr_id IN NUMBER)
4774         IS
4775         SELECT currency_code
4776         FROM   okc_k_headers_b
4777         WHERE  id = p_chr_id;
4778 
4779     l_curr_code  VARCHAR2(3);
4780 
4781     sum_price_negotiated_lines_rec	sum_price_negotiated_lines_csr%ROWTYPE;
4782 
4783     l_total                   NUMBER;
4784     l_Tax_Value                NUMBER;
4785     l_AMOUNT_INCLUDES_TAX_FLAG VARCHAR2(1);
4786 
4787     --LLC CANCELLED_AMOUNT
4788 
4789     CURSOR sum_cancelled_amt_lines_csr (p_chr_id NUMBER) IS
4790         SELECT SUM(nvl(cancelled_amount, 0))
4791         FROM   okc_k_lines_b
4792         WHERE  dnz_chr_id = p_chr_id
4793         AND cle_id IS NULL;
4794 
4795 
4796     CURSOR get_topline_cancelled_amt (p_cle_id IN NUMBER) IS
4797         SELECT nvl(SUM(nvl(price_negotiated, 0)), 0) --BUG FIX 4758886 --Forced to return this query 0 value
4798         FROM  okc_k_lines_b
4799         WHERE cle_id = p_cle_id
4800         AND   date_cancelled IS NOT NULL; --Condition to consider only the cancelled sublines
4801 
4802 
4803 
4804 
4805     BEGIN
4806         l_target_tbl := p_target_tbl;
4807         IF l_target_tbl.COUNT = 0 THEN
4808             x_return_status := OKC_API.G_RET_STS_SUCCESS;
4809             RETURN;
4810         END IF;
4811         OPEN  header_cur;
4812         FETCH header_cur INTO g_chr_id, l_start_date, l_end_date, l_object_version_number, l_lse_id ;
4813         CLOSE header_cur;
4814 
4815         OPEN item_cur (p_source_rec.cle_id);
4816         FETCH item_cur INTO item_rec;
4817         CLOSE item_cur;
4818 
4819         OPEN l_hdr_curr(g_chr_id);
4820         FETCH l_hdr_curr INTO l_curr_code;
4821         CLOSE l_hdr_curr;
4822 
4823 
4824         CreateOperationInstance(p_chr_id => g_chr_id
4825                                 , p_object1_id1 => item_rec.object1_id1
4826                                 , p_object1_id2 => item_rec.object1_id2
4827                                 , p_jtot_object1_code => item_rec.jtot_object1_code
4828                                 , x_return_status => l_return_status
4829                                 , x_oie_id => l_oie_id);
4830         --errorout('After CreateOperationInstance-'||l_return_status);
4831         IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4832             x_return_status := l_return_status;
4833             RAISE G_ERROR;
4834         END IF;
4835 
4836         --First copy the source line to create all target lines.
4837         idx := l_target_tbl.FIRST;
4838         -- The original source line will become the first target line.(so, don't copy)
4839         l_target_tbl(idx).cle_id := p_source_rec.cle_id;
4840         -- If there are more target lines then make copies of the source line for each
4841         -- and update the l_target_tbl with the new line id.
4842 
4843         IF idx <> l_target_tbl.LAST THEN
4844             idx := l_target_tbl.NEXT(idx);
4845             get_rev_distr(p_source_rec.cle_id, l_rev_tbl);
4846             IF l_rev_tbl.COUNT > 0 THEN
4847                 l_rev_found := TRUE;
4848             END IF;
4849             get_sales_cred(p_source_rec.cle_id, l_salescr_tbl);
4850             IF l_salescr_tbl.COUNT > 0 THEN
4851                 l_scr_found := TRUE;
4852             END IF;
4853 
4854             --Fix for bug#2221910 start.  Get Max Of Top Lines.
4855 
4856             SELECT nvl(MAX(to_number(line_number)), 0)
4857             INTO   l_top_line_number
4858             FROM   OKC_K_LINES_B
4859             WHERE  dnz_chr_id = g_chr_id
4860             AND    cle_id IS NULL;
4861             --Fix for bug#2221910 end.
4862 
4863             LOOP
4864 
4865                 /***
4866                 OKC_COPY_CONTRACT_PUB.copy_contract_lines(
4867                 p_api_version    => p_api_version,
4868                 p_init_msg_list  => p_init_msg_list,
4869                 x_return_status  => l_return_status,
4870                 x_msg_count      => x_msg_count,
4871                 x_msg_data       => x_msg_data,
4872                 p_from_cle_id    => p_source_rec.cle_id,
4873                 p_to_chr_id      => g_chr_id,
4874                 x_cle_id         => l_target_tbl(idx).cle_id,
4875                 p_change_status  => p_change_status); -- Added an additional flag parameter, p_change_status,
4876                 -- to decide whether to allow change of status of sublines
4877                 -- of the topline during update service
4878 
4879                 --errorout('After copy_contract_lines-'||l_return_status);
4880                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
4881                 x_return_status := l_return_status;
4882                 RAISE G_ERROR;
4883                 ELSE
4884                 OKS_SETUP_UTIL_PUB.Okscopy
4885                 (p_chr_id => g_chr_id,
4886                 p_cle_id => NULL,
4887                 x_return_status => l_return_status,
4888                 p_upd_line_flag => 'Y',
4889                 p_bill_profile_flag => NULL
4890                 );
4891                 --errorout('After OKSCOPY-'||l_return_status);
4892                 END IF;
4893                 ***/
4894 
4895                 --replaced above call with call to new copy API. This will ensure that all new R12 columns will be correctly copied.
4896                 --Bug 4747648
4897                 l_lines_tbl(1).id := p_source_rec.cle_id;
4898                 l_lines_tbl(1).to_k := NULL;
4899                 l_lines_tbl(1).to_line := NULL;
4900                 l_lines_tbl(1).lse_id := l_lse_id;
4901                 l_lines_tbl(1).line_exists_yn := NULL;
4902                 l_lines_tbl(1).line_exp_yn := 'Y'; -- this will make sure all sublines are copied
4903 
4904                 OKS_COPY_CONTRACT_PVT.copy_components (
4905                                                        p_api_version => p_api_version,
4906                                                        p_init_msg_list => p_init_msg_list,
4907                                                        x_return_status => l_return_status,
4908                                                        x_msg_count => x_msg_count,
4909                                                        x_msg_data => x_msg_data,
4910                                                        p_from_chr_id => g_chr_id,
4911                                                        p_to_chr_id => g_chr_id,
4912                                                        p_contract_number => NULL,
4913                                                        p_contract_number_modifier => NULL,
4914                                                        p_to_template_yn => 'N',
4915                                                        p_components_tbl => l_api_components_tbl,  --empty
4916                                                        p_lines_tbl => l_lines_tbl,
4917                                                        p_change_status_YN => p_change_status,  -- Added an additional flag parameter, p_change_status
4918                                                        -- to decide whether to allow change of status of sublines
4919                                                        -- of the topline during update service
4920                                                        p_return_new_top_line_ID_YN => 'Y',
4921                                                        x_to_chr_id => lx_to_chr_id,
4922                                                        p_published_line_ids_tbl => l_published_line_ids_tbl
4923                                                        );
4924 
4925                 l_published_line_ids_tbl_i := l_published_line_ids_tbl.FIRST;
4926                 l_target_tbl(idx).cle_id := l_published_line_ids_tbl(l_published_line_ids_tbl_i).new_line_id;
4927                 --end Bug 4747648
4928 
4929                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4930                     x_return_status := l_return_status;
4931                     RAISE G_ERROR;
4932                 END IF;
4933 
4934                 --Fix for bug#2221910 start.  Update Top Line Sequence number.
4935 
4936                 l_top_line_number := l_top_line_number + 1;
4937                 UPDATE okc_k_lines_b SET line_number = l_top_line_number
4938                 WHERE  id = l_target_tbl(idx).cle_id;
4939                 --Fix for bug#2221910 end.
4940 
4941                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4942                     x_return_status := l_return_status;
4943                     RAISE G_ERROR;
4944                 END IF;
4945 
4946 
4947 
4948                 /************* Commented out because this is being taken care of by OKSCOPY
4949 
4950                 IF l_rev_found THEN
4951                 create_rev_distr(l_target_tbl(idx).cle_id, l_rev_tbl, l_return_status);
4952                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
4953                 x_return_status := l_return_status;
4954                 RAISE G_ERROR;
4955                 END IF;
4956                 END IF;
4957                 IF l_scr_found THEN
4958                 create_sales_cred(l_target_tbl(idx).cle_id, l_salescr_tbl, l_return_status);
4959                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
4960                 x_return_status := l_return_status;
4961                 RAISE G_ERROR;
4962                 END IF;
4963                 END IF;  **********/
4964 
4965 
4966                 EXIT WHEN idx = l_target_tbl.LAST;
4967                 idx := l_target_tbl.NEXT(idx);
4968             END LOOP;
4969         END IF;
4970         -- Now update each target line with the new item id, amount et cetera.
4971         idx := l_target_tbl.FIRST;
4972         LOOP
4973             update_line_item(l_target_tbl(idx).cle_id, l_target_tbl(idx).item_id, l_return_status);
4974             --errorout('After update_line_item-'||l_return_status);
4975             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
4976                 x_return_status := l_return_status;
4977                 RAISE G_ERROR;
4978             END IF;
4979 
4980             IF l_target_tbl(idx).percentage <> 100 THEN
4981 
4982                 --LLC
4983 
4984                 --Changes to p_amount being passed when prorated_amount procedure is called, so that p_amount
4985                 --also contains prorated cancelled_amount along with prorated price_negotiated of topline
4986                 --the new adjdusted prorated amount is stored in l_adjusted_prorated_amt
4987 
4988                 OPEN get_topline_cancelled_amt(l_target_tbl(idx).cle_id);
4989                 FETCH get_topline_cancelled_amt INTO l_topline_cancelled_amt;
4990                 CLOSE get_topline_cancelled_amt;
4991 
4992                 l_prorated_cancelled_amt := l_topline_cancelled_amt * l_target_tbl(idx).percentage / 100.0;
4993                 l_adjusted_prorated_amt := l_target_tbl(idx).amount + l_prorated_cancelled_amt;
4994 
4995                 prorate_amount(l_target_tbl(idx).cle_id, l_target_tbl(idx).percentage, l_adjusted_prorated_amt, l_return_status);
4996 
4997                 --LLC
4998 
4999                 --errorout('After prorate_amount-'||l_return_status);
5000                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5001                     x_return_status := l_return_status;
5002                     RAISE G_ERROR;
5003                 END IF;
5004 
5005                 refresh_bill_sch(l_target_tbl(idx).cle_id, l_return_status);
5006                 --errorout('After refresh_bill_sch-'||l_return_status);
5007                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5008                     x_return_status := l_return_status;
5009                     RAISE G_ERROR;
5010                 END IF;
5011             END IF;
5012 
5013             -- Start Bug# 2701879
5014             l_contract_modifier := NULL;
5015 
5016             OPEN get_contract_modifier_cur (g_chr_id);
5017             FETCH get_contract_modifier_cur INTO l_contract_modifier;
5018             CLOSE get_contract_modifier_cur;
5019             --Call procedure to get date_renewed of header and lines
5020             --if modifier exists
5021             --
5022             IF l_contract_modifier IS NOT NULL
5023                 THEN
5024                 select_renewal_info
5025                 (p_chr_id => g_chr_id,
5026                  x_operation_lines_tbl => l_operation_lines_tbl
5027                  );
5028                 l_select_renewal_flag := TRUE;
5029             ELSE
5030                 l_select_renewal_flag := FALSE;
5031             END IF;
5032 
5033             -- Start Bug# 2701879
5034 
5035             --ADDED FOR Bug# 2364507
5036             l_cov_id := GetCoverage(l_target_tbl(idx).cle_id);
5037 
5038             IF l_cov_id IS NOT NULL
5039                 THEN
5040                 OKS_COVERAGES_PUB.Undo_Line
5041                 (p_api_version => 1.0
5042                  , p_init_msg_list => 'T'
5043                  , x_return_status => l_return_status
5044                  , x_msg_count => l_msg_count
5045                  , x_msg_data => l_msg_data
5046                  , p_line_id => l_cov_id);
5047                 --errorout('After Undo_Line-'||l_return_status);
5048                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5049                     x_return_status := l_return_status;
5050                     RAISE G_ERROR;
5051                 END IF;
5052             END IF;
5053 
5054             --start bug#2701879
5055             --Call procedure to update date_renewed of header and lines
5056             --if modifier exists
5057             --
5058             IF l_select_renewal_flag
5059                 THEN
5060                 IF l_operation_lines_tbl.COUNT > 0
5061                     THEN
5062                     update_renewal_info
5063                     (p_operation_lines_tbl => l_operation_lines_tbl,
5064                      x_return_status => l_return_status,
5065                      x_msg_count => l_msg_count,
5066                      x_msg_data => l_msg_data
5067                      );
5068                     --errorout('After update_renewal_info-'||l_return_status);
5069                 END IF;
5070             END IF;
5071             --
5072             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5073                 x_return_status := l_return_status;
5074                 RAISE G_ERROR;
5075             END IF;
5076 
5077             --end bug#2701879
5078 
5079             l_covtemp_id := GetCoverageTemplate(l_target_tbl(idx).item_id);
5080 
5081             IF l_covtemp_id IS NOT NULL
5082                 THEN
5083                 /**
5084                 l_ac_rec.svc_cle_id := l_target_tbl(idx).cle_id;
5085                 l_ac_rec.tmp_cle_id := l_covtemp_id;
5086                 l_ac_rec.start_date := l_start_date;
5087                 l_ac_rec.end_date   := l_end_date;
5088 
5089                 OKS_COVERAGES_PUB.create_actual_coverage
5090                 (p_api_version        => 1.0
5091                 ,p_init_msg_list      => 'T'
5092                 ,p_ac_rec_in          => l_ac_rec
5093                 ,x_return_status      => l_return_status
5094                 ,x_msg_count          => l_msg_count
5095                 ,x_msg_data           => l_msg_data
5096                 ,x_actual_coverage_id => l_cov_id);
5097                 --errorout('After create_actual_coverage-'||l_return_status);
5098                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
5099                 x_return_status := l_return_status;
5100                 RAISE G_ERROR;
5101                 END IF;
5102                 **/
5103                 --Bug 4718226: need to create standard coverage to service line after split
5104                 UPDATE oks_k_lines_b
5105                 SET coverage_id = l_covtemp_id,
5106                     standard_cov_yn = 'Y'
5107                 WHERE cle_id = l_target_tbl(idx).cle_id;
5108 
5109 
5110             END IF;
5111             l_covtemp_id := NULL;
5112             l_cov_id := NULL;
5113 
5114             --LLC Earlier: Call made to UpdateIRTRule and then UpdateIRTRule_Subline
5115             --LLC Now: Call made to UpdateIRTRule_Subline and then to UpdateIRTRule
5116 
5117             UpdateIRTRule_Subline(p_cle_id => l_target_tbl(idx).cle_id
5118                                   , p_item_desc => l_target_tbl(idx).item_desc
5119                                   , p_start_date => l_start_date
5120                                   , p_end_date => l_end_date
5121                                   , x_return_status => l_return_status);
5122             --errorout('After UpdateIRTRule_SubLine-'||l_return_status);
5123             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5124                 x_return_status := l_return_status;
5125                 RAISE G_ERROR;
5126             END IF;
5127             --ADDED FOR Bug# 2364507
5128 
5129 
5130             UpdateIRTRule(p_chr_id => g_chr_id
5131                           , p_cle_id => l_target_tbl(idx).cle_id --LLC ealier: p_source_rec.cle_id
5132                           , p_invoice_text => GetFormattedInvoiceText
5133                           (l_target_tbl(idx).item_desc, l_start_date, l_end_date)
5134                           , p_api_version => 1.0
5135                           , p_init_msg_list => l_init_msg_list
5136                           , x_return_status => l_return_status
5137                           , x_tax_value => l_tax_value
5138                           , x_AMOUNT_INCLUDES_TAX_FLAG => l_AMOUNT_INCLUDES_TAX_FLAG
5139                           , x_total => l_total);
5140 
5141             --errorout('After UpdateIRTRule-'||l_return_status);
5142 
5143             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5144                 x_return_status := l_return_status;
5145                 RAISE G_ERROR;
5146             END IF;
5147 
5148 
5149 
5150             --*
5151 
5152             --price_negotiated for the topline
5153 
5154             OPEN get_price_negotiated_amt_csr(l_target_tbl(idx).cle_id);
5155             FETCH get_price_negotiated_amt_csr INTO get_price_negotiated_amt_rec;
5156             CLOSE get_price_negotiated_amt_csr;
5157 
5158             l_curr_price_negotiated_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5159             (get_price_negotiated_amt_rec.amt,
5160              l_curr_code
5161              );
5162 
5163             --LLC
5164 
5165             --CANCELLED_AMOUNT for the topline
5166 
5167             OPEN get_topline_cancelled_amt(l_target_tbl(idx).cle_id);
5168             FETCH get_topline_cancelled_amt INTO l_cancelled_amt;
5169             CLOSE get_topline_cancelled_amt;
5170 
5171 
5172             l_curr_cancelled_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5173             (l_cancelled_amt,
5174              l_curr_code
5175              );
5176             --Updating topline with the price_negotiated and cancelled_amount
5177 
5178             UPDATE okc_k_lines_b
5179             SET	price_negotiated = l_curr_price_negotiated_amt,
5180              cancelled_amount = l_curr_cancelled_amt
5181             WHERE id = l_target_tbl(idx).cle_id;
5182 
5183             --Estimated_amount for the header
5184 
5185             OPEN sum_price_negotiated_lines_csr(g_chr_id);
5186             FETCH sum_price_negotiated_lines_csr INTO l_sum_price_negotiated_lines;
5187             CLOSE sum_price_negotiated_lines_csr;
5188 
5189 
5190             l_curr_sum_negotiated_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5191             (l_sum_price_negotiated_lines,
5192              l_curr_code
5193 
5194              );
5195 
5196             --CANCELLED_AMOUNT for contract
5197 
5198             OPEN sum_cancelled_amt_lines_csr(g_chr_id);
5199             FETCH sum_cancelled_amt_lines_csr INTO l_sum_cancelled_amt_lines;
5200             CLOSE sum_cancelled_amt_lines_csr;
5201 
5202 
5203             l_curr_sum_cancelled_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5204             (l_sum_cancelled_amt_lines,
5205              l_curr_code
5206              );
5207 
5208             --Updating Header with the estimated_amount and cancelled_amount
5209 
5210             UPDATE okc_k_headers_b
5211             SET estimated_amount = l_curr_sum_negotiated_amt,
5212              cancelled_amount = l_curr_sum_cancelled_amt
5213             WHERE id = g_chr_id;
5214 
5215             --LLC
5216 
5217 
5218 
5219             --*
5220             --errorout('Calling CreateOperationlines');
5221             CreateOperationLines(p_chr_id => g_chr_id
5222                                  , p_object_line_id => p_source_rec.cle_id
5223                                  , p_subject_line_id => l_target_tbl(idx).cle_id
5224                                  , p_oie_id => l_oie_id
5225                                  , x_return_status => l_return_status);
5226 
5227             --errorout('After CreateOperationlines-'||l_return_status);
5228             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5229                 x_return_status := l_return_status;
5230                 RAISE G_ERROR;
5231             END IF;
5232             l_total_pct := l_total_pct + l_target_tbl(idx).percentage;
5233             EXIT WHEN idx = l_target_tbl.LAST;
5234             idx := l_target_tbl.NEXT(idx);
5235         END LOOP;
5236         IF l_total_pct <> 100 THEN
5237             update_header_amount(p_source_rec.cle_id, l_return_status);
5238             --errorout('After update_header-'||l_return_status);
5239             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5240                 x_return_status := l_return_status;
5241                 RAISE G_ERROR;
5242             END IF;
5243         END IF;
5244         x_return_status := OKC_API.G_RET_STS_SUCCESS;
5245     EXCEPTION
5246         WHEN G_ERROR THEN
5247             NULL;
5248         WHEN OTHERS THEN
5249             OKC_API.set_message(OKC_API.G_APP_NAME,
5250                                 'OKS_UNEXP_ERROR',
5251                                 'SQLcode',
5252                                 SQLCODE,
5253                                 'SQLerrm',
5254                                 SQLERRM);
5255             -- notify caller of an UNEXPECTED error
5256             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5257     END CopyService;
5258 
5259 
5260     -- Begin modifications for new HZ_CONTACT_POINTS_V2PUB for TCA uptake, aiyengar 11/20/02
5261 
5262 
5263     PROCEDURE Create_Contact_Points
5264     (
5265      p_api_version         IN   NUMBER,
5266      p_init_msg_list       IN   VARCHAR2,
5267      p_commit              IN   VARCHAR2,
5268      P_contact_point_rec   IN   contact_point_rec,
5269      x_return_status       OUT NOCOPY  VARCHAR2,
5270      x_msg_count           OUT NOCOPY  NUMBER,
5271      x_msg_data            OUT NOCOPY  VARCHAR2,
5272      x_contact_point_id    OUT NOCOPY  NUMBER)
5273     IS
5274 
5275     l_contact_point_rec      HZ_CONTACT_POINT_V2PUB.CONTACT_POINT_REC_TYPE;
5276     l_email_rec_type         HZ_CONTACT_POINT_V2PUB.EMAIL_REC_TYPE;
5277     l_phone_rec_type         HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
5278     l_web_rec_type           HZ_CONTACT_POINT_V2PUB.WEB_REC_TYPE ;
5279     l_telex_rec_type         HZ_CONTACT_POINT_V2PUB.TELEX_REC_TYPE;
5280     l_edi_rec_type           HZ_CONTACT_POINT_V2PUB.EDI_REC_TYPE;
5281 
5282     G_ERROR                  EXCEPTION;
5283 
5284     BEGIN
5285 
5286         --commented out intialization for bug#3392035
5287         --l_contact_point_rec.contact_point_id    := FND_API.G_MISS_NUM;
5288 
5289         l_contact_point_rec.contact_point_id := p_contact_point_rec.contact_point_id;
5290         l_contact_point_rec.contact_point_type := p_contact_point_rec.contact_point_type;
5291         l_contact_point_rec.status := p_contact_point_rec.status;
5292         l_contact_point_rec.owner_table_name := p_contact_point_rec.owner_table_name;
5293         l_contact_point_rec.owner_table_id := p_contact_point_rec.owner_table_id;
5294         l_contact_point_rec.primary_flag := p_contact_point_rec.primary_flag;
5295 
5296         l_contact_point_rec.created_by_module := 'OKS_AUTH';
5297 
5298         IF l_contact_point_rec.contact_point_type = 'EMAIL' THEN
5299             l_email_rec_type.email_address := p_contact_point_rec.email_address;
5300         ELSIF l_contact_point_rec.contact_point_type IN('PHONE', 'FAX', 'MOBILE') THEN
5301             IF l_contact_point_rec.contact_point_type = 'PHONE' THEN
5302                 l_phone_rec_type.phone_line_type := 'GEN';
5303             ELSIF l_contact_point_rec.contact_point_type = 'FAX' THEN
5304                 l_contact_point_rec.contact_point_type := 'PHONE';
5305                 l_phone_rec_type.phone_line_type := 'FAX';
5306             ELSIF l_contact_point_rec.contact_point_type = 'MOBILE' THEN -- added for contact creation
5307                 l_contact_point_rec.contact_point_type := 'PHONE'; -- added for contact creation
5308                 l_phone_rec_type.phone_line_type := 'MOBILE'; -- added for contact creation
5309             END IF;
5310             l_phone_rec_type.phone_number := p_contact_point_rec.email_address;
5311             --Added following codition to make area code null if area code having no value 3392035
5312             IF  p_contact_point_rec.area_code IS NULL
5313                 THEN
5314                 l_phone_rec_type.phone_area_code := FND_API.G_MISS_CHAR;
5315             ELSE
5316                 l_phone_rec_type.phone_area_code := p_contact_point_rec.area_code;
5317             END IF;
5318             -- added for contact creation
5319             IF p_contact_point_rec.phone_country_code IS NULL
5320                 THEN
5321                 l_phone_rec_type.phone_country_code := FND_API.G_MISS_CHAR; -- added for contact creation
5322             ELSE
5323                 l_phone_rec_type.phone_country_code := p_contact_point_rec.phone_country_code; -- added for contact creation
5324             END IF;
5325             --contact creation end
5326 
5327         END IF;
5328 
5329         HZ_CONTACT_POINT_V2PUB.create_contact_point (
5330                                                      p_init_msg_list => p_init_msg_list,
5331                                                      p_contact_point_rec => l_contact_point_rec,
5332                                                      p_email_rec => l_email_rec_type,
5333                                                      p_phone_rec => l_phone_rec_type,
5334                                                      x_contact_point_id => x_contact_point_id,
5335                                                      x_return_status => x_return_status,
5336                                                      x_msg_count => x_msg_count,
5337                                                      x_msg_data => x_msg_data
5338                                                      );
5339 
5340         IF x_return_status <> 'S' THEN
5341             RAISE G_ERROR;
5342         END IF;
5343 
5344     EXCEPTION
5345         WHEN G_ERROR THEN
5346             NULL;
5347         WHEN OTHERS THEN
5348             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5349             OKC_API.set_message
5350             (OKC_API.G_APP_NAME,
5351              G_UNEXPECTED_ERROR,
5352              G_SQLCODE_TOKEN,
5353              SQLCODE,
5354              G_SQLERRM_TOKEN,
5355              SQLERRM);
5356     END Create_Contact_Points;
5357 
5358     PROCEDURE Update_Contact_Points
5359     (
5360      p_api_version         IN   NUMBER,
5361      p_init_msg_list       IN   VARCHAR2,
5362      P_commit              IN   VARCHAR2,
5363      P_contact_point_rec   IN   contact_point_rec,
5364      x_return_status       OUT NOCOPY  VARCHAR2,
5365      x_msg_count           OUT NOCOPY  NUMBER,
5366      x_msg_data            OUT NOCOPY  VARCHAR2)
5367     IS
5368     l_object_Version_number  NUMBER := 1 ;
5369     l_contact_point_rec      HZ_CONTACT_POINT_V2PUB.CONTACT_POINT_REC_TYPE;
5370     l_email_rec_type         HZ_CONTACT_POINT_V2PUB.EMAIL_REC_TYPE;
5371     l_phone_rec_type         HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
5372     G_ERROR                  EXCEPTION;
5373 
5374     CURSOR l_cpoint_csr IS
5375         SELECT last_update_date, object_version_number, contact_point_type
5376         FROM   HZ_CONTACT_POINTS
5377         WHERE  contact_point_id = P_contact_point_rec.contact_point_id;
5378 
5379     l_cpoint_rec l_cpoint_csr%ROWTYPE;
5380 
5381     BEGIN
5382 
5383         l_contact_point_rec.contact_point_id := P_contact_point_rec.contact_point_id;
5384 
5385         OPEN  l_cpoint_csr;
5386         FETCH l_cpoint_csr INTO l_cpoint_rec;
5387         CLOSE l_cpoint_csr;
5388 
5389         IF l_cpoint_rec.contact_point_type = 'EMAIL' THEN
5390             l_email_rec_type.email_address := p_contact_point_rec.email_address;
5391         ELSIF l_cpoint_rec.contact_point_type IN ('PHONE', 'FAX') THEN
5392             l_phone_rec_type.phone_number := p_contact_point_rec.email_address;
5393 
5394             --ADDED following condition to make area code null 3392035
5395             IF p_contact_point_rec.area_code IS NULL
5396                 THEN
5397                 l_phone_rec_type.phone_area_code := FND_API.G_MISS_CHAR;
5398             ELSE
5399                 l_phone_rec_type.phone_area_code := p_contact_point_rec.area_code;
5400             END IF;
5401             -- added for contact creation OCT 2004
5402             IF p_contact_point_rec.phone_country_code IS NULL
5403                 THEN
5404                 l_phone_rec_type.phone_country_code := FND_API.G_MISS_CHAR; -- added for contact creation
5405             ELSE
5406                 l_phone_rec_type.phone_country_code := p_contact_point_rec.phone_country_code; -- added for contact creation
5407             END IF;
5408             --contact creation end OCT 2004
5409 
5410         END IF;
5411         l_object_version_number := l_cpoint_rec.object_Version_number;
5412 
5413         HZ_CONTACT_POINT_V2PUB.update_contact_point (
5414                                                      p_init_msg_list => p_init_msg_list,
5415                                                      p_contact_point_rec => l_contact_point_rec,
5416                                                      p_email_rec => l_email_rec_type,
5417                                                      p_phone_rec => l_phone_rec_type,
5418                                                      x_return_status => x_return_status,
5419                                                      x_msg_count => x_msg_count,
5420                                                      x_msg_data => x_msg_data,
5421                                                      p_object_version_number => l_object_version_number
5422                                                      );
5423         IF x_return_status <> 'S' THEN
5424             RAISE G_ERROR;
5425         END IF;
5426 
5427     EXCEPTION
5428         WHEN G_ERROR THEN
5429             NULL;
5430         WHEN OTHERS THEN
5431             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5432             OKC_API.set_message
5433             (OKC_API.G_APP_NAME,
5434              G_UNEXPECTED_ERROR,
5435              G_SQLCODE_TOKEN,
5436              SQLCODE,
5437              G_SQLERRM_TOKEN,
5438              SQLERRM);
5439 
5440     END Update_Contact_Points;
5441 
5442     -- End modifications for new HZ_CONTACT_POINTS_V2PUB for TCA uptake, aiyengar 11/20/02
5443 
5444     PROCEDURE CreateOperationInstance(p_chr_id IN NUMBER
5445                                       , p_object1_id1 IN VARCHAR2
5446                                       , p_object1_id2 IN VARCHAR2
5447                                       , p_jtot_object1_code IN VARCHAR2
5448                                       , x_return_status OUT NOCOPY VARCHAR2
5449                                       , x_oie_id OUT NOCOPY NUMBER)
5450     IS
5451 
5452     CURSOR c_clopn_split_csr IS
5453         SELECT id
5454         FROM   okc_class_operations
5455         WHERE  CLS_CODE = 'SERVICE'
5456         AND    OPN_CODE = 'SPLIT';
5457 
5458     l_split_Id    NUMBER := NULL;
5459 
5460     l_api_version      NUMBER := 1.0;
5461     l_init_msg_list    VARCHAR2(1) := G_TRUE;
5462     l_return_status    VARCHAR2(1) := G_RET_STS_SUCCESS;
5463     l_msg_count        NUMBER;
5464     l_msg_data         VARCHAR2(2000);
5465 
5466     l_oiev_tbl   OKC_OPER_INST_PVT.oiev_tbl_type;
5467     x_oiev_tbl   OKC_OPER_INST_PVT.oiev_tbl_type;
5468 
5469     BEGIN
5470 
5471         OPEN  c_clopn_split_csr;
5472         FETCH c_clopn_split_csr INTO l_split_id;
5473         CLOSE c_clopn_split_csr;
5474         IF l_split_id IS NULL THEN
5475             x_return_status := G_RET_STS_ERROR;
5476             OKC_API.set_message(G_APP_NAME_OKS, 'OKS_CLS_OPN_NOT_FOUND');
5477             RAISE G_ERROR;
5478         END IF;
5479 
5480         l_oiev_tbl(1).cop_id := l_split_id;
5481         l_oiev_tbl(1).status_code := 'PROCESSED';
5482         l_oiev_tbl(1).target_chr_id := p_chr_id;
5483         l_oiev_tbl(1).object1_id1 := p_object1_id1;
5484         l_oiev_tbl(1).object1_id2 := p_object1_id2;
5485         l_oiev_tbl(1).jtot_object1_code := p_jtot_object1_code;
5486         OKC_OPER_INST_PUB.Create_Operation_Instance
5487         (p_api_version => l_api_version
5488          , p_init_msg_list => l_init_msg_list
5489          , x_return_status => l_return_status
5490          , x_msg_count => l_msg_count
5491          , x_msg_data => l_msg_data
5492          , p_oiev_tbl => l_oiev_tbl
5493          , x_oiev_tbl => x_oiev_tbl);
5494         IF l_return_status <> G_RET_STS_SUCCESS THEN
5495             x_return_status := l_return_status;
5496             RAISE G_ERROR;
5497         END IF;
5498 
5499         --BUG#4066428 hkamdar 01/21/05
5500         x_return_status := l_return_status;
5501         --End BUG#4066428
5502         x_oie_id := x_oiev_tbl(1).id;
5503     EXCEPTION
5504         WHEN G_ERROR THEN
5505             NULL;
5506         WHEN OTHERS THEN
5507             OKC_API.set_message(G_APP_NAME_OKS,
5508                                 'OKS_UNEXP_ERROR',
5509                                 'SQLcode',
5510                                 SQLCODE,
5511                                 'SQLerrm',
5512                                 SQLERRM);
5513             -- notify caller of an UNEXPECTED error
5514             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5515     END CreateOperationInstance;
5516 
5517     PROCEDURE CreateOperationLines(p_chr_id IN NUMBER
5518                                    , p_object_line_id IN NUMBER
5519                                    , p_subject_line_id IN NUMBER
5520                                    , p_oie_id IN NUMBER
5521                                    --BUG#4066428 01/24/05 hkamdar
5522                                    --,x_return_status OUT NOCOPY NUMBER)
5523                                    , x_return_status OUT NOCOPY VARCHAR2)
5524     --End BUG#4066428 01/24/05 hkamdar
5525     IS
5526     l_api_version      NUMBER := 1.0;
5527     l_init_msg_list    VARCHAR2(1) := G_TRUE;
5528     l_return_status    VARCHAR2(1) := G_RET_STS_SUCCESS;
5529     l_msg_count        NUMBER;
5530     l_msg_data         VARCHAR2(2000);
5531     l_olev_tbl   OKC_OPER_INST_PVT.olev_tbl_type;
5532     x_olev_tbl   OKC_OPER_INST_PVT.olev_tbl_type;
5533     BEGIN
5534         --  errorout('In Operation Lines');
5535         l_olev_tbl(1).oie_id := p_oie_id;
5536         l_olev_tbl(1).subject_chr_id := p_chr_id;
5537         l_olev_tbl(1).object_chr_id := p_chr_id;
5538         l_olev_tbl(1).subject_cle_id := p_subject_line_id;
5539         l_olev_tbl(1).object_cle_id := p_object_line_id;
5540         OKC_OPER_INST_PUB.Create_Operation_Line
5541         (p_api_version => l_api_version
5542          , p_init_msg_list => l_init_msg_list
5543          , x_return_status => l_return_status
5544          , x_msg_count => l_msg_count
5545          , x_msg_data => l_msg_data
5546          , p_olev_tbl => l_olev_tbl
5547          , x_olev_tbl => x_olev_tbl);
5548 
5549         --	errorout('After calling Create_Operation_Line in OPLINES-'||l_return_status);
5550         IF l_return_status <> G_RET_STS_SUCCESS THEN
5551             x_return_status := l_return_status;
5552             RAISE G_ERROR;
5553         END IF;
5554 
5555         --BUG#4066428 hkamdar 01/21/05
5556         x_return_status := l_return_status;
5557         --End BUG#4066428
5558         --errorout('End CreateOperationlines');
5559     EXCEPTION
5560         WHEN G_ERROR THEN
5561             NULL;
5562         WHEN OTHERS THEN
5563             OKC_API.set_message(G_APP_NAME_OKS,
5564                                 'OKS_UNEXP_ERROR',
5565                                 'SQLcode',
5566                                 SQLCODE,
5567                                 'SQLerrm',
5568                                 SQLERRM);
5569             -- notify caller of an UNEXPECTED error
5570             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5571     END CreateOperationLines;
5572 
5573 
5574     PROCEDURE CREATE_CII_FOR_SUBSCRIPTION
5575     (
5576      p_api_version   IN NUMBER,
5577      p_init_msg_list IN VARCHAR2,
5578      x_return_status OUT NOCOPY VARCHAR2,
5579      x_msg_count     OUT NOCOPY NUMBER,
5580      x_msg_data      OUT NOCOPY VARCHAR2,
5581      p_cle_id        IN NUMBER,
5582      p_quantity      IN NUMBER DEFAULT 1,
5583      x_instance_id   OUT NOCOPY NUMBER
5584 
5585      )
5586 
5587     IS
5588 
5589     p_instance_rec          CSI_DATASTRUCTURES_PUB.INSTANCE_REC;
5590     p_ext_attrib_values_tbl CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_VALUES_TBL;
5591     p_party_tbl             CSI_DATASTRUCTURES_PUB.PARTY_TBL;
5592     p_account_tbl           CSI_DATASTRUCTURES_PUB.PARTY_ACCOUNT_TBL;
5593     p_pricing_attrib_tbl    CSI_DATASTRUCTURES_PUB.PRICING_ATTRIBS_TBL;
5594     p_org_assignments_tbl   CSI_DATASTRUCTURES_PUB.ORGANIZATION_UNITS_TBL;
5595     p_asset_assignment_tbl  CSI_DATASTRUCTURES_PUB.INSTANCE_ASSET_TBL;
5596     p_txn_rec               CSI_DATASTRUCTURES_PUB.TRANSACTION_REC;
5597 
5598     t_output                VARCHAR2(2000);
5599     t_msg_dummy             NUMBER;
5600 
5601     CURSOR l_get_item_id(p_cle_id IN NUMBER)
5602         IS
5603         SELECT object1_id1, object1_id2, dnz_chr_id, uom_code
5604         FROM   okc_k_items
5605         WHERE  cle_id = p_cle_id;
5606 
5607 
5608     CURSOR l_csr_Get_party_sites(p_party_id IN NUMBER)
5609         IS
5610         SELECT party_site_id
5611         FROM   HZ_PARTY_SITES
5612         WHERE  party_id = p_party_id
5613         AND    identifying_address_flag = 'Y';
5614 
5615     -- Get customer account id
5616     CURSOR l_csr_get_cust_acct_id(p_cle_id IN NUMBER)
5617         IS
5618         SELECT cust_acct_id
5619         FROM okc_k_lines_b
5620         WHERE id = p_cle_id;
5621 
5622 
5623     CURSOR l_Get_party_id(p_cust_acct_id IN NUMBER)
5624         IS
5625         SELECT party_id
5626         FROM   HZ_CUST_ACCOUNTS
5627         WHERE  cust_account_id = p_cust_acct_id;
5628 
5629 
5630     /*** Fetch inventory revision code **/
5631 
5632     CURSOR l_csr_chk_revision_control(p_item_id IN NUMBER, p_organization_id IN NUMBER)
5633         IS
5634         SELECT revision_qty_control_code
5635         FROM mtl_system_items_kfv
5636         WHERE  inventory_item_id = p_item_id
5637         AND    organization_id = p_organization_id;
5638 
5639 
5640     CURSOR l_csr_get_item_revision(p_item_id IN NUMBER, p_organization_id IN NUMBER)
5641         IS
5642         SELECT revision
5643         FROM   MTL_ITEM_REVISIONS_VL
5644         WHERE  inventory_item_id = p_item_id
5645         AND    organization_id = p_organization_id;
5646 
5647 
5648     /* Cursors for traversing logic to get site id */
5649     /*  Fetch ship_to_site_use_id and bill_to_site_use_id */
5650 
5651 
5652     l_inv_item_id   OKX_system_items_v.id1%TYPE;
5653     l_inv_organization_id   NUMBER;
5654     l_dnz_chr_id     NUMBER;
5655     l_party_id       NUMBER;
5656     l_uom            OKC_K_ITEMS.uom_code%TYPE;
5657     l_party_site_id  HZ_PARTY_SITES.party_site_id%TYPE;
5658     l_rgp_id         OKC_RULE_GROUPS_B.id%TYPE;
5659     l_cust_acct_id   OKX_CUSTOMER_ACCOUNTS_V.id1%TYPE;
5660 
5661 
5662     l_revision_control_yn    MTL_SYSTEM_ITEMS_KFV.revision_qty_control_code%TYPE;
5663     l_revision       MTL_ITEM_REVISIONS_VL.revision%TYPE;
5664     l_ship_to_site_use_id   OKC_K_HEADERS_B.ship_to_site_use_id%TYPE;
5665     l_bill_to_site_use_id   OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
5666 
5667     FUNCTION ship_to(p_cle_id IN NUMBER)
5668     RETURN NUMBER
5669     IS
5670     CURSOR l_csr_get_shipto_billto(p_cle_id IN NUMBER)
5671         IS
5672         SELECT ship_to_site_use_id, bill_to_site_use_id
5673         FROM   okc_k_lines_b
5674         WHERE  id = p_cle_id;
5675 
5676 
5677     CURSOR l_csr_partysite_from_custsite(p_shipto_or_billto IN NUMBER)
5678         IS
5679         SELECT party_site_id
5680         FROM okx_cust_site_uses_v
5681         WHERE id1 = p_shipto_or_billto ;
5682 
5683     l_shipto             NUMBER;
5684     l_billto             NUMBER;
5685     l_shipto_or_billto   NUMBER;
5686     l_party_site         NUMBER;
5687 
5688     BEGIN
5689 
5690         OPEN l_csr_get_shipto_billto(p_cle_id);
5691         FETCH l_csr_get_shipto_billto INTO l_shipto, l_billto;
5692         CLOSE l_csr_get_shipto_billto;
5693 
5694         IF l_shipto IS NOT NULL THEN
5695             l_shipto_or_billto := l_shipto;
5696         ELSIF l_billto IS NOT NULL THEN
5697             l_shipto_or_billto := l_billto;
5698         END IF;
5699 
5700         OPEN l_csr_partysite_from_custsite(l_shipto_or_billto);
5701         FETCH l_csr_partysite_from_custsite INTO l_party_site;
5702         CLOSE l_csr_partysite_from_custsite;
5703 
5704         RETURN l_party_site;
5705 
5706     END;
5707 
5708 
5709     BEGIN
5710 
5711         OPEN  l_get_item_id(p_cle_id);
5712         FETCH l_get_item_id INTO  l_inv_item_id, l_inv_organization_id, l_dnz_chr_id, l_uom;
5713         CLOSE l_get_item_id;
5714 
5715 
5716         OPEN  l_csr_get_cust_acct_id(p_cle_id);
5717         FETCH l_csr_get_cust_acct_id INTO l_cust_acct_id;
5718         CLOSE l_csr_get_cust_acct_id;
5719 
5720 
5721         IF l_cust_acct_id IS NULL THEN
5722 
5723             RAISE G_ERROR;
5724         END IF;
5725 
5726 
5727         OPEN  l_get_party_id(l_cust_acct_id);
5728         FETCH l_get_party_id INTO l_party_id;
5729         CLOSE l_get_party_id;
5730 
5731 
5732 
5733         OPEN  l_csr_get_party_sites(l_party_id);
5734         FETCH l_csr_get_party_sites INTO l_party_site_id;
5735         CLOSE l_csr_get_party_sites;
5736 
5737         -- Code added to check whether item is revision controlled or not
5738         -- And pass revision to create_item_instance api accordingly
5739         -- aiyengar
5740 
5741         OPEN l_csr_chk_revision_control(l_inv_item_id, l_inv_organization_id);
5742         FETCH l_csr_chk_revision_control INTO l_revision_control_yn ;
5743         CLOSE l_csr_chk_revision_control;
5744 
5745         IF l_revision_control_yn = 2 THEN
5746             OPEN l_csr_get_item_revision(l_inv_item_id, l_inv_organization_id);
5747             FETCH l_csr_get_item_revision INTO l_revision;
5748             CLOSE l_csr_get_item_revision;
5749 
5750         ELSE
5751             l_revision := '';
5752 
5753         END IF;
5754 
5755 
5756         ----------errorout(' party id '||l_party_id);
5757         ----------errorout(' inv items id '||l_inv_item_id);
5758         ----------errorout(' organization id '||l_inv_organization_id);
5759         -- dnz chr id  '||l_dnz_chr_id);
5760         p_instance_rec.instance_id := NULL;
5761 
5762         p_instance_rec.instance_number := '';
5763         p_instance_rec.external_reference := '';
5764         p_instance_rec.inventory_item_id := l_inv_item_id;
5765         p_instance_rec.vld_organization_id := l_inv_organization_id;
5766         p_instance_rec.inventory_revision := l_revision;
5767         --  p_instance_rec.inv_master_organization_id := l_inv_organization_id; --NULL;
5768         p_instance_rec.serial_number := NULL;
5769         p_instance_rec.mfg_serial_number_flag := '';
5770         p_instance_rec.quantity := p_quantity;
5771         p_instance_rec.unit_of_measure := l_uom;
5772         p_instance_rec.accounting_class_code := '';
5773         p_instance_rec.instance_condition_id := 1;
5774         p_instance_rec.instance_status_id := NULL;
5775         p_instance_rec.customer_view_flag := '';
5776         p_instance_rec.merchant_view_flag := '';
5777         p_instance_rec.sellable_flag := '';
5778         p_instance_rec.system_id := NULL;
5779         p_instance_rec.instance_type_code := '';
5780         p_instance_rec.active_start_date := '';
5781         p_instance_rec.active_end_date := '';
5782 
5783         p_instance_rec.in_transit_order_line_id := NULL;
5784         p_instance_rec.location_type_code := 'HZ_PARTY_SITES';
5785         p_instance_rec.location_id := NVL(ship_to(p_cle_id), l_party_site_id ) ;
5786 
5787 
5788 
5789         --  p_instance_rec.location_type_code := 'INVENTORY';
5790         -- p_instance_rec.location_id :=207 ;
5791 
5792         --  p_instance_rec.inv_organization_id :=l_inv_organization_id;
5793         --  p_instance_rec.inv_subinventory_name := 'Stores'; --'FGI';
5794 
5795 
5796         p_instance_rec.last_oe_order_line_id := NULL;
5797         p_instance_rec.last_oe_rma_line_id := NULL;
5798         p_instance_rec.last_po_po_line_id := NULL;
5799         p_instance_rec.last_oe_po_number := '';
5800         p_instance_rec.last_wip_job_id := NULL;
5801         p_instance_rec.last_pa_project_id := NULL;
5802         p_instance_rec.last_pa_task_id := NULL;
5803         p_instance_rec.last_oe_agreement_id := NULL;
5804         p_instance_rec.install_date := SYSDATE;
5805         p_instance_rec.manually_created_flag := '';
5806         p_instance_rec.return_by_date := '';
5807         p_instance_rec.actual_return_date := '';
5808         p_instance_rec.creation_complete_flag := '';
5809         p_instance_rec.completeness_flag := '';
5810         p_instance_rec.version_label := '';
5811         p_instance_rec.version_label_description := '';
5812         p_instance_rec.context := '';
5813         p_instance_rec.attribute1 := '';
5814         p_instance_rec.attribute2 := '';
5815         p_instance_rec.attribute3 := '';
5816         p_instance_rec.attribute4 := '';
5817         p_instance_rec.attribute5 := '';
5818         p_instance_rec.attribute6 := '';
5819         p_instance_rec.attribute7 := '';
5820         p_instance_rec.attribute8 := '';
5821         p_instance_rec.attribute9 := '';
5822         p_instance_rec.attribute10 := '';
5823         p_instance_rec.attribute11 := '';
5824         p_instance_rec.attribute12 := '';
5825         p_instance_rec.attribute13 := '';
5826         p_instance_rec.attribute14 := '';
5827         p_instance_rec.attribute15 := '';
5828         p_instance_rec.object_version_number := NULL;
5829         p_instance_rec.last_txn_line_detail_id := NULL;
5830         p_instance_rec.install_location_type_code := '';
5831         p_instance_rec.install_location_id := NULL;
5832         --  p_instance_rec.instance_usage_code := 'IN_TRANSIT';--'INSTALLED';
5833 
5834         p_party_tbl(1).instance_party_id := NULL;
5835         p_party_tbl(1).instance_id := NULL;
5836         p_party_tbl(1).party_source_table := 'HZ_PARTIES';
5837         p_party_tbl(1).party_id := l_party_id ;
5838         p_party_tbl(1).relationship_type_code := 'OWNER';
5839         p_party_tbl(1).contact_flag := 'N';
5840         p_party_tbl(1).contact_ip_id := NULL;
5841         p_party_tbl(1).active_start_date := '';
5842         p_party_tbl(1).active_end_date := '';
5843         p_party_tbl(1).context := '';
5844         p_party_tbl(1).attribute1 := '';
5845         p_party_tbl(1).attribute2 := '';
5846         p_party_tbl(1).attribute3 := '';
5847         p_party_tbl(1).attribute4 := '';
5848         p_party_tbl(1).attribute5 := '';
5849         p_party_tbl(1).attribute6 := '';
5850         p_party_tbl(1).attribute7 := '';
5851         p_party_tbl(1).attribute8 := '';
5852         p_party_tbl(1).attribute9 := '';
5853         p_party_tbl(1).attribute10 := '';
5854         p_party_tbl(1).attribute11 := '';
5855         p_party_tbl(1).attribute12 := '';
5856         p_party_tbl(1).attribute13 := '';
5857         p_party_tbl(1).attribute14 := '';
5858         p_party_tbl(1).attribute15 := '';
5859         p_party_tbl(1).object_version_number := NULL;
5860 
5861         p_account_tbl(1).ip_account_id := NULL;
5862         p_account_tbl(1).parent_tbl_index := 1; --NULL;
5863         p_account_tbl(1).instance_party_id := NULL;
5864         p_account_tbl(1).party_account_id := l_cust_acct_id; --NULL;
5865         p_account_tbl(1).relationship_type_code := 'OWNER';
5866         -- p_account_tbl(1).bill_to_address := 1000;
5867         --  p_account_tbl(1).ship_to_address := 1001;
5868         p_account_tbl(1).active_start_date := '';
5869         p_account_tbl(1).active_end_date := '';
5870         p_account_tbl(1).context := '';
5871         p_account_tbl(1).attribute1 := '';
5872         p_account_tbl(1).attribute2 := '';
5873         p_account_tbl(1).attribute3 := '';
5874         p_account_tbl(1).attribute4 := '';
5875         p_account_tbl(1).attribute5 := '';
5876         p_account_tbl(1).attribute6 := '';
5877         p_account_tbl(1).attribute7 := '';
5878         p_account_tbl(1).attribute8 := '';
5879         p_account_tbl(1).attribute9 := '';
5880         p_account_tbl(1).attribute10 := '';
5881         p_account_tbl(1).attribute11 := '';
5882         p_account_tbl(1).attribute12 := '';
5883         p_account_tbl(1).attribute13 := '';
5884         p_account_tbl(1).attribute14 := '';
5885         p_account_tbl(1).attribute15 := '';
5886         p_account_tbl(1).object_version_number := NULL;
5887 
5888 
5889         p_org_assignments_tbl(1).instance_ou_id := NULL;
5890         p_org_assignments_tbl(1).instance_id := NULL;
5891         p_org_assignments_tbl(1).operating_unit_id := okc_context.get_okc_org_id;
5892         p_org_assignments_tbl(1).relationship_type_code := 'SOLD_FROM';
5893         p_org_assignments_tbl(1).active_start_date := '';
5894         p_org_assignments_tbl(1).active_end_date := '';
5895         p_org_assignments_tbl(1).context := '';
5896         p_org_assignments_tbl(1).attribute1 := '';
5897         p_org_assignments_tbl(1).attribute2 := '';
5898         p_org_assignments_tbl(1).attribute3 := '';
5899         p_org_assignments_tbl(1).attribute4 := '';
5900         p_org_assignments_tbl(1).attribute5 := '';
5901         p_org_assignments_tbl(1).attribute6 := '';
5902         p_org_assignments_tbl(1).attribute7 := '';
5903         p_org_assignments_tbl(1).attribute8 := '';
5904         p_org_assignments_tbl(1).attribute9 := '';
5905         p_org_assignments_tbl(1).attribute10 := '';
5906         p_org_assignments_tbl(1).attribute11 := '';
5907         p_org_assignments_tbl(1).attribute12 := '';
5908         p_org_assignments_tbl(1).attribute13 := '';
5909         p_org_assignments_tbl(1).attribute14 := '';
5910         p_org_assignments_tbl(1).attribute15 := '';
5911         p_org_assignments_tbl(1).object_version_number := NULL;
5912 
5913         p_txn_rec.transaction_id := NULL;
5914         p_txn_rec.transaction_date := SYSDATE; --TO_DATE('');
5915         p_txn_rec.source_transaction_date := SYSDATE; --TO_DATE('');
5916         p_txn_rec.transaction_type_id := 1; --NULL;
5917         p_txn_rec.txn_sub_type_id := NULL;
5918         p_txn_rec.source_group_ref_id := NULL;
5919         p_txn_rec.source_group_ref := '';
5920         p_txn_rec.source_header_ref_id := NULL;
5921         p_txn_rec.source_header_ref := '';
5922         p_txn_rec.source_line_ref_id := NULL;
5923         p_txn_rec.source_line_ref := '';
5924         p_txn_rec.source_dist_ref_id1 := NULL;
5925         p_txn_rec.source_dist_ref_id2 := NULL;
5926         p_txn_rec.inv_material_transaction_id := NULL;
5927         p_txn_rec.transaction_quantity := NULL;
5928         p_txn_rec.transaction_uom_code := 'EA';
5929         p_txn_rec.transacted_by := NULL;
5930         p_txn_rec.transaction_status_code := '';
5931         p_txn_rec.transaction_action_code := '';
5932         p_txn_rec.message_id := NULL;
5933         p_txn_rec.context := '';
5934         p_txn_rec.attribute1 := '';
5935         p_txn_rec.attribute2 := '';
5936         p_txn_rec.attribute3 := '';
5937         p_txn_rec.attribute4 := '';
5938         p_txn_rec.attribute5 := '';
5939         p_txn_rec.attribute6 := '';
5940         p_txn_rec.attribute7 := '';
5941         p_txn_rec.attribute8 := '';
5942         p_txn_rec.attribute9 := '';
5943         p_txn_rec.attribute10 := '';
5944         p_txn_rec.attribute11 := '';
5945         p_txn_rec.attribute12 := '';
5946         p_txn_rec.attribute13 := '';
5947         p_txn_rec.attribute14 := '';
5948         p_txn_rec.attribute15 := '';
5949         p_txn_rec.object_version_number := NULL;
5950 
5951         -- Now call the stored program
5952         csi_item_instance_pub.create_item_instance(
5953                                                    1.0,
5954                                                    'F',
5955                                                    'F',
5956                                                    1,
5957                                                    p_instance_rec,
5958                                                    p_ext_attrib_values_tbl,
5959                                                    p_party_tbl,
5960                                                    p_account_tbl,
5961                                                    p_pricing_attrib_tbl,
5962                                                    p_org_assignments_tbl,
5963                                                    p_asset_assignment_tbl,
5964                                                    p_txn_rec,
5965                                                    x_return_status,
5966                                                    x_msg_count,
5967                                                    x_msg_data);
5968 
5969         -- Output the results
5970 
5971 
5972         IF x_msg_count > 0
5973             THEN
5974             FOR j IN 1 .. x_msg_count LOOP
5975                 fnd_msg_pub.get
5976                 (j
5977                  , FND_API.G_FALSE
5978                  , x_msg_data
5979                  , t_msg_dummy
5980                  );
5981                 t_output := ('Msg'
5982                              || To_Char
5983                              (j
5984                               )
5985                              || ': '
5986                              || x_msg_data
5987                              );
5988                 --  dbms_output.put_line
5989                 --  ( SubStr
5990                 --    ( t_output
5991                 --    , 1
5992                 --    , 255
5993                 --    )
5994                 --   );
5995             END LOOP;
5996         END IF;
5997 
5998         --  dbms_output.put_line('x_return_status = '||x_return_status);
5999         -- dbms_output.put_line('x_msg_count = '||TO_CHAR(x_msg_count));
6000         -- dbms_output.put_line('x_msg_data = '||x_msg_data);
6001         --- dbms_output.put_line('instance_id = '||p_instance_rec.instance_id);
6002 
6003         /* UPDATE csi_item_instances
6004         SET owner_party_source_table = 'OKC_K_ITEMS_B',
6005         security_group_id = p_cle_id
6006         WHERE instance_id = p_instance_rec.instance_id;
6007         */
6008 
6009         x_instance_id := p_instance_rec.instance_id;
6010 
6011         --  --------errorout(' resultant instance id is '||px_instance_id);
6012 
6013     EXCEPTION
6014         WHEN G_ERROR THEN
6015             x_return_status := G_RET_STS_ERROR;
6016             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKS,
6017                                 p_msg_name => 'OKS_NULL_CUSTACCT');
6018     END;
6019 
6020 
6021     PROCEDURE DELETE_CII_FOR_SUBSCRIPTION
6022     (p_api_version   IN NUMBER,
6023      p_init_msg_list IN VARCHAR2,
6024      x_return_status OUT NOCOPY VARCHAR2,
6025      x_msg_count     OUT NOCOPY NUMBER,
6026      x_msg_data      OUT NOCOPY VARCHAR2,
6027      p_instance_id   IN NUMBER
6028      )
6029     IS
6030     BEGIN
6031 
6032         NULL;
6033     END;
6034 
6035 
6036     PROCEDURE line_contact_name_addr(
6037                                      p_object_code       IN  VARCHAR2,
6038                                      p_id1               IN  VARCHAR2,
6039                                      p_id2               IN  VARCHAR2,
6040                                      x_name              OUT NOCOPY VARCHAR2,
6041                                      x_addr              OUT NOCOPY okx_cust_sites_v.description%TYPE)
6042     IS
6043     --l_name              VARCHAR2(255);
6044     l_from_table        VARCHAR2(200);
6045     l_where_clause      VARCHAR2(2000);
6046     l_sql_stmt          VARCHAR2(1000);
6047     l_not_found         BOOLEAN;
6048     l_cust_acct_site_id NUMBER;
6049     -- l_addr              okx_cust_sites_v.description%type;
6050 
6051     CURSOR jtfv_csr IS
6052         SELECT FROM_TABLE, WHERE_CLAUSE
6053         FROM JTF_OBJECTS_B
6054         WHERE OBJECT_CODE = p_object_code;
6055     TYPE SOURCE_CSR IS REF CURSOR;
6056     sql_csr SOURCE_CSR;
6057 
6058     CURSOR get_address_csr (p_cust_acct_site_id IN NUMBER) IS
6059         SELECT description
6060         FROM   okx_cust_sites_v
6061         WHERE  id1 = p_cust_acct_site_id;
6062     BEGIN
6063         OPEN jtfv_csr;
6064         FETCH jtfv_csr INTO l_from_table, l_where_clause;
6065         l_not_found := jtfv_csr%NOTFOUND;
6066         CLOSE jtfv_csr;
6067 
6068 
6069         l_sql_stmt := 'SELECT name, cust_acct_site_id FROM ' || l_from_table ||
6070         ' WHERE ID1 = :id_1 AND ID2 = :id2';
6071 
6072         IF (l_where_clause IS NOT NULL) THEN
6073             l_sql_stmt := l_sql_stmt || ' AND ' || l_where_clause;
6074         END IF;
6075 
6076 
6077         OPEN sql_csr FOR l_sql_stmt USING p_id1, p_id2;
6078         FETCH sql_csr INTO x_name, l_cust_acct_site_id;
6079         l_not_found := sql_csr%NOTFOUND;
6080         CLOSE sql_csr;
6081 
6082         OPEN   get_address_csr(l_cust_acct_site_id);
6083         FETCH  get_address_csr INTO x_addr;
6084         CLOSE  get_address_csr;
6085 
6086     EXCEPTION
6087         WHEN NO_DATA_FOUND THEN
6088             IF (jtfv_csr%ISOPEN) THEN
6089                 CLOSE jtfv_csr;
6090             END IF;
6091             IF (sql_csr%ISOPEN) THEN
6092                 CLOSE sql_csr;
6093             END IF;
6094     END line_contact_name_addr;
6095 
6096 
6097     PROCEDURE select_renewal_info
6098     (p_chr_id IN NUMBER,
6099      x_operation_lines_tbl OUT NOCOPY opn_lines_tbl
6100      )
6101     IS
6102     --select operation id for renewal of 'SERVICE'
6103     CURSOR class_operation_cur IS
6104         SELECT id
6105         FROM   okc_class_operations
6106         WHERE  opn_code = 'RENEWAL'
6107         AND    cls_code = 'SERVICE';
6108 
6109     --select operation instance id for renewal
6110     CURSOR operation_instance_cur (p_cop_id IN NUMBER)
6111         IS
6112         SELECT id
6113         FROM   okc_operation_instances
6114         WHERE  target_chr_id = p_chr_id
6115         AND    cop_id = p_cop_id;
6116 
6117     CURSOR operation_lines_cur (p_oie_id NUMBER) IS
6118         SELECT creation_date, subject_chr_id, object_chr_id,
6119                subject_cle_id, object_cle_id
6120         FROM okc_operation_lines
6121         WHERE  oie_id = p_oie_id;
6122 
6123     l_opn_id NUMBER;
6124     l_oie_id NUMBER;
6125     l_ctr NUMBER;
6126     BEGIN
6127         OPEN class_operation_cur;
6128         FETCH class_operation_cur INTO l_opn_id;
6129         CLOSE class_operation_cur;
6130 
6131         OPEN operation_instance_cur (l_opn_id);
6132         FETCH  operation_instance_cur INTO l_oie_id;
6133         CLOSE  operation_instance_cur;
6134 
6135         IF x_operation_lines_tbl.COUNT > 0
6136             THEN
6137             x_operation_lines_tbl.DELETE;
6138         END IF;
6139 
6140         --populating table
6141         l_ctr := 1;
6142         FOR operation_lines_rec IN operation_lines_cur (l_oie_id)
6143             LOOP
6144             x_operation_lines_tbl(l_ctr).creation_date := operation_lines_rec.creation_date;
6145             x_operation_lines_tbl(l_ctr).object_chr_id := operation_lines_rec.object_chr_id;
6146             x_operation_lines_tbl(l_ctr).object_cle_id := operation_lines_rec.object_cle_id;
6147             l_ctr := l_ctr + 1;
6148         END LOOP;
6149 
6150     END select_renewal_info;
6151 
6152 
6153     PROCEDURE update_renewal_info
6154     (p_operation_lines_tbl IN opn_lines_tbl,
6155      x_return_status       OUT NOCOPY  VARCHAR2,
6156      x_msg_count           OUT NOCOPY  NUMBER,
6157      x_msg_data            OUT NOCOPY  VARCHAR2
6158      )
6159     IS
6160     BEGIN
6161         IF p_operation_lines_tbl.COUNT > 0
6162             THEN
6163             FOR i IN p_operation_lines_tbl.FIRST..p_operation_lines_tbl.LAST
6164                 LOOP
6165                 IF p_operation_lines_tbl(i).object_cle_id IS NULL
6166                     THEN
6167                     UPDATE okc_k_headers_b
6168                     SET    date_renewed = TRUNC(p_operation_lines_tbl(i).creation_date)
6169                     WHERE  id = p_operation_lines_tbl(i).object_chr_id;
6170                 ELSE
6171                     UPDATE okc_k_lines_b
6172                     SET    date_renewed = TRUNC(p_operation_lines_tbl(i).creation_date)
6173                     WHERE  id = p_operation_lines_tbl(i).object_cle_id;
6174                 END IF;
6175             END LOOP;
6176         END IF; -- IF p_operation_lines_tbl.COUNT > 0
6177         x_return_status := 'S';
6178 
6179     EXCEPTION
6180         WHEN OTHERS THEN
6181             x_return_status := G_UNEXPECTED_ERROR;
6182             OKC_API.set_message(G_APP_NAME_OKS,
6183                                 'OKS_UNEXP_ERROR',
6184                                 'SQLcode',
6185                                 SQLCODE,
6186                                 'SQLerrm',
6187                                 SQLERRM);
6188 
6189     END update_renewal_info;
6190 
6191     PROCEDURE CheckDuplicatePriceAdj(p_api_version   IN  NUMBER
6192                                      , p_init_msg_list IN  VARCHAR2
6193                                      , p_pradj_rec     IN  price_adj_rec
6194                                      , x_return_status OUT NOCOPY VARCHAR2
6195                                      , x_msg_count     OUT NOCOPY NUMBER
6196                                      , x_msg_data      OUT NOCOPY VARCHAR2)
6197     IS
6198 
6199     CURSOR line_cur(c_cle_id NUMBER) IS
6200         SELECT cle_id, line_number
6201         FROM   okc_k_lines_b
6202         WHERE  id = c_cle_id;
6203 
6204     CURSOR price_adj_cur(c_list_line_id NUMBER, c_cle_id NUMBER) IS
6205         SELECT 'x'
6206         FROM   okc_price_adjustments
6207         WHERE  list_line_id = c_list_line_id
6208         AND    cle_id = c_cle_id;
6209 
6210     CURSOR price_adj_cur_hdr(c_list_line_id NUMBER, c_chr_id NUMBER) IS
6211         SELECT 'x'
6212         FROM   okc_price_adjustments
6213         WHERE  list_line_id = c_list_line_id
6214         AND    chr_id = c_chr_id;
6215 
6216     CURSOR sub_line_cur(c_cle_id NUMBER) IS
6217         SELECT id, line_number
6218         FROM   okc_k_lines_b
6219         WHERE  cle_id = c_cle_id
6220         AND    lse_id IN(9, 25);
6221 
6222     l_line_number      VARCHAR2(301) := NULL;
6223     l_cle_id           NUMBER := NULL;
6224     l_pradj_exists     VARCHAR2(1) := NULL;
6225     l_subline_id       NUMBER := NULL;
6226 
6227     BEGIN
6228 
6229         x_return_status := G_RET_STS_SUCCESS;
6230         fnd_msg_pub.initialize;
6231 
6232         IF p_pradj_rec.chr_id IS NOT NULL THEN
6233             OPEN  price_adj_cur_hdr(p_pradj_rec.list_line_id, p_pradj_rec.chr_id);
6234             FETCH price_adj_cur_hdr INTO l_pradj_exists;
6235             CLOSE price_adj_cur_hdr;
6236             IF l_pradj_exists IS NOT NULL THEN
6237                 RAISE G_DUPLICATE_RECORD;
6238             ELSE
6239                 RETURN;
6240             END IF;
6241         END IF;
6242 
6243         OPEN  price_adj_cur(p_pradj_rec.list_line_id, p_pradj_rec.cle_id);
6244         FETCH price_adj_cur INTO l_pradj_exists;
6245         CLOSE price_adj_cur;
6246         IF l_pradj_exists IS NOT NULL THEN
6247             RAISE G_DUPLICATE_RECORD;
6248         END IF;
6249 
6250         OPEN  line_cur(p_pradj_rec.cle_id);
6251         FETCH line_cur INTO l_cle_id, l_line_number;
6252         CLOSE line_cur;
6253 
6254         IF l_cle_id IS NULL THEN --TopLine/Subline
6255             --GET SUBLINES
6256             OPEN sub_line_cur(p_pradj_rec.cle_id);
6257             LOOP
6258                 l_line_number := NULL;
6259                 FETCH sub_line_cur INTO l_subline_id, l_line_number;
6260                 EXIT WHEN sub_line_cur%NOTFOUND;
6261 
6262                 OPEN  price_adj_cur(p_pradj_rec.list_line_id, l_subline_id);
6263                 FETCH price_adj_cur INTO l_pradj_exists;
6264                 CLOSE price_adj_cur;
6265                 IF l_pradj_exists IS NOT NULL THEN
6266                     RAISE G_DUPLICATE_RECORD;
6267                 END IF;
6268                 l_subline_id := NULL;
6269             END LOOP; -- GET SUBLINES
6270         ELSE --TopLine/Subline
6271             OPEN  price_adj_cur(p_pradj_rec.list_line_id, l_cle_id);
6272             FETCH price_adj_cur INTO l_pradj_exists;
6273             CLOSE price_adj_cur;
6274             IF l_pradj_exists IS NOT NULL THEN
6275                 RAISE G_DUPLICATE_RECORD;
6276             END IF;
6277         END IF; --TopLine/Subline
6278     EXCEPTION
6279         WHEN G_DUPLICATE_RECORD THEN
6280             x_return_status := G_RET_STS_ERROR;
6281             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKS,
6282                                 p_msg_name => 'OKS_DUPLICATE_MODIFIER');
6283         WHEN OTHERS THEN
6284             x_return_status := G_UNEXPECTED_ERROR;
6285             OKC_API.set_message(G_APP_NAME_OKS,
6286                                 'OKS_UNEXP_ERROR',
6287                                 'SQLcode',
6288                                 SQLCODE,
6289                                 'SQLerrm',
6290                                 SQLERRM);
6291     END CheckDuplicatePriceAdj;
6292 
6293 
6294     PROCEDURE Update_Line_Amount
6295     (p_line_id       IN   NUMBER,
6296      p_new_service_amount IN NUMBER,
6297      x_return_status OUT  NOCOPY VARCHAR2,
6298      x_msg_count     OUT  NOCOPY NUMBER,
6299      x_msg_data      OUT  NOCOPY VARCHAR2)
6300     IS
6301     l_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
6302     x_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
6303     l_api_version      NUMBER := 1.0;
6304     l_init_msg_list   VARCHAR2(2000) := OKC_API.G_FALSE;
6305     l_return_status   VARCHAR2(1);
6306     l_msg_count       NUMBER;
6307     l_msg_data        VARCHAR2(2000);
6308     l_price_negotiated  NUMBER;
6309     l_klnv_tbl_in               oks_contract_line_pub.klnv_tbl_type;
6310     l_klnv_tbl_out              oks_contract_line_pub.klnv_tbl_type;
6311 
6312 
6313     CURSOR l_csr_total_line_amount(p_line_id IN NUMBER)
6314         IS
6315         SELECT nvl(SUM(nvl(price_negotiated, 0)), 0)
6316         FROM   okc_k_lines_b
6317         WHERE  cle_id = p_line_id
6318         AND    date_cancelled IS NULL; -- line Level Cancellation
6319 
6320     CURSOR toplinetax_cur(p_cle_id IN NUMBER) IS
6321         SELECT SUM(nvl(tax_amount, 0)) amount
6322         FROM okc_k_lines_b cle, oks_k_lines_b kln
6323         WHERE cle.cle_id = p_cle_id
6324         AND   cle.id = kln.cle_id
6325         AND   cle.lse_id IN (7, 8, 9, 10, 11, 13, 35, 25, 46)
6326         AND   cle.date_cancelled IS NULL;
6327 
6328     l_tax_amount       toplinetax_cur%ROWTYPE;
6329 
6330     CURSOR Get_oks_Lines_details(p_cle_id IN NUMBER) IS
6331         SELECT id, object_version_number, dnz_chr_id
6332         FROM oks_k_lines_b
6333         WHERE cle_id = p_cle_id ;
6334 
6335     l_get_oks_details  Get_oks_Lines_details%ROWTYPE;
6336 
6337     BEGIN
6338 
6339         l_clev_rec.id := p_Line_Id;
6340         OPEN l_csr_total_line_amount(p_line_id);
6341         FETCH l_csr_total_line_amount INTO l_price_negotiated;
6342         CLOSE l_csr_total_line_amount;
6343 
6344 
6345 
6346         l_clev_rec.price_negotiated := l_price_negotiated ;
6347 
6348         OKC_CONTRACT_PUB.Update_Contract_Line
6349         (
6350          p_api_version => l_api_version,
6351          p_init_msg_lISt => l_init_msg_lISt,
6352          x_return_status => x_return_status,
6353          x_msg_count => x_msg_count,
6354          x_msg_data => x_msg_data,
6355          p_restricted_update => 'F',
6356          p_clev_rec => l_clev_rec,
6357          x_clev_rec => x_clev_rec
6358          );
6359 
6360         IF NVL(x_return_status, '!') <> OKC_API.G_RET_STS_SUCCESS THEN
6361             RAISE G_ERROR;
6362         END IF;
6363         -- Update Lines Level Tax Amount --
6364         OPEN Get_oks_Lines_details(p_line_id);
6365         FETCH Get_oks_Lines_details INTO l_get_oks_details ;
6366         CLOSE Get_oks_Lines_details;
6367 
6368         OPEN toplinetax_cur(p_line_id);
6369         FETCH toplinetax_cur INTO l_tax_amount;
6370         CLOSE toplinetax_cur;
6371 
6372         l_klnv_tbl_in(1).id := l_get_oks_details.id ;
6373         l_klnv_tbl_in(1).object_version_number := l_get_oks_details.object_version_number;
6374         l_klnv_tbl_in(1).dnz_chr_id := l_get_oks_details.dnz_chr_id;
6375         l_klnv_tbl_in(1).cle_id := p_line_id;
6376         l_klnv_tbl_in(1).tax_amount := l_tax_amount.amount;
6377 
6378 
6379         oks_contract_line_pub.update_line
6380         (
6381          p_api_version => l_api_version,
6382          p_init_msg_list => l_init_msg_list,
6383          x_return_status => l_return_status,
6384          x_msg_count => l_msg_count,
6385          x_msg_data => l_msg_data,
6386          p_klnv_tbl => l_klnv_tbl_in,
6387          x_klnv_tbl => l_klnv_tbl_out,
6388          p_validate_yn => 'N'
6389          );
6390 
6391         x_return_status := l_return_status;
6392         IF NVL(l_return_status, '!') <> OKC_API.G_RET_STS_SUCCESS THEN
6393             RAISE G_ERROR;
6394         END IF;
6395 
6396     EXCEPTION
6397         WHEN G_ERROR THEN
6398             NULL;
6399     END Update_Line_Amount;
6400 
6401     PROCEDURE Update_Coverage_Levels
6402     (p_clvl_rec      IN   Clvl_Rec_Type,
6403      x_return_status OUT  NOCOPY VARCHAR2,
6404      x_msg_count     OUT  NOCOPY NUMBER,
6405      x_msg_data      OUT  NOCOPY VARCHAR2)
6406     IS
6407 
6408     l_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
6409     x_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
6410     l_api_version      NUMBER := 1.0;
6411     l_init_msg_lISt    VARCHAR2(1) := 'T';
6412 
6413     BEGIN
6414 
6415         ----------errorout_ad('cp line id = ' || to_char(p_clvl_rec.Coverage_Level_Line_Id));
6416         ----------errorout_ad('cp amount = ' || to_char(p_clvl_rec.price_negotiated));
6417         l_clev_rec.id := p_clvl_rec.Coverage_Level_Line_Id;
6418         l_clev_rec.price_unit := p_clvl_rec.price_unit;
6419         l_clev_rec.price_unit_percent := p_clvl_rec.price_unit_percent;
6420         l_clev_rec.price_negotiated := p_clvl_rec.price_negotiated;
6421 
6422         OKC_CONTRACT_PUB.Update_Contract_Line
6423         (
6424          p_api_version => l_api_version,
6425          p_init_msg_lISt => l_init_msg_lISt,
6426          x_return_status => x_return_status,
6427          x_msg_count => x_msg_count,
6428          x_msg_data => x_msg_data,
6429          p_restricted_update => 'F',
6430          p_clev_rec => l_clev_rec,
6431          x_clev_rec => x_clev_rec
6432          );
6433 
6434         ----------errorout_ad('OKC_CONTRACT_PUB.Update_Contract_Line status = ' || x_return_status);
6435 
6436         IF NVL(x_return_status, '!') <> OKC_API.G_RET_STS_SUCCESS THEN
6437             RAISE G_ERROR;
6438         END IF;
6439 
6440     EXCEPTION
6441         WHEN G_ERROR THEN
6442             NULL;
6443     END Update_Coverage_Levels;
6444 
6445     PROCEDURE UPDATE_CONTRACT_AMOUNT(p_header_id IN NUMBER,
6446                                      x_return_status  OUT NOCOPY VARCHAR2) IS
6447     l_api_version     CONSTANT   NUMBER := 1.0;
6448     l_init_msg_list   VARCHAR2(2000) := OKC_API.G_FALSE;
6449     l_return_status   VARCHAR2(1);
6450     l_msg_count       NUMBER;
6451     l_msg_data        VARCHAR2(2000);
6452     l_msg_index_out   NUMBER;
6453     l_chrv_tbl_in     okc_contract_pub.chrv_tbl_type;
6454     l_chrv_tbl_out    okc_contract_pub.chrv_tbl_type;
6455     -- Header Level Tax Amount --
6456     l_khrv_tbl_type_in   oks_contract_hdr_pub.khrv_tbl_type;
6457     l_khrv_tbl_type_out  oks_contract_hdr_pub.khrv_tbl_type;
6458 
6459     -- Header Level Tax Amount --
6460     CURSOR total_amount IS
6461         SELECT nvl(SUM(price_negotiated), 0) SUM
6462         FROM okc_k_lines_b
6463         WHERE dnz_chr_id = p_header_id
6464         AND   cle_id IS NULL
6465         AND   date_cancelled IS NULL; -- line Level Cancellation
6466     --Commented URP
6467     --WHERE dnz_chr_id = p_header_id;
6468 
6469     -- Header Tax Total
6470     CURSOR hdrtax_cur IS
6471         SELECT SUM(kln.tax_amount)  amount
6472         FROM okc_k_lines_b cle, oks_k_lines_b kln
6473         WHERE cle.dnz_chr_id = p_header_id
6474         AND   cle.id = kln.cle_id
6475         AND   cle.lse_id IN (7, 8, 9, 10, 11, 13, 35, 25, 46)
6476         AND   cle.date_cancelled IS NULL;
6477 
6478     l_total_tax hdrtax_cur%ROWTYPE;
6479 
6480     CURSOR Get_Header_details IS
6481         SELECT id, object_version_number
6482         FROM OKS_K_HEADERS_B
6483         WHERE chr_id = p_header_id ;
6484 
6485     l_get_hdr_details get_header_details%ROWTYPE;
6486 
6487     BEGIN
6488         x_return_status := OKC_API.G_RET_STS_SUCCESS;
6489         IF p_header_id IS NOT NULL THEN
6490             l_chrv_tbl_in.DELETE;
6491             FOR cur_total_amount IN total_amount
6492                 LOOP
6493                 l_chrv_tbl_in(1).id := p_header_id;
6494                 l_chrv_tbl_in(1).estimated_amount := cur_total_amount.SUM;
6495                 okc_contract_pub.update_contract_header (
6496                                                          p_api_version => l_api_version,
6497                                                          p_init_msg_list => l_init_msg_list,
6498                                                          x_return_status => l_return_status,
6499                                                          x_msg_count => l_msg_count,
6500                                                          x_msg_data => l_msg_data,
6501                                                          p_chrv_tbl => l_chrv_tbl_in,
6502                                                          x_chrv_tbl => l_chrv_tbl_out
6503                                                          );
6504                 x_return_status := l_return_status;
6505                 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6506                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6507                 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6508                     RAISE OKC_API.G_EXCEPTION_ERROR;
6509                 END IF;
6510             END LOOP;
6511 
6512             -- Updating Header level tax Amount --
6513             OPEN get_header_details;
6514             FETCH get_header_details INTO l_get_hdr_details;
6515             CLOSE get_header_details;
6516 
6517             OPEN hdrtax_cur;
6518             FETCH hdrtax_cur INTO l_total_tax;
6519             CLOSE hdrtax_cur;
6520 
6521             l_khrv_tbl_type_in(1).id := l_get_hdr_details.id;
6522             l_khrv_tbl_type_in(1).chr_id := p_header_id;
6523             l_khrv_tbl_type_in(1).object_version_number := l_get_hdr_details.object_version_number;
6524             l_khrv_tbl_type_in(1).tax_amount := l_total_tax.amount;
6525 
6526             oks_contract_hdr_pub.update_header(
6527                                                p_api_version => l_api_version,
6528                                                p_init_msg_list => l_init_msg_list,
6529                                                x_return_status => l_return_status,
6530                                                x_msg_count => l_msg_count,
6531                                                x_msg_data => l_msg_data,
6532                                                p_khrv_tbl => l_khrv_tbl_type_in,
6533                                                x_khrv_tbl => l_khrv_tbl_type_out,
6534                                                p_validate_yn => 'N');
6535 
6536             x_return_status := l_return_status;
6537             IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6538                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6539             ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6540                 RAISE OKC_API.G_EXCEPTION_ERROR;
6541             END IF;
6542             -- Updating Header level tax Amount --
6543 
6544         END IF;
6545     END UPDATE_CONTRACT_AMOUNT;
6546 
6547 
6548 
6549     PROCEDURE GetIgnorableAmount(p_contract_line_id IN NUMBER,
6550                                  x_prorated_amount OUT NOCOPY NUMBER,
6551                                  x_rec_count OUT NOCOPY NUMBER)
6552     IS
6553     CURSOR l_subline_csr IS
6554         SELECT NVL(lines.price_negotiated, 0) price_negotiated,
6555                lines.start_date,
6556                lines.end_date,
6557                lines.date_terminated,
6558                lines.price_unit,
6559                lines.price_unit_percent,
6560                lines.id
6561         FROM   okc_k_lines_b lines
6562         WHERE  lines.cle_id = p_contract_line_id
6563         AND    lines.lse_id IN(7, 8, 9, 10, 11, 18, 25, 35);
6564     l_subline_rec          l_subline_csr%ROWTYPE;
6565     l_prorated_amount      NUMBER := 0;
6566     l_amount               NUMBER := 0;
6567     l_rec_count            NUMBER := 0;
6568     BEGIN
6569         OPEN  l_subline_csr;
6570         LOOP
6571             FETCH l_subline_csr INTO l_subline_rec;
6572             EXIT WHEN l_subline_csr%NOTFOUND;
6573             IF l_subline_rec.date_terminated IS NOT NULL THEN
6574                 IF l_subline_rec.date_terminated <= trunc(SYSDATE) THEN
6575                     l_amount := l_subline_rec.price_negotiated;
6576                 END IF;
6577                 l_rec_count := l_rec_count + 1;
6578                 --Commented to fix Bug#2450212 , 09, Aug 2002  , Sudam
6579                 --ELSIF l_subline_rec.end_date < trunc(sysdate) THEN
6580                 --l_amount := l_subline_rec.price_negotiated;
6581                 --l_rec_count := l_rec_count + 1;
6582             END IF;
6583             l_prorated_amount := l_prorated_amount + l_amount;
6584             l_amount := 0;
6585         END LOOP;
6586         CLOSE l_subline_csr;
6587         x_prorated_amount := l_prorated_amount;
6588         x_rec_count := l_rec_count;
6589     END GetIgnorableAmount;
6590 
6591     /***************/
6592 
6593     PROCEDURE Cascade_Service_Price(
6594                                     p_api_version        IN  NUMBER,
6595                                     p_init_msg_lISt      IN  VARCHAR2,
6596                                     p_contract_line_id   IN  NUMBER,
6597                                     p_new_service_price  IN  NUMBER,
6598                                     x_return_status      OUT NOCOPY VARCHAR2,
6599                                     x_msg_count          OUT NOCOPY NUMBER,
6600                                     x_msg_data           OUT NOCOPY VARCHAR2
6601                                     )
6602     IS
6603 
6604     lc_jtot_obj_code      VARCHAR2(30) := 'OKX_CUSTPROD';
6605 
6606     CURSOR  l_svc_csr IS
6607         SELECT  nvl(SUM(NVL(price_negotiated, 0)), 0) service_amount
6608              , COUNT(price_negotiated)
6609         FROM    okc_k_lines_b lines
6610         WHERE   lines.cle_id = p_contract_line_id
6611         AND     lines.lse_id IN(7, 8, 9, 10, 11, 18, 25, 35)
6612         AND     lines.date_cancelled IS NULL; -- line Level Cancellation
6613 
6614 
6615 
6616     --bug # 2215282 -- exclude terminated/expired/cancelled clvl lines from cascade service pricing
6617     --Removed Status Check but included Date_Terminated for termination
6618     --and end_date for the expiration. This is for same Bug 2215282.
6619 
6620     -- Bug 5228352 --
6621     CURSOR  l_clvl_csr IS
6622         SELECT  okc.id,
6623                 price_negotiated,
6624                  price_unit,
6625                 price_unit_percent,
6626                 lse_id,
6627                 okc.dnz_chr_id,
6628                 currency_code,
6629                 oks.id oks_id,
6630                 oks.object_version_number
6631         FROM    okc_k_lines_b  okc, oks_k_lines_b oks
6632         WHERE   okc.Cle_id = p_contract_line_id
6633         AND     OKS.cle_id = okc.id
6634         AND     (okc.date_terminated IS NULL OR okc.date_terminated > TRUNC(SYSDATE))
6635         AND     lse_id NOT IN(2, 15, 20)
6636         AND     okc.date_cancelled IS NULL; -- line Level Cancellation
6637 
6638    CURSOR get_tax_details(p_cle_id IN NUMBER) IS
6639         SELECT id, object_version_number
6640         FROM   oks_k_lines_b
6641         WHERE  cle_id = p_cle_id;
6642 
6643    get_tax_rec		get_tax_details%rowtype;
6644    -- Bug 5228352 --
6645 
6646     CURSOR l_aggr_csr(p_chr_id IN NUMBER) IS
6647         SELECT Isa_Agreement_Id
6648         FROM   OKC_GOVERNANCES_V
6649         WHERE  dnz_chr_id = p_chr_id
6650         AND    cle_id IS NULL;
6651 
6652 
6653     l_service_amount      NUMBER;
6654     l_clvl_price          NUMBER;
6655     l_current_percent     NUMBER := 0;
6656     l_new_amount          NUMBER := 0;
6657     l_clvl_rec            Clvl_Rec_type;
6658     l_count               NUMBER := 1;
6659     l_curr_rec            NUMBER := 0;
6660     l_sum_amt             NUMBER := 0;
6661     l_diff_amt            NUMBER := 0;
6662     l_old_id              NUMBER;
6663     l_old_up              NUMBER;
6664     l_old_upp             NUMBER;
6665     --  l_contract_line_rec   OKS_QP_INT_PVT.G_LINE_REC_TYPE;
6666     -- lx_contract_cp_tbl     OKS_QP_INT_PVT.G_SLINE_TBL_TYPE;
6667     l_currency_code       VARCHAR2(15);
6668     i                     NUMBER := 1;
6669     l_pdl_adjusted_amount NUMBER;
6670     l_covlvl_qty   NUMBER;
6671     l_tlvl_priced_qty  NUMBER;
6672     l_aggr_id         NUMBER;
6673     cp_price  NUMBER ;
6674     l_index NUMBER ;
6675 
6676     l_terminated_service_amount NUMBER;
6677     l_terminated_count          NUMBER;
6678     l_percent_terminated        NUMBER;
6679     l_active_service_amount     NUMBER;
6680     l_active_line_count         NUMBER;
6681     l_new_cascade_service_price NUMBER;
6682     l_detail_rec    OKS_QP_PKG.input_details;
6683     l_api_Version     NUMBER := 1;
6684     l_init_msg_list   VARCHAR2(2000) := OKC_API.G_FALSE;
6685     l_return_status   VARCHAR2(1);
6686     l_msg_count       NUMBER;
6687     l_msg_data        VARCHAR2(2000);
6688     l_price_details         OKS_QP_PKG.price_details;
6689     l_modifier_details      QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
6690     l_price_break_details   OKS_QP_PKG.G_PRICE_BREAK_TBL_TYPE;
6691     l_old_lse_id     NUMBER;
6692     l_old_currency_code  VARCHAR2(4);
6693     lx_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
6694     l_validate_yn VARCHAR2(1);
6695     l_curr_code    VARCHAR2(30);
6696 
6697 
6698     --    l_rule_rec               OKC_RUL_PVT.rulv_rec_type;
6699     --    l_rule_tbl               OKC_RULE_PUB.rulv_tbl_type;
6700 
6701     l_klnv_tbl   OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
6702     /* for tax calculation */
6703 
6704     G_RAIL_REC             OKS_TAX_UTIL_PVT.ra_rec_type;
6705 
6706     PROCEDURE Get_Currency_Code(p_chr_id    IN  NUMBER
6707                                 , x_curr_code OUT NOCOPY VARCHAR2) IS
6708     CURSOR l_hdr_csr IS
6709         SELECT currency_code
6710        FROM   okc_k_headers_b
6711         WHERE  id = p_chr_id;
6712     BEGIN
6713         x_curr_code := NULL;
6714         OPEN  l_hdr_csr;
6715         FETCH l_hdr_csr INTO x_curr_code;
6716         CLOSE l_hdr_csr;
6717     END Get_Currency_Code;
6718 
6719     FUNCTION Get_Header_Id RETURN NUMBER IS
6720     CURSOR l_hdr_csr IS
6721         SELECT dnz_chr_id
6722         FROM   okc_k_lines_b
6723         WHERE  id = p_contract_line_id;
6724     l_header_id     OKC_K_HEADERS_B.ID%TYPE;
6725     BEGIN
6726         OPEN  l_hdr_csr;
6727         FETCH l_hdr_csr INTO l_header_id;
6728         CLOSE l_hdr_csr;
6729         RETURN(l_header_id);
6730     END Get_Header_Id;
6731 
6732     BEGIN
6733 
6734         OPEN  l_svc_csr;
6735         FETCH l_svc_csr INTO l_service_amount, l_count;
6736         CLOSE l_svc_csr;
6737 
6738         ----------errorout_ad(' l_service_amount '||l_service_amount );
6739         ----------errorout_ad(' l_count '||l_count );
6740 
6741         --bug # 2215282 -- exclude terminated/expired/cancelled clvl lines from cascade service pricing
6742 
6743         GetIgnorableAmount(p_contract_line_id => p_contract_line_id,
6744                            x_prorated_amount => l_terminated_service_amount,
6745                            x_rec_count => l_terminated_count);
6746 
6747         IF l_count = l_terminated_count THEN
6748             RETURN;
6749         END IF;
6750 
6751         ----------errorout_ad(' l_terminated_service_amount '||l_terminated_service_amount );
6752         ----------errorout_ad(' l_terminated_count '||l_terminated_count );
6753 
6754         /** Find total reprice amount to be adjusted #2215282 **/
6755         IF NVL(l_service_amount, 0) <> 0 THEN
6756             IF NVL(l_terminated_service_amount, 0) <> 0 THEN
6757                 l_active_service_amount := NVL(l_service_amount, 0) - NVL(l_terminated_service_amount, 0);
6758                 l_active_line_count := NVL(l_count, 0) - NVL(l_terminated_count, 0);
6759                 l_new_cascade_service_price := p_new_service_price - NVL(l_terminated_service_amount, 0);
6760             ELSE
6761                 l_active_service_amount := l_service_amount;
6762                 l_new_cascade_service_price := p_new_service_price;
6763                 l_active_line_count := l_count;
6764             END IF;
6765         END IF;
6766 
6767         ----------errorout_ad(' l_new_cascade_service_price '||l_new_cascade_service_price );
6768         ----------errorout_ad(' l_active_line_count '||l_active_line_count );
6769 
6770 
6771         FOR  clvl_rec IN l_clvl_csr
6772             LOOP
6773 
6774             -- --------errorout_ad (' clvl '||clvl_rec.id);
6775 
6776             --    --------errorout_ad (' clvl  price negotiated '||clvl_rec.price_negotiated);
6777             /** Check for status of the covered level line **/
6778             l_curr_rec := l_curr_rec + 1;
6779 
6780             l_clvl_price := clvl_rec.Price_Negotiated;
6781             Get_Currency_Code(p_chr_id => Get_Header_Id, x_curr_code => l_curr_code);
6782             --bug # 2215282 -- exclude terminated/expired/cancelled clvl lines from cascade service pricing
6783             IF l_service_amount = 0 THEN
6784                 IF NVL(l_active_line_count, 0) <> 0 THEN
6785                     --     l_new_amount := NVL(l_new_cascade_service_price,0) / NVL(l_active_line_count, 1);
6786 
6787                     l_new_amount := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
6788                     (
6789                      NVL(l_new_cascade_service_price, 0) / NVL(l_active_line_count, 1),
6790                      l_curr_code
6791                      );
6792                 END IF;
6793             ELSE
6794                 IF NVL(l_active_service_amount, 0) <> 0 THEN
6795                     l_current_percent := (NVL(l_clvl_price, 0) * 100) / NVL(l_active_service_amount, 1);
6796                     --      l_new_amount      := ROUND( ((NVL(l_new_cascade_service_price, 0) * l_current_percent)/100), 2);
6797 
6798                     l_new_amount := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt(
6799                                                                            (NVL(l_new_cascade_service_price, 0) * l_current_percent) / 100,
6800                                                                            l_curr_code
6801                                                                            );
6802 
6803                 END IF;
6804 
6805             END IF;
6806             ----------errorout_ad(' l_new_amount '||l_new_amount);
6807             IF l_curr_rec <= l_count THEN
6808 
6809                 ----------errorout_ad(' before updating cov level ');
6810                 l_clvl_rec.coverage_level_line_id := clvl_rec.id;
6811                 l_clvl_rec.price_negotiated := l_new_amount;
6812                 l_clvl_rec.price_unit := clvl_rec.price_unit;
6813                 l_clvl_rec.price_unit_percent := clvl_rec.price_unit_percent;
6814 
6815                 Update_Coverage_Levels
6816                 (p_clvl_rec => l_clvl_rec,
6817                  x_return_status => x_return_status,
6818                  x_msg_count => x_msg_count,
6819                  x_msg_data => x_msg_data);
6820 
6821                 ----------errorout_ad(' after updating coverag level ' ||clvl_rec.lse_id||' '||clvl_rec.id);
6822 
6823                 /* select price_negotiated into cp_price
6824                 from okc_k_lines_b
6825                 where id = clvl_rec.id; */
6826 
6827                 ----------errorout_ad(' price nego after update '||cp_price);
6828 
6829                 IF Nvl(x_return_status, 'S') <> OKC_API.G_RET_STS_SUCCESS
6830                     THEN
6831                     --              --------errorout_ad (' error in updation of coverage level ');
6832                     RAISE G_ERROR;
6833                 END IF;
6834 
6835                 /** Recalculate Tax **/
6836                 --       --------errorout(' before calculating tax '||clvl_rec.lse_id);
6837 		-- Bug 5228352 --
6838                 IF clvl_rec.lse_id  IN (8, 10, 11, 12, 35 )
6839 		OR (
6840 		    clvl_rec.lse_id IN (7, 9, 18, 25)
6841 		    AND
6842 		    NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'NO')
6843 
6844 		THEN
6845 		-- Bug 5228352 --
6846                     --          --------errorout_ad(' before calculating tax ');
6847                     G_RAIL_REC.amount := l_new_amount ;
6848 
6849                     OKS_TAX_UTIL_PVT.Get_Tax (p_api_version => 1.0,
6850                                               p_init_msg_list => OKC_API.G_TRUE,
6851                                               p_chr_id => clvl_rec.dnz_chr_id,
6852                                               p_cle_id => p_contract_line_id,
6853                                               px_rail_rec => G_RAIL_REC,
6854                                               x_msg_count => x_msg_count,
6855                                               x_msg_data => x_msg_data,
6856                                               x_return_status => l_return_status );
6857 
6858 		    -- Bug 5228352 --
6859 		    IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6860 			RAISE OKC_API.G_EXCEPTION_ERROR;
6861 		    ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6862                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6863 		    END IF;
6864 		    -- Bug 5228352 --
6865 
6866                     --         --------errorout_ad(' error in calc tax '||l_return_status );
6867                     -- Create IRT Rule
6868 
6869 		    -- Bug 5228352 --
6870                     l_klnv_tbl(1).id := clvl_rec.oks_id;
6871                     l_klnv_tbl(1).cle_id := clvl_rec.id;
6872 		    l_klnv_tbl(1).object_version_number := clvl_rec.object_version_number;
6873                     l_klnv_tbl(1).dnz_chr_id := get_header_id;
6874                     l_klnv_tbl(1).tax_inclusive_yn := g_rail_rec.amount_includes_tax_flag;
6875 		    -- Bug 5228352 --
6876 
6877 
6878 
6879 
6880 
6881                     IF  g_rail_rec.amount_includes_tax_flag = 'N' THEN
6882                         l_klnv_tbl(1).tax_amount := NVL(g_rail_rec.tax_value, 0);
6883                         --    l_klnv_tbl(1).rule_information6     := g_rail_rec.amount + NVL(g_rail_rec.tax_value,0);
6884                     ELSE
6885                         l_klnv_tbl(1).tax_amount := 0;
6886                         --    l_rule_rec.rule_information6     := g_rail_rec.amount;
6887                     END IF;
6888 
6889                     -- Update IRT rule
6890                     --           --------errorout_ad(' tax amount  ' || g_rail_rec.tax_value);
6891                     --          --------errorout_ad(' amount '||g_rail_rec.amount);
6892 
6893 
6894 
6895                     OKS_CONTRACT_LINE_PUB.update_line(
6896                                                       p_api_version => p_api_version,
6897                                                       p_init_msg_list => p_init_msg_list,
6898                                                       x_return_status => l_return_status,
6899                                                       x_msg_count => l_msg_count,
6900                                                       x_msg_data => l_msg_data,
6901                                                       p_klnv_tbl => l_klnv_tbl,
6902                                                       x_klnv_tbl => lx_klnv_tbl,
6903                                                       p_validate_yn => l_validate_yn);
6904 		     -- Bug 5228352 --
6905 	            IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6906 			 RAISE OKC_API.G_EXCEPTION_ERROR;
6907 		    ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
6908                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6909 		    END IF;
6910 	            -- Bug 5228352 --
6911 
6912 
6913                     --      --------errorout_ad(' after qp int pvt '||l_return_status );
6914 
6915                 END IF; /* Calculate tax  - update IRT rule for non cov item , cov prod */
6916 
6917                 IF NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'YES' THEN
6918 
6919                     IF clvl_rec.lse_id IN (7, 9, 18, 25) THEN
6920                         --         l_detail_rec.chr_id         :=   l_service_rec.header_id; /** header id **/
6921                         --         l_detail_rec.line_id        :=   p_contract_line_id;   /** line id **/
6922                         l_detail_rec.subline_id := clvl_rec.id;             /** Subline id **/
6923                         l_detail_rec.intent := 'OA';
6924                         l_detail_rec.currency := clvl_rec.currency_code; /** Currency code **/
6925                         l_detail_Rec.usage_qty := NULL;
6926                         l_detail_rec.usage_uom_code := NULL;
6927                         l_detail_rec.asking_unit_price := l_new_amount; /* New subine amount after cascade service price */
6928 
6929                         ----------errorout_ad(' ******* cp level  updation ******** '||l_curr_rec);
6930                         ----------errorout_ad(' subline id '||l_detail_rec.subline_id);
6931                         ----------errorout_ad(' currency '||l_detail_rec.currency);
6932                         ----------errorout_ad(' price '||l_detail_rec.asking_unit_price);
6933 
6934                         --                --------errorout_ad(' call compute price for cp  ci ');
6935 
6936                         OKS_QP_INT_PVT.COMPUTE_PRICE
6937                         (
6938                          l_api_version,
6939                          l_init_msg_list,
6940                          l_detail_rec,
6941                          l_price_details,
6942                          l_modifier_details,
6943                          l_price_break_details,
6944                          l_return_status,
6945                          l_msg_count,
6946                          l_msg_data         );
6947 
6948                         IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
6949 
6950                             RAISE G_ERROR;
6951                         END IF;
6952 
6953                     END IF;
6954 
6955 
6956                 END IF; /* end of check QP profile option */
6957 
6958                 l_sum_amt := l_sum_amt + l_new_amount;
6959 
6960                 l_old_id := clvl_rec.id;
6961                 l_old_up := clvl_rec.price_unit;
6962                 l_old_upp := clvl_rec.price_unit_percent;
6963                 l_old_lse_id := clvl_rec.lse_id ;
6964                 l_old_currency_code := clvl_rec.currency_code;
6965 
6966             END IF;
6967 
6968         END LOOP;
6969 
6970 
6971         /*** Adjust difference amount arising because of decimals ***/
6972 
6973         l_diff_amt := l_new_cascade_service_price - l_sum_amt;
6974         --  --------errorout_ad(' l_diff_amt '||l_diff_amt);
6975 
6976         IF l_diff_amt IS NOT NULL AND l_diff_amt <> 0  THEN
6977             l_clvl_rec.coverage_level_line_id := l_old_id;
6978             l_clvl_rec.price_negotiated := l_clvl_rec.price_negotiated + NVL(l_diff_amt, 0);
6979             l_clvl_rec.price_unit := l_old_up;
6980             l_clvl_rec.price_unit_percent := l_old_upp;
6981 
6982             Update_Coverage_Levels(p_clvl_rec => l_clvl_rec,
6983                                    x_return_status => x_return_status,
6984                                    x_msg_count => x_msg_count,
6985                                    x_msg_data => x_msg_data);
6986 
6987             IF Nvl(x_return_status, 'S') <> OKC_API.G_RET_STS_SUCCESS THEN
6988                 RAISE G_ERROR;
6989             END IF;
6990 
6991 
6992 
6993             /*** Calculate tax - update IRT rule for residual value **/
6994             -- Bug 5228352 --
6995             IF l_old_lse_id  IN (8, 10, 11, 12, 35 )
6996 	    OR (   l_old_lse_id IN (7, 9, 18, 25)
6997 		    AND
6998 		    NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'NO')
6999 	    THEN
7000             -- Bug 5228352 --
7001 
7002                 --       --------errorout_ad(' before calculating tax ');
7003                 G_RAIL_REC.amount := l_clvl_rec.price_negotiated + NVL(l_diff_amt, 0) ;
7004 
7005                 OKS_TAX_UTIL_PVT.Get_Tax (p_api_version => 1.0,
7006                                           p_init_msg_list => OKC_API.G_TRUE,
7007                                           p_chr_id => get_header_id,
7008                                           p_cle_id => l_old_id,
7009                                           px_rail_rec => G_RAIL_REC,
7010                                           x_msg_count => x_msg_count,
7011                                           x_msg_data => x_msg_data,
7012                                           x_return_status => l_return_status );
7013 
7014 		-- Bug 5228352 --
7015 	        IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7016                     RAISE OKC_API.G_EXCEPTION_ERROR;
7017 		ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7018                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7019                 END IF;
7020 	       -- Bug 5228352 --
7021 
7022                 --        --------errorout_ad(' error in calc tax '||l_return_status );
7023                 -- Create IRT Rule
7024 
7025                 -- OKS_QP_INT_PVT.CLEAR_RULE_TABLE ( x_rulv_tbl   =>  l_rule_tbl);
7026 
7027                 -- l_rule_rec             := l_rule_tbl(1);
7028 		-- Bug 5228352 --
7029 		open get_tax_details(l_old_id);
7030 		fetch get_tax_details into get_tax_rec;
7031 		close get_tax_details;
7032 
7033 		l_klnv_tbl(1).id := get_tax_rec.id;
7034                 l_klnv_tbl(1).cle_id := l_old_id;
7035 		l_klnv_tbl(1).object_version_number := get_tax_rec.object_version_number;
7036 		-- Bug 5228352 --
7037 
7038                 l_klnv_tbl(1).dnz_chr_id := get_header_id;
7039                 l_klnv_tbl(1).tax_inclusive_yn := g_rail_rec.amount_includes_tax_flag;
7040 
7041 
7042                 IF  g_rail_rec.amount_includes_tax_flag = 'N' THEN
7043                     l_klnv_tbl(1).tax_amount := NVL(g_rail_rec.tax_value, 0);
7044                     --    l_klnv_tbl(1).rule_information6     := g_rail_rec.amount + NVL(g_rail_rec.tax_value,0);
7045                 ELSE
7046                     l_klnv_tbl(1).tax_amount := 0;
7047                     --    l_rule_rec.rule_information6     := g_rail_rec.amount;
7048                 END IF;
7049 
7050                 ---        l_rule_rec.dnz_chr_id                := Get_header_id;
7051                 --         l_rule_rec.rule_information_category := 'IRT';
7052                 --         l_rule_rec.rule_information5         := g_rail_rec.amount_includes_tax_flag;
7053 
7054                 IF  g_rail_rec.amount_includes_tax_flag = 'N' THEN
7055                     --      l_rule_rec.rule_information4     := NVL(g_rail_rec.tax_value,0);
7056                     l_klnv_tbl(1).tax_amount := g_rail_rec.amount + NVL(g_rail_rec.tax_value, 0)  ;
7057                 ELSE
7058                     --    l_rule_rec.rule_information4     := 0;
7059                     l_klnv_tbl(1).tax_amount := g_rail_rec.amount;
7060                 END IF;
7061 
7062                 -- Update IRT rul
7063 
7064                 OKS_CONTRACT_LINE_PUB.update_line(
7065                                                   p_api_version => p_api_version,
7066                                                   p_init_msg_list => p_init_msg_list,
7067                                                   x_return_status => l_return_status,
7068                                                   x_msg_count => l_msg_count,
7069                                                   x_msg_data => l_msg_data,
7070                                                   p_klnv_tbl => l_klnv_tbl,
7071                                                   x_klnv_tbl => lx_klnv_tbl,
7072                                                   p_validate_yn => l_validate_yn);
7073        	       -- Bug 5228352 --
7074 	        IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7075                     RAISE OKC_API.G_EXCEPTION_ERROR;
7076 		ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7077                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7078                 END IF;
7079 	       -- Bug 5228352 --
7080 
7081 
7082                 /*             oks_qp_int_pvt.UPDATE_RULE ( p_rule_rec         => l_rule_rec,
7083                 p_line_id          => l_old_id,
7084                 x_return_status    => l_return_status,
7085                 x_msg_count        => x_msg_count,
7086                 x_msg_data         => x_msg_data);
7087                 */
7088                 --       --------errorout_ad(' after qp int pvt '||l_return_status );
7089 
7090             END IF; /* Calculate tax  - update IRT rule for non cov item , cov prod */
7091 
7092 
7093             /*** Profile option to be checked. If 'Yes' then call pricing engine **/
7094 
7095             IF NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'YES' THEN
7096 
7097                 IF l_old_lse_id IN (7, 9, 18, 25) THEN
7098                     --   l_detail_rec.chr_id         :=   l_service_red.header_id; /** header id **/
7099                     --   l_detail_rec.line_id        :=   l_service_rec.line_id;   /** line id **/
7100                     l_detail_rec.subline_id := l_old_id;             /** Subline id **/
7101                     l_detail_rec.intent := 'OA';
7102                     l_detail_rec.currency := l_old_currency_code; /** Currency code **/
7103                     l_detail_Rec.usage_qty := NULL;
7104                     l_detail_rec.usage_uom_code := NULL;
7105                     l_detail_rec.asking_unit_price := l_clvl_rec.price_negotiated + NVL(l_diff_amt, 0) ; /* New subine amount after cascade service price */
7106 
7107                     ----------errorout_ad(' ******* diff amt updation ******** ');
7108                     ----------errorout_ad(' subline id '||l_detail_rec.subline_id);
7109                     ----------errorout_ad(' currency '||l_detail_rec.currency);
7110                     ----------errorout_ad(' price '||l_detail_rec.asking_unit_price);
7111 
7112                     OKS_QP_INT_PVT.COMPUTE_PRICE
7113                     (
7114                      l_api_version,
7115                      l_init_msg_list,
7116                      l_detail_rec,
7117                      l_price_details,
7118                      l_modifier_details,
7119                      l_price_break_details,
7120                      l_return_status,
7121                      l_msg_count,
7122                      l_msg_data         );
7123 
7124                     IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7125                         RAISE G_ERROR;
7126                     END IF;
7127                 END IF;
7128             END IF; /** ENDIF CALL TO QP INT */
7129         END IF; /** ENDIF DIFF AMT **/
7130 
7131         -- Need to update line amount also
7132 
7133 
7134         UPDATE_LINE_AMOUNT(p_contract_line_id,
7135                            p_new_service_price,
7136                            x_return_status,
7137                            x_msg_count,
7138                            x_msg_data  );
7139 
7140 
7141         IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7142             RAISE G_ERROR;
7143         END IF;
7144 
7145 
7146         --Update Header Amount Added For Bug 2236444
7147         UPDATE_CONTRACT_AMOUNT(p_header_id => Get_Header_Id,
7148                                x_return_status => x_return_status);
7149 
7150 
7151         IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7152             RAISE G_ERROR;
7153         END IF;
7154 
7155 
7156 
7157     EXCEPTION
7158         WHEN G_ERROR THEN
7159 
7160             NULL;
7161         WHEN OTHERS THEN
7162 
7163             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKC,
7164                                 p_msg_name => G_UNEXPECTED_ERROR,
7165                                 p_token1 => G_SQLCODE_TOKEN,
7166                                 p_token1_value => SQLCODE,
7167                                 p_token2 => G_SQLERRM_TOKEN,
7168                                 p_token2_value => SQLERRM);
7169 
7170             x_return_status := G_RET_STS_UNEXP_ERROR;
7171 
7172     END Cascade_Service_Price;
7173 
7174 
7175 
7176     PROCEDURE update_quantity(p_cle_id         IN NUMBER,
7177                               x_return_status      OUT NOCOPY VARCHAR2,
7178                               x_msg_count          OUT NOCOPY NUMBER,
7179                               x_msg_data           OUT NOCOPY VARCHAR2
7180                               )
7181     IS
7182     CURSOR get_all_instances_csr IS
7183         SELECT id
7184         FROM okc_k_lines_b
7185         WHERE cle_id = p_cle_id
7186         AND  lse_id IN (9, 25);
7187 
7188     CURSOR get_okc_item_qty_csr (p_item_cle_id NUMBER) IS
7189         SELECT object1_id1, number_of_items
7190         FROM okc_k_items
7191         WHERE cle_id = p_item_cle_id;
7192 
7193     get_okc_item_qty_rec get_okc_item_qty_csr%ROWTYPE;
7194 
7195     CURSOR get_csi_item_qty_csr (p_object1_id1 VARCHAR2) IS
7196         SELECT cii.quantity
7197         FROM  CSI_ITEM_INSTANCES CII
7198         WHERE instance_id = TO_NUMBER(p_object1_id1);
7199 
7200     get_csi_item_qty_rec get_csi_item_qty_csr%ROWTYPE;
7201 
7202     l_input_details   OKS_QP_PKG.INPUT_DETAILS;
7203     l_output_details  OKS_QP_PKG.PRICE_DETAILS;
7204     l_modif_details   QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
7205     l_pb_details      OKS_QP_PKG.G_PRICE_BREAK_TBL_TYPE;
7206     l_return_status   VARCHAR2(20) := 'S';
7207     l_msg_count       NUMBER;
7208     l_msg_data        VARCHAR2(2000);
7209     BEGIN
7210 
7211         FOR get_all_instances_rec IN get_all_instances_csr
7212             LOOP
7213             OPEN get_okc_item_qty_csr(get_all_instances_rec.id);
7214             FETCH get_okc_item_qty_csr INTO get_okc_item_qty_rec;
7215             CLOSE get_okc_item_qty_csr;
7216 
7217             OPEN get_csi_item_qty_csr (get_okc_item_qty_rec.object1_id1);
7218             FETCH get_csi_item_qty_csr INTO get_csi_item_qty_rec;
7219             CLOSE get_csi_item_qty_csr;
7220 
7221             IF NVL(get_csi_item_qty_rec.quantity, 0) > NVL(get_okc_item_qty_rec.number_of_items, 0)
7222                 THEN
7223                 UPDATE okc_k_items
7224                 SET number_of_items = get_csi_item_qty_rec.quantity
7225                 WHERE cle_id = get_all_instances_rec.id;
7226 
7227                 --calling reprice
7228                 l_input_details.line_id := p_cle_id;
7229                 l_input_details.subline_id := get_all_instances_rec.id;
7230                 l_input_details.intent := 'SP';
7231                 OKS_QP_INT_PVT.Compute_Price
7232                 (
7233                  p_api_version => 1.0,
7234                  p_init_msg_list => 'T',
7235                  p_detail_rec => l_input_details,
7236                  x_price_details => l_output_details,
7237                  x_modifier_details => l_modif_details,
7238                  x_price_break_details => l_pb_details,
7239                  x_return_status => l_return_status,
7240                  x_msg_count => l_msg_count,
7241                  x_msg_data => l_msg_data
7242                  );
7243 
7244                 --refresh schedule
7245                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7246                     RAISE G_ERROR;
7247                 END IF;
7248                 oks_bill_sch.Create_Bill_Sch_CP
7249                 (
7250                  p_top_line_id => p_cle_id,
7251                  p_cp_line_id => get_all_instances_rec.id,
7252                  p_cp_new => 'N',
7253                  x_return_status => l_return_status,
7254                  x_msg_count => l_msg_count,
7255                  x_msg_data => l_msg_data);
7256 
7257                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7258                     RAISE G_ERROR;
7259                 END IF;
7260             END IF;
7261         END LOOP;
7262         x_return_status := l_return_status;
7263         x_msg_count := l_msg_count;
7264         x_msg_data := l_msg_data;
7265     EXCEPTION
7266         WHEN G_ERROR THEN
7267 
7268             NULL;
7269         WHEN OTHERS THEN
7270 
7271             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKC,
7272                                 p_msg_name => G_UNEXPECTED_ERROR,
7273                                 p_token1 => G_SQLCODE_TOKEN,
7274                                 p_token1_value => SQLCODE,
7275                                 p_token2 => G_SQLERRM_TOKEN,
7276                                 p_token2_value => SQLERRM);
7277 
7278             x_return_status := G_RET_STS_UNEXP_ERROR;
7279             x_msg_count := l_msg_count;
7280             x_msg_data := l_msg_data;
7281 
7282     END update_quantity;
7283     -- added for contact creation OCT2004
7284     PROCEDURE create_person (
7285                              p_init_msg_list                    IN      VARCHAR2 := FND_API.G_FALSE,
7286                              p_person_tbl                       IN      PERSON_TBL_TYPE,
7287                              x_party_id                         OUT NOCOPY     NUMBER,
7288                              x_party_number                     OUT NOCOPY     VARCHAR2,
7289                              x_profile_id                       OUT NOCOPY     NUMBER,
7290                              x_return_status                    OUT NOCOPY     VARCHAR2,
7291                              x_msg_count                        OUT NOCOPY     NUMBER,
7292                              x_msg_data                         OUT NOCOPY     VARCHAR2
7293                              )IS
7294     l_person_rec                     HZ_PARTY_V2PUB.person_rec_type ;
7295     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7296     l_return_status                  VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7297 
7298     BEGIN
7299         l_person_rec.person_pre_name_adjunct := p_person_tbl(1).person_pre_name_adjunct;
7300         l_person_rec.person_first_name := p_person_tbl(1).person_first_name;
7301         l_person_rec.person_last_name := p_person_tbl(1).person_last_name;
7302         l_person_rec.content_source_type := 'USER_ENTERED';
7303         l_person_rec.actual_content_source := 'SST';
7304         l_person_rec.created_by_module := 'OKS_AUTH';
7305 
7306 
7307         HZ_PARTY_V2PUB.create_person (
7308                                       p_init_msg_list => l_init_msg_list,
7309                                       p_person_rec => l_person_rec,
7310                                       x_party_id => x_party_id,
7311                                       x_party_number => x_party_number,
7312                                       x_profile_id => x_profile_id,
7313                                       x_return_status => x_return_status,
7314                                       x_msg_count => x_msg_count,
7315                                       x_msg_data => x_msg_data);
7316 
7317     EXCEPTION
7318         WHEN OTHERS THEN
7319             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7320             OKC_API.set_message
7321             (OKC_API.G_APP_NAME,
7322              G_UNEXPECTED_ERROR,
7323              G_SQLCODE_TOKEN,
7324              SQLCODE,
7325              G_SQLERRM_TOKEN,
7326              SQLERRM);
7327     END;
7328 
7329     PROCEDURE update_person (
7330                              p_init_msg_list                    IN      VARCHAR2 := FND_API.G_FALSE,
7331                              p_person_tbl                       IN      PERSON_TBL_TYPE,
7332                              p_party_object_version_number      IN     NUMBER,
7333                              x_profile_id                       OUT NOCOPY     NUMBER,
7334                              x_return_status                    OUT NOCOPY     VARCHAR2,
7335                              x_msg_count                        OUT NOCOPY     NUMBER,
7336                              x_msg_data                         OUT NOCOPY     VARCHAR2
7337                              )IS
7338     l_person_rec                     HZ_PARTY_V2PUB.person_rec_type ;
7339     l_party_rec                      HZ_PARTY_V2PUB.party_rec_type;
7340     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7341     l_party_object_version_number    NUMBER := p_party_object_version_number;
7342     BEGIN
7343 
7344         l_party_rec.party_id := p_person_tbl(1).party_id;
7345         l_person_rec.party_rec := l_party_rec;
7346         l_person_rec.person_pre_name_adjunct := p_person_tbl(1).person_pre_name_adjunct;
7347         l_person_rec.person_first_name := p_person_tbl(1).person_first_name;
7348         l_person_rec.person_last_name := p_person_tbl(1).person_last_name;
7349         l_person_rec.content_source_type := 'USER_ENTERED';
7350         l_person_rec.actual_content_source := 'SST';
7351         --l_person_rec.created_by_module       := 'OKS_AUTH';
7352 
7353         HZ_PARTY_V2PUB.update_person(
7354                                      p_init_msg_list => l_init_msg_list,
7355                                      p_person_rec => l_person_rec,
7356                                      p_party_object_version_number => l_party_object_version_number,
7357                                      x_profile_id => x_profile_id,
7358                                      x_return_status => x_return_status,
7359                                      x_msg_count => x_msg_count,
7360                                      x_msg_data => x_msg_data);
7361     EXCEPTION
7362         WHEN OTHERS THEN
7363             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7364             OKC_API.set_message
7365             (OKC_API.G_APP_NAME,
7366              G_UNEXPECTED_ERROR,
7367              G_SQLCODE_TOKEN,
7368              SQLCODE,
7369              G_SQLERRM_TOKEN,
7370              SQLERRM);
7371 
7372     END;
7373 
7374     PROCEDURE create_org_contact (
7375                                   p_init_msg_list                    IN       VARCHAR2 := FND_API.G_FALSE,
7376                                   p_org_contact_tbl                  IN       ORG_CONTACT_TBL_TYPE,
7377                                   p_relationship_tbl_type            IN       relationship_tbl_type,
7378                                   x_org_contact_id                   OUT NOCOPY      NUMBER,
7379                                   x_party_rel_id                     OUT NOCOPY      NUMBER,
7380                                   x_party_id                         OUT NOCOPY      NUMBER,
7381                                   x_party_number                     OUT NOCOPY      VARCHAR2,
7382                                   x_return_status                    OUT NOCOPY      VARCHAR2,
7383                                   x_msg_count                        OUT NOCOPY      NUMBER,
7384                                   x_msg_data                         OUT NOCOPY      VARCHAR2
7385                                   )IS
7386     l_init_msg_list         CONSTANT  VARCHAR2(1) := 'F';
7387     relationship_rel_rec    HZ_RELATIONSHIP_V2PUB.relationship_rec_type ;
7388     org_contact_rec         HZ_PARTY_CONTACT_V2PUB.org_contact_rec_type ;
7389     BEGIN
7390         relationship_rel_rec.subject_id := p_relationship_tbl_type(1).subject_id;
7391         relationship_rel_rec.subject_type := p_relationship_tbl_type(1).subject_type ; --'PERSON';
7392         relationship_rel_rec.subject_table_name := p_relationship_tbl_type(1).subject_table_name; --'HZ_PARTIES';
7393         relationship_rel_rec.object_id := p_relationship_tbl_type(1).object_id;
7394         relationship_rel_rec.object_type := p_relationship_tbl_type(1).object_type;
7395         relationship_rel_rec.object_table_name := p_relationship_tbl_type(1).object_table_name; --'HZ_PARTIES';
7396         relationship_rel_rec.relationship_code := p_relationship_tbl_type(1).relationship_code ; --'CONTACT_OF';
7397         relationship_rel_rec.relationship_type := p_relationship_tbl_type(1).relationship_type ; --'CONTACT';
7398         relationship_rel_rec.created_by_module := 'OKS_AUTH';
7399         relationship_rel_rec.content_source_type := 'USER_ENTERED';
7400         --  relationship_rel_rec.actual_content_source := 'SST';
7401         org_contact_rec.job_title_code := p_org_contact_tbl(1).job_title_code;
7402         org_contact_rec.job_title := p_org_contact_tbl(1).job_title;
7403         org_contact_rec.party_site_id := p_org_contact_tbl(1).party_site_id;
7404         org_contact_rec.created_by_module := 'OKS_AUTH';
7405         org_contact_rec.party_rel_rec := relationship_rel_rec;
7406         HZ_PARTY_CONTACT_V2PUB.create_org_contact(
7407                                                   p_init_msg_list => l_init_msg_list,
7408                                                   p_org_contact_rec => org_contact_rec,
7409                                                   x_org_contact_id => x_org_contact_id,
7410                                                   x_party_rel_id => x_party_rel_id,
7411                                                   x_party_id => x_party_id,
7412                                                   x_party_number => x_party_number,
7413                                                   x_return_status => x_return_status,
7414                                                   x_msg_count => x_msg_count,
7415                                                   x_msg_data => x_msg_data);
7416 
7417     EXCEPTION
7418         WHEN OTHERS THEN
7419             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7420             OKC_API.set_message
7421             (OKC_API.G_APP_NAME,
7422              G_UNEXPECTED_ERROR,
7423              G_SQLCODE_TOKEN,
7424              SQLCODE,
7425              G_SQLERRM_TOKEN,
7426              SQLERRM);
7427     END;
7428 
7429     PROCEDURE update_org_contact (
7430                                   p_init_msg_list                    IN       VARCHAR2 := FND_API.G_FALSE,
7431                                   p_org_contact_tbl                  IN       ORG_CONTACT_TBL_TYPE,
7432                                   p_relationship_tbl_type            IN       relationship_tbl_type,
7433                                   p_cont_object_version_number       IN OUT NOCOPY   NUMBER,
7434                                   p_rel_object_version_number        IN OUT NOCOPY   NUMBER,
7435                                   p_party_object_version_number      IN OUT NOCOPY   NUMBER,
7436                                   x_return_status                    OUT NOCOPY      VARCHAR2,
7437                                   x_msg_count                        OUT NOCOPY      NUMBER,
7438                                   x_msg_data                         OUT NOCOPY      VARCHAR2
7439                                   )IS
7440     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7441     relationship_rel_rec             HZ_RELATIONSHIP_V2PUB.relationship_rec_type ;
7442     org_contact_rec                  HZ_PARTY_CONTACT_V2PUB.org_contact_rec_type ;
7443     party_rec                        HZ_PARTY_V2PUB.PARTY_REC_TYPE ;
7444     l_cont_object_version_number     NUMBER := p_cont_object_version_number;
7445     l_rel_object_version_number      NUMBER := p_rel_object_version_number;
7446     l_party_object_version_number    NUMBER := p_party_object_version_number;
7447 
7448     BEGIN
7449         party_rec.party_id := p_relationship_tbl_type(1).relationship_id;
7450         relationship_rel_rec.party_rec := party_rec;
7451         relationship_rel_rec.subject_id := p_relationship_tbl_type(1).subject_id;
7452         relationship_rel_rec.subject_type := p_relationship_tbl_type(1).subject_type ; --'PERSON';
7453         relationship_rel_rec.subject_table_name := p_relationship_tbl_type(1).subject_table_name; --'HZ_PARTIES';
7454         relationship_rel_rec.object_id := p_relationship_tbl_type(1).object_id;
7455         relationship_rel_rec.object_type := p_relationship_tbl_type(1).object_type;
7456         relationship_rel_rec.object_table_name := p_relationship_tbl_type(1).object_table_name; --'HZ_PARTIES';
7457         relationship_rel_rec.relationship_code := p_relationship_tbl_type(1).relationship_code ; --'CONTACT_OF';
7458         relationship_rel_rec.relationship_type := p_relationship_tbl_type(1).relationship_type ; --'CONTACT';
7459         relationship_rel_rec.content_source_type := 'USER_ENTERED';
7460         relationship_rel_rec.actual_content_source := 'SST';
7461         org_contact_rec.job_title_code := p_org_contact_tbl(1).job_title_code;
7462         org_contact_rec.job_title := p_org_contact_tbl(1).job_title;
7463         org_contact_rec.org_contact_id := p_org_contact_tbl(1).org_contact_id;
7464         org_contact_rec.party_site_id := p_org_contact_tbl(1).party_site_id;
7465         org_contact_rec.party_rel_rec := relationship_rel_rec;
7466 
7467         HZ_PARTY_CONTACT_V2PUB.update_org_contact(
7468                                                   p_init_msg_list => l_init_msg_list,
7469                                                   p_org_contact_rec => org_contact_rec,
7470                                                   p_cont_object_version_number => l_cont_object_version_number,
7471                                                   p_rel_object_version_number => l_rel_object_version_number,
7472                                                   p_party_object_version_number => l_party_object_version_number,
7473                                                   x_return_status => x_return_status,
7474                                                   x_msg_count => x_msg_count,
7475                                                   x_msg_data => x_msg_data);
7476 
7477     EXCEPTION
7478         WHEN OTHERS THEN
7479             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7480             OKC_API.set_message
7481             (OKC_API.G_APP_NAME,
7482              G_UNEXPECTED_ERROR,
7483              G_SQLCODE_TOKEN,
7484              SQLCODE,
7485              G_SQLERRM_TOKEN,
7486              SQLERRM);
7487     END;
7488 
7489     PROCEDURE create_party_site (
7490                                  p_init_msg_list                 IN          VARCHAR2 := FND_API.G_FALSE,
7491                                  p_party_site_tbl                IN          PARTY_SITE_TBL_TYPE,
7492                                  x_party_site_id                 OUT NOCOPY         NUMBER,
7493                                  x_party_site_number             OUT NOCOPY         VARCHAR2,
7494                                  x_return_status                 OUT NOCOPY         VARCHAR2,
7495                                  x_msg_count                     OUT NOCOPY         NUMBER,
7496                                  x_msg_data                      OUT NOCOPY         VARCHAR2
7497                                  )IS
7498 
7499     party_site_rec                   HZ_PARTY_SITE_V2PUB.PARTY_SITE_REC_TYPE;
7500     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7501     --npalepu added on 4/26/2006 for bug # 5174716
7502     l_hz_prof_val VARCHAR2(1);
7503     l_change_prof VARCHAR2(1) := 'N';
7504     --end npalepu
7505 
7506     BEGIN
7507 
7508         party_site_rec.party_id := p_party_site_tbl(1).party_id ;
7509         party_site_rec.location_id := p_party_site_tbl(1).location_id;
7510         party_site_rec.mailstop := p_party_site_tbl(1).mailstop;
7511         party_site_rec.identifying_address_flag := 'Y';
7512         party_site_rec.created_by_module := 'OKS_AUTH';
7513 
7514         --npalepu added on 4/26/2006 for bug # 5174716
7515         --setting the profile value HZ_GENERATE_PARTY_SITE_NUMBER to Y if it is set to N
7516         --inorder to auto generate the party_site_number irrespective of the profile value
7517         l_hz_prof_val := fnd_profile.value('HZ_GENERATE_PARTY_SITE_NUMBER');
7518         IF l_hz_prof_val = 'N' THEN
7519                 fnd_profile.put('HZ_GENERATE_PARTY_SITE_NUMBER','Y');
7520                 l_change_prof := 'Y';
7521         END IF;
7522         --end npalepu
7523 
7524         HZ_PARTY_SITE_V2PUB.create_party_site(
7525                                               p_init_msg_list => l_init_msg_list,
7526                                               p_party_site_rec => party_site_rec,
7527                                               x_party_site_id => x_party_site_id,
7528                                               x_party_site_number => x_party_site_number,
7529                                               x_return_status => x_return_status,
7530                                               x_msg_count => x_msg_count,
7531                                               x_msg_data => x_msg_data);
7532 
7533         --npalepu added on 4/26/2006 for bug # 5174716
7534         IF l_change_prof = 'Y' THEN
7535                 fnd_profile.put('HZ_GENERATE_PARTY_SITE_NUMBER',l_hz_prof_val);
7536         END IF;
7537         --end npalepu
7538 
7539     EXCEPTION
7540         WHEN OTHERS THEN
7541             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7542             OKC_API.set_message
7543             (OKC_API.G_APP_NAME,
7544              G_UNEXPECTED_ERROR,
7545              G_SQLCODE_TOKEN,
7546              SQLCODE,
7547              G_SQLERRM_TOKEN,
7548              SQLERRM);
7549     END;
7550 
7551     PROCEDURE update_party_site (
7552                                  p_init_msg_list                 IN          VARCHAR2 := FND_API.G_FALSE,
7553                                  p_party_site_tbl                IN          PARTY_SITE_TBL_TYPE,
7554                                  p_object_version_number         IN OUT NOCOPY      NUMBER,
7555                                  x_return_status                 OUT NOCOPY         VARCHAR2,
7556                                  x_msg_count                     OUT NOCOPY         NUMBER,
7557                                  x_msg_data                      OUT NOCOPY         VARCHAR2
7558                                  )IS
7559     party_site_rec                   hz_party_site_v2pub.PARTY_SITE_REC_TYPE;
7560     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7561     l_object_version_number          NUMBER := p_object_version_number;
7562     BEGIN
7563 
7564         party_site_rec.party_id := p_party_site_tbl(1).party_id ;
7565         party_site_rec.location_id := p_party_site_tbl(1).location_id;
7566         party_site_rec.party_site_id := p_party_site_tbl(1).party_site_id;
7567         party_site_rec.mailstop := p_party_site_tbl(1).mailstop;
7568         HZ_PARTY_SITE_V2PUB.update_party_site(
7569                                               p_init_msg_list => l_init_msg_list,
7570                                               p_party_site_rec => party_site_rec,
7571                                               p_object_version_number => l_object_version_number,
7572                                               x_return_status => x_return_status,
7573                                               x_msg_count => x_msg_count,
7574                                               x_msg_data => x_msg_data);
7575 
7576     EXCEPTION
7577         WHEN OTHERS THEN
7578             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7579             OKC_API.set_message
7580             (OKC_API.G_APP_NAME,
7581              G_UNEXPECTED_ERROR,
7582              G_SQLCODE_TOKEN,
7583              SQLCODE,
7584              G_SQLERRM_TOKEN,
7585              SQLERRM);
7586     END;
7587 
7588     PROCEDURE create_cust_account_role (
7589                                         p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
7590                                         p_cust_account_role_tbl                 IN     CUST_ACCOUNT_ROLE_tbl_TYPE,
7591                                         x_cust_account_role_id                  OUT NOCOPY    NUMBER,
7592                                         x_return_status                         OUT NOCOPY    VARCHAR2,
7593                                         x_msg_count                             OUT NOCOPY    NUMBER,
7594                                         x_msg_data                              OUT NOCOPY    VARCHAR2
7595                                         ) IS
7596     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7597     cust_account_role_rec       Hz_cust_account_role_v2pub.cust_account_role_rec_type;
7598     BEGIN
7599         cust_account_role_rec.party_id := p_cust_account_role_tbl(1).party_id;
7600         cust_account_role_rec.role_type := p_cust_account_role_tbl(1).role_type;
7601         cust_account_role_rec.cust_account_id := p_cust_account_role_tbl(1).cust_account_id;
7602         cust_account_role_rec.cust_acct_site_id := p_cust_account_role_tbl(1).cust_acct_site_id;
7603         cust_account_role_rec.primary_flag := p_cust_account_role_tbl(1).primary_flag;
7604         cust_account_role_rec.status := p_cust_account_role_tbl(1).status;
7605         cust_account_role_rec.created_by_module := 'OKS_AUTH';
7606 
7607         Hz_cust_account_role_v2pub.create_cust_account_role(
7608                                                             p_init_msg_list => l_init_msg_list,
7609                                                             p_cust_account_role_rec => cust_account_role_rec,
7610                                                             x_cust_account_role_id => x_cust_account_role_id,
7611                                                             x_return_status => x_return_status,
7612                                                             x_msg_count => x_msg_count,
7613                                                             x_msg_data => x_msg_data);
7614 
7615     EXCEPTION
7616         WHEN OTHERS THEN
7617             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7618             OKC_API.set_message
7619             (OKC_API.G_APP_NAME,
7620              G_UNEXPECTED_ERROR,
7621              G_SQLCODE_TOKEN,
7622              SQLCODE,
7623              G_SQLERRM_TOKEN,
7624              SQLERRM);
7625     END;
7626 
7627     PROCEDURE update_cust_account_role (
7628                                         p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
7629                                         p_cust_account_role_tbl                 IN     CUST_ACCOUNT_ROLE_tbl_TYPE,
7630                                         p_object_version_number                 IN OUT NOCOPY NUMBER,
7631                                         x_return_status                         OUT NOCOPY    VARCHAR2,
7632                                         x_msg_count                             OUT NOCOPY    NUMBER,
7633                                         x_msg_data                              OUT NOCOPY    VARCHAR2
7634                                         )IS
7635     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7636     l_object_version_number          NUMBER := p_object_version_number;
7637     cust_account_role_rec       Hz_cust_account_role_v2pub.cust_account_role_rec_type;
7638     BEGIN
7639         cust_account_role_rec.cust_account_role_id := p_cust_account_role_tbl(1).cust_account_role_id;
7640         cust_account_role_rec.party_id := p_cust_account_role_tbl(1).party_id;
7641         cust_account_role_rec.role_type := p_cust_account_role_tbl(1).role_type;
7642         cust_account_role_rec.cust_account_id := p_cust_account_role_tbl(1).cust_account_id;
7643         cust_account_role_rec.cust_acct_site_id := p_cust_account_role_tbl(1).cust_acct_site_id;
7644         cust_account_role_rec.primary_flag := p_cust_account_role_tbl(1).primary_flag;
7645         cust_account_role_rec.status := p_cust_account_role_tbl(1).status;
7646 
7647         Hz_cust_account_role_v2pub.update_cust_account_role(
7648                                                             p_init_msg_list => l_init_msg_list,
7649                                                             p_cust_account_role_rec => cust_account_role_rec,
7650                                                             p_object_version_number => l_object_version_number,
7651                                                             x_return_status => x_return_status,
7652                                                             x_msg_count => x_msg_count,
7653                                                             x_msg_data => x_msg_data);
7654 
7655     EXCEPTION
7656         WHEN OTHERS THEN
7657             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7658             OKC_API.set_message
7659             (OKC_API.G_APP_NAME,
7660              G_UNEXPECTED_ERROR,
7661              G_SQLCODE_TOKEN,
7662              SQLCODE,
7663              G_SQLERRM_TOKEN,
7664              SQLERRM);
7665     END;
7666 
7667     PROCEDURE create_cust_acct_site (
7668                                      p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
7669                                      p_cust_acct_site_tbl                    IN     CUST_ACCT_SITE_TBL_TYPE,
7670                                      x_cust_acct_site_id                     OUT NOCOPY    NUMBER,
7671                                      x_return_status                         OUT NOCOPY    VARCHAR2,
7672                                      x_msg_count                             OUT NOCOPY    NUMBER,
7673                                      x_msg_data                              OUT NOCOPY    VARCHAR2
7674                                      )IS
7675     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7676     cust_acct_site_rec               HZ_CUST_ACCOUNT_SITE_V2PUB.cust_acct_site_rec_type;
7677     BEGIN
7678 
7679         cust_acct_site_rec.cust_account_id := p_cust_acct_site_tbl(1).cust_account_id ;
7680         cust_acct_site_rec.party_site_id := p_cust_acct_site_tbl(1).party_site_id;
7681         cust_acct_site_rec.created_by_module := 'OKS_AUTH' ;
7682 
7683         Hz_cust_account_site_v2pub.create_cust_acct_site(
7684                                                          p_init_msg_list => l_init_msg_list,
7685                                                          p_cust_acct_site_rec => cust_acct_site_rec,
7686                                                          x_cust_acct_site_id => x_cust_acct_site_id,
7687                                                          x_return_status => x_return_status,
7688                                                          x_msg_count => x_msg_count,
7689                                                          x_msg_data => x_msg_data);
7690 
7691     EXCEPTION
7692         WHEN OTHERS THEN
7693             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7694             OKC_API.set_message
7695             (OKC_API.G_APP_NAME,
7696              G_UNEXPECTED_ERROR,
7697              G_SQLCODE_TOKEN,
7698              SQLCODE,
7699              G_SQLERRM_TOKEN,
7700              SQLERRM);
7701 
7702     END;
7703 
7704     PROCEDURE update_cust_acct_site (
7705                                      p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
7706                                      p_cust_acct_site_tbl                    IN     CUST_ACCT_SITE_TBL_TYPE,
7707                                      p_object_version_number                 IN OUT NOCOPY NUMBER,
7708                                      x_return_status                         OUT NOCOPY    VARCHAR2,
7709                                      x_msg_count                             OUT NOCOPY    NUMBER,
7710                                      x_msg_data                              OUT NOCOPY    VARCHAR2
7711                                      )IS
7712     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7713     l_object_version_number          NUMBER := p_object_version_number;
7714     cust_acct_site_rec               HZ_CUST_ACCOUNT_SITE_V2PUB.cust_acct_site_rec_type;
7715     BEGIN
7716 
7717         cust_acct_site_rec.cust_account_id := p_cust_acct_site_tbl(1).cust_account_id ;
7718         cust_acct_site_rec.party_site_id := p_cust_acct_site_tbl(1).party_site_id;
7719         cust_acct_site_rec.cust_acct_site_id := p_cust_acct_site_tbl(1).cust_acct_site_id;
7720         --cust_acct_site_rec.created_by_module   := 'OKS_AUTH' ;
7721         Hz_cust_account_site_v2pub.update_cust_acct_site(
7722                                                          p_init_msg_list => l_init_msg_list,
7723                                                          p_cust_acct_site_rec => cust_acct_site_rec,
7724                                                          p_object_version_number => l_object_version_number,
7725                                                          x_return_status => x_return_status,
7726                                                          x_msg_count => x_msg_count,
7727                                                          x_msg_data => x_msg_data);
7728 
7729     EXCEPTION
7730         WHEN OTHERS THEN
7731             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7732             OKC_API.set_message
7733             (OKC_API.G_APP_NAME,
7734              G_UNEXPECTED_ERROR,
7735              G_SQLCODE_TOKEN,
7736              SQLCODE,
7737              G_SQLERRM_TOKEN,
7738              SQLERRM);
7739     END;
7740 
7741     /**** Partial Period Computation Project  **/
7742     -- P_intent --> 'H' Header
7743     -- P_intent --> 'T' Topline
7744     -- P_intent --> 'S' Subline
7745     FUNCTION Is_Line_Eligible(
7746                               p_api_version        IN  NUMBER,
7747                               p_init_msg_list      IN  VARCHAR2,
7748                               p_contract_hdr_id    IN  NUMBER,  -- VARCHAR2
7749                               p_contract_line_id   IN  NUMBER,
7750                               p_price_list_id      IN  NUMBER,
7751                               p_intent	       IN  VARCHAR2,
7752                               x_msg_count          OUT NOCOPY NUMBER,
7753                               x_msg_data           OUT NOCOPY VARCHAR2
7754                               ) RETURN BOOLEAN IS
7755 
7756     CURSOR check_eligiblity_line IS
7757         SELECT 'Y' FROM OKC_K_LINES_B
7758         WHERE dnz_chr_id = p_contract_hdr_id
7759         AND   id = p_contract_line_id
7760         AND(date_terminated IS NULL OR date_terminated > TRUNC(SYSDATE))
7761         AND date_cancelled IS NULL
7762         AND end_date > NVL(oks_bill_util_pub.get_billed_upto(id, p_intent), end_date - 1);
7763 
7764 
7765     CURSOR get_lines_id IS
7766         SELECT ID, LSE_ID FROM OKC_K_LINES_B
7767         WHERE dnz_chr_id = p_contract_hdr_id
7768         AND cle_id IS NULL
7769         AND(date_terminated IS NULL OR date_terminated > TRUNC(SYSDATE))
7770         AND date_cancelled IS NULL
7771         AND end_date > NVL(oks_bill_util_pub.get_billed_upto(id, 'T'), end_date - 1);
7772 
7773     CURSOR get_lines_details (p_chr_id IN NUMBER, p_cle_id IN NUMBER) IS
7774         SELECT  locked_price_list_id,
7775             locked_price_list_line_id
7776         FROM    OKS_k_LINES_B
7777         WHERE   dnz_chr_id = p_chr_id
7778         AND     cle_id = p_cle_id ;
7779 
7780     l_return_status VARCHAR2(2);
7781     l_status        VARCHAR2(2);
7782     l_locked_price_list_line_id NUMBER;
7783     l_locked_price_list_id NUMBER;
7784     l_source_price_list_line_id NUMBER;
7785     l_api_version          NUMBER := 1.0;
7786     l_init_msg_list        VARCHAR2(1) := 'T';
7787     l_msg_count            NUMBER;
7788     l_msg_data             VARCHAR2(1000);
7789 
7790     BEGIN
7791         -- If Intent is 'H' the call is made from
7792         -- Authoring and we would update the price list
7793         -- Else find the status whether the line is eligible
7794         -- for repricing or not.
7795 
7796         IF P_intent = 'H'
7797             THEN
7798             FOR cur_rec IN get_lines_id
7799                 LOOP
7800                 UPDATE okc_k_lines_b
7801                 SET price_list_id = p_price_list_id
7802                 WHERE dnz_chr_id = p_contract_hdr_id
7803                 AND cle_id IS NULL
7804                 AND ID = CUR_REC.id;
7805 
7806                 IF CUR_REC.lse_id  IN (12, 13) THEN
7807                     -- delete the price break given for Usage line
7808                     -- CURSOR to fetch locked list details
7809 
7810                     OPEN get_lines_details (p_contract_hdr_id, cur_rec.id);
7811                     FETCH get_lines_details INTO l_locked_price_list_id, l_locked_price_list_line_id;
7812                     CLOSE get_lines_details;
7813                     l_source_price_list_line_id := l_locked_price_list_line_id;
7814 
7815                     IF  l_source_price_list_line_id IS NOT NULL THEN
7816                         oks_qp_pkg.delete_locked_pricebreaks(l_api_version,
7817                                                              l_source_price_list_line_id,
7818                                                              l_init_msg_list,
7819                                                              l_return_status,
7820                                                              l_msg_count,
7821                                                              l_msg_data);
7822                         IF l_return_status <> 'S' THEN
7823                             l_status := 'N';
7824                             EXIT;
7825                         END IF;
7826                     END IF;
7827                 END IF;
7828 
7829                 UPDATE OKS_K_LINES_B SET
7830                 locked_price_list_id = NULL,
7831                 locked_price_list_line_id = NULL
7832                 WHERE dnz_chr_id = p_contract_hdr_id
7833                 AND cle_id = cur_rec.id ;
7834             END LOOP;
7835             l_status := nvl(l_status, 'Y');
7836         ELSE
7837             OPEN check_eligiblity_line;
7838             FETCH check_eligiblity_line INTO l_status;
7839             CLOSE check_eligiblity_line;
7840         END IF;
7841 
7842         IF NVL(l_status, 'X') = 'Y'
7843             THEN
7844             RETURN(TRUE);
7845         ELSE
7846             RETURN(FALSE);
7847         END IF;
7848     EXCEPTION
7849         WHEN OTHERS THEN
7850             RETURN(FALSE);
7851             OKC_API.set_message
7852             (OKC_API.G_APP_NAME,
7853              G_UNEXPECTED_ERROR,
7854              G_SQLCODE_TOKEN,
7855              SQLCODE,
7856              G_SQLERRM_TOKEN,
7857              SQLERRM);
7858 
7859     END Is_Line_Eligible;
7860     /**** Partial Period Computation Project  **/
7861     -- end contact creation OCT 2004
7862 
7863         /*
7864         This new procedure was added to resolve bug 5243626.
7865         It updates amount for a topline if and only if topline amount
7866         does not euqal to the sum of subline amounts. Similarly it
7867         updates the header amount if and only if, the header amount does
7868         not equal the sum of line amounts.
7869 
7870         This avoids unncessary updates to lines and prevents record locking
7871         when multiple users access the same contract. The example given below
7872         illustrates record locking in authoring and how it can be avoided in most cases
7873 
7874                     User 1 Action                       User 2 Action
7875         Time A      Open Contract K1                    Open same Contract K1
7876 
7877         Time B      Modify contract header              Modify topline 1
7878                     -Header record locked               -Top line record locked.
7879                     -No amount changes required.        -No amount changes required.
7880 
7881         Time C      Try to save contract K1             No action
7882                     -Application hangs as               -User 2 continues to hold lock
7883                     -unconditional update of topline    -on topline 1.
7884                     -amount waits for lock on topline
7885                     -1 to be released by User 2.
7886                     -Header and contract version number
7887                     -updated.
7888 
7889         Time D      No action                           Try to save contract K1
7890                                                         -Deadlock detected
7891                                                         -User 1 is waiting for lock on
7892                                                         -topline 1 held by user 2.
7893                                                         -User 2 is waiting for lock on
7894                                                         -version number held by user 1.
7895 
7896         To avoid, the above record locking and deadlock, we one needs to
7897             1. Conditionally update the topline amount and header amount. Do not
7898                update if amounts are in sync whith child entities.
7899             2. Do not update contract version as part of header/line or any other
7900                enitity update. Defer contract version update till all other updates
7901                are successful.
7902 
7903         Please note that if two users attempt to modify the same line or same entity
7904         in a contract, record locking cannot be and should not be prevented.
7905 
7906     */
7907        PROCEDURE CHECK_UPDATE_AMOUNTS
7908     (
7909      p_api_version                           IN NUMBER,
7910      p_init_msg_list                         IN VARCHAR2 DEFAULT FND_API.G_FALSE,
7911      p_commit                                IN VARCHAR2 DEFAULT FND_API.G_FALSE,
7912      p_chr_id                                IN NUMBER,
7913      x_msg_count                             OUT NOCOPY    NUMBER,
7914      x_msg_data                              OUT NOCOPY    VARCHAR2,
7915      x_return_status                         OUT NOCOPY    VARCHAR2
7916     )
7917     IS
7918 
7919       l_api_name CONSTANT VARCHAR2(30) := 'CHECK_UPDATE_AMOUNTS';
7920     l_api_version CONSTANT NUMBER := 1;
7921     l_mod_name VARCHAR2(256) := lower(G_APP_NAME_OKS) || '.plsql.' || G_PKG_NAME || '.' || l_api_name;
7922     l_error_text VARCHAR2(512);
7923 
7924     E_RESOURCE_BUSY  EXCEPTION;
7925     PRAGMA  EXCEPTION_INIT(E_Resource_Busy, -00054);
7926 
7927     l_tl_id_tbl         num_tbl_type;
7928     l_tl_amt_tbl        num_tbl_type;
7929     l_sl_amt_tbl        num_tbl_type;
7930     l_tl_amt_tax_tbl    num_tbl_type;
7931     l_sl_amt_tax_tbl    num_tbl_type;
7932     l_tl_amt            NUMBER;
7933     l_hdr_amt           NUMBER;
7934     l_hdr_amt_tax       NUMBER;
7935     l_tl_amt_tax        NUMBER;
7936     l_dummy             NUMBER;
7937     l_line_name         VARCHAR2(2000);
7938     l_k_num             VARCHAR2(450);
7939     l_header_cancelled  NUMBER;
7940     l_topline_cancelled NUMBER;
7941 
7942     --select all toplines where topline amount is not equal to sum of subline amounts
7943     CURSOR c_k_toplines (cp_chr_id IN NUMBER) IS
7944         SELECT a.id, nvl(a.price_negotiated, 0) topline_amt,
7945         SUM(nvl(b.price_negotiated,0)) sum_subline_amt,
7946         nvl(c.tax_amount,0) topline_tax_amt,
7947         SUM(nvl(d.tax_amount,0)) sum_subline_tax_amt
7948         FROM okc_k_lines_b a, okc_k_lines_b b,
7949              oks_k_lines_b c, oks_k_lines_b d
7950         WHERE a.dnz_chr_id = cp_chr_id AND a.lse_id IN (1,12,14,19)
7951         AND b.dnz_chr_id = a.dnz_chr_id AND b.cle_id = a.id
7952         AND a.id=c.cle_id AND b.id=d.cle_id
7953         AND b.lse_id IN (7,8,9,10,11,35,13,18,25)
7954         AND a.date_cancelled is null
7955         AND b.date_cancelled is null
7956         GROUP BY a.id, a.price_negotiated,c.tax_amount
7957         HAVING nvl(a.price_negotiated, 0) <> SUM(nvl(b.price_negotiated,0))
7958               OR nvl(c.tax_amount, 0) <> SUM(nvl(d.tax_amount,0));
7959 
7960 
7961     CURSOR c_lock_tl(cp_id IN NUMBER) IS
7962         SELECT price_negotiated
7963         FROM okc_k_lines_b WHERE id = cp_id
7964         FOR UPDATE OF price_negotiated NOWAIT;
7965 
7966     CURSOR c_line_name(cp_id IN NUMBER) IS
7967         SELECT substr(RTRIM(RTRIM(line_number) || ', ' || RTRIM(lsev.name) || ' ' || RTRIM(clev.name)), 1, 2000) line_name
7968         FROM   okc_line_styles_v lsev, okc_k_lines_v clev
7969         WHERE  lsev.id = clev.lse_id
7970         AND    clev.id =  cp_id;
7971 
7972     CURSOR c_k_hdr(cp_chr_id IN NUMBER) IS
7973         SELECT a.contract_number ||' '|| a.contract_number_modifier,
7974         nvl(a.estimated_amount, 0) hdr_amt,
7975         SUM(nvl(b.price_negotiated,0)) sum_tl_line_amt,
7976         nvl(c.tax_amount,0) hdr_tax_amt,
7977         SUM(nvl(d.tax_amount,0)) sum_tl_line_amt_tax
7978         FROM okc_k_headers_all_b a, okc_k_lines_b b,
7979              oks_k_headers_b c, oks_k_lines_b d
7980         WHERE a.id = cp_chr_id
7981         AND b.dnz_chr_id = a.id AND b.cle_id IS NULL
7982         AND d.dnz_chr_id = c.chr_id AND d.cle_id=b.id
7983         AND b.date_cancelled is null
7984         AND b.lse_id IN (1,12,14,19,46)
7985         GROUP BY a.contract_number, a.contract_number_modifier, a.estimated_amount,c.tax_amount;
7986 
7987         CURSOR c_lock_hdr(cp_chr_id IN NUMBER) IS
7988         SELECT estimated_amount
7989         FROM okc_k_headers_all_b WHERE id = cp_chr_id
7990         FOR UPDATE OF estimated_amount NOWAIT;
7991 
7992      -- select all the toplines which has cancelled amount not equal to those of sublines
7993     CURSOR c_k_toplines_cancelled (cp_chr_id IN NUMBER) IS
7994         SELECT a.id, nvl(a.cancelled_amount, 0) topline_canceled_amt,
7995             SUM(nvl(b.price_negotiated,0)) sum_subline_cancelled_amt
7996         FROM okc_k_lines_b a, okc_k_lines_b b
7997         WHERE a.dnz_chr_id = cp_chr_id AND a.lse_id IN (1,12,14,19)
7998 	        AND b.dnz_chr_id = a.dnz_chr_id AND b.cle_id = a.id
7999         AND a.date_cancelled is null
8000         AND b.date_cancelled is not null
8001         GROUP BY a.id, a.cancelled_amount
8002         HAVING nvl(a.cancelled_amount, 0) <> SUM(nvl(b.price_negotiated,0));
8003 
8004      -- select header cancelled amount and sum of topline cancelled amounts
8005      CURSOR c_k_hdr_cancelled(cp_chr_id IN NUMBER) IS
8006         SELECT
8007             nvl(a.cancelled_amount, 0) hdr_cancelled_amt,
8008             SUM(nvl(b.cancelled_amount,0)) sum_tl_line_cancelled_amt
8009         FROM okc_k_headers_all_b a, okc_k_lines_b b
8010         WHERE a.id = cp_chr_id
8011         AND b.dnz_chr_id = a.id AND b.cle_id IS NULL
8012         AND b.lse_id IN (1,12,14,19,46)
8013         GROUP BY a.cancelled_amount;
8014 
8015     BEGIN
8016 
8017         --log key input parameters
8018         IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8019             FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.begin', 'p_api_version=' || p_api_version ||' ,p_commit='|| p_commit ||' ,p_chr_id='|| p_chr_id);
8020         END IF;
8021 
8022         --standard api initilization and checks
8023         SAVEPOINT check_update_amounts_PVT;
8024         IF NOT FND_API.compatible_api_call (l_api_version, p_api_version, l_api_name, G_PKG_NAME)THEN
8025             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8026         END IF;
8027         IF FND_API.to_boolean(p_init_msg_list ) THEN
8028             FND_MSG_PUB.initialize;
8029         END IF;
8030         x_return_status := FND_API.G_RET_STS_SUCCESS;
8031 
8032         --get all toplines that are out of sync with sublines
8033         OPEN c_k_toplines(p_chr_id);
8034         LOOP
8035              FETCH c_k_toplines BULK COLLECT INTO l_tl_id_tbl, l_tl_amt_tbl, l_sl_amt_tbl,l_tl_amt_tax_tbl,l_sl_amt_tax_tbl LIMIT G_BULK_FETCH_LIMIT;
8036             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8037                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.c_k_toplines.bulk_fetch', 'l_tl_id_tbl.count='||l_tl_id_tbl.count);
8038             END IF;
8039 
8040             EXIT WHEN (l_tl_id_tbl.count = 0);
8041 
8042             FOR i IN l_tl_id_tbl.first..l_tl_id_tbl.last LOOP
8043 
8044                 --before updating the topline amount, first try to obtain a lock on the topline
8045                 --if the lock fails, another user is holding the lock, exit with appropriate
8046                 --error message. If the lock succeeds, update the top line amount
8047                 BEGIN
8048 
8049                     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8050                         FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_line', 'checking lock for line id='||l_tl_id_tbl(i));
8051                     END IF;
8052 
8053                     IF (l_tl_amt_tbl(i) <> l_sl_amt_tbl(i))OR ( l_tl_amt_tax_tbl(i) <> l_sl_amt_tax_tbl(i)) THEN
8054                         OPEN c_lock_tl(l_tl_id_tbl(i));
8055                         FETCH c_lock_tl INTO l_dummy;
8056                         CLOSE c_lock_tl;
8057                     END IF;
8058                 EXCEPTION
8059                     WHEN E_RESOURCE_BUSY THEN
8060                         IF c_lock_tl%isopen THEN
8061                             CLOSE c_lock_tl;
8062                         END IF;
8063                         OPEN c_line_name(l_tl_id_tbl(i));
8064                         FETCH c_line_name INTO l_line_name;
8065                         CLOSE c_line_name;
8066 
8067                         --set the error message on the error stack to inform the user
8068                         FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_LINE_LOCKED');
8069                         FND_MESSAGE.set_token('LINE_NAME', l_line_name);
8070 
8071                         IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8072                             FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_line_fail', FALSE);
8073                         END IF;
8074                         FND_MSG_PUB.ADD;
8075 
8076                         l_tl_id_tbl.delete;
8077                         l_tl_amt_tbl.delete;
8078                         l_sl_amt_tbl.delete;
8079                         l_tl_amt_tax_tbl.delete;
8080                         l_sl_amt_tax_tbl.delete;
8081 
8082                         RAISE FND_API.g_exc_error;
8083 
8084                 END; --of anonymous block checking topline locks
8085 
8086             END LOOP;
8087 
8088             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8089                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'able to lock all fetched toplines - updating amount');
8090             END IF;
8091 
8092             --if we come till here, we where able to obtain locks on all the toplines fectched previously
8093             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8094                 UPDATE okc_k_lines_b
8095                     SET price_negotiated = l_sl_amt_tbl(j)
8096                     WHERE id = l_tl_id_tbl(j);
8097 
8098             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8099                 UPDATE oks_k_lines_b
8100                     SET tax_amount = l_sl_amt_tax_tbl(j)
8101                     WHERE cle_id = l_tl_id_tbl(j);
8102 
8103             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8104                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'amounts updated');
8105             END IF;
8106 
8107         END LOOP; --of bulk fetch loop
8108         CLOSE c_k_toplines;
8109         l_tl_id_tbl.delete;
8110         l_tl_amt_tbl.delete;
8111         l_sl_amt_tbl.delete;
8112         l_tl_amt_tax_tbl.delete;
8113         l_sl_amt_tax_tbl.delete;
8114 
8115         OPEN c_k_hdr(p_chr_id);
8116         FETCH c_k_hdr INTO l_k_num, l_hdr_amt, l_tl_amt,l_hdr_amt_tax,l_tl_amt_tax;
8117         CLOSE c_k_hdr;
8118 
8119         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8120             FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_hdr', 'db hdr amt='||l_hdr_amt||' , sum of toplines='||l_tl_amt);
8121         END IF;
8122 
8123         --update the header only if required
8124          IF (l_hdr_amt <> l_tl_amt) OR(l_hdr_amt_tax <> l_tl_amt_tax) THEN
8125 
8126             --before updating the header amount, first try to obtain a lock on the header
8127             --if the lock fails, another user is holding the lock, exit with appropriate
8128             --error message. If the lock succeeds, update the header amount
8129             BEGIN
8130 
8131                 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8132                     FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_hdr', 'checking lock for header id='||p_chr_id);
8133                 END IF;
8134 
8135                 OPEN c_lock_hdr(p_chr_id);
8136                 FETCH c_lock_hdr INTO l_dummy;
8137                 CLOSE c_lock_hdr;
8138 
8139                 IF (l_hdr_amt <> l_tl_amt) THEN
8140                     UPDATE okc_k_headers_all_b
8141                     SET estimated_amount = l_tl_amt
8142                     WHERE id = p_chr_id;
8143                 END IF;
8144 
8145                 IF (l_hdr_amt_tax <> l_tl_amt_tax) THEN
8146                     UPDATE oks_k_headers_b
8147                     SET tax_amount = l_tl_amt_tax
8148                     where chr_id = p_chr_id;
8149                 END IF;
8150 
8151             EXCEPTION
8152                 WHEN E_RESOURCE_BUSY THEN
8153                     IF c_lock_hdr%isopen THEN
8154                         CLOSE c_lock_hdr;
8155                     END IF;
8156                     --set the error message on the error stack to inform the user
8157                     FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_HEADER_LOCKED');
8158                     FND_MESSAGE.set_token('CONTRACT_NUMBER', l_k_num);
8159 
8160                     IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8161                         FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_header_fail', FALSE);
8162                     END IF;
8163                     FND_MSG_PUB.ADD;
8164 
8165                     RAISE FND_API.g_exc_error;
8166 
8167             END; --of anonymous block checking header lock
8168 
8169         END IF; --of (l_hdr_amt <> l_tl_amt) OR(l_hdr_amt_tax <> l_tl_amt_tax) THEN
8170 
8171            -- to update cancelled amount of toplines.First get all toplines that are out of sync with sublines
8172         OPEN c_k_toplines_cancelled(p_chr_id);
8173         LOOP
8174              FETCH c_k_toplines_cancelled BULK COLLECT INTO l_tl_id_tbl, l_tl_amt_tbl, l_sl_amt_tbl LIMIT G_BULK_FETCH_LIMIT;
8175             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8176                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.c_k_toplines_cancelled.bulk_fetch', 'l_tl_id_tbl.count='||l_tl_id_tbl.count);
8177             END IF;
8178 
8179             EXIT WHEN (l_tl_id_tbl.count = 0);
8180 
8181             FOR i IN l_tl_id_tbl.first..l_tl_id_tbl.last LOOP
8182 
8183                 --before updating the topline cancelled amount, first try to obtain a lock on the topline
8184                 --if the lock fails, another user is holding the lock, exit with appropriate
8185                 --error message. If the lock succeeds, update the top line cancelled amount
8186                 BEGIN
8187 
8188                     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8189                         FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_line', 'checking lock for line id='||l_tl_id_tbl(i));
8190                     END IF;
8191 
8192                     OPEN c_lock_tl(l_tl_id_tbl(i));
8193                     FETCH c_lock_tl INTO l_dummy;
8194                     CLOSE c_lock_tl;
8195 
8196                 EXCEPTION
8197                     WHEN E_RESOURCE_BUSY THEN
8198                         IF c_lock_tl%isopen THEN
8199                             CLOSE c_lock_tl;
8200                         END IF;
8201                         OPEN c_line_name(l_tl_id_tbl(i));
8202                         FETCH c_line_name INTO l_line_name;
8203                         CLOSE c_line_name;
8204 
8205                         --set the error message on the error stack to inform the user
8206                         FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_LINE_LOCKED');
8207                         FND_MESSAGE.set_token('LINE_NAME', l_line_name);
8208 
8209                         IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8210                             FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_line_fail', FALSE);
8211                         END IF;
8212                         FND_MSG_PUB.ADD;
8213 
8214                         l_tl_id_tbl.delete;
8215                         l_tl_amt_tbl.delete;
8216                         l_sl_amt_tbl.delete;
8217 
8218                         RAISE FND_API.g_exc_error;
8219 
8220                 END; --of anonymous block checking topline locks
8221 
8222             END LOOP;
8223 
8224             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8225                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'able to lock all fetched toplines - updating canceled amount');
8226             END IF;
8227 
8228             --if we come till here, we where able to obtain locks on all the toplines fectched previously
8229             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8230                 update okc_k_lines_b
8231                     set cancelled_amount =l_sl_amt_tbl(j)
8232                     where id=l_tl_id_tbl(j);
8233 
8234             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8235                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'cancelled amounts updated');
8236             END IF;
8237 
8238         END LOOP; --of bulk fetch loop
8239         CLOSE c_k_toplines_cancelled;
8240         l_tl_id_tbl.delete;
8241         l_tl_amt_tbl.delete;
8242         l_sl_amt_tbl.delete;
8243 
8244         -- update cancelled amount in header
8245         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8246                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_header', 'to update header cancelled amount not equal to sum of toplines.');
8247         END IF;
8248 
8249         OPEN c_k_hdr_cancelled(p_chr_id);
8250         FETCH c_k_hdr_cancelled INTO l_header_cancelled,l_topline_cancelled;
8251         CLOSE c_k_hdr_cancelled;
8252 
8253         --update the header cancelled amount only if required
8254         IF l_header_cancelled <> l_topline_cancelled THEN
8255 
8256             --before updating the header amount, first try to obtain a lock on the header
8257             --if the lock fails, another user is holding the lock, exit with appropriate
8258             --error message. If the lock succeeds, update the header amount
8259             BEGIN
8260 
8261                 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8262                     FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_hdr', 'checking lock for header id='||p_chr_id);
8263                 END IF;
8264 
8265                 OPEN c_lock_hdr(p_chr_id);
8266                 FETCH c_lock_hdr INTO l_dummy;
8267                 CLOSE c_lock_hdr;
8268 
8269                 update okc_k_headers_all_b
8270                 set cancelled_amount = l_topline_cancelled
8271                 where id=p_chr_id;
8272 
8273             EXCEPTION
8274                 WHEN E_RESOURCE_BUSY THEN
8275                     IF c_lock_hdr%isopen THEN
8276                         CLOSE c_lock_hdr;
8277                     END IF;
8278                     --set the error message on the error stack to inform the user
8279                     FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_HEADER_LOCKED');
8280                     FND_MESSAGE.set_token('CONTRACT_NUMBER', l_k_num);
8281 
8282                     IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8283                         FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_header_fail', FALSE);
8284                     END IF;
8285                     FND_MSG_PUB.ADD;
8286 
8287                     RAISE FND_API.g_exc_error;
8288 
8289             END; --of anonymous block checking header lock
8290 
8291         END IF; --of (l_header_cancelled <> l_topline_cancelled) THEN
8292 
8293 	    IF FND_API.to_boolean(p_commit) THEN
8294 		    COMMIT;
8295 	    END IF;
8296 
8297         --exit
8298         IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8299             FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
8300         END IF;
8301         FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
8302 
8303     EXCEPTION
8304         WHEN FND_API.g_exc_error THEN
8305             ROLLBACK TO check_update_amounts_PVT;
8306             x_return_status := FND_API.g_ret_sts_error ;
8307 
8308             IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8309                 FND_LOG.string(FND_LOG.level_error, l_mod_name || '.end_error', 'x_return_status=' || x_return_status);
8310             END IF;
8311             FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
8312             IF (c_k_toplines%isopen) THEN
8313                 CLOSE c_k_toplines;
8314             END IF;
8315             IF (c_lock_tl%isopen) THEN
8316                 CLOSE c_lock_tl;
8317             END IF;
8318             IF (c_line_name%isopen) THEN
8319                 CLOSE c_line_name;
8320             END IF;
8321             IF (c_k_hdr%isopen) THEN
8322                 CLOSE c_k_hdr;
8323             END IF;
8324             IF (c_lock_hdr%isopen) THEN
8325                 CLOSE c_lock_hdr;
8326             END IF;
8327 
8328 
8329         WHEN FND_API.g_exc_unexpected_error THEN
8330             ROLLBACK TO check_update_amounts_PVT;
8331             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8332 
8333             IF (FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level) THEN
8334                 FND_LOG.string(FND_LOG.level_unexpected, l_mod_name || '.end_unexpected_error', 'x_return_status=' || x_return_status);
8335             END IF;
8336             FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
8337             IF (c_k_toplines%isopen) THEN
8338                 CLOSE c_k_toplines;
8339             END IF;
8340             IF (c_lock_tl%isopen) THEN
8341                 CLOSE c_lock_tl;
8342             END IF;
8343             IF (c_line_name%isopen) THEN
8344                 CLOSE c_line_name;
8345             END IF;
8346             IF (c_k_hdr%isopen) THEN
8347                 CLOSE c_k_hdr;
8348             END IF;
8349             IF (c_lock_hdr%isopen) THEN
8350                 CLOSE c_lock_hdr;
8351             END IF;
8352 
8353         WHEN OTHERS THEN
8354             ROLLBACK TO check_update_amounts_PVT;
8355             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8356 
8357             IF (FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level) THEN
8358                 --first log the sqlerrm
8359                 l_error_text := substr (SQLERRM, 1, 240);
8360                 FND_LOG.string(FND_LOG.level_unexpected, l_mod_name || '.end_other_error', l_error_text);
8361                 --then add it to the message api list
8362                 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name, l_error_text);
8363             END IF;
8364             FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
8365             IF (c_k_toplines%isopen) THEN
8366                 CLOSE c_k_toplines;
8367             END IF;
8368             IF (c_lock_tl%isopen) THEN
8369                 CLOSE c_lock_tl;
8370             END IF;
8371             IF (c_line_name%isopen) THEN
8372                 CLOSE c_line_name;
8373             END IF;
8374             IF (c_k_hdr%isopen) THEN
8375                 CLOSE c_k_hdr;
8376             END IF;
8377             IF (c_lock_hdr%isopen) THEN
8378                 CLOSE c_lock_hdr;
8379             END IF;
8380 
8381     END CHECK_UPDATE_AMOUNTS;
8382 
8383 
8384     FUNCTION get_net_reading(p_counter_id NUMBER)
8385     RETURN  NUMBER IS
8386 
8387      CURSOR c1 IS
8388      SELECT counter_value_id
8389      FROM   CSI_COUNTER_READINGS
8390      WHERE  counter_id = p_counter_id
8391      AND    value_timestamp in
8392         (select max(value_timestamp) from CSI_COUNTER_READINGS
8393          where counter_id = p_counter_id
8394          and disabled_flag='N');
8395 
8396      l_counter_value_id NUMBER;
8397 
8398      BEGIN
8399 
8400       OPEN c1;
8401       FETCH c1 INTO l_counter_value_id;
8402       CLOSE c1;
8403 
8404       RETURN l_counter_value_id;
8405 
8406      END get_net_reading;
8407 
8408 
8409 END OKS_AUTH_UTIL_PVT;