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.34.12020000.6 2013/05/31 08:19:58 skuchima 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     --skuchima  12687381 Added new function to fetch the install site name as per the install location type
657 
658    FUNCTION  fetch_install_site_name (p_instance_id IN NUMBER,
659                                       p_install_location_id IN number) RETURN VARCHAR2 IS
660       l_install_loc_type VARCHAR2(100);
661       l_install_site_name VARCHAR2(2000);
662 
663 
664       CURSOR l_site_name_csr IS
665         SELECT S.DESCRIPTION
666         FROM   OKX_PARTY_SITES_V S
667         WHERE  S.ID1 = p_install_location_id;
668 
669       CURSOR l_loc_site_name_csr  IS
670              SELECT
671   SUBSTR(replace(arp_addr_label_pkg.format_address
672   (NULL,HZ.ADDRESS1,HZ.ADDRESS2,HZ.ADDRESS3,HZ.ADDRESS4,HZ.CITY,HZ.COUNTY,HZ.STATE,HZ.PROVINCE,HZ.POSTAL_CODE,NULL,HZ.COUNTRY,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'N','N',80,1,1),fnd_global.local_chr(10)),1,80)
673              FROM HZ_LOCATIONS HZ
674              WHERE HZ.LOCATION_ID=p_install_location_id;
675 
676 
677      CURSOR l_vendor_site_name_csr  IS
678             SELECT
679    SUBSTR(replace(arp_addr_label_pkg.format_address
680    (NULL,vs.address_line1,vs.address_line2,vs.address_line3,vs.address_line4,vs.city,VS.COUNTY,vs.state,VS.PROVINCE, vs.zip,NULL,VS.COUNTRY,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'N','N',80,1,1),fnd_global.local_chr(10)),1,80)
681             FROM PO_VENDOR_SITES_ALL vs
682             WHERE vs.VENDOR_SITE_ID  =p_install_location_id;
683 
684 
685      CURSOR l_int_site_name_csr  IS
686             SELECT
687      SUBSTR(replace(arp_addr_label_pkg.format_address
688      (NULL,hr.address_line_1,hr.address_line_2,hr.address_line_3,null,hr.town_or_city,null,hr.region_2,null,hr.postal_code,NULL,hr.COUNTRY,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'N','N',80,1,1),fnd_global.local_chr(10)),1,80)
689             FROM hr_locations hr
690             WHERE hr.LOCATION_ID =p_install_location_id;
691 
692      BEGIN
693 
694           SELECT INSTALL_LOCATION_TYPE_CODE INTO l_install_loc_type FROM csi_item_instances WHERE instance_id=p_instance_id;
695 
696 
697              IF(l_install_loc_type='HZ_PARTY_SITES')   THEN
698 
699                      OPEN  l_site_name_csr;
700                       FETCH l_site_name_csr INTO l_install_site_name;
701                      CLOSE l_site_name_csr;
702 
703               ELSIF(l_install_loc_type='HZ_LOCATIONS')   THEN
704 
705                      OPEN  l_loc_site_name_csr;
706                       FETCH l_loc_site_name_csr INTO l_install_site_name;
707                      CLOSE l_loc_site_name_csr;
708 
709 
710               ELSIF(l_install_loc_type='VENDOR_SITE')   THEN
711 
712                          OPEN  l_vendor_site_name_csr;
713                       FETCH l_vendor_site_name_csr INTO l_install_site_name;
714                      CLOSE l_vendor_site_name_csr;
715 
716 
717                 ELSIF(l_install_loc_type='INTERNAL_SITE')   THEN
718 
719                         OPEN  l_int_site_name_csr;
720                       FETCH l_int_site_name_csr INTO l_install_site_name;
721                      CLOSE l_int_site_name_csr;
722 
723                 END IF;
724 
725                 RETURN l_install_site_name ;
726 
727         EXCEPTION
728             WHEN OTHERS THEN
729                 return '';
730 
731        END fetch_install_site_name;
732 
733 
734 
735 
736 
737     /*****************************************************************/
738 
739 
740     PROCEDURE populate_table(p_prod_tbl         IN    prod_tbl,
741                              p_filter           IN    VARCHAR2,
742                              px_rowcount        IN OUT NOCOPY NUMBER,
743                              p_display_pref     IN    VARCHAR2,
744                              x_prod_selections_tbl  IN OUT NOCOPY  prod_selections_tbl )
745     IS
746     l_price              NUMBER;
747     l_name               VARCHAR2(1000);
748     l_install_site_id    OKX_PARTY_SITES_V.id1%TYPE;
749     -- Bug 4915711 --
750     -- l_install_site_name  OKX_PARTY_SITES_V.DESCRIPTION%TYPE;
751     l_install_site_name  VARCHAR2(2000);
752     -- Bug 4915711 --
753 
754     rowcount             NUMBER ;
755     l_display_name       VARCHAR2(2000); -- 4915711 --
756     j                    NUMBER;
757     l_uom_desc           OKx_UNITS_OF_MEASURE_v.unit_of_measure_tl%TYPE;
758 
759     CURSOR l_site_name_csr(l_install_site_id NUMBER) IS
760         SELECT S.DESCRIPTION
761         FROM   OKX_PARTY_SITES_V S
762         WHERE  S.ID1 = l_install_site_id;
763 
764     CURSOR l_csr_uom_desc(p_uom_code IN VARCHAR2)
765         IS
766         SELECT unit_of_measure_tl
767         FROM OKX_UNITS_OF_MEASURE_V
768         WHERE uom_code = p_uom_code ;
769 
770 
771     l_gen_name           OKX_SYSTEM_ITEMS_V.name%TYPE;
772     l_gen_desc           OKX_SYSTEM_ITEMS_V.description%TYPE;
773     BEGIN
774         rowcount := px_rowcount;
775 
776         ----------------------errorout_an(' in populate table ');
777 
778         FOR j IN 1 .. p_prod_tbl.COUNT LOOP
779 
780             x_prod_selections_tbl(rowcount).rec_type := 'C';
781             x_prod_selections_tbl(rowcount).rec_name := p_filter;
782             x_prod_selections_tbl(rowcount).rec_no := rowcount;
783             x_prod_selections_tbl(rowcount).cp_id := p_prod_tbl(j).id1;
784 
785             IF p_filter IN ('Model','Configuration') THEN
786                 x_prod_selections_tbl(rowcount).config_parent_id := p_prod_tbl(j).config_parent_id;
787                 x_prod_selections_tbl(rowcount).model_level := p_prod_tbl(j).model_level;
788 
789             END IF;
790 
791             x_prod_selections_tbl(rowcount).cp_id2 := p_prod_tbl(j).id2;
792             x_prod_selections_tbl(rowcount).ser_number := p_prod_tbl(j).serial_number ;
793             x_prod_selections_tbl(rowcount).ref_number := p_prod_tbl(j).instance_number ;
794             x_prod_selections_tbl(rowcount).quantity := p_prod_tbl(j).quantity;
795             x_prod_selections_tbl(rowcount).orig_net_amt := p_prod_tbl(j).unit_selling_price;
796             -- GCHADHA --
797             -- BUG 4372877 --
798             -- 5/25/2005 --
799             x_prod_selections_tbl(rowcount).ext_reference := p_prod_tbl(j).external_reference;
800 
801             -- END GCHADHA --
802 
803 
804 
805 
806             IF NVL(p_prod_tbl(j).quantity, 1) = 0 THEN
807                 l_price := 0 ;
808             ELSE
809                 l_price := p_prod_tbl(j).unit_selling_price / NVL(p_prod_tbl(j).quantity, 1);
810             END IF;
811 
812 
813             x_prod_selections_tbl(rowcount).price := l_price;
814             x_prod_selections_tbl(rowcount).inventory_item_id := p_prod_tbl(j).inventory_item_id;
815             x_prod_selections_tbl(rowcount).site_id := p_prod_tbl(j).install_location_id;
816             x_prod_selections_tbl(rowcount).uom_code := p_prod_tbl(j).unit_of_measure;
817 
818             l_install_site_id := p_prod_tbl(j).install_location_id;
819             l_install_site_name := '';
820 
821             IF l_install_site_id IS NOT NULL THEN
822                  --skuchima  bug 12687381
823                      l_install_site_name:= fetch_install_site_name(p_prod_tbl(j).id1,p_prod_tbl(j).install_location_id);
824             END IF;
825 
826 
827             --               l_install_site_name := ' Install description ';
828             x_prod_selections_tbl(rowcount).orig_net_amt := get_selling_price(p_prod_tbl(j).oe_line_id);
829 
830 
831 
832             OPEN l_csr_uom_desc(p_prod_tbl(j).unit_of_measure);
833             FETCH l_csr_uom_desc INTO l_uom_desc;
834             CLOSE l_csr_uom_desc;
835 
836             -- Get item name and description for the inventory item id
837 
838             get_item_name_desc(p_prod_tbl(j).inventory_item_id, l_gen_name, l_gen_desc) ;
839 
840             IF p_display_pref = 'DISPLAY_DESC' THEN
841                 x_prod_selections_tbl(rowcount).name := l_gen_name;
842                 x_prod_selections_tbl(rowcount).description := l_gen_desc;
843 
844             ELSIF p_display_pref = 'DISPLAY_NAME' THEN
845                 x_prod_selections_tbl(rowcount).name := l_gen_desc;
846                 x_prod_selections_tbl(rowcount).description := l_gen_name;
847             END IF;
848 
849             x_prod_selections_tbl(rowcount).site_name := l_install_site_name;
850 
851             /*bugfix 5698684 - FP of 5675692 */
852             IF p_filter = 'Item' THEN
853                   l_display_name := g_serial_number || NVL(p_prod_tbl(j).serial_number, 'N/A') ||
854                                     g_ref || NVL(p_prod_tbl(j).instance_number, 'N/A') ||
855                                     g_quantity || to_char(p_prod_tbl(j).quantity) || '/' || l_uom_desc ||
856                                     g_installed_at || NVL(l_install_site_name, 'N/A');
857             ELSE
858                   l_display_name := x_prod_selections_tbl(rowcount).name||'; '||g_serial_number ||
859                                     NVL(p_prod_tbl(j).serial_number, 'N/A') ||
860                                     g_ref || NVL(p_prod_tbl(j).instance_number, 'N/A') ||
861                                     g_quantity || to_char(p_prod_tbl(j).quantity) || '/' || l_uom_desc ||
862                                     g_installed_at || NVL(l_install_site_name, 'N/A');
863             END IF;
864             /*bugfix 5698684 - FP of 5675692 */
865 
866             x_prod_selections_tbl(rowcount).display_name := l_display_name;
867 
868             rowcount := rowcount + 1;
869 
870         END LOOP;
871         px_rowcount := rowcount - 1;
872         ----------------------errorout(' after populate table count '||rowcount);
873     END populate_table;
874 
875 
876 
877     /************************** get model ***************************/
878 
879     PROCEDURE get_model(p_organization_id IN NUMBER,
880                         p_clvl_id         IN NUMBER,
881                         p_party_id     IN NUMBER,
882                         p_display_pref IN VARCHAR2,
883                         p_default      IN VARCHAR2,
884                         p_org_id       IN VARCHAR2,
885                         x_prod_selections_tbl IN OUT NOCOPY OKS_AUTH_UTIL_PVT.prod_selections_tbl)
886 
887     IS
888     /* Cursor to select all Model  having Covered Products for a given Party ID */
889     CURSOR l_csr_all_models(p_party_id IN NUMBER,
890                             p_organization_id IN NUMBER)
891         IS
892         SELECT DISTINCT id1,
893                name,
894                description
895         FROM okx_system_items_v it
896         WHERE id1 IN
897         (SELECT  inventory_item_id FROM
898          csi_item_instances
899          WHERE instance_id IN (SELECT PR.object_id
900                                FROM csi_ii_relationships PR
901                                WHERE relationship_type_code = 'COMPONENT-OF'
902                                AND NOT EXISTS (SELECT cp.subject_id FROM csi_ii_relationships cp
903                                                WHERE pr.object_id = cp.subject_id )))
904         AND IT.serviceable_product_flag = 'Y'
905         --And IT.organization_id = p_organization_id
906         AND SYSDATE BETWEEN nvl(it.start_date_active, SYSDATE) AND nvl(it.end_date_active, SYSDATE)  ;
907 
908 
909 
910     /** get parent child hierarchy from csi_ii_realtionships **/
911     CURSOR l_csr_configuration (p_inventory_id  IN NUMBER,
912                                 p_party_id   IN NUMBER)
913         IS
914         SELECT ciir.object_id  config_parent_id,
915                ciir.subject_id cp_id,
916                LEVEL
917         FROM   csi_ii_relationships ciir
918         WHERE active_end_date IS NULL
919         START WITH subject_id
920                       IN (SELECT ciir_pr.subject_id
921                           FROM   csi_ii_relationships ciir_pr
922                           WHERE  object_id  IN
923                           (SELECT instance_id
924                            FROM   csi_item_instances
925                            WHERE  inventory_item_id = p_inventory_id
926                            AND    owner_party_account_id IN (SELECT id1
927                                                              FROM okx_customer_accounts_v
928                                                              WHERE party_id = p_party_id)))
929         CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ;
930 
931     /** Cursor to get product + system item details for select instance id ***/
932 
933 
934     CURSOR l_csr_model_products(p_instance_id IN NUMBER,
935                                 p_organization_id       IN NUMBER
936                                 )
937         IS
938         SELECT CII.instance_id
939               , IT.name
940               , IT.description
941               , CII.install_location_id
942               , CII.quantity
943               , CII.instance_number
944               , CII.unit_of_measure
945               , CII.inventory_item_id
946               , CII.serial_number
947               , OOL.unit_selling_price
948               , '#' id2
949               , CII.external_reference -- bug 4372877
950         FROM  CSI_ITEM_INSTANCES CII
951            , CSI_INSTANCE_STATUSES CIS
952            , OE_ORDER_LINES_ALL OOL
953            , OKX_SYSTEM_ITEMS_V IT
954         WHERE CII.INSTANCE_ID = p_instance_id
955         AND   CII.inventory_item_id = IT.id1
956         AND   IT.serviceable_product_flag = 'Y'
957         AND   IT.organization_id = p_organization_id
958         AND   SYSDATE BETWEEN nvl(it.start_date_active, SYSDATE) AND nvl(it.end_date_active, SYSDATE)
959         AND   CII.last_oe_order_line_id = OOL.line_id ( + )
960         AND   CII.instance_status_id = CIS.instance_status_id
961         AND   CIS.service_order_allowed_flag = 'Y'   ;
962 
963     l_config_parent_id    CSI_II_RELATIONSHIPS.object_id%TYPE :=  - 99;
964     l_config_rec          l_csr_configuration%ROWTYPE;
965     l_model_prod_rec      l_csr_model_products%ROWTYPE;
966     l_id                  CSI_ITEM_INSTANCES.inventory_item_id%TYPE;
967     l_inv_id          NUMBER :=  - 99;
968     l_id_old             NUMBER :=  - 99;
969     rowcount              NUMBER := 1;
970     i                     NUMBER := 1;
971     l_display_pref        VARCHAR2(20) := p_display_pref;
972     l_name                VARCHAR2(500);
973 
974     l_prod_tbl  prod_tbl;
975 
976     TYPE var_cur_type5  IS REF CURSOR ;
977     csr_model_config  var_cur_type5;
978 
979     l_config_cust         VARCHAR2(10000);
980     l_config_rel        VARCHAR2(10000);
981     l_config_both         VARCHAR2(10000);
982     l_config_all         VARCHAR2(10000);
983 
984     BEGIN
985         rowcount := 1;
986 
987 
988         /** Set up dynamic queries to fetch config items **/
989 
990         l_config_cust := 'SELECT ciir.object_id  config_parent_id,'
991         ||'ciir.subject_id cp_id,'
992         ||'level '
993         ||' FROM   csi_ii_relationships ciir '
994         ||' WHERE active_end_date IS NULL '
995         ||' START WITH subject_id '
996         ||' IN (SELECT ciir_pr.subject_id '
997         ||' FROM   csi_ii_relationships ciir_pr '
998         ||' WHERE  object_id  IN '
999         ||' ( SELECT instance_id '
1000         ||' FROM   csi_item_instances '
1001         ||' WHERE  inventory_item_id = to_char(:l_id)'
1002         ||' AND    owner_party_account_id in (select id1 '
1003         ||' from okx_customer_accounts_v '
1004         ||' where party_id =  to_char(:p_party_id) ))) '
1005         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
1006 
1007 
1008         l_config_rel := 'SELECT ciir.object_id  config_parent_id,'
1009         ||'ciir.subject_id cp_id,'
1010         ||'level '
1011         ||' FROM   csi_ii_relationships ciir '
1012         ||' WHERE active_end_date IS NULL '
1013         ||' START WITH subject_id '
1014         ||' IN (SELECT ciir_pr.subject_id '
1015         ||' FROM   csi_ii_relationships ciir_pr '
1016         ||' WHERE  object_id  IN '
1017         ||' ( SELECT instance_id '
1018         ||' FROM   csi_item_instances '
1019         ||' WHERE  inventory_item_id =  to_char(:l_id ) '
1020         ||' AND    owner_party_account_id in  '
1021         ||'  (select A.RELATED_CUST_ACCOUNT_ID '
1022         ||'   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, '
1023         ||'          OKX_CUSTOMER_ACCOUNTS_V  B '
1024         ||'   WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
1025         ||'   AND    B.party_id =   to_char(:p_party_id) '
1026         ||'   AND    B.status = ''A'''
1027         ||'   AND    A.status = ''A'''
1028         ||'   AND    A.org_id =  to_char(:p_org_id) '
1029         ||'  ))) '
1030         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
1031 
1032         l_config_both := 'SELECT ciir.object_id  config_parent_id,'
1033         ||'ciir.subject_id cp_id,'
1034         ||'level '
1035         ||' FROM   csi_ii_relationships ciir '
1036         ||' WHERE active_end_date IS NULL '
1037         ||' START WITH subject_id '
1038         ||' IN (SELECT ciir_pr.subject_id '
1039         ||' FROM   csi_ii_relationships ciir_pr '
1040         ||' WHERE  object_id  IN '
1041         ||' ( SELECT instance_id '
1042         ||' FROM   csi_item_instances '
1043         ||' WHERE  inventory_item_id =  to_char(:l_id)'
1044         ||' AND    owner_party_account_id in (select id1 '
1045         ||' from okx_customer_accounts_v '
1046         ||' where party_id = to_char(:p_party_id)) '
1047         ||' UNION '
1048         ||'  (select A.RELATED_CUST_ACCOUNT_ID '
1049         ||'   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, '
1050         ||'          OKX_CUSTOMER_ACCOUNTS_V  B '
1051         ||'   WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
1052         ||'   AND    B.party_id = to_char(:p_party_id)'
1053         ||'   AND    B.status = ''A'''
1054         ||'   AND    A.status = ''A'''
1055         ||'   AND    A.org_id =  to_Char(:p_org_id) '
1056         ||'  ))) '
1057         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
1058 
1059         l_config_all := 'SELECT ciir.object_id  config_parent_id,'
1060         ||'ciir.subject_id cp_id,'
1061         ||'level '
1062         ||' FROM   csi_ii_relationships ciir '
1063         ||' WHERE active_end_date IS NULL '
1064         ||' START WITH subject_id '
1065         ||' IN (SELECT ciir_pr.subject_id '
1066         ||' FROM   csi_ii_relationships ciir_pr '
1067         ||' WHERE  object_id  IN '
1068         ||' ( SELECT instance_id '
1069         ||' FROM   csi_item_instances '
1070         ||' WHERE  inventory_item_id = to_char(:l_id))) '
1071         ||'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ' ;
1072 
1073 
1074         IF p_clvl_id IS NULL THEN /* 1st if */
1075 
1076             /* Select all Items for given party first */
1077 
1078             FOR l_get_all_models_rec IN l_csr_all_models(p_party_id, p_organization_id)
1079                 LOOP /** 1st loop **/
1080 
1081                 l_id := l_get_all_models_rec.id1;
1082 
1083                 /** Get config items for an inventory_item_id **/
1084 
1085                 IF  p_default = 'CUSTOMER' THEN
1086                     OPEN csr_model_config FOR l_config_cust USING l_id, p_party_id;
1087                 ELSIF p_default = 'RELATED' THEN
1088                     OPEN csr_model_config FOR l_config_rel USING l_id, p_party_id, p_org_id;
1089                 ELSIF p_default = 'BOTH' THEN
1090                     OPEN csr_model_config FOR l_config_both USING l_id, p_party_id, p_party_id, p_org_id ;
1091                 ELSIF p_default = 'ALL' THEN
1092                     OPEN csr_model_config FOR l_config_all USING l_id, p_party_id, p_org_id;
1093                 END IF;
1094 
1095                 LOOP
1096                     FETCH csr_model_config INTO l_config_rec;
1097                     IF csr_model_config%NOTFOUND THEN /* 2nd if */
1098                         CLOSE csr_model_config;
1099                         EXIT;
1100                     ELSE
1101 
1102                         IF (l_prod_tbl.COUNT > 0) THEN
1103 
1104                             populate_table (l_prod_tbl,
1105                                             'Model',
1106                                             rowcount,
1107                                             l_display_pref,
1108                                             x_prod_selections_tbl);
1109 
1110                             l_prod_tbl.DELETE;
1111                             rowcount := rowcount + 1;
1112                             i := 1;
1113                         END IF;
1114                         IF l_config_parent_id <> l_config_rec.config_parent_id  AND l_config_rec.LEVEL = 1 THEN /* 3rd if */
1115 
1116                             /* select product details for config parent */
1117                             /** Build parent **/
1118                             OPEN l_csr_model_products(l_config_rec.config_parent_id,
1119                                                       p_organization_id);
1120                             FETCH l_csr_model_products INTO l_model_prod_rec;
1121                             IF l_csr_model_products%FOUND THEN
1122 
1123                                 IF l_id <> l_id_old THEN
1124                                     /* Populate parent records */
1125                                     x_prod_selections_tbl(rowcount).cp_id := l_model_prod_rec.instance_id;
1126                                     x_prod_selections_tbl(rowcount).config_parent_id := '';
1127                                     x_prod_selections_tbl(rowcount).name := l_model_prod_rec.name;
1128 
1129                                     x_prod_selections_tbl(rowcount).description := l_model_prod_rec.description;
1130 
1131                                     IF l_display_pref = 'DISPLAY_DESC' THEN /* 5 if */
1132                                         l_name := rpad(l_model_prod_rec.name, 30, ' ') || rpad(l_model_prod_rec.description, 40,' ');
1133                                     ELSIF l_display_pref = 'DISPLAY_NAME' THEN
1134                                         x_prod_selections_tbl(rowcount).description := l_model_prod_rec.name;
1135                                         x_prod_selections_tbl(rowcount).name := l_model_prod_rec.description;
1136                                         l_name := rpad(l_model_prod_rec.description, 40,' ') || rpad(l_model_prod_rec.name, 30, ' ');
1137                                     END IF; /* end if 5 */
1138 
1139                                     x_prod_selections_tbl(rowcount).name := l_name;
1140                                     x_prod_selections_tbl(rowcount).rec_type := 'P';
1141                                     x_prod_selections_tbl(rowcount).rec_name := 'Model';
1142                                     x_prod_selections_tbl(rowcount).rec_no := rowcount;
1143                                     x_prod_selections_tbl(rowcount).model_level := l_config_rec.LEVEL;
1144                                     x_prod_selections_tbl(rowcount).cp_id2 := '';
1145                                     x_prod_selections_tbl(rowcount).ser_number := '';
1146                                     x_prod_selections_tbl(rowcount).ref_number := '' ;
1147                                     x_prod_selections_tbl(rowcount).quantity := '';
1148                                     x_prod_selections_tbl(rowcount).orig_net_amt := '';
1149                                     x_prod_selections_tbl(rowcount).price := '';
1150                                     x_prod_selections_tbl(rowcount).inventory_item_id := '';
1151                                     x_prod_selections_tbl(rowcount).site_id := '';
1152                                     x_prod_selections_tbl(rowcount).uom_code := '';
1153                                     x_prod_selections_tbl(rowcount).display_name := '';
1154                                     x_prod_selections_tbl(rowcount).site_name := '';
1155                                     x_prod_selections_tbl(rowcount).model_level :=  - 1;
1156                                     -- BUG 4372877 --
1157                                     -- GCHADHA --
1158                                     -- 5/25/2005 --
1159                                     x_prod_selections_tbl(rowcount).ext_reference := '';
1160                                     -- END GCHADHA --
1161 
1162 
1163 
1164                                     l_id_old := l_id;
1165                                     rowcount := rowcount + 1;
1166                                 END IF;
1167 
1168                                 l_config_parent_id := l_config_rec.config_parent_id;
1169 
1170                                 /* populate product details of the model */
1171                                 l_prod_tbl(i).id1 := l_config_rec.config_parent_id;
1172                                 l_prod_tbl(i).config_parent_id := '';
1173 
1174                                 l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1175                                 l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1176                                 l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1177                                 l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1178                                 l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1179                                 l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1180                                 l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1181                                 l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1182                                 l_prod_tbl(i).model_level := 0;
1183                                 -- BUG 4372877 --
1184                                 -- GCHADHA --
1185                                 -- 5/25/2005 --
1186                                 l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1187                                 -- END GCHADHA --
1188 
1189                                 i := i + 1 ;
1190                             END IF; /* end if l_csr_model_products */
1191 
1192                             CLOSE l_csr_model_products;
1193 
1194                         END IF ; /* Populate parent records end if 3 */
1195                         --                END IF; /** items found csr_configuration cursor end if 2 **/
1196 
1197                         /* populate product details of the model */
1198 
1199                         OPEN l_csr_model_products(l_config_rec.cp_id,
1200                                                   p_organization_id);
1201                         FETCH l_csr_model_products INTO l_model_prod_rec;
1202                         IF l_csr_model_products%FOUND THEN /** if 3 */
1203 
1204                             l_prod_tbl(i).id1 := l_config_rec.cp_id;
1205                             l_prod_tbl(i).config_parent_id := l_config_rec.config_parent_id;
1206 
1207                             l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1208                             l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1209                             l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1210                             l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1211                             l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1212                             l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1213                             l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1214                             l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1215                             l_prod_tbl(i).model_level := l_config_rec.LEVEL;
1216                             -- BUG 4372877 --
1217                             -- GCHADHA --
1218                             -- 5/25/2005 --
1219                             l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1220                             -- END GCHADHA --
1221 
1222                             i := i + 1 ;
1223                         END IF; /* end if 3 */
1224                         CLOSE l_csr_model_products;
1225 
1226                     END IF;
1227                 END LOOP;   /* end loop of l_csr_configuration cursror end loop 2*/
1228                 -- ----------------------errorout(' before populate table '||l_prod_tbl.count);
1229 
1230             END LOOP; /* end loop of inventory item id  end loop 1 */
1231 
1232         ELSIF p_clvl_id IS NOT NULL THEN
1233             l_id := p_clvl_id;
1234             /** Get config items for an inventory_item_id **/
1235             IF  p_default = 'CUSTOMER' THEN
1236                 OPEN csr_model_config FOR l_config_cust USING l_id, p_party_id;
1237             ELSIF p_default = 'RELATED' THEN
1238                 OPEN csr_model_config FOR l_config_rel USING l_id, p_party_id, p_org_id;
1239             ELSIF p_default = 'BOTH' THEN
1240                 OPEN csr_model_config FOR l_config_both USING l_id, p_party_id, p_party_id, p_org_id ;
1241             ELSIF p_default = 'ALL' THEN
1242                 OPEN csr_model_config FOR l_config_all USING l_id; --, p_party_id, p_org_id;
1243             END IF;
1244 
1245             LOOP
1246                 FETCH csr_model_config INTO l_config_rec;
1247                 IF csr_model_config%NOTFOUND THEN /* 2nd if */
1248                     CLOSE csr_model_config;
1249                     EXIT;
1250                 ELSE
1251 
1252                     IF (l_prod_tbl.COUNT > 0) THEN
1253 
1254                         populate_table (l_prod_tbl,
1255                                         'Model',
1256                                         rowcount,
1257                                         l_display_pref,
1258                                         x_prod_selections_tbl);
1259 
1260                         l_prod_tbl.DELETE;
1261                         rowcount := rowcount + 1;
1262                         i := 1;
1263                     END IF;
1264                     IF l_config_parent_id <> l_config_rec.config_parent_id  AND l_config_rec.LEVEL = 1 THEN /* 3rd if */
1265 
1266                         /* select product details for config parent */
1267                         /** Build parent **/
1268                         OPEN l_csr_model_products(l_config_rec.config_parent_id,
1269                                                   p_organization_id);
1270                         FETCH l_csr_model_products INTO l_model_prod_rec;
1271                         IF l_csr_model_products%FOUND THEN
1272 
1273                             IF l_id <> l_id_old THEN
1274                                 /* Populate parent records */
1275                                 x_prod_selections_tbl(rowcount).cp_id := l_model_prod_rec.instance_id;
1276                                 x_prod_selections_tbl(rowcount).config_parent_id := '';
1277                                 x_prod_selections_tbl(rowcount).name := l_model_prod_rec.name;
1278 
1279                                 x_prod_selections_tbl(rowcount).description := l_model_prod_rec.description;
1280 
1281                                 IF l_display_pref = 'DISPLAY_DESC' THEN /* 5 if */
1282                                     l_name := rpad(l_model_prod_rec.name, 30, ' ') || rpad(l_model_prod_rec.description, 40,' ');
1283                                 ELSIF l_display_pref = 'DISPLAY_NAME' THEN
1284                                     x_prod_selections_tbl(rowcount).description := l_model_prod_rec.name;
1285                                     x_prod_selections_tbl(rowcount).name := l_model_prod_rec.description;
1286                                     l_name := rpad(l_model_prod_rec.description, 40,' ') || rpad(l_model_prod_rec.name, 30, ' ');
1287                                 END IF; /* end if 5 */
1288 
1289                                 x_prod_selections_tbl(rowcount).name := l_name;
1290                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
1291                                 x_prod_selections_tbl(rowcount).rec_name := 'Model';
1292                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
1293                                 x_prod_selections_tbl(rowcount).model_level := l_config_rec.LEVEL;
1294                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
1295                                 x_prod_selections_tbl(rowcount).ser_number := '';
1296                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
1297                                 x_prod_selections_tbl(rowcount).quantity := '';
1298                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
1299                                 x_prod_selections_tbl(rowcount).price := '';
1300                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
1301                                 x_prod_selections_tbl(rowcount).site_id := '';
1302                                 x_prod_selections_tbl(rowcount).uom_code := '';
1303                                 x_prod_selections_tbl(rowcount).display_name := '';
1304                                 x_prod_selections_tbl(rowcount).site_name := '';
1305                                 x_prod_selections_tbl(rowcount).model_level :=  - 1;
1306                                 -- BUG 4372877 --
1307                                 -- GCHADHA --
1308                                 -- 5/25/2005 --
1309                                 x_prod_selections_tbl(rowcount).ext_reference := '';
1310                                 -- END GCHADHA --
1311                                 l_id_old := l_id;
1312                                 rowcount := rowcount + 1;
1313                             END IF;
1314 
1315                             l_config_parent_id := l_config_rec.config_parent_id;
1316 
1317                             /* populate product details of the model */
1318                             l_prod_tbl(i).id1 := l_config_rec.config_parent_id;
1319                             l_prod_tbl(i).config_parent_id := '';
1320                             l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1321                             l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1322                             l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1323                             l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1324                             l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1325                             l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1326                             l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1327                             l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1328                             l_prod_tbl(i).model_level := 0;
1329                             -- BUG 4372877 --
1330                             -- GCHADHA --
1331                             -- 5/25/2005 --
1332                             l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1333                             -- END GCHADHA --
1334 
1335 
1336                             i := i + 1 ;
1337                         END IF; /* end if l_csr_model_products */
1338 
1339                         CLOSE l_csr_model_products;
1340 
1341                     END IF ; /* Populate parent records end if 3 */
1342 
1343                     /* populate product details of the model */
1344 
1345                     OPEN l_csr_model_products(l_config_rec.cp_id,
1346                                               p_organization_id);
1347                     FETCH l_csr_model_products INTO l_model_prod_rec;
1348                     IF l_csr_model_products%FOUND THEN /** if 3 */
1349 
1350                         l_prod_tbl(i).id1 := l_config_rec.cp_id;
1351                         l_prod_tbl(i).config_parent_id := l_config_rec.config_parent_id;
1352 
1353                         l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id ;
1354                         l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1355                         l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1356                         l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1357                         l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1358                         l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1359                         l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1360                         l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1361                         l_prod_tbl(i).model_level := l_config_rec.LEVEL;
1362                         -- BUG 4372877 --
1363                         -- GCHADHA --
1364                         -- 5/25/2005 --
1365                         l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1366                         -- END GCHADHA --
1367 
1368 
1369                         i := i + 1 ;
1370                     END IF; /* end if 3 */
1371                     CLOSE l_csr_model_products;
1372 
1373                 END IF;
1374             END LOOP;   /* end loop of l_csr_configuration cursror end loop 2*/
1375 
1376             /*******************/
1377 
1378         END IF;
1379     END ; /** end of procedure get_model **/
1380 
1381 
1382     /************************** get configuration based upon serial_number ***************************/
1383 /*created for gsi config er -- vgujarat */
1384 PROCEDURE get_sr_configuration(p_organization_id     IN NUMBER,
1385                                     p_clvl_id             IN NUMBER,
1386                                     p_party_id            IN NUMBER,
1387                                     p_display_pref        IN VARCHAR2,
1388                                     p_default             IN VARCHAR2,
1389                                     p_org_id              IN VARCHAR2,
1390                                     x_prod_selections_tbl IN OUT NOCOPY OKS_AUTH_UTIL_PVT.prod_selections_tbl)
1391 
1392       IS
1393        /* Cursor to select all Model  having Covered Products for a given Party ID */
1394        CURSOR l_csr_all_models(p_party_id IN NUMBER, p_organization_id IN NUMBER) IS
1395          SELECT DISTINCT id1, name, description
1396            FROM okx_system_items_v it
1397           WHERE id1 IN
1398                 (SELECT inventory_item_id
1399                    FROM csi_item_instances
1400                   WHERE instance_id IN
1401                         (SELECT PR.object_id
1402                            FROM csi_ii_relationships PR
1403                           WHERE relationship_type_code = 'COMPONENT-OF'
1404                             AND NOT EXISTS
1405                           (SELECT cp.subject_id
1406                                    FROM csi_ii_relationships cp
1407                                   WHERE pr.object_id = cp.subject_id)))
1408             AND IT.serviceable_product_flag = 'Y'
1409                --And IT.organization_id = p_organization_id
1410             AND SYSDATE BETWEEN nvl(it.start_date_active, SYSDATE) AND
1411                 nvl(it.end_date_active, SYSDATE);
1412 
1413        /** get parent child hierarchy from csi_ii_realtionships **/
1414        CURSOR l_csr_configuration(p_inventory_id IN NUMBER, p_party_id IN NUMBER) IS
1415          SELECT ciir.object_id config_parent_id, ciir.subject_id cp_id, LEVEL
1416            FROM csi_ii_relationships ciir
1417           WHERE active_end_date IS NULL
1418           START WITH subject_id IN
1419                      (SELECT ciir_pr.subject_id
1420                         FROM csi_ii_relationships ciir_pr
1421                        WHERE object_id IN
1422                              (SELECT instance_id
1423                                 FROM csi_item_instances
1424                                WHERE inventory_item_id = p_inventory_id
1425                                  AND owner_party_account_id IN
1426                                      (SELECT id1
1427                                         FROM okx_customer_accounts_v
1428                                        WHERE party_id = p_party_id)))
1429          CONNECT BY ciir.object_id = PRIOR ciir.subject_id;
1430 
1431        /** Cursor to get product + system item details for select instance id ***/
1432 
1433        CURSOR l_csr_model_products(p_instance_id IN NUMBER, p_organization_id IN NUMBER) IS
1434          SELECT CII.instance_id,
1435                 IT.name,
1436                 IT.description,
1437                 CII.install_location_id,
1438                 CII.quantity,
1439                 CII.instance_number,
1440                 CII.unit_of_measure,
1441                 CII.inventory_item_id,
1442                 CII.serial_number,
1443                 OOL.unit_selling_price,
1444                 '#' id2,
1445                 CII.external_reference -- bug 4372877
1446            FROM CSI_ITEM_INSTANCES    CII,
1447                 CSI_INSTANCE_STATUSES CIS,
1448                 OE_ORDER_LINES_ALL    OOL,
1449                 OKX_SYSTEM_ITEMS_V    IT
1450           WHERE CII.INSTANCE_ID = p_instance_id
1451             AND CII.inventory_item_id = IT.id1
1452             AND IT.serviceable_product_flag = 'Y'
1453             AND IT.organization_id = p_organization_id
1454             AND SYSDATE BETWEEN nvl(it.start_date_active, SYSDATE) AND
1455                 nvl(it.end_date_active, SYSDATE)
1456             AND CII.last_oe_order_line_id = OOL.line_id(+)
1457             AND CII.instance_status_id = CIS.instance_status_id
1458             AND CIS.service_order_allowed_flag = 'Y';
1459 
1460        l_config_parent_id CSI_II_RELATIONSHIPS.object_id%TYPE := -99;
1461        l_config_rec       l_csr_configuration%ROWTYPE;
1462        l_model_prod_rec   l_csr_model_products%ROWTYPE;
1463        l_id               CSI_ITEM_INSTANCES.instance_id%TYPE;
1464        l_inv_id           NUMBER := -99;
1465        l_id_old           NUMBER := -99;
1466        rowcount           NUMBER := 1;
1467        i                  NUMBER := 1;
1468        l_display_pref     VARCHAR2(20) := p_display_pref;
1469        l_name             VARCHAR2(500);
1470 
1471        l_prod_tbl prod_tbl;
1472 
1473        TYPE var_cur_type5 IS REF CURSOR;
1474        csr_model_config var_cur_type5;
1475 
1476        l_config_cust VARCHAR2(10000);
1477        l_config_rel  VARCHAR2(10000);
1478        l_config_both VARCHAR2(10000);
1479        l_config_all  VARCHAR2(10000);
1480 
1481        /*vgujarat GSI CONFIG*/
1482        l_model_prod_id      NUMBER;
1483        l_config_instance_id NUMBER;
1484        l_start_instance_id  NUMBER;
1485 
1486        /*check model item*/
1487        CURSOR model_item_check_csr(p_customer_prod_id NUMBER) IS
1488          SELECT a.customer_product_id
1489            FROM oks_ib_config_v a
1490           WHERE a.config_parent_id IS NULL
1491           START WITH a.customer_product_id = p_customer_prod_id
1492          CONNECT BY PRIOR a.config_parent_id = a.customer_product_id;
1493 
1494     l_display_name       VARCHAR2(2000); -- 4915711 --
1495     j                    NUMBER;
1496     l_uom_desc           OKx_UNITS_OF_MEASURE_v.unit_of_measure_tl%TYPE;
1497     l_install_site_name VARCHAR2(1000);
1498 
1499     CURSOR l_site_name_csr(l_install_site_id NUMBER) IS
1500         SELECT S.DESCRIPTION
1501         FROM   OKX_PARTY_SITES_V S
1502         WHERE  S.ID1 = l_install_site_id;
1503 
1504     CURSOR l_csr_uom_desc(p_uom_code IN VARCHAR2)
1505         IS
1506         SELECT unit_of_measure_tl
1507         FROM OKX_UNITS_OF_MEASURE_V
1508         WHERE uom_code = p_uom_code ;
1509 
1510 
1511     l_gen_name           OKX_SYSTEM_ITEMS_V.name%TYPE;
1512     l_gen_desc           OKX_SYSTEM_ITEMS_V.description%TYPE;
1513 
1514      BEGIN
1515        rowcount := 1;
1516 
1517        l_config_instance_id := p_clvl_id;
1518        l_start_instance_id  := l_config_instance_id;
1519 
1520        OPEN model_item_check_csr(l_config_instance_id);
1521        FETCH model_item_check_csr
1522          INTO l_model_prod_id;
1523        CLOSE model_item_check_csr;
1524 
1525        IF l_model_prod_id IS NOT NULL THEN
1526          l_start_instance_id := l_model_prod_id;
1527        ELSE
1528          l_start_instance_id := l_config_instance_id;
1529        END IF;
1530 
1531        /** Set up dynamic queries to fetch config items **/
1532 
1533        l_config_cust := 'SELECT ciir.object_id  config_parent_id,' ||
1534                         'ciir.subject_id cp_id,' || 'level ' ||
1535                         ' FROM   csi_ii_relationships ciir ' ||
1536                         ' WHERE active_end_date IS NULL ' ||
1537                         ' START WITH subject_id ' ||
1538                         ' IN (SELECT ciir_pr.subject_id ' ||
1539                         ' FROM   csi_ii_relationships ciir_pr ' ||
1540                         ' WHERE  object_id  IN ' || ' ( SELECT instance_id ' ||
1541                         ' FROM   csi_item_instances ' ||
1542                         ' WHERE  instance_id = to_char(:l_id)' ||
1543                         ' AND    owner_party_account_id in (select id1 ' ||
1544                         ' from okx_customer_accounts_v ' ||
1545                         ' where party_id =  to_char(:p_party_id) ))) ' ||
1546                         'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ';
1547 
1548        l_config_rel := 'SELECT ciir.object_id  config_parent_id,' ||
1549                        'ciir.subject_id cp_id,' || 'level ' ||
1550                        ' FROM   csi_ii_relationships ciir ' ||
1551                        ' WHERE active_end_date IS NULL ' ||
1552                        ' START WITH subject_id ' ||
1553                        ' IN (SELECT ciir_pr.subject_id ' ||
1554                        ' FROM   csi_ii_relationships ciir_pr ' ||
1555                        ' WHERE  object_id  IN ' || ' ( SELECT instance_id ' ||
1556                        ' FROM   csi_item_instances ' ||
1557                        ' WHERE  instance_id =  to_char(:l_id ) ' ||
1558                        ' AND    owner_party_account_id in  ' ||
1559                        '  (select A.RELATED_CUST_ACCOUNT_ID ' ||
1560                        '   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, ' ||
1561                        '          OKX_CUSTOMER_ACCOUNTS_V  B ' ||
1562                        '   WHERE  B.ID1 = A.CUST_ACCOUNT_ID ' ||
1563                        '   AND    B.party_id =   to_char(:p_party_id) ' ||
1564                        '   AND    B.status = ''A''' ||
1565                        '   AND    A.status = ''A''' ||
1566                        '   AND    A.org_id =  to_char(:p_org_id) ' || '  ))) ' ||
1567                        'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ';
1568 
1569        l_config_both := 'SELECT ciir.object_id  config_parent_id,' ||
1570                         'ciir.subject_id cp_id,' || 'level ' ||
1571                         ' FROM   csi_ii_relationships ciir ' ||
1572                         ' WHERE active_end_date IS NULL ' ||
1573                         ' START WITH subject_id ' ||
1574                         ' IN (SELECT ciir_pr.subject_id ' ||
1575                         ' FROM   csi_ii_relationships ciir_pr ' ||
1576                         ' WHERE  object_id  IN ' || ' ( SELECT instance_id ' ||
1577                         ' FROM   csi_item_instances ' ||
1578                         ' WHERE  instance_id =  to_char(:l_id)' ||
1579                         ' AND    owner_party_account_id in ((select id1 ' ||
1580                         ' from okx_customer_accounts_v ' ||
1581                         ' where party_id = to_char(:p_party_id)) ' || ' UNION ' ||
1582                         '  (select A.RELATED_CUST_ACCOUNT_ID ' ||
1583                         '   FROM   OKX_CUST_ACCT_RELATE_ALL_V A, ' ||
1584                         '          OKX_CUSTOMER_ACCOUNTS_V  B ' ||
1585                         '   WHERE  B.ID1 = A.CUST_ACCOUNT_ID ' ||
1586                         '   AND    B.party_id = to_char(:p_party_id)' ||
1587                         '   AND    B.status = ''A''' ||
1588                         '   AND    A.status = ''A''' ||
1589                         '   AND    A.org_id =  to_Char(:p_org_id)) ' || '  ))) ' ||
1590                         'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ';
1591 
1592        l_config_all := 'SELECT ciir.object_id  config_parent_id,' ||
1593                        'ciir.subject_id cp_id,' || 'level ' ||
1594                        ' FROM   csi_ii_relationships ciir ' ||
1595                        ' WHERE active_end_date IS NULL ' ||
1596                        ' START WITH subject_id ' ||
1597                        ' IN (SELECT ciir_pr.subject_id ' ||
1598                        ' FROM   csi_ii_relationships ciir_pr ' ||
1599                        ' WHERE  object_id  IN ' || ' ( SELECT instance_id ' ||
1600                        ' FROM   csi_item_instances ' ||
1601                        ' WHERE  instance_id = to_char(:l_id))) ' ||
1602                        'CONNECT BY  ciir.object_id = PRIOR ciir.subject_id  ';
1603 
1604        IF l_start_instance_id IS NOT NULL THEN
1605          l_id := l_start_instance_id;
1606          /** Get config items for an inventory_item_id **/
1607          IF p_default = 'CUSTOMER' THEN
1608            OPEN csr_model_config FOR l_config_cust
1609              USING l_id, p_party_id;
1610          ELSIF p_default = 'RELATED' THEN
1611            OPEN csr_model_config FOR l_config_rel
1612              USING l_id, p_party_id, p_org_id;
1613          ELSIF p_default = 'BOTH' THEN
1614            OPEN csr_model_config FOR l_config_both
1615              USING l_id, p_party_id, p_party_id, p_org_id;
1616          ELSIF p_default = 'ALL' THEN
1617            OPEN csr_model_config FOR l_config_all
1618              USING l_id;
1619          END IF;
1620 
1621          LOOP
1622            FETCH csr_model_config
1623              INTO l_config_rec;
1624            IF csr_model_config%NOTFOUND THEN
1625              /* 2nd if */
1626              CLOSE csr_model_config;
1627              IF (l_prod_tbl.COUNT > 0) THEN
1628 
1629 
1630                populate_table(l_prod_tbl,
1631                               'Configuration',
1632                               rowcount,
1633                               l_display_pref,
1634                               x_prod_selections_tbl);
1635 
1636 
1637                l_prod_tbl.DELETE;
1638                rowcount := rowcount + 1;
1639                i        := 1;
1640              END IF;
1641              EXIT;
1642            ELSE
1643 
1644              IF (l_prod_tbl.COUNT > 0) THEN
1645 
1646 
1647                populate_table(l_prod_tbl,
1648                               'Configuration',
1649                               rowcount,
1650                               l_display_pref,
1651                               x_prod_selections_tbl);
1652 
1653 
1654                l_prod_tbl.DELETE;
1655                rowcount := rowcount + 1;
1656                i        := 1;
1657              END IF;
1658              IF l_config_parent_id <> l_config_rec.config_parent_id AND
1659                 (l_config_rec.LEVEL = 1 ) THEN
1660                /* 3rd if */
1661 
1662                /* select product details for config parent */
1663                /** Build parent **/
1664                OPEN l_csr_model_products(l_config_rec.config_parent_id,
1665                                          p_organization_id);
1666                FETCH l_csr_model_products
1667                  INTO l_model_prod_rec;
1668                IF l_csr_model_products%FOUND THEN
1669 
1670                  IF l_id <> l_id_old THEN
1671                    /* Populate parent records */
1672                    x_prod_selections_tbl(rowcount).cp_id := l_model_prod_rec.instance_id;
1673                    x_prod_selections_tbl(rowcount).config_parent_id := '';
1674                    x_prod_selections_tbl(rowcount).name := l_model_prod_rec.name;
1675 
1676                    x_prod_selections_tbl(rowcount).description := l_model_prod_rec.description;
1677 
1678                    IF l_display_pref = 'DISPLAY_DESC' THEN
1679                      /* 5 if */
1680                      l_name := rpad(l_model_prod_rec.name, 30, ' ') ||
1681                                rpad(l_model_prod_rec.description, 40, ' ');
1682                    ELSIF l_display_pref = 'DISPLAY_NAME' THEN
1683                      x_prod_selections_tbl(rowcount).description := l_model_prod_rec.name;
1684                      x_prod_selections_tbl(rowcount).name := l_model_prod_rec.description;
1685                      l_name := rpad(l_model_prod_rec.description, 40, ' ') ||
1686                                rpad(l_model_prod_rec.name, 30, ' ');
1687                    END IF; /* end if 5 */
1688 
1689                    x_prod_selections_tbl(rowcount).name := l_name;
1690                    x_prod_selections_tbl(rowcount).rec_type := 'P';
1691                    x_prod_selections_tbl(rowcount).rec_name := 'Configuration';
1692                    x_prod_selections_tbl(rowcount).rec_no := rowcount;
1693                    x_prod_selections_tbl(rowcount).model_level := l_config_rec.LEVEL;
1694                    x_prod_selections_tbl(rowcount).cp_id2 := l_model_prod_rec.id2;
1695                    x_prod_selections_tbl(rowcount).ser_number := l_model_prod_rec.serial_number;
1696                    x_prod_selections_tbl(rowcount).ref_number := l_model_prod_rec.instance_number;
1697                    x_prod_selections_tbl(rowcount).quantity := l_model_prod_rec.quantity;
1698                   ---skuchima gsi config
1699                    x_prod_selections_tbl(rowcount).orig_net_amt := l_model_prod_rec.unit_selling_price;
1700                   IF Nvl(l_model_prod_rec.quantity, 1) = 0 THEN
1701                      x_prod_selections_tbl(rowcount).price := 0;
1702                    ELSE
1703                    x_prod_selections_tbl(rowcount).price := l_model_prod_rec.unit_selling_price;
1704                    END IF;
1705                    x_prod_selections_tbl(rowcount).inventory_item_id := l_model_prod_rec.inventory_item_id;
1706                    x_prod_selections_tbl(rowcount).site_id := l_model_prod_rec.install_location_id;
1707                    x_prod_selections_tbl(rowcount).uom_code := l_model_prod_rec.unit_of_measure;
1708                    x_prod_selections_tbl(rowcount).display_name := '';
1709                    x_prod_selections_tbl(rowcount).site_name := '';
1710                    x_prod_selections_tbl(rowcount).model_level := 0;
1711                    -- BUG 4372877 --
1712                    -- GCHADHA --
1713                    -- 5/25/2005 --
1714                    x_prod_selections_tbl(rowcount).ext_reference := '';
1715 
1716                    --vgujarat
1717                    IF l_model_prod_rec.install_location_id IS NOT NULL THEN
1718 
1719                      l_install_site_name:= fetch_install_site_name(l_model_prod_rec.instance_id,l_model_prod_rec.install_location_id);
1720                    END IF;
1721 
1722 
1723                     OPEN l_csr_uom_desc(l_model_prod_rec.unit_of_measure);
1724                     FETCH l_csr_uom_desc INTO l_uom_desc;
1725                     CLOSE l_csr_uom_desc;
1726 
1727                    get_item_name_desc(l_model_prod_rec.inventory_item_id, l_gen_name, l_gen_desc) ;
1728 
1729                   IF p_display_pref = 'DISPLAY_DESC' THEN
1730                     x_prod_selections_tbl(rowcount).name := l_gen_name;
1731                     x_prod_selections_tbl(rowcount).description := l_gen_desc;
1732 
1733                   ELSIF p_display_pref = 'DISPLAY_NAME' THEN
1734                     x_prod_selections_tbl(rowcount).name := l_gen_desc;
1735                     x_prod_selections_tbl(rowcount).description := l_gen_name;
1736                   END IF;
1737 
1738                   x_prod_selections_tbl(rowcount).site_name := l_install_site_name;
1739 
1740 
1741 
1742                     l_display_name := x_prod_selections_tbl(rowcount).name||'; '||g_serial_number ||
1743                                     NVL(l_model_prod_rec.serial_number, 'N/A') ||
1744                                     g_ref || NVL(l_model_prod_rec.instance_number, 'N/A') ||
1745                                     g_quantity || to_char(l_model_prod_rec.quantity) || '/' || l_uom_desc ||
1746                                     g_installed_at || NVL(l_install_site_name, 'N/A');
1747 
1748 
1749 
1750                     x_prod_selections_tbl(rowcount).display_name := l_display_name;
1751                     /*skuchima gsi config */
1752                    --x_prod_selections_tbl(rowcount).name := l_display_name;
1753                    -- END GCHADHA --
1754                    l_id_old := l_id;
1755 
1756                    rowcount := rowcount + 1;
1757                  END IF;
1758                  /*
1759                  l_config_parent_id := l_config_rec.config_parent_id;
1760 
1761                  /* populate product details of the model */
1762                /*  l_prod_tbl(i).id1 := l_config_rec.config_parent_id;
1763                  l_prod_tbl(i).config_parent_id := '';
1764                  l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id;
1765                  l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1766                  l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1767                  l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1768                  l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1769                  l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1770                  l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1771                  l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1772                  l_prod_tbl(i).model_level := 0;
1773                  l_prod_tbl(i).rec_type := 'P';
1774                  -- BUG 4372877 --
1775                  -- GCHADHA --
1776                  -- 5/25/2005 --
1777                  l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1778                  -- END GCHADHA --
1779 
1780                  i := i + 1;*/
1781                END IF; /* end if l_csr_model_products */
1782 
1783                CLOSE l_csr_model_products;
1784 
1785              END IF; /* Populate parent records end if 3 */
1786 
1787              /* populate product details of the model */
1788 
1789              OPEN l_csr_model_products(l_config_rec.cp_id, p_organization_id);
1790              FETCH l_csr_model_products
1791                INTO l_model_prod_rec;
1792              IF l_csr_model_products%FOUND THEN
1793                /** if 3 */
1794 
1795                l_prod_tbl(i).id1 := l_config_rec.cp_id;
1796                l_prod_tbl(i).config_parent_id := l_config_rec.config_parent_id;
1797 
1798                l_prod_tbl(i).install_location_Id := l_model_prod_rec.install_location_id;
1799                l_prod_tbl(i).quantity := l_model_prod_rec.quantity;
1800                l_prod_tbl(i).instance_number := l_model_prod_rec.instance_number;
1801                l_prod_tbl(i).unit_of_measure := l_model_prod_rec.unit_of_measure;
1802                l_prod_tbl(i).unit_selling_price := l_model_prod_rec.unit_selling_price;
1803                l_prod_tbl(i).inventory_item_id := l_model_prod_rec.inventory_item_id;
1804                l_prod_tbl(i).serial_number := l_model_prod_rec.serial_number;
1805                l_prod_tbl(i).id2 := l_model_prod_rec.id2;
1806                l_prod_tbl(i).model_level := l_config_rec.LEVEL;
1807                -- BUG 4372877 --
1808                -- GCHADHA --
1809                -- 5/25/2005 --
1810                l_prod_tbl(i).external_reference := l_model_prod_rec.external_reference;
1811                -- END GCHADHA --
1812 
1813                i := i + 1;
1814              END IF; /* end if 3 */
1815              CLOSE l_csr_model_products;
1816 
1817            END IF;
1818          END LOOP; /* end loop of l_csr_configuration cursror end loop 2*/
1819 
1820          /*******************/
1821 
1822        END IF;
1823      END; /** end of procedure get_sr_configuration **/
1824 
1825     /*********************************/
1826 
1827 
1828     PROCEDURE get_product_selection(p_clvl_filter_rec IN clvl_filter_rec,
1829                                     x_prod_selections_tbl OUT NOCOPY prod_selections_tbl)
1830     IS
1831 
1832     l_param_organization_id  NUMBER := okc_context.get_okc_organization_id;
1833     l_find                   NUMBER := p_clvl_filter_rec.clvl_find_id;
1834 
1835 
1836     TYPE items_rec IS RECORD (inventory_item_id MTL_SYSTEM_ITEMS_KFV.inventory_item_id%TYPE,
1837                               description       VARCHAR2(10000),
1838                               name              VARCHAR2(10000));
1839 
1840 
1841     l_items_rec items_rec;
1842 
1843     -- Setting up cursor types + record types to fetch Party Sites using Dynamic cursor
1844     l_get_all_sites_sql  VARCHAR2(2000);
1845     TYPE var_cur_type1  IS REF CURSOR ;
1846     l_csr_get_all_sites  var_cur_type1;
1847     TYPE get_all_sites_rec IS RECORD (id1   OKX_PARTY_SITES_V.id1%TYPE,
1848                                       name  OKX_PARTY_SITES_V.name%TYPE,
1849                                       party_site_number OKX_PARTY_SITES_V.party_site_number%TYPE,
1850                                       -- description       OKX_PARTY_SITES_V.description%TYPE -- Bug 4915711
1851                                       description       VARCHAR2(2000));
1852 
1853     l_get_all_sites_rec get_all_sites_rec;
1854 
1855     -- Setting up cursor types + record types to fetch Systems using Dynamic cursor
1856     l_get_all_systems_sql  VARCHAR2(2000);
1857     TYPE var_cur_type IS REF CURSOR;
1858     l_csr_get_all_systems  var_cur_type;
1859 
1860     TYPE get_all_systems_rec IS RECORD (id1  CSI_SYSTEMS_B.system_id%TYPE,
1861                                         NAME CSI_SYSTEMS_TL.name%TYPE,
1862                                         Description CSI_SYSTEMS_TL.description%TYPE);
1863 
1864     l_get_all_systems_rec get_all_systems_rec;
1865 
1866     l_item_cust VARCHAR2(2000);
1867     l_item_rel  VARCHAR2(2000);
1868     l_item_both VARCHAR2(2000);
1869     l_item_all  VARCHAR2(2000);
1870     l_select_for_name VARCHAR2(2000);
1871     l_select_for_desc VARCHAR2(2000);
1872     l_order_by_name VARCHAR2(2000);
1873     l_order_by_desc VARCHAR2(2000);
1874 
1875     TYPE var_cur_item IS REF CURSOR;
1876     l_get_items var_cur_item;
1877 
1878     l_party_id  NUMBER;
1879     l_org_id    NUMBER;
1880     l_clvl_id   NUMBER ;
1881     l_customer_id VARCHAR2(10);
1882     l_clvl_filter  VARCHAR2(15);
1883     l_id        NUMBER;
1884     l_prod_tbl  prod_tbl;
1885     l_price     NUMBER;
1886     l_default   VARCHAR2(15);
1887     rowcount    NUMBER := 1;
1888     l_prod_selections_tbl prod_selections_tbl;
1889     l_cust_id_tbl         cust_id_tbl;
1890     l_party_id_tbl        party_id_tbl;
1891     cust_count  NUMBER := 1;
1892     l_organization_id     NUMBER;
1893     l_display_pref        VARCHAR2(25);
1894     l_config_parent_id    NUMBER :=  - 99 ;
1895     l_name                VARCHAR2(500);
1896 
1897     l_get_all_systems_sql_c  VARCHAR2(2000);
1898     l_get_all_systems_sql_r  VARCHAR2(2000);
1899     l_get_all_systems_sql_b  VARCHAR2(2000);
1900     l_get_all_systems_sql_a  VARCHAR2(2000);
1901 
1902     l_get_all_sites_sql_c  VARCHAR2(2000);
1903     l_get_all_sites_sql_r  VARCHAR2(2000);
1904     l_get_all_sites_sql_b  VARCHAR2(2000);
1905     l_get_all_sites_sql_a  VARCHAR2(2000);
1906 
1907     l_chk_id_flag      VARCHAR2(1) := 'N' ;
1908     id_counter         NUMBER := 1;
1909     l_cust_id_list      VARCHAR2(500);
1910 
1911     k                     NUMBER := 1;
1912     j   NUMBER := 1;
1913     start_sort NUMBER := 1;
1914     l_prod_tbl_sort  prod_tbl  ;
1915     l_inv_id   NUMBER ;
1916     l_old_inv_id NUMBER :=  - 99;
1917     l_gen_name           VARCHAR2(2000);
1918     l_gen_desc           VARCHAR2(2000);
1919     l_tmp_prod_tbl      prod_tbl;
1920 
1921 
1922     BEGIN
1923 
1924         l_default := p_clvl_filter_rec.clvl_default;
1925         l_party_id := p_clvl_filter_rec.clvl_party_id;
1926         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
1927         l_clvl_id := p_clvl_filter_rec.clvl_find_id;
1928         l_clvl_filter := p_clvl_filter_rec.clvl_filter;
1929         l_organization_id := p_clvl_filter_rec.clvl_organization_id;
1930         l_display_pref := p_clvl_filter_rec.clvl_display_pref;
1931 
1932 
1933         g_serial_number := p_clvl_filter_rec.lbl_serial_number;
1934         g_quantity := p_clvl_filter_rec.lbl_quantity;
1935         g_price := p_clvl_filter_rec.lbl_price;
1936         g_installed_at := p_clvl_filter_rec.lbl_installed_at;
1937         g_ref := p_clvl_filter_rec.lbl_ref;
1938 
1939         --IF l_default IN ('CUSTOMER','RELATED','BOTH') THEN
1940 
1941         IF l_clvl_filter <> 'Party' THEN  /* if filter is Party then party id and name should be fetched */
1942 
1943 
1944             IF l_clvl_filter = 'Item' THEN
1945 
1946                 /*CURSOR l_csr_item_name_cust(p_party_id IN NUMBER, l_organization_id IN NUMBER)
1947                 IS
1948                 select inventory_item_id, concatenated_segments name  ,  description description */
1949 
1950                 l_select_for_name := 'select inventory_item_id, concatenated_segments name  ,  description description ';
1951                 l_select_for_desc := 'select inventory_item_id,   description description , concatenated_segments name  ';
1952 
1953 
1954 
1955                 l_order_by_name := ' order by name ' ;
1956 
1957                 l_order_by_desc := ' order by description ';
1958 
1959                 l_item_cust := ' from mtl_system_items_kfv  '
1960                 ||' where inventory_item_id in ( select inventory_item_id from csi_item_instances  '
1961                 ||' where owner_party_account_id in (select id1  '
1962                 ||'  FROM okx_customer_accounts_v '
1963                 ||'  WHERE party_id = :l_party_id)) '
1964                 ||' and organization_id = :l_organization_id '
1965                 ||' and serviceable_product_flag = ''Y''';
1966 
1967                 l_item_rel := ' FROM  mtl_system_items_kfv  '
1968                 ||' where inventory_item_id in ( select inventory_item_id from csi_item_instances  '
1969                 ||' where owner_party_account_id in   (select A.RELATED_CUST_ACCOUNT_ID  '
1970                 ||' FROM   OKX_CUST_ACCT_RELATE_ALL_V A,  '
1971                 ||'        OKX_CUSTOMER_ACCOUNTS_V  B  '
1972                 ||' WHERE  B.ID1 = A.CUST_ACCOUNT_ID  '
1973                 ||' AND    B.party_id =  :l_party_id '
1974                 ||' AND    B.status = ''A'''
1975                 ||' AND    A.status = ''A'''
1976                 ||' AND    A.org_id =  :l_org_id '
1977                 ||' )) '
1978                 ||' and organization_id = :l_organization_id '
1979                 ||' and serviceable_product_flag = ''Y''';
1980 
1981                 l_item_both := ' from mtl_system_items_kfv '
1982                 ||' where inventory_item_id in ( select inventory_item_id from csi_item_instances  '
1983                 ||' where owner_party_account_id in  (select id1  '
1984                 ||' FROM okx_customer_accounts_v '
1985                 ||' WHERE party_id = :p_party_id '
1986                 ||' UNION '
1987                 ||' select A.RELATED_CUST_ACCOUNT_ID  '
1988                 ||' FROM   OKX_CUST_ACCT_RELATE_ALL_V A,  '
1989                 ||' OKX_CUSTOMER_ACCOUNTS_V  B  '
1990                 ||' WHERE  B.ID1 = A.CUST_ACCOUNT_ID '
1991                 ||' AND    B.party_id =  :l_party_id '
1992                 ||' AND    B.status = ''A'''
1993                 ||' AND    A.status = ''A'''
1994                 ||' AND    A.org_id =  :l_org_id '
1995                 ||' )) '
1996                 ||' and organizatioN_id = :l_organization_id '
1997                 ||' and serviceable_product_flag = ''Y''';
1998 
1999                 l_item_all := ' from mtl_system_items_kfv '
2000                 ||' where organizatioN_id = :l_organization_id '
2001                 ||' and serviceable_product_flag = ''Y''';
2002 
2003                 IF l_clvl_id IS NULL THEN
2004                     /* Select all Items for given party first */
2005                     IF l_default = 'CUSTOMER' THEN
2006                         IF l_display_pref = 'NAME' THEN
2007                             l_item_cust := l_select_for_name ||' '|| l_item_cust ||' '|| l_order_by_name;
2008                         ELSE
2009                             l_item_cust := l_select_for_desc ||' '|| l_item_cust ||' '|| l_order_by_desc;
2010                         END IF;
2011                         --------------------------------------------------------errorout_an(' item customer '||l_item_cust);
2012 
2013                         OPEN l_get_items FOR l_item_cust USING l_party_id, l_organization_id;
2014                     ELSIF l_default = 'RELATED' THEN
2015                         IF l_display_pref = 'NAME' THEN
2016                             l_item_rel := l_select_for_name ||' '|| l_item_rel ||' '|| l_order_by_name;
2017                         ELSE
2018                             l_item_rel := l_select_for_desc ||' '|| l_item_rel ||' '|| l_order_by_desc;
2019                         END IF;
2020                         --             ----------------------errorout_an(' item rel '||l_item_rel);
2021                         --             ----------------------errorout_an(' party '||l_party_id||' org id '||l_org_id||' '||l_organization_id);
2022                         OPEN l_get_items FOR l_item_rel USING l_party_id, l_org_id, l_organization_id;
2023                     ELSIF l_default = 'BOTH' THEN
2024                         IF l_display_pref = 'NAME' THEN
2025                             l_item_both := l_select_for_name ||' '|| l_item_both ||' '|| l_order_by_name;
2026                         ELSE
2027                             l_item_both := l_select_for_desc ||' '|| l_item_both ||' '|| l_order_by_desc;
2028                         END IF;
2029                         OPEN l_get_items FOR l_item_both USING l_party_id, l_party_id, l_org_id, l_organization_id;
2030                         --------------------------------------------------------errorout_an(' item both '||l_item_both);
2031                     ELSIF l_default = 'ALL' THEN
2032                         IF l_display_pref = 'NAME' THEN
2033                             l_item_all := l_select_for_name ||' '|| l_item_all ||' '|| l_order_by_name;
2034                         ELSE
2035                             l_item_all := l_select_for_desc ||' '|| l_item_all ||' '|| l_order_by_desc;
2036                         END IF;
2037                         OPEN l_get_items FOR l_item_all USING l_organization_id;
2038                         --------------------------------------------------------errorout_an(' item all '||l_item_all);
2039                     END IF;
2040 
2041 
2042                     /* Find cp id in the record group */
2043 
2044                     LOOP
2045                         ------errorout_an(' in loop ');
2046                         FETCH l_get_items INTO l_items_rec ;
2047                         IF l_get_items%NOTFOUND THEN
2048                             EXIT;
2049                         ELSE
2050                             ------errorout_an(' before get prod ');
2051 
2052                             get_products(l_clvl_filter,
2053                                          l_items_rec.inventory_item_id,
2054                                          l_default,
2055                                          l_cust_id_list,
2056                                          l_party_id,
2057                                          l_org_id,
2058                                          l_organization_id,
2059                                          l_prod_tbl);
2060 
2061                             IF l_prod_tbl.COUNT > 0 THEN
2062 
2063                                 x_prod_selections_tbl(rowcount).cp_id := l_items_rec.inventory_item_id;
2064                                 x_prod_selections_tbl(rowcount).name := l_items_rec.name;
2065                                 x_prod_selections_tbl(rowcount).description := l_items_rec.description;
2066 
2067                                 IF l_display_pref = 'DISPLAY_NAME' THEN
2068                                     l_name := rpad(l_items_rec.name, 30, ' ') || rpad(l_items_rec.description, 40,' ');
2069                                 ELSIF l_display_pref = 'DISPLAY_DESC' THEN
2070                                     l_name := rpad(l_items_rec.description, 30, ' ') || rpad(l_items_rec.name, 40,' ');
2071                                 END IF;
2072 
2073                                 x_prod_selections_tbl(rowcount).name := l_name;
2074                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
2075                                 x_prod_selections_tbl(rowcount).rec_name := 'Item';
2076                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
2077                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
2078                                 x_prod_selections_tbl(rowcount).ser_number := '';
2079                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
2080                                 x_prod_selections_tbl(rowcount).quantity := '';
2081                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
2082                                 x_prod_selections_tbl(rowcount).price := '';
2083                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
2084                                 x_prod_selections_tbl(rowcount).site_id := '';
2085                                 x_prod_selections_tbl(rowcount).uom_code := '';
2086                                 x_prod_selections_tbl(rowcount).display_name := '';
2087                                 x_prod_selections_tbl(rowcount).site_name := '';
2088                                 -- GCHADHA --
2089                                 -- BUG 4372877 --
2090                                 -- 5/25/2005 --
2091                                 x_prod_selections_tbl(rowcount).ext_reference := '';
2092                                 -- END GCHADHA --
2093 
2094                                 rowcount := rowcount + 1;
2095 
2096                                 /* Populate child records  */
2097 
2098                                 populate_table (l_prod_tbl,
2099                                                 l_clvl_filter,
2100                                                 rowcount,
2101                                                 l_display_pref,
2102                                                 x_prod_selections_tbl);
2103 
2104                                 rowcount := rowcount + 1;
2105                             END IF;
2106 
2107                         END IF ; /* End of ITems cursor */
2108                         --     ------------------------------------------errorout_an(' out of cursors ');
2109                     END LOOP; /* End of Cursor Loop */
2110 
2111 
2112                 ELSIF l_clvl_id IS NOT NULL THEN
2113 
2114                     get_products(l_clvl_filter,
2115                                  l_clvl_id,
2116                                  l_default,
2117                                  l_cust_id_list,
2118                                  l_party_id,
2119                                  l_org_id,
2120                                  l_organization_id,
2121                                  l_prod_tbl);
2122 
2123 
2124                     IF l_prod_tbl.COUNT > 0 THEN
2125                         /* Populate parent records */
2126                         x_prod_selections_tbl(rowcount).cp_id := l_clvl_id;
2127 
2128                         l_name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
2129                         x_prod_selections_tbl(rowcount).name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
2130                         x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
2131                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2132                         x_prod_selections_tbl(rowcount).rec_name := 'Item';
2133                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2134                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2135                         x_prod_selections_tbl(rowcount).ser_number := '';
2136                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2137                         x_prod_selections_tbl(rowcount).quantity := '';
2138                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2139                         x_prod_selections_tbl(rowcount).price := '';
2140                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2141                         x_prod_selections_tbl(rowcount).site_id := '';
2142                         x_prod_selections_tbl(rowcount).uom_code := '';
2143                         x_prod_selections_tbl(rowcount).display_name := '';
2144                         x_prod_selections_tbl(rowcount).site_name := '';
2145                         -- BUG 4372877 --
2146                         -- GCHADHA --
2147                         -- 5/25/2005 --
2148                         x_prod_selections_tbl(rowcount).ext_reference := '';
2149                         -- END GCHADHA --
2150 
2151 
2152                         rowcount := rowcount + 1;
2153 
2154                         populate_table (l_prod_tbl,
2155                                         l_clvl_filter,
2156                                         rowcount,
2157                                         l_display_pref,
2158                                         x_prod_selections_tbl);
2159 
2160 
2161                     END IF;
2162 
2163                 END IF;
2164 
2165             ELSIF  l_clvl_filter = 'System' THEN
2166                 IF  l_clvl_id IS NULL THEN
2167 
2168                     /** Setting up dynamic cursor for Systems **/
2169 
2170 
2171                     -- Bug 5041892 --
2172                     l_get_all_systems_sql_c := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
2173                     || ' FROM   CSI_SYSTEMS_B   CSB, '
2174                     || '        CSI_SYSTEMS_TL  CST '
2175                     || ' WHERE  CSB.system_id = CST.system_id  '
2176                     || ' AND    CSB.system_id IN  (Select CII.system_id '
2177                     || ' From   CSI_ITEM_INSTANCES CII, '
2178                     || '        CSI_INSTANCE_STATUSES  CIS '
2179                     || '       , MTL_SYSTEM_ITEMS_B IT '
2180                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
2181                     || ' AND   IT.serviceable_product_flag = ''Y'''
2182                     || ' AND   IT.organization_id = :l_organization_id '
2183                     || ' AND  CII.owner_party_account_id in (select cust_account_id '
2184                     ||' from hz_cust_accounts '
2185                     ||' where party_id =  :p_party_id ) '
2186                     || ' And    CIS.instance_status_id = CII.instance_status_id '
2187                     || ' And    CIS.service_order_allowed_flag = ''Y'''
2188                     || ' And    sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
2189                     || ' And    CII.system_id is not null ) '
2190                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
2191                     || ' Order by CST.name ';
2192 
2193 
2194                     -- Bug 5041892 --
2195                     l_get_all_systems_sql_b := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
2196                     || ' FROM   CSI_SYSTEMS_B   CSB, '
2197                     || '        CSI_SYSTEMS_TL  CST '
2198                     || ' WHERE  CSB.system_id = CST.system_id  '
2199                     || ' AND    CSB.system_id IN  '
2200                     ||' (SELECT CII.system_id '
2201                     ||'  FROM   CSI_ITEM_INSTANCES CII, '
2202                     ||'         CSI_INSTANCE_STATUSES  CIS '
2203                     ||'       , MTL_SYSTEM_ITEMS_B IT '
2204                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
2205                     || ' AND   IT.serviceable_product_flag = ''Y'''
2206                     || ' AND   IT.organization_id = :l_organization_id '
2207                     || ' AND   CII.owner_party_account_id in (select cust_account_id '
2208                     ||' from HZ_CUST_ACCOUNTS '
2209                     ||' where party_id =  :p_party_id  '
2210                     ||' UNION ALL'
2211                     ||'  select A.RELATED_CUST_ACCOUNT_ID '
2212                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
2213                     ||'          HZ_CUST_ACCOUNTS  B '
2214                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
2215                     ||'   AND    B.party_id =   :p_party_id '
2216                     ||'   AND    B.status = ''A'''
2217                     ||'   AND    A.status = ''A'''
2218                     ||'   AND    A.org_id =  :p_org_id '
2219                     ||'  ) '
2220                     || ' And    CIS.instance_status_id = CII.instance_status_id '
2221                     || ' And    CIS.service_order_allowed_flag = ''Y'''
2222                     || ' And    sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
2223                     || ' And    CII.system_id is not null ) '
2224                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
2225                     || ' Order by CST.name ';
2226 
2227                     -- Bug 5041892 --
2228                     l_get_all_systems_sql_r := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
2229                     || ' FROM   CSI_SYSTEMS_B   CSB, '
2230                     || '        CSI_SYSTEMS_TL  CST '
2231                     || ' WHERE  CSB.system_id = CST.system_id  '
2232                     || ' AND    CSB.system_id IN  (Select CII.system_id '
2233                     || ' From  CSI_ITEM_INSTANCES CII, '
2234                     || '       CSI_INSTANCE_STATUSES  CIS '
2235                     ||' ,       MTL_SYSTEM_ITEMS_B IT '
2236                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
2237                     || ' AND   IT.serviceable_product_flag = ''Y'''
2238                     || ' AND   IT.organization_id = :l_organization_id '
2239                     || ' AND   CII.owner_party_account_id in  '
2240                     ||'  (select A.RELATED_CUST_ACCOUNT_ID '
2241                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
2242                     ||'          HZ_CUST_ACCOUNTS  B '
2243                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
2244                     ||'   AND    B.party_id =   :p_party_id '
2245                     ||'   AND    B.status = ''A'''
2246                     ||'   AND    A.status = ''A'''
2247                     ||'   AND    A.org_id =  :p_org_id '
2248                     ||'  ) '
2249                     || ' And    CIS.instance_status_id = CII.instance_status_id '
2250                     || ' And    CIS.service_order_allowed_flag = ''Y'''
2251                     || ' And    sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
2252                     || ' And    system_id is not null ) '
2253                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
2254                     || ' Order by CST.name ';
2255 
2256 
2257                     l_get_all_systems_sql_a := ' SELECT CSB.system_Id Id1 , CST.name name , CST.description description '
2258                     || ' FROM   CSI_SYSTEMS_B   CSB, '
2259                     || '        CSI_SYSTEMS_TL  CST '
2260                     || ' WHERE  CSB.system_id = CST.system_id  '
2261                     || ' AND    CSB.system_id IN  (Select CII.system_id '
2262                     || ' From   CSI_ITEM_INSTANCES CII, '
2263                     || '        CSI_INSTANCE_STATUSES  CIS '
2264                     ||' ,       MTL_SYSTEM_ITEMS_B IT '
2265                     || ' WHERE IT.inventory_item_id = CII.inventory_item_id '
2266                     || ' AND   IT.serviceable_product_flag = ''Y'''
2267                     || ' AND   IT.organization_id = :l_organization_id '
2268                     || ' AND   CIS.instance_status_id = CII.instance_status_id '
2269                     || ' And   CIS.service_order_allowed_flag = ''Y'''
2270                     || ' And   sysdate between Nvl(CIS.start_date_active, sysdate) and  Nvl(CIS.end_date_active, sysdate) '
2271                     || ' And   CII.system_id is not null ) '
2272                     || ' And    sysdate between Nvl(CSB.start_date_active, sysdate) and   Nvl(CSB.end_date_active, sysdate) '
2273                     || ' Order by CST.name ';
2274 
2275                     /* Select all Items for given party first */
2276 
2277                     IF l_default = 'CUSTOMER' THEN
2278                         ------------------------------errorout_an(l_get_all_systems_sql_c);
2279                         l_get_all_systems_sql := l_get_all_systems_sql_c;
2280                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id, l_party_id;
2281                     ELSIF l_default = 'RELATED' THEN
2282                         ------------------------------errorout_an(l_get_all_systems_sql_r);
2283                         l_get_all_systems_sql := l_get_all_systems_sql_r;
2284                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id, l_party_id, l_org_id;
2285                     ELSIF l_default = 'BOTH' THEN
2286                         ------------------------------errorout_an(l_get_all_systems_sql_b);
2287                         l_get_all_systems_sql := l_get_all_systems_sql_b;
2288                         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 ;
2289                     ELSIF l_default = 'ALL' THEN
2290                         ------------------------------errorout_an(l_get_all_systems_sql_b);
2291                         l_get_all_systems_sql := l_get_all_systems_sql_a;
2292                         OPEN l_csr_get_all_systems FOR l_get_all_systems_sql USING l_organization_id ;
2293                     END IF;
2294 
2295 
2296                     LOOP
2297                         FETCH l_csr_get_all_systems INTO l_get_all_systems_rec;
2298                         IF l_csr_get_all_systems%NOTFOUND THEN
2299                             CLOSE l_csr_get_all_systems;
2300                             EXIT;
2301                         END IF;
2302 
2303                         l_id := l_get_all_systems_rec.id1;
2304 
2305                         FOR  id_counter IN 1 .. x_prod_selections_tbl.COUNT LOOP
2306                             IF x_prod_selections_tbl(id_counter).rec_type = 'P' THEN
2307 
2308                                 IF x_prod_selections_tbl(id_counter).cp_id = l_id THEN
2309                                     l_chk_id_flag := 'Y';
2310                                     EXIT;
2311                                 ELSE
2312                                     l_chk_id_flag := 'N';
2313                                 END IF;
2314                             END IF;
2315                         END LOOP;
2316 
2317                         IF l_chk_id_flag = 'N' THEN
2318 
2319                             get_products(l_clvl_filter,
2320                                          l_id,
2321                                          l_default,
2322                                          l_cust_id_list,
2323                                          l_party_id,
2324                                          l_org_id,
2325                                          l_organization_id,
2326                                          l_prod_tbl);
2327 
2328                             IF l_prod_tbl.COUNT > 0 THEN
2329 
2330                                 x_prod_selections_tbl(rowcount).cp_id := l_get_all_systems_rec.id1;
2331                                 l_name := rpad(l_get_all_systems_rec.name, 30, ' ') || rpad(l_get_all_systems_rec.description, 40,' ');
2332                                 x_prod_selections_tbl(rowcount).name := l_name;
2333                                 x_prod_selections_tbl(rowcount).description := l_get_all_systems_rec.description;
2334                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
2335                                 x_prod_selections_tbl(rowcount).rec_name := 'System';
2336                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
2337                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
2338                                 x_prod_selections_tbl(rowcount).ser_number := '';
2339                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
2340                                 x_prod_selections_tbl(rowcount).quantity := '';
2341                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
2342                                 x_prod_selections_tbl(rowcount).price := '';
2343                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
2344                                 x_prod_selections_tbl(rowcount).site_id := '';
2345                                 x_prod_selections_tbl(rowcount).uom_code := '';
2346                                 x_prod_selections_tbl(rowcount).display_name := '';
2347                                 x_prod_selections_tbl(rowcount).site_name := '';
2348                                 -- BUG 4372877 --
2349                                 -- GCHADHA --
2350                                 -- 5/25/2005 --
2351                                 x_prod_selections_tbl(rowcount).ext_reference := '';
2352                                 -- END GCHADHA --
2353 
2354 
2355                                 rowcount := rowcount + 1;
2356 
2357                                 populate_table (l_prod_tbl,
2358                                                 l_clvl_filter,
2359                                                 rowcount,
2360                                                 l_display_pref,
2361                                                 x_prod_selections_tbl);
2362 
2363                                 rowcount := rowcount + 1;
2364                             END IF;
2365                         END IF;
2366                     END LOOP;
2367 
2368                 ELSIF l_clvl_id IS NOT NULL THEN
2369 
2370 
2371                     get_products(l_clvl_filter,
2372                                  l_clvl_id,
2373                                  l_default,
2374                                  l_cust_id_list,
2375                                  l_party_id,
2376                                  l_org_id,
2377                                  l_organization_id,
2378                                  l_prod_tbl);
2379 
2380 
2381                     IF l_prod_tbl.COUNT > 0 THEN
2382                         -- Populate parent record in table, only if products exist
2383                         x_prod_selections_tbl(rowcount).cp_id := l_clvl_id;
2384                         l_name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
2385 
2386                         x_prod_selections_tbl(rowcount).name := l_name;
2387                         x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
2388                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2389                         x_prod_selections_tbl(rowcount).rec_name := 'System';
2390                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2391                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2392                         x_prod_selections_tbl(rowcount).ser_number := '';
2393                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2394                         x_prod_selections_tbl(rowcount).quantity := '';
2395                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2396                         x_prod_selections_tbl(rowcount).price := '';
2397                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2398                         x_prod_selections_tbl(rowcount).site_id := '';
2399                         x_prod_selections_tbl(rowcount).uom_code := '';
2400                         x_prod_selections_tbl(rowcount).display_name := '';
2401                         x_prod_selections_tbl(rowcount).site_name := '';
2402                         -- BUG 4372877 --
2403                         -- GCHADHA --
2404                         -- 5/25/2005 --
2405                         x_prod_selections_tbl(rowcount).ext_reference := '';
2406                         -- END GCHADHA --
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 
2416 
2417                     END IF;
2418                 END IF;
2419 
2420             ELSIF  l_clvl_filter = 'Site' THEN
2421                 IF  l_clvl_id IS NULL THEN
2422                     /* Select all Items for given party first */
2423 		    -- Bug 5004778 --
2424 	            -- Modified Query to reduce shared memory Usage
2425 		    -- Replaced views to base tables where ever possible
2426                     l_get_all_sites_sql_c := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
2427                     || ' FROM    OKX_PARTY_SITES_V   SI '
2428                     || ' WHERE  exists   (SELECT CII.install_location_Id '
2429                     ||'  FROM   CSI_ITEM_INSTANCES CII, '
2430                     ||'         CSI_INSTANCE_STATUSES   CIS, '
2431                     ||'         MTL_SYSTEM_ITEMS_B IT '
2432                     ||'  WHERE IT.inventory_item_id = CII.inventory_item_id '
2433                     ||'  AND   IT.serviceable_product_flag = ''Y'''
2434                     ||'  AND   IT.organization_id = :l_organization_id '
2435                     ||'  AND   CII.install_location_id = SI.id1 '
2436                     ||'  AND   CII.owner_party_account_id in '
2437                     ||'(select cust_account_id '
2438                     ||' from hz_cust_accounts '
2439                     ||' where party_id =  :p_party_id ) '
2440                     ||'        And    CIS.instance_Status_id = CII.instance_status_id '
2441                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
2442                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
2443                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
2444                     -- TCA Changes --
2445                     /*  ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
2446                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
2447                     || 'AND SI.STATUS = ''A'''
2448                     -- TCA Changes --
2449                     ||' ORDER BY si.party_site_number, si.name ';
2450 
2451 		    -- Bug 5004778 --
2452 		    -- Modified Query to reduce shared memory Usage
2453 		    -- Replaced views to base tables where ever possible
2454                     l_get_all_sites_sql_r := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
2455                     || ' FROM    OKX_PARTY_SITES_V   SI '
2456                     || ' WHERE  exists  (SELECT CII.install_location_Id '
2457                     ||'   FROM   CSI_ITEM_INSTANCES CII, '
2458                     ||'          CSI_INSTANCE_STATUSES   CIS '
2459                     ||' ,        MTL_SYSTEM_ITEMS_B IT '
2460                     ||'   WHERE IT.inventory_item_id = CII.inventory_item_id '
2461                     ||'   AND   IT.serviceable_product_flag = ''Y'''
2462                     ||'   AND   IT.organization_id = :l_organization_id '
2463                     ||'   AND   CII.install_location_id = SI.id1 '
2464                     ||'   AND   CII.owner_party_account_id in '
2465                     ||'  (select A.RELATED_CUST_ACCOUNT_ID '
2466                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
2467                     ||'          HZ_CUST_ACCOUNTS  B '
2468                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
2469                     ||'   AND    B.party_id =   :l_party_id '
2470                     ||'   AND    B.status = ''A'''
2471                     ||'   AND    A.status = ''A'''
2472                     ||'   AND    A.org_id =  :p_org_id '
2473                     ||'  ) '
2474                     ||'        And    CIS.instance_Status_id = CII.instance_status_id '
2475                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
2476                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
2477                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
2478                     -- TCA Changes --
2479                     /* ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
2480                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
2481                     || 'AND SI.STATUS = ''A'''
2482                     -- TCA Changes --
2483                     ||' ORDER BY si.party_site_number, si.name ';
2484 
2485 		    -- Bug 5004778 --
2486 		    -- Modified Query to reduce shared memory Usage
2487 		    -- Replaced views to base tables where ever possible
2488                     l_get_all_sites_sql_b := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
2489                     || ' FROM    OKX_PARTY_SITES_V   SI '
2490                     || ' WHERE  exists   (SELECT CII.install_location_Id '
2491                     || '   FROM   CSI_ITEM_INSTANCES CII, '
2492                     ||'           CSI_INSTANCE_STATUSES   CIS '
2493                     ||'  ,        MTL_SYSTEM_ITEMS_B IT '
2494                     ||'   WHERE IT.inventory_item_id = CII.inventory_item_id '
2495                     ||'   AND   IT.serviceable_product_flag = ''Y'''
2496                     ||'   AND   IT.organization_id = :l_organization_id '
2497                     ||'   AND     CII.install_location_id = SI.id1 '
2498                     ||'  AND    CII.owner_party_account_id in '
2499                     ||' (select cust_account_id '
2500                     ||' from hz_cust_accounts '
2501                     ||' where party_id =  :p_party_id  '
2502                     ||' UNION '
2503                     ||'  select  A.RELATED_CUST_ACCOUNT_ID '
2504                     ||'   FROM   HZ_CUST_ACCT_RELATE_ALL A, '
2505                     ||'          HZ_CUST_ACCOUNTS  B '
2506                     ||'   WHERE  B.cust_account_id = A.CUST_ACCOUNT_ID '
2507                     ||'   AND    B.party_id =   :p_party_id '
2508                     ||'   AND    B.status = ''A'''
2509                     ||'   AND    A.status = ''A'''
2510                     ||'   AND    A.org_id =  :p_org_id '
2511                     ||'  ) '
2512                     ||'        And    CIS.instance_Status_id = CII.instance_status_id '
2513                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
2514                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
2515                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
2516                     -- TCA Changes --
2517                     /* ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
2518                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
2519                     || 'AND SI.STATUS = ''A'''
2520                     -- TCA Changes --
2521                     ||' ORDER BY si.party_site_number, si.name ';
2522 		    -- Bug 5004778 --
2523 
2524                     l_get_all_sites_sql_a := ' SELECT  SI.Id1 id1 , SI.name name , SI.Party_Site_Number party_site_number , SI.description description '
2525                     || ' FROM    OKX_PARTY_SITES_V   SI '
2526                     || ' WHERE  exists   (SELECT CII.install_location_Id '
2527                     || '   FROM   CSI_ITEM_INSTANCES CII, '
2528                     ||'           CSI_INSTANCE_STATUSES   CIS '
2529                     ||'  ,        MTL_SYSTEM_ITEMS_KFV IT '
2530                     ||'   WHERE IT.inventory_item_id = CII.inventory_item_id '
2531                     ||'   AND   IT.serviceable_product_flag = ''Y'''
2532                     ||'   AND   IT.organization_id = :l_organization_id '
2533                     ||'   AND   CII.install_location_id = SI.id1 '
2534                     ||'   AND   CIS.instance_Status_id = CII.instance_status_id '
2535                     ||'        And    CIS.service_order_allowed_flag = ''Y'''
2536                     ||'        And    sysdate between Nvl(CIS.start_date_active, sysdate) and '
2537                     ||'                               Nvl(CIS.end_date_active, sysdate)) '
2538                     -- TCA Changes --
2539                     /* ||'        And    sysdate between Nvl(SI.start_date_active, sysdate) and '
2540                     ||'                               Nvl(SI.end_date_active, sysdate) '  */
2541                     || 'AND SI.STATUS = ''A''';
2542                     -- TCA Changes --
2543 
2544 
2545                     IF l_default = 'CUSTOMER' THEN
2546                         l_get_all_sites_sql := l_get_all_sites_sql_c;
2547                         --          ----------------------errorout_an(' get sites info cust '||l_get_all_sites_sql);
2548                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id, l_party_id;
2549                     ELSIF l_default = 'RELATED' THEN
2550                         l_get_all_sites_sql := l_get_all_sites_sql_r;
2551                         --          ----------------------errorout_an(' get sites info rel '||l_get_all_sites_sql||' '||l_party_id||' '||l_org_id);
2552                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id, l_party_id, l_org_id;
2553                     ELSIF l_default = 'BOTH' THEN
2554                         l_get_all_sites_sql := l_get_all_sites_sql_b;
2555                         --          ----------------------errorout_an(' get sites info both '||l_get_all_sites_sql);
2556                         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;
2557                     ELSIF l_default = 'ALL' THEN
2558                         l_get_all_sites_sql := l_get_all_sites_sql_a;
2559                         --          ----------------------errorout_an(' get sites info both '||l_get_all_sites_sql);
2560                         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_organization_id;
2561 
2562                     END IF;
2563 
2564 
2565                     --         OPEN l_csr_get_all_sites  FOR l_get_all_sites_sql USING l_party_id;
2566                     LOOP         FETCH l_csr_get_all_sites INTO l_get_all_sites_rec;
2567                         IF l_csr_get_all_sites%NOTFOUND THEN
2568                             CLOSE l_csr_Get_all_sites;
2569                             EXIT;
2570                         END IF;
2571 
2572                         l_id := l_get_all_sites_rec.id1;
2573 
2574                         FOR  id_counter IN 1 .. x_prod_selections_tbl.COUNT LOOP
2575                             IF x_prod_selections_tbl(id_counter).rec_type = 'P' THEN
2576 
2577                                 IF x_prod_selections_tbl(id_counter).cp_id = l_id THEN
2578                                     l_chk_id_flag := 'Y';
2579                                     EXIT;
2580                                 ELSE
2581                                     l_chk_id_flag := 'N';
2582                                 END IF;
2583                             END IF;
2584                         END LOOP;
2585 
2586 
2587                         IF l_chk_id_flag = 'N' THEN
2588                             get_products(l_clvl_filter,
2589                                          l_id,
2590                                          l_default,
2591                                          l_cust_id_list,
2592                                          l_party_id,
2593                                          l_org_id,
2594                                          l_organization_id,
2595                                          l_prod_tbl);
2596 
2597                             IF l_prod_tbl.COUNT > 0 THEN
2598 
2599                                 x_prod_selections_tbl(rowcount).cp_id := l_get_all_sites_rec.id1;
2600 
2601                                 --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,' ');
2602 
2603                                 --bug 5243637 (forward port for bug 5221204/2749830)
2604                                 l_name := rpad(l_get_all_sites_rec.party_site_number||'-'||l_get_all_sites_rec.name,30)
2605                                 ||' '||rpad(l_get_all_sites_rec.description,40,' ');
2606 
2607                                 x_prod_selections_tbl(rowcount).name := l_name;
2608                                 x_prod_selections_tbl(rowcount).description := l_get_all_sites_rec.description;
2609                                 x_prod_selections_tbl(rowcount).rec_type := 'P';
2610                                 x_prod_selections_tbl(rowcount).rec_name := 'Site';
2611                                 x_prod_selections_tbl(rowcount).rec_no := rowcount;
2612                                 x_prod_selections_tbl(rowcount).cp_id2 := '';
2613                                 x_prod_selections_tbl(rowcount).ser_number := '';
2614                                 x_prod_selections_tbl(rowcount).ref_number := '' ;
2615                                 x_prod_selections_tbl(rowcount).quantity := '';
2616                                 x_prod_selections_tbl(rowcount).orig_net_amt := '';
2617                                 x_prod_selections_tbl(rowcount).price := '';
2618                                 x_prod_selections_tbl(rowcount).inventory_item_id := '';
2619                                 x_prod_selections_tbl(rowcount).site_id := '';
2620                                 x_prod_selections_tbl(rowcount).uom_code := '';
2621                                 x_prod_selections_tbl(rowcount).display_name := '';
2622                                 x_prod_selections_tbl(rowcount).site_name := '';
2623                                 -- BUG 4372877 --
2624                                 -- GCHADHA --
2625                                 -- 5/25/2005 --
2626                                 x_prod_selections_tbl(rowcount).ext_reference := '';
2627                                 -- END GCHADHA --
2628 
2629 
2630                                 rowcount := rowcount + 1;
2631 
2632                                 populate_table (l_prod_tbl,
2633                                                 l_clvl_filter,
2634                                                 rowcount,
2635                                                 l_display_pref,
2636                                                 x_prod_selections_tbl);
2637 
2638                                 -- BUG 4113113 --
2639                                 -- GCHADHA --
2640                                 rowcount := rowcount + 1;
2641                                 -- END GCHADHA --
2642                             END IF;
2643                         END IF;
2644                     END LOOP;
2645                 ELSIF l_clvl_id IS NOT NULL THEN
2646 
2647                     get_products(l_clvl_filter,
2648                                  l_clvl_id,
2649                                  l_default,
2650                                  l_cust_id_list,
2651                                  l_party_id,
2652                                  l_org_id,
2653                                  l_organization_id,
2654                                  l_prod_tbl);
2655 
2656                     IF l_prod_tbl.COUNT > 0 THEN
2657 
2658                         x_prod_selections_tbl(rowcount).cp_id := l_clvl_id;
2659                         l_name := rpad(p_clvl_filter_rec.clvl_name, 30,' ') || rpad(p_clvl_filter_rec.clvl_description, 40,' ');
2660                         x_prod_selections_tbl(rowcount).name := l_name;
2661                         x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
2662                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2663                         x_prod_selections_tbl(rowcount).rec_name := 'Site';
2664                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2665                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2666                         x_prod_selections_tbl(rowcount).ser_number := '';
2667                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2668                         x_prod_selections_tbl(rowcount).quantity := '';
2669                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2670                         x_prod_selections_tbl(rowcount).price := '';
2671                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2672                         x_prod_selections_tbl(rowcount).site_id := '';
2673                         x_prod_selections_tbl(rowcount).uom_code := '';
2674                         x_prod_selections_tbl(rowcount).display_name := '';
2675                         x_prod_selections_tbl(rowcount).site_name := '';
2676                         -- BUG 4372877 --
2677                         -- GCHADHA --
2678                         -- 5/25/2005 --
2679                         x_prod_selections_tbl(rowcount).ext_reference := '';
2680                         -- END GCHADHA --
2681 
2682 
2683                         rowcount := rowcount + 1;
2684 
2685                         populate_table (l_prod_tbl,
2686                                         l_clvl_filter,
2687                                         rowcount,
2688                                         l_display_pref,
2689                                         x_prod_selections_tbl);
2690 
2691 
2692 
2693                     END IF;
2694 
2695                 END IF;
2696 
2697             ELSIF  l_clvl_filter = 'Customer' THEN
2698                 IF  l_clvl_id IS NULL THEN
2699                     /* Select all Items for given party first */
2700                     get_customer_id(p_default => l_default,
2701                                     p_party_id => l_party_id,
2702                                     p_org_id => l_org_id,
2703                                     x_cust_id_tbl => l_cust_id_tbl);
2704 
2705                     --           ----------------------errorout_an(' cust count   '||l_cust_id_tbl.count);
2706 
2707                     FOR cust_count IN 1..l_cust_id_tbl.COUNT LOOP
2708 
2709                         l_id := l_cust_id_tbl(cust_count).customer_id;
2710                         l_name := l_cust_id_tbl(cust_count).customer_name ;
2711 
2712                         --           ----------------------errorout_an(' before get products '||l_id);
2713 
2714                         get_products(l_clvl_filter,
2715                                      l_id,
2716                                      l_default,
2717                                      l_id,
2718                                      l_org_id,
2719                                      l_party_id,
2720                                      l_organization_id,
2721                                      l_prod_tbl);
2722 
2723                         --           ----------------------errorout_an(' after get products '||l_prod_tbl.count);
2724                         IF l_prod_tbl.COUNT > 0 THEN
2725 
2726                             x_prod_selections_tbl(rowcount).cp_id := l_id;
2727                             x_prod_selections_tbl(rowcount).name := l_name;
2728                             --              x_prod_selections_tbl(rowcount).description := l_get_all_customer_rec.description;
2729                             x_prod_selections_tbl(rowcount).rec_type := 'P';
2730                             x_prod_selections_tbl(rowcount).rec_name := 'Customer';
2731                             x_prod_selections_tbl(rowcount).rec_no := rowcount;
2732                             x_prod_selections_tbl(rowcount).cp_id2 := '';
2733                             x_prod_selections_tbl(rowcount).ser_number := '';
2734                             x_prod_selections_tbl(rowcount).ref_number := '' ;
2735                             x_prod_selections_tbl(rowcount).quantity := '';
2736                             x_prod_selections_tbl(rowcount).orig_net_amt := '';
2737                             x_prod_selections_tbl(rowcount).price := '';
2738                             x_prod_selections_tbl(rowcount).inventory_item_id := '';
2739                             x_prod_selections_tbl(rowcount).site_id := '';
2740                             x_prod_selections_tbl(rowcount).uom_code := '';
2741                             x_prod_selections_tbl(rowcount).display_name := '';
2742                             x_prod_selections_tbl(rowcount).site_name := '';
2743                             -- BUG 4372877 --
2744                             -- GCHADHA --
2745                             -- 5/25/2005 --
2746                             x_prod_selections_tbl(rowcount).ext_reference := '';
2747                             -- END GCHADHA --
2748 
2749 
2750                             rowcount := rowcount + 1;
2751 
2752                             populate_table (l_prod_tbl,
2753                                             l_clvl_filter,
2754                                             rowcount,
2755                                             l_display_pref,
2756                                             x_prod_selections_tbl);
2757 
2758                             -- BUG 4113113 --
2759                             -- GCHADHA --
2760                             rowcount := rowcount + 1;
2761                             -- END GCHADHA --
2762                         END IF;
2763                     END LOOP;
2764                 ELSIF l_clvl_id IS NOT NULL THEN
2765 
2766                     get_products(l_clvl_filter,
2767                                  l_clvl_id,
2768                                  l_default,
2769                                  l_clvl_id,
2770                                  l_party_id,
2771                                  l_org_id,
2772                                  l_organization_id,
2773                                  l_prod_tbl);
2774 
2775                     IF l_prod_tbl.COUNT > 0 THEN
2776 
2777                         x_prod_selections_tbl(rowcount).cp_id := l_customer_id;
2778                         x_prod_selections_tbl(rowcount).name := p_clvl_filter_rec.clvl_name;
2779                         --              x_prod_selections_tbl(rowcount).description := p_clvl_filter_rec.clvl_description;
2780                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2781                         x_prod_selections_tbl(rowcount).rec_name := 'Customer';
2782                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2783                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2784                         x_prod_selections_tbl(rowcount).ser_number := '';
2785                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2786                         x_prod_selections_tbl(rowcount).quantity := '';
2787                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2788                         x_prod_selections_tbl(rowcount).price := '';
2789                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2790                         x_prod_selections_tbl(rowcount).site_id := '';
2791                         x_prod_selections_tbl(rowcount).uom_code := '';
2792                         x_prod_selections_tbl(rowcount).display_name := '';
2793                         x_prod_selections_tbl(rowcount).site_name := '';
2794                         -- BUG 4372877 --
2795                         -- GCHADHA --
2796                         -- 5/25/2005 --
2797                         x_prod_selections_tbl(rowcount).ext_reference := '';
2798                         -- END GCHADHA --
2799 
2800 
2801                         rowcount := rowcount + 1;
2802 
2803                         populate_table (l_prod_tbl,
2804                                         l_clvl_filter,
2805                                         rowcount,
2806                                         l_display_pref,
2807                                         x_prod_selections_tbl);
2808 
2809 
2810 
2811                     END IF;
2812                 END IF;
2813 
2814             ELSIF l_clvl_filter = 'Model' THEN
2815 
2816                 get_model(l_organization_id,
2817                           l_clvl_id,
2818                           l_party_id,
2819                           l_display_pref,
2820                           l_default,
2821                           l_org_id,
2822                           x_prod_selections_tbl );
2823 
2824 	    /*vgujarat gsi config*/
2825             ELSIF l_clvl_filter = 'Configuration' THEN
2826 
2827                 get_sr_configuration(l_organization_id,
2828                           l_clvl_id,
2829                           l_party_id,
2830                           l_display_pref,
2831                           l_default,
2832                           l_org_id,
2833                           x_prod_selections_tbl );
2834 	    /*vgujarat gsi config*/
2835 
2836 
2837             END IF; /** l_clvl_filter  in  item/system/site/customer/model **/
2838 
2839         ELSIF   l_clvl_filter = 'Party' THEN
2840 
2841             IF  l_clvl_id IS NOT NULL OR l_default = 'CUSTOMER' THEN
2842                 l_clvl_id := NVL(l_clvl_id, l_party_id);
2843 
2844 
2845                 --       IF l_default = 'CUSTOMER' THEN
2846                 get_party_id(p_default => l_default,
2847                              p_party_id => l_clvl_id,
2848                              p_org_id => l_org_id,
2849                              x_party_id_tbl => l_party_id_tbl );
2850 
2851                 l_name := l_party_id_tbl(1).party_name;
2852 
2853 
2854                 --      END IF;
2855 
2856                 get_products(l_clvl_filter,
2857                              NULL,
2858                              l_default,
2859                              l_clvl_id,
2860                              l_clvl_id,
2861                              l_org_id,
2862                              l_organization_id,
2863                              l_prod_tbl);
2864 
2865                 IF l_prod_tbl.COUNT > 0 THEN
2866                     x_prod_selections_tbl(rowcount).cp_id := l_party_id;
2867                     x_prod_selections_tbl(rowcount).name := l_name;
2868                     x_prod_selections_tbl(rowcount).description := l_name;
2869                     x_prod_selections_tbl(rowcount).rec_type := 'P';
2870                     x_prod_selections_tbl(rowcount).rec_name := 'Party';
2871                     x_prod_selections_tbl(rowcount).rec_no := rowcount;
2872                     x_prod_selections_tbl(rowcount).cp_id2 := '';
2873                     x_prod_selections_tbl(rowcount).ser_number := '';
2874                     x_prod_selections_tbl(rowcount).ref_number := '' ;
2875                     x_prod_selections_tbl(rowcount).quantity := '';
2876                     x_prod_selections_tbl(rowcount).price := '';
2877                     x_prod_selections_tbl(rowcount).inventory_item_id := '';
2878                     x_prod_selections_tbl(rowcount).site_id := '';
2879                     x_prod_selections_tbl(rowcount).uom_code := '';
2880                     x_prod_selections_tbl(rowcount).display_name := '';
2881                     x_prod_selections_tbl(rowcount).site_name := '';
2882                     -- BUG 4372877 --
2883                     -- GCHADHA --
2884                     -- 5/25/2005 --
2885                     x_prod_selections_tbl(rowcount).ext_reference := '';
2886                     -- END GCHADHA --
2887 
2888 
2889                     rowcount := rowcount + 1;
2890 
2891                     populate_table (l_prod_tbl,
2892                                     l_clvl_filter,
2893                                     rowcount,
2894                                     l_display_pref,
2895                                     x_prod_selections_tbl);
2896 
2897                 END IF;
2898 
2899             ELSIF  l_clvl_id IS NULL THEN
2900                 /* Select all Items for given party first */
2901 
2902                 get_party_id(p_default => l_default,
2903                              p_party_id => l_party_id,
2904                              p_org_id => l_org_id,
2905                              x_party_id_tbl => l_party_id_tbl );
2906 
2907                 FOR i IN 1..l_party_id_tbl.COUNT LOOP
2908 
2909                     l_party_id := l_party_id_tbl(i).party_id;
2910 
2911 
2912                     get_products(l_clvl_filter,
2913                                  NULL,
2914                                  l_default,
2915                                  l_clvl_id,
2916                                  l_party_id,
2917                                  l_org_id,
2918                                  l_organization_id,
2919                                  l_prod_tbl);
2920 
2921 
2922                     IF l_prod_tbl.COUNT > 0 THEN
2923 
2924                         x_prod_selections_tbl(rowcount).cp_id := l_party_id_tbl(i).party_id;
2925                         x_prod_selections_tbl(rowcount).name := l_party_id_tbl(i).party_name;
2926                         x_prod_selections_tbl(rowcount).description := l_party_id_tbl(i).party_name;
2927                         x_prod_selections_tbl(rowcount).rec_type := 'P';
2928                         x_prod_selections_tbl(rowcount).rec_name := 'Party';
2929                         x_prod_selections_tbl(rowcount).rec_no := rowcount;
2930                         x_prod_selections_tbl(rowcount).cp_id2 := '';
2931                         x_prod_selections_tbl(rowcount).ser_number := '';
2932                         x_prod_selections_tbl(rowcount).ref_number := '' ;
2933                         x_prod_selections_tbl(rowcount).quantity := '';
2934                         x_prod_selections_tbl(rowcount).orig_net_amt := '';
2935                         x_prod_selections_tbl(rowcount).price := '';
2936                         x_prod_selections_tbl(rowcount).inventory_item_id := '';
2937                         x_prod_selections_tbl(rowcount).site_id := '';
2938                         x_prod_selections_tbl(rowcount).uom_code := '';
2939                         x_prod_selections_tbl(rowcount).display_name := '';
2940                         x_prod_selections_tbl(rowcount).site_name := '';
2941                         -- BUG 4372877 --
2942                         -- GCHADHA --
2943                         -- 5/25/2005 --
2944                         x_prod_selections_tbl(rowcount).ext_reference := '';
2945                         -- END GCHADHA --
2946 
2947 
2948                         rowcount := rowcount + 1;
2949 
2950                         populate_table (l_prod_tbl,
2951                                         l_clvl_filter,
2952                                         rowcount,
2953                                         l_display_pref,
2954                                         x_prod_selections_tbl);
2955                         -- BUG 4113113 --
2956                         -- GCHADHA --
2957                         rowcount := rowcount + 1;
2958                         -- END GCHADHA --
2959 
2960                     END IF; /* end if or prod tbl count > 0 */
2961                 END LOOP; /* End loop of prod tbl loop */
2962 
2963             END IF; /* Clvl Id is NULL */
2964 
2965 
2966         END IF; /** If l_clvl_filter <> 'Party' **/
2967 
2968     END;
2969 
2970     /******* PROC 2 ************/
2971 
2972 
2973 
2974     /*******************************************/
2975 
2976     PROCEDURE Get_customer_selections(p_clvl_filter_rec IN clvl_filter_rec,
2977                                       x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
2978     IS
2979 
2980     CURSOR l_csr_get_customer(p_party_id IN NUMBER ) IS
2981         SELECT cust_acc.party_id party_id, parties.name party_name, parties.description description,
2982                cust_acc.id1 id1, cust_acc.name name, cust_acc.id2 id2, cust_acc.description account_number
2983         FROM   OKX_CUSTOMER_ACCOUNTS_V cust_acc,
2984                OKX_PARTIES_V parties
2985         WHERE  cust_acc.party_id = p_party_id
2986         AND    cust_acc.party_id = parties.id1
2987         AND    cust_acc.status = 'A';
2988 
2989     CURSOR l_csr_get_party_name(p_party_id IN NUMBER) IS
2990         SELECT parties.id1 party_id, parties.name party_name
2991         FROM OKX_PARTIES_V parties
2992         WHERE parties.id1 = p_party_id ;
2993 
2994     CURSOR l_csr_get_all_customers IS
2995         SELECT cust_acc.party_id party_id, parties.name party_name, parties.description description,
2996                cust_acc.id1 id1, cust_acc.name name, cust_acc.id2 id2, cust_acc.description account_number
2997         FROM   OKX_CUSTOMER_ACCOUNTS_V cust_acc,
2998                OKX_PARTIES_V parties
2999         WHERE  cust_acc.party_id = parties.id1
3000         AND    cust_acc.status = 'A';
3001 
3002     l_csr_cust_rec  l_csr_get_customer%ROWTYPE;
3003     l_csr_party_rec l_csr_get_party_name%ROWTYPE;
3004 
3005     l_default   VARCHAR2(15);
3006     l_party_id  OKX_PARTIES_V.id1%TYPE;
3007     i           NUMBER ;
3008     rowcount    NUMBER := 1;
3009     l_org_id    NUMBER ;
3010     l_customer_id   NUMBER ;
3011     l_cust_id_tbl cust_id_tbl;
3012     l_party_id_tbl party_id_tbl;
3013 
3014     l_old_party_Id NUMBER :=  - 99;
3015     l_party_selected OKX_PARTIES_V.ID1%TYPE;
3016     BEGIN
3017         l_default := p_clvl_filter_rec.clvl_default;
3018         l_party_id := p_clvl_filter_rec.clvl_party_id;
3019         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
3020         l_party_selected := p_clvl_filter_rec.clvl_find_id;
3021 
3022         l_party_id := NVL(l_party_selected, l_party_id);
3023 
3024         IF l_party_selected IS NOT NULL THEN
3025             OPEN l_csr_get_party_name(l_party_selected);
3026             FETCH l_csr_get_party_name INTO l_csr_party_rec;
3027             CLOSE l_csr_get_party_name;
3028 
3029             /*** Set parent records ***/
3030 
3031             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3032             x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
3033             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3034             x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec.party_id;
3035             x_clvl_selections_tbl(rowcount).name := l_csr_party_rec.party_name;
3036             x_clvl_selections_tbl(rowcount).lse_id := 35;
3037             x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
3038 
3039             rowcount := rowcount + 1;
3040 
3041             FOR l_cust_csr_rec IN l_csr_get_customer(l_party_selected) LOOP
3042 
3043                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
3044                 x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
3045                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3046                 x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.id1;
3047                 x_clvl_selections_tbl(rowcount).id2 := l_cust_csr_rec.id2;
3048                 x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.name;
3049                 x_clvl_selections_tbl(rowcount).clvl_id := l_cust_csr_rec.id1;
3050                 x_clvl_selections_tbl(rowcount).clvl_name := l_cust_csr_rec.name;
3051                 x_clvl_selections_tbl(rowcount).display_name := l_cust_csr_rec.name || ',' || l_cust_csr_rec.account_number;
3052                 x_clvl_selections_tbl(rowcount).party_id := l_cust_csr_rec.party_id;
3053                 x_clvl_selections_tbl(rowcount).party_name := l_cust_csr_rec.party_name;
3054                 x_clvl_selections_tbl(rowcount).description := l_cust_csr_Rec.description;
3055                 x_clvl_selections_tbl(rowcount).lse_id := 35;
3056                 x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
3057                 rowcount := rowcount + 1;
3058             END LOOP;
3059 
3060         ELSE
3061             IF   l_default <> 'ALL' THEN
3062 
3063                 get_party_id(p_default => l_default,
3064                              p_party_id => l_party_id,
3065                              p_org_id => l_org_id,
3066                              x_party_id_tbl => l_party_id_tbl);
3067 
3068                 FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
3069                     l_party_selected := l_party_id_tbl(i).party_id;
3070 
3071                     FOR l_cust_csr_rec IN l_csr_get_customer(l_party_selected) LOOP
3072                         l_party_id := l_cust_csr_rec.party_id;
3073                         IF l_old_party_id <> l_party_id THEN
3074                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3075                             x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
3076                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3077                             x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.party_id;
3078                             x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.party_name;
3079                             x_clvl_selections_tbl(rowcount).lse_id := 35;
3080                             x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
3081 
3082                             l_old_party_id := l_party_id;
3083 
3084                             rowcount := rowcount + 1;
3085                             /* Set parent record */
3086                         END IF;
3087 
3088                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3089                         x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
3090                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3091                         x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.id1;
3092                         x_clvl_selections_tbl(rowcount).id2 := l_cust_csr_rec.id2;
3093                         x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.name;
3094                         x_clvl_selections_tbl(rowcount).clvl_id := l_cust_csr_rec.id1;
3095                         x_clvl_selections_tbl(rowcount).clvl_name := l_cust_csr_rec.name;
3096                         x_clvl_selections_tbl(rowcount).display_name := l_cust_csr_rec.name || ',' || l_cust_csr_rec.account_number;
3097                         x_clvl_selections_tbl(rowcount).party_id := l_cust_csr_rec.party_id;
3098                         x_clvl_selections_tbl(rowcount).party_name := l_cust_csr_rec.party_name;
3099                         x_clvl_selections_tbl(rowcount).description := l_cust_csr_Rec.description;
3100                         x_clvl_selections_tbl(rowcount).lse_id := 35;
3101                         x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
3102                         rowcount := rowcount + 1;
3103                     END LOOP;
3104 
3105                 END LOOP; /* end of customer id loop */
3106 
3107             ELSIF l_default = 'ALL' THEN
3108                 FOR l_cust_csr_rec IN l_csr_get_all_customers LOOP
3109 
3110                     l_party_id := l_cust_csr_rec.party_id;
3111 
3112                     IF l_old_party_id <> l_party_id THEN
3113 
3114                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3115                         x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
3116                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3117                         x_clvl_selections_tbl(rowcount).id1 := l_cust_csr_rec.party_id;
3118                         x_clvl_selections_tbl(rowcount).name := l_cust_csr_rec.party_name;
3119                         x_clvl_selections_tbl(rowcount).lse_id := 35;
3120                         x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
3121 
3122                         l_old_party_id := l_party_id;
3123                         rowcount := rowcount + 1;
3124                         /* Set parent record */
3125                     END IF;
3126 
3127                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3128                     x_clvl_selections_tbl(rowcount).rec_name := 'Customer';
3129                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3130                     x_clvl_selections_tbl(rowcount).clvl_id := l_cust_csr_rec.id1;
3131                     x_clvl_selections_tbl(rowcount).id2 := l_cust_csr_rec.id2;
3132                     x_clvl_selections_tbl(rowcount).clvl_name := l_cust_csr_rec.name;
3133                     x_clvl_selections_tbl(rowcount).display_name := l_cust_csr_rec.name || ',' || l_cust_csr_rec.account_number;
3134                     x_clvl_selections_tbl(rowcount).party_id := l_cust_csr_rec.party_id;
3135                     x_clvl_selections_tbl(rowcount).party_name := l_cust_csr_rec.party_name;
3136                     x_clvl_selections_tbl(rowcount).description := l_cust_csr_Rec.account_number;
3137                     x_clvl_selections_tbl(rowcount).lse_id := 35;
3138                     x_clvl_selections_tbl(rowcount).lse_name := 'Customer';
3139                     rowcount := rowcount + 1;
3140                 END LOOP;
3141             END IF; /* L_default id <> 'ALL' */
3142         END IF;
3143 
3144     END get_customer_selections;
3145 
3146 
3147 
3148     /*******************************************/
3149 
3150 
3151     PROCEDURE Get_party_selections(p_clvl_filter_rec IN clvl_filter_rec,
3152                                    x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
3153     IS
3154 
3155     CURSOR l_csr_party_customer(p_party_id IN NUMBER ) IS
3156         SELECT id1, id2, Name, Description
3157         FROM   OKX_PARTIES_V
3158         WHERE  id1 = p_party_id
3159         AND    status = 'A';
3160 
3161     CURSOR l_csr_party_related(p_party_id IN NUMBER,
3162                                p_org_id   IN NUMBER) IS
3163         SELECT P1.id1, P1.id2, P1.name, P1.description
3164         FROM OKX_PARTIES_V P1, OKX_CUSTOMER_ACCOUNTS_V CA1
3165         WHERE P1.id1 = CA1.party_id
3166         AND CA1.id1 IN (SELECT rel_acc.cust_account_id
3167                         FROM  OKX_CUSTOMER_ACCOUNTS_V    cust_acc,
3168                         OKX_CUST_ACCT_RELATE_ALL_V rel_acc
3169                         WHERE rel_acc.related_cust_account_id = cust_acc.id1
3170                         AND   cust_acc.party_id = p_party_id
3171                         AND   cust_acc.status = 'A'
3172                         AND   rel_acc.org_id = p_org_id
3173                         AND   rel_acc.status = 'A')
3174         AND P1.status = 'A'
3175         AND CA1.status = 'A';
3176 
3177     CURSOR l_csr_party_both(p_party_id IN NUMBER,
3178                             p_org_id   IN NUMBER ) IS
3179         SELECT id1, id2, Name, Description
3180         FROM   OKX_PARTIES_V
3181         WHERE  id1 = p_party_id
3182         AND    status = 'A'
3183         UNION
3184         SELECT P1.id1, P1.id2, P1.name, P1.description
3185         FROM OKX_PARTIES_V P1, OKX_CUSTOMER_ACCOUNTS_V CA1
3186         WHERE P1.id1 = CA1.party_id
3187         AND CA1.id1 IN (SELECT rel_acc.cust_account_id
3188                         FROM  OKX_CUSTOMER_ACCOUNTS_V    cust_acc,
3189                         OKX_CUST_ACCT_RELATE_ALL_V rel_acc
3190                         WHERE rel_acc.related_cust_account_id = cust_acc.id1
3191                         AND   cust_acc.party_id = p_party_id
3192                         AND   cust_acc.status = 'A'
3193                         AND   rel_acc.org_id = p_org_id
3194                         AND   rel_acc.status = 'A')
3195         AND P1.status = 'A'
3196         AND CA1.status = 'A';
3197 
3198     CURSOR l_csr_party_all IS
3199         SELECT id1, id2, Name, Description
3200         FROM   OKX_PARTIES_V
3201         WHERE  status = 'A';
3202 
3203     l_csr_party_rec  l_csr_party_customer%ROWTYPE;
3204 
3205     l_default   VARCHAR2(15);
3206     l_party_id  OKX_PARTIES_V.id1%TYPE;
3207     i           NUMBER ;
3208     rowcount    NUMBER := 1;
3209     l_org_id    NUMBER ;
3210     l_party_selected NUMBER;
3211 
3212     BEGIN
3213         l_default := p_clvl_filter_rec.clvl_default;
3214         l_party_id := p_clvl_filter_rec.clvl_party_id;
3215         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
3216         l_party_selected := p_clvl_filter_rec.clvl_find_id;
3217 
3218 
3219         IF l_default = 'CUSTOMER' OR l_party_selected IS NOT NULL THEN
3220             IF l_party_selected IS NOT NULL THEN
3221                 l_party_id := l_party_selected ;
3222             END IF;
3223 
3224             FOR l_csr_party_rec_c IN l_csr_party_customer(l_party_id) LOOP
3225                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
3226                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3227                 x_clvl_selections_tbl(rowcount).rec_name := 'Party';
3228                 x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec_c.id1;
3229                 x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec_c.name;
3230                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_c.id2;
3231                 x_clvl_selections_tbl(rowcount).name := l_csr_party_rec_c.name;
3232                 x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec_c.name || ',' || l_csr_party_Rec_c.description;
3233                 x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec_c.id1;
3234                 x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec_c.name;
3235                 x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec_c.description;
3236                 x_clvl_selections_tbl(rowcount).lse_id := 8;
3237                 x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
3238                 rowcount := rowcount + 1;
3239             END LOOP;
3240         ELSIF l_default = 'ALL' THEN
3241             FOR l_csr_party_rec_a IN l_csr_party_all LOOP
3242                 l_party_id := l_csr_party_rec_a.id1 ;
3243                 FOR l_csr_party_rec IN l_Csr_party_customer(l_party_id) LOOP
3244                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3245                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3246                     x_clvl_selections_tbl(rowcount).rec_name := 'Party';
3247                     x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec.id1;
3248                     x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec.id2;
3249                     x_clvl_selections_tbl(rowcount).name := l_csr_party_rec.name;
3250                     x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec.name || ',' || l_csr_party_Rec.description;
3251                     x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec.id1;
3252                     x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec.name;
3253                     x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec.id1;
3254                     x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec.name;
3255                     x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec.description;
3256                     x_clvl_selections_tbl(rowcount).lse_id := 8;
3257                     x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
3258                     rowcount := rowcount + 1;
3259                 END LOOP;
3260             END LOOP;
3261         ELSIF l_default = 'RELATED' THEN
3262             FOR l_csr_party_rec_r IN l_Csr_party_related(l_party_id, l_org_id ) LOOP
3263                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
3264                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3265                 x_clvl_selections_tbl(rowcount).rec_name := 'Party';
3266                 x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec_r.id1;
3267                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_r.id2;
3268                 x_clvl_selections_tbl(rowcount).name := l_csr_party_rec_r.name;
3269                 x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec_r.id1;
3270                 x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec_r.name;
3271                 x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec_r.name || ',' || l_csr_party_Rec.description;
3272                 x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec_r.id1;
3273                 x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec_r.name;
3274                 x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec_r.description;
3275                 x_clvl_selections_tbl(rowcount).lse_id := 8;
3276                 x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
3277                 rowcount := rowcount + 1;
3278             END LOOP;
3279         ELSIF l_default = 'BOTH' THEN
3280             FOR l_csr_party_rec_b IN l_Csr_party_both(l_party_id, l_org_id ) LOOP
3281                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
3282                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3283                 x_clvl_selections_tbl(rowcount).rec_name := 'Party';
3284                 x_clvl_selections_tbl(rowcount).id1 := l_csr_party_rec_b.id1;
3285                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_b.id2;
3286                 x_clvl_selections_tbl(rowcount).name := l_csr_party_rec_b.name;
3287                 x_clvl_selections_tbl(rowcount).clvl_id := l_csr_party_rec_b.id1;
3288                 x_clvl_selections_tbl(rowcount).id2 := l_csr_party_rec_b.id2;
3289                 x_clvl_selections_tbl(rowcount).clvl_name := l_csr_party_rec_b.name;
3290                 x_clvl_selections_tbl(rowcount).display_name := l_csr_party_rec_b.name || ',' || l_csr_party_Rec.description;
3291                 x_clvl_selections_tbl(rowcount).party_id := l_csr_party_rec_b.id1;
3292                 x_clvl_selections_tbl(rowcount).party_name := l_csr_party_rec_b.name;
3293                 x_clvl_selections_tbl(rowcount).description := l_csr_party_Rec_b.description;
3294                 x_clvl_selections_tbl(rowcount).lse_id := 8;
3295                 x_clvl_selections_tbl(rowcount).lse_name := 'Party'  ;
3296                 rowcount := rowcount + 1;
3297             END LOOP;
3298         END IF;
3299 
3300     END get_party_selections;
3301 
3302     PROCEDURE Get_site_selections(p_clvl_filter_rec IN clvl_filter_rec,
3303                                   x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
3304     IS
3305 
3306     CURSOR l_csr_get_site(p_party_id IN NUMBER ) IS
3307         SELECT DISTINCT parties.name party_name, parties.id1 party_id,
3308                party_site.id1 id1, party_site.party_site_number, party_site.id2,
3309                party_site.name party_site_name, party_site.description
3310         FROM   OKX_PARTIES_V parties,
3311                OKX_PARTY_SITES_V party_site
3312         WHERE  parties.id1 = p_party_id
3313         AND    party_site.party_id = parties.id1
3314         AND    party_site.status = 'A'
3315         ORDER BY parties.name ;
3316 
3317     CURSOR l_csr_get_all_sites  IS
3318         SELECT DISTINCT parties.name party_name, parties.id1 party_id,
3319                party_site.id1 id1, party_site.party_site_number, party_site.id2,
3320                party_site.name  party_site_name, party_site.description
3321         FROM   OKX_PARTIES_V parties,
3322                OKX_PARTY_SITES_V party_site
3323         WHERE  party_site.party_id = parties.id1
3324         AND    party_site.status = 'A'
3325         ORDER BY parties.name ;
3326 
3327     -- Bug 4915711--
3328     -- l_csr_cust_rec  l_csr_get_site%ROWTYPE;
3329     -- Bug 4915711--
3330 
3331     l_default      VARCHAR2(15);
3332     l_party_id     OKX_PARTIES_V.id1%TYPE;
3333     l_old_party_id     NUMBER :=  - 99;
3334     i              NUMBER ;
3335     rowcount       NUMBER := 1;
3336     l_org_id       NUMBER ;
3337     l_cust_id_tbl cust_id_tbl;
3338     l_party_id_tbl party_id_tbl;
3339     l_party_selected VARCHAR2(15);
3340 
3341     l_old_customer_id NUMBER :=  - 99 ;
3342     l_customer_id NUMBER ;
3343     -- BUG 4915711 --
3344     TYPE get_all_sites_rec IS RECORD (
3345                                       party_name OKX_PARTIES_V.NAME%TYPE,
3346                                       party_Id1  OKX_PARTIES_V.ID1%TYPE,
3347                                       party_sites_Id1  OKX_PARTY_SITES_V.ID1%TYPE,
3348                                       Party_Sites_Number OKX_PARTY_SITES_V.party_site_number%TYPE,
3349                                       party_sites_Id2  OKX_PARTY_SITES_V.ID2%TYPE,
3350                                       party_sites_name OKX_PARTY_SITES_V.NAME%TYPE,
3351                                       party_desc VARCHAR2(2000)
3352                                       );
3353 
3354     l_get_all_sites_rec get_all_sites_rec;
3355     -- BUG 4915711 --
3356 
3357     BEGIN
3358         l_default := p_clvl_filter_rec.clvl_default;
3359         l_party_id := p_clvl_filter_rec.clvl_party_id;
3360         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
3361 
3362         IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN
3363             l_party_id := p_clvl_filter_rec.clvl_find_id;
3364         ELSE
3365             IF l_default = 'CUSTOMER' THEN
3366                 l_party_selected := l_party_Id;
3367             END IF ;
3368         END IF;
3369 
3370 
3371         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 */
3372             -- BUG 4915711 --
3373             --  FOR l_site_csr_rec IN l_csr_get_site(l_party_id) LOOP
3374             OPEN l_csr_get_site(l_party_id);
3375             LOOP
3376                 FETCH l_csr_get_site INTO l_get_all_sites_rec;
3377                 IF l_csr_get_site%NOTFOUND THEN
3378                     CLOSE l_csr_get_site;
3379                     EXIT;
3380                 END IF;
3381                 IF rowcount = 1 THEN
3382                     x_clvl_selections_tbl(rowcount).rec_type := 'P';
3383                     x_clvl_selections_tbl(rowcount).rec_name := 'Site';
3384                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3385                     --  x_clvl_selections_tbl(rowcount).id1    := l_site_csr_rec.party_id; -- Bug 4915711
3386                     --  x_clvl_selections_tbl(rowcount).name   := l_site_csr_rec.party_name; -- Bug 4915711
3387                     x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_id1;
3388                     x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_name;
3389                     x_clvl_selections_tbl(rowcount).lse_id := 10;
3390                     x_clvl_selections_tbl(rowcount).lse_name := 'Site';
3391                     rowcount := rowcount + 1;
3392                     /* Set parent record */
3393                 END IF;
3394 
3395                 x_clvl_selections_tbl(rowcount).rec_type := 'C';
3396                 x_clvl_selections_tbl(rowcount).rec_name := 'Site';
3397                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3398 
3399                 x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_sites_id1;
3400                 x_clvl_selections_tbl(rowcount).id2 := l_get_all_sites_rec.party_sites_id2;
3401                 x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
3402                 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;
3403                 x_clvl_selections_tbl(rowcount).clvl_id := l_get_all_sites_rec.party_sites_id1;
3404                 x_clvl_selections_tbl(rowcount).clvl_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
3405                 x_clvl_selections_tbl(rowcount).description := l_get_all_sites_rec.party_desc;
3406 
3407                 x_clvl_selections_tbl(rowcount).lse_id := 10;
3408 
3409                 x_clvl_selections_tbl(rowcount).lse_name := 'Site';
3410 
3411                 rowcount := rowcount + 1;
3412 
3413             END LOOP;
3414             -- Bug 4915711--
3415         ELSE  /* if find id is NULL */
3416 
3417             IF l_default <> 'ALL' THEN /* if default is BOTH or RELATED */
3418 
3419                 get_party_id(p_default => l_default,
3420                              p_party_id => l_party_id,
3421                              p_org_id => l_org_id,
3422                              x_party_id_tbl => l_party_id_tbl);
3423 
3424                 FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
3425 
3426                     l_party_id := l_party_id_tbl(i).party_id;
3427                     -- Bug 4915711--
3428                     -- FOR l_site_csr_rec IN l_csr_get_site(l_party_Id) LOOP
3429                     OPEN l_csr_get_site(l_party_id);
3430                     LOOP
3431                         FETCH l_csr_get_site INTO l_get_all_sites_rec;
3432                         IF l_csr_get_site%NOTFOUND THEN
3433                             CLOSE l_csr_get_site;
3434                             EXIT;
3435                         END IF;
3436                         -- l_party_id := l_site_csr_rec.party_id;
3437                         l_party_id := l_get_all_sites_rec.party_id1;
3438                         IF l_old_party_id <> l_party_id THEN
3439                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3440                             x_clvl_selections_tbl(rowcount).rec_name := 'Site';
3441                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3442                             --x_clvl_selections_tbl(rowcount).id1 := l_site_csr_rec.party_id;
3443                             -- x_clvl_selections_tbl(rowcount).name := l_site_csr_rec.party_name;
3444                             x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_id1;
3445                             x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_name;
3446 
3447                             x_clvl_selections_tbl(rowcount).lse_id := 10;
3448                             x_clvl_selections_tbl(rowcount).lse_name := 'Site';
3449 
3450                             l_old_party_id := l_party_id;
3451                             rowcount := rowcount + 1;
3452                             /* Set parent record */
3453                         END IF;
3454 
3455                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3456                         x_clvl_selections_tbl(rowcount).rec_name := 'Site';
3457                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3458 
3459                         x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_sites_id1;
3460                         x_clvl_selections_tbl(rowcount).id2 := l_get_all_sites_rec.party_sites_id2;
3461                         x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
3462                         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;
3463                         x_clvl_selections_tbl(rowcount).clvl_id := l_get_all_sites_rec.party_sites_id1;
3464                         x_clvl_selections_tbl(rowcount).clvl_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
3465                         x_clvl_selections_tbl(rowcount).description := l_get_all_sites_rec.party_desc;
3466 
3467                         x_clvl_selections_tbl(rowcount).lse_id := 10;
3468                         x_clvl_selections_tbl(rowcount).lse_name := 'Site';
3469 
3470                         rowcount := rowcount + 1;
3471 
3472                     END LOOP;
3473                     -- Bug 4915711 --
3474                 END LOOP;
3475 
3476 
3477             ELSIF l_default = 'ALL' THEN
3478                 -- Bug 4915711 --
3479                 -- FOR l_site_csr_rec IN l_csr_get_all_sites  LOOP
3480                 OPEN l_csr_get_all_sites;
3481                 LOOP
3482                     FETCH l_csr_get_all_sites INTO l_get_all_sites_rec;
3483                     IF l_csr_get_all_sites%NOTFOUND THEN
3484                         CLOSE l_csr_get_all_sites;
3485                         EXIT;
3486                     END IF;
3487                     -- l_party_id := l_site_csr_rec.party_id;
3488                     l_party_id := l_get_all_sites_rec.party_id1;
3489 
3490                     IF l_old_party_id <> l_party_id THEN
3491 
3492                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3493                         x_clvl_selections_tbl(rowcount).rec_name := 'Site';
3494                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3495                         /*
3496                         x_clvl_selections_tbl(rowcount).id1 := l_site_csr_rec.party_id;
3497                         x_clvl_selections_tbl(rowcount).name := l_site_csr_rec.party_name;
3498                         */
3499                         x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_id1;
3500                         x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_name;
3501 
3502                         x_clvl_selections_tbl(rowcount).lse_id := 10;
3503                         x_clvl_selections_tbl(rowcount).lse_name := 'Site';
3504                         --    l_old_site_id := l_site_id;
3505                         l_old_party_id := l_party_id;
3506                         rowcount := rowcount + 1;
3507                         /* Set parent record */
3508                     END IF;
3509 
3510                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3511                     x_clvl_selections_tbl(rowcount).rec_name := 'Site';
3512                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3513 
3514                     x_clvl_selections_tbl(rowcount).clvl_id := l_get_all_sites_rec.party_sites_id1;
3515                     x_clvl_selections_tbl(rowcount).id2 := l_get_all_sites_rec.party_sites_id2;
3516                     x_clvl_selections_tbl(rowcount).clvl_name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
3517                     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;
3518                     x_clvl_selections_tbl(rowcount).id1 := l_get_all_sites_rec.party_sites_id1;
3519                     x_clvl_selections_tbl(rowcount).name := l_get_all_sites_rec.party_sites_number || '-' || l_get_all_sites_rec.party_sites_name;
3520                     x_clvl_selections_tbl(rowcount).description := l_get_all_sites_rec.party_desc;
3521 
3522                     x_clvl_selections_tbl(rowcount).lse_id := 10;
3523                     x_clvl_selections_tbl(rowcount).lse_name := 'Site';
3524 
3525                     rowcount := rowcount + 1;
3526 
3527                 END LOOP;
3528                 -- Bug 4915711--
3529             END IF;   /** end of default = ALL **/
3530         END IF;   /** Find id is not  null **/
3531     END get_site_selections;
3532 
3533     PROCEDURE Get_system_selections(p_clvl_filter_rec IN clvl_filter_rec,
3534                                     x_clvl_selections_tbl   OUT   NOCOPY   clvl_selections_tbl)
3535     IS
3536 
3537     -- BUG 4171350 --
3538     -- Added check for Language used for Session
3539 
3540     /** Covered Systems by customer */
3541     CURSOR l_csr_get_cust_system(p_customer_id IN NUMBER ) IS
3542         SELECT cust_acc.id1, cust_acc.name,
3543                CSB.system_id, '#' id2, CSB.system_number,
3544                CST.description, CST.name system_name
3545         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_CUSTOMER_ACCOUNTS_V cust_acc
3546         WHERE cust_acc.id1 = p_customer_id
3547         AND   CSB.system_id = CST.system_id
3548         AND   CSB.Customer_id = cust_acc.id1
3549         AND   CST.language = userenv('lang') -- new
3550         AND   SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3551 
3552         ORDER BY cust_acc.id1, CSB.system_id;
3553 
3554 
3555     CURSOR l_csr_get_all_cust_system  IS
3556         SELECT cust_acc.id1, cust_acc.name,
3557                CSB.system_id, '#' id2, CSB.system_number,
3558                CST.description, CST.name system_name
3559         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_CUSTOMER_ACCOUNTS_V cust_acc
3560         WHERE  CSB.system_id = CST.system_id
3561         AND    CSB.Customer_id = cust_acc.id1
3562         AND    SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE)  AND NVL(CSB.end_date_active, SYSDATE)
3563         AND    CST.language = userenv('lang') -- new
3564         ORDER  BY cust_acc.id1, CSB.system_id;
3565 
3566 
3567     /** Covered System by party */
3568     CURSOR l_csr_get_party_system(p_party_id IN VARCHAR2)  IS
3569         SELECT parties.id1, parties.name, CSB.system_id, parties.id2 id2,
3570                CST.name system_name, CST.description, CSB.system_number
3571         FROM   CSI_SYSTEMS_B CSB,
3572                CSI_SYSTEMS_TL CST,
3573                OKX_PARTIES_V parties,
3574                OKX_CUSTOMER_ACCOUNTS_V cust_acc
3575         WHERE parties.id1 = p_party_id
3576         AND   cust_acc.party_id = parties.id1
3577         AND   CSB.system_id = CST.system_id
3578         AND   CSB.customer_id = cust_acc.id1
3579         AND    CST.language = userenv('lang') -- new
3580         AND   SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE);
3581 
3582 
3583     CURSOR l_csr_get_all_party_systems  IS
3584         SELECT parties.id1, parties.name, CSB.system_id, parties.id2 id2,
3585                CST.name system_name, CST.description,
3586                CSB.system_number
3587         FROM CSI_SYSTEMS_B CSB,
3588              CSI_SYSTEMS_TL CST,
3589              OKX_PARTIES_V parties,
3590              OKX_CUSTOMER_ACCOUNTS_V cust_acc
3591         WHERE cust_acc.party_id = parties.id1
3592         AND   CSB.system_id = CST.system_id
3593         AND   CSB.customer_id = cust_acc.id1
3594         AND    CST.language = userenv('lang') -- new
3595         AND   SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE)  AND NVL(CSB.end_date_active, SYSDATE);
3596 
3597 
3598     /** Covered System by Site **/
3599     CURSOR l_csr_get_site_system(p_party_site_id IN NUMBER)  IS
3600         SELECT party_site.id1, party_site.party_site_number || '-' || party_site.name party_site_name, CSB.system_id,
3601                '#', CST.name system_name, CST.description,
3602                CSB.system_number, party_site.id2 id2
3603         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_PARTY_SITES_V party_site
3604         WHERE  party_site.id1 = p_party_site_id
3605         AND    CSB.system_id = CST.system_id
3606         AND    SYSDATE BETWEEN  NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3607         AND    CSB.install_site_use_id = party_site.id1
3608         AND    CST.language = userenv('lang') -- new
3609         ORDER BY  party_site.id1, CSB.system_id;
3610 
3611     CURSOR l_csr_site_system_by_party(p_party_id IN NUMBER)  IS
3612         SELECT party_site.id1, party_site.party_site_number || '-' || party_site.name party_site_name, CSB.system_id,
3613                '#', CST.name system_name, CST.description,
3614                CSB.system_number, party_site.id2 id2
3615         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_PARTY_SITES_V party_site
3616         WHERE  party_site.party_id = p_party_id
3617         AND    CSB.system_id = CST.system_id
3618         AND    SYSDATE BETWEEN  NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3619         AND    CSB.install_site_use_id = party_site.id1
3620         AND    CST.language = userenv('lang') -- new
3621         ORDER BY  party_site.id1, CSB.system_id;
3622 
3623     CURSOR l_csr_get_all_site_systems  IS
3624         SELECT party_site.id1, party_site.party_site_number || '-' || party_site.name party_site_name,
3625                CSB.system_id, party_site.id2 id2, CST.name system_name, CST.description,
3626                CSB.system_number
3627         FROM   CSI_SYSTEMS_B CSB, CSI_SYSTEMS_TL CST, OKX_PARTY_SITES_V party_site
3628         WHERE  CSB.system_id = CST.system_id
3629         AND    SYSDATE BETWEEN NVL(CSB.start_date_active, SYSDATE) AND NVL(CSB.end_date_active, SYSDATE)
3630         AND    CSB.install_site_use_id = party_site.id1
3631         AND    CST.language = userenv('lang') -- new
3632         ORDER BY  party_site.id1, CSB.system_id;
3633 
3634     l_csr_system_rec  l_csr_get_cust_system%ROWTYPE;
3635 
3636     l_default      VARCHAR2(15);
3637     l_party_id     NUMBER(15);
3638     l_customer_id  OKX_CUSTOMER_ACCOUNTS_V.id1%TYPE;
3639     i              NUMBER ;
3640     rowcount       NUMBER := 1;
3641     l_org_id       NUMBER ;
3642     l_party_id_tbl party_id_tbl;
3643     l_filter       VARCHAR2(15);
3644     l_old_customer_id  NUMBER :=  - 99;
3645     l_old_party_id     NUMBER :=  - 99;
3646     l_party_site_id    NUMBER;
3647     l_cust_id_tbl      cust_id_tbl;
3648     l_party_selected NUMBER;
3649     l_old_party_site_id   NUMBER :=  - 99;
3650 
3651 
3652     BEGIN
3653         l_default := p_clvl_filter_rec.clvl_default;
3654         l_party_id := p_clvl_filter_rec.clvl_party_id;
3655         l_org_id := p_clvl_filter_rec.clvl_auth_org_id;
3656         l_filter := p_clvl_filter_rec.clvl_filter;
3657 
3658         IF l_filter = 'Customer' THEN
3659             IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN
3660                 l_customer_id := p_clvl_filter_rec.clvl_find_id;
3661             END IF;
3662             --    ----------------errorout(' l customer id '||l_customer_id);
3663             IF p_clvl_filter_rec.clvl_find_id  IS NOT NULL THEN
3664 
3665                 --   ----------------errorout(' l customer id is NOT NULL ');
3666                 FOR l_system_csr_rec IN l_csr_get_cust_system(l_customer_Id) LOOP
3667                     --                               ----------------errorout(' in loop customer id is '||l_customer_id);
3668                     IF rowcount = 1 THEN
3669                         ----------------errorout(' systems selected ');
3670                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3671                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3672                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3673                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1 /** Customer id */ ;
3674                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name /* customer name */ ;
3675                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3676                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3677 
3678                         rowcount := rowcount + 1;
3679 
3680                         /* Set parent record */
3681 
3682                     END IF;
3683 
3684                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3685                     x_clvl_selections_tbl(rowcount).rec_name := 'System';
3686                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3687                     x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3688                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3689                     x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3690                     x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3691                     x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3692                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1; /** customer id **/
3693                     x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;  /** customer name **/
3694                     x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3695                     x_clvl_selections_tbl(rowcount).lse_id := 11;
3696                     x_clvl_selections_tbl(rowcount).lse_name := 'System';
3697 
3698                     rowcount := rowcount + 1;
3699 
3700                 END LOOP;
3701 
3702             ELSE  /* Customer id is NULL */
3703                 --     ----------------errorout(' l customer id IS NULL ');
3704                 IF l_default <> 'ALL' THEN
3705                     --       ----------------errorout(' default is not ALL ');
3706                     get_customer_id(p_default => l_default,
3707                                     p_party_id => l_party_id,  /* clvl_rec.party_id */
3708                                     p_org_id => l_org_id,
3709                                     x_cust_id_tbl => l_cust_id_tbl);
3710 
3711                     FOR i IN 1 .. l_cust_id_tbl.COUNT LOOP
3712 
3713                         l_customer_id := l_cust_id_tbl(i).customer_id;
3714                         --                ----------------errorout(' in loop customer id is '||l_customer_id);
3715                         FOR l_system_csr_rec IN l_csr_get_cust_system(l_customer_Id) LOOP
3716 
3717                             --                  ----------------errorout(' systems selected ');
3718                             IF l_old_customer_id <> l_customer_id THEN
3719                                 --                              ----------------errorout(' customer parent id is '||l_customer_id);
3720                                 x_clvl_selections_tbl(rowcount).rec_type := 'P';
3721                                 x_clvl_selections_tbl(rowcount).rec_name := 'System';
3722                                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3723                                 x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3724                                 x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3725                                 x_clvl_selections_tbl(rowcount).lse_id := 11;
3726                                 x_clvl_selections_tbl(rowcount).lse_name := 'System';
3727 
3728                                 rowcount := rowcount + 1;
3729                                 l_old_customer_id := l_customer_id;
3730 
3731                                 /* Set parent record */
3732 
3733                             END IF;
3734 
3735                             x_clvl_selections_tbl(rowcount).rec_type := 'C';
3736                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3737                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3738                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3739                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3740                             x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3741                             x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3742                             x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3743                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** customer id **/
3744                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** customer name **/
3745                             x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3746                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3747                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3748 
3749                             rowcount := rowcount + 1;
3750 
3751                         END LOOP; /* Select systems for given customer id */
3752                     END LOOP; /* Select customer id */
3753 
3754                 ELSE /** Default is ALL **/
3755 
3756                     FOR l_system_csr_rec IN l_csr_get_all_cust_system  LOOP
3757 
3758                         l_customer_id := l_system_csr_rec.id1;
3759                         IF l_old_customer_id <> l_customer_id THEN
3760                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3761                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3762                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3763                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3764                             x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3765                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3766                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3767 
3768                             l_old_customer_id := l_customer_id ;
3769                             rowcount := rowcount + 1;
3770 
3771                             /* Set parent record */
3772 
3773                         END IF;
3774 
3775                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3776                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3777                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3778                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3779                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3780                         x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3781                         x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3782                         x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3783                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1; /** customer id **/
3784                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;  /** customer name **/
3785                         x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3786                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3787                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3788 
3789                         rowcount := rowcount + 1;
3790 
3791                     END LOOP;  /** Select systems for all customers **/
3792                 END IF; /** Default <> 'ALL' **/
3793 
3794             END IF;  /** customer id is not null **/
3795 
3796         ELSIF l_filter = 'Site' THEN
3797 
3798             IF p_clvl_filter_rec.clvl_find_id IS NOT NULL THEN
3799                 l_party_site_id := p_clvl_filter_rec.clvl_find_id;
3800             END IF;
3801 
3802             --    ----------------errorout(' party site id is '||l_party_site_id);
3803             IF l_party_site_id IS NOT NULL THEN
3804                 FOR l_system_csr_rec IN l_csr_get_site_system(l_party_site_Id) LOOP
3805                     IF l_old_party_site_id <> l_system_csr_rec.id1 THEN
3806                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3807                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3808                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3809                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3810 
3811                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.party_site_name;
3812                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3813                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;
3814                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3815                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3816                         rowcount := rowcount + 1;
3817 
3818                         l_old_party_site_id := l_system_csr_rec.id1;
3819                         /* Set parent record */
3820 
3821                     END IF;
3822 
3823                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3824                     x_clvl_selections_tbl(rowcount).rec_name := 'System';
3825                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3826                     x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3827                     x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3828                     x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3829                     x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3830                     x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3831                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3832                     x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;  /** party name **/
3833                     x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3834                     x_clvl_selections_tbl(rowcount).lse_id := 11;
3835                     x_clvl_selections_tbl(rowcount).lse_name := 'System';
3836 
3837 
3838                     rowcount := rowcount + 1;
3839 
3840                 END LOOP;
3841 
3842             ELSE  /* party site id is NULL */
3843                 IF l_default IN  ('CUSTOMER', 'RELATED', 'BOTH') THEN
3844                     get_party_id(p_default => l_default,
3845                                  p_party_id => l_party_id,
3846                                  p_org_id => l_org_id,
3847                                  x_party_id_tbl => l_party_id_tbl);
3848 
3849                     FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
3850                         l_party_id := l_party_id_tbl(i).party_id;
3851 
3852                         FOR l_system_csr_rec IN l_csr_site_system_by_party(l_party_Id) LOOP
3853 
3854                             IF l_old_party_site_id <> l_system_csr_rec.id1 THEN
3855                                 /* Build parent record */
3856                                 x_clvl_selections_tbl(rowcount).rec_type := 'P';
3857                                 x_clvl_selections_tbl(rowcount).rec_name := 'System';
3858                                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3859                                 x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3860                                 x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.party_site_name;
3861                                 x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3862 
3863                                 x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;
3864                                 x_clvl_selections_tbl(rowcount).lse_id := 11;
3865                                 x_clvl_selections_tbl(rowcount).lse_name := 'System';
3866 
3867                                 l_old_party_site_id := l_system_csr_rec.id1;
3868 
3869                                 rowcount := rowcount + 1;
3870 
3871                                 /* Set parent record */
3872 
3873                             END IF;
3874 
3875                             x_clvl_selections_tbl(rowcount).rec_type := 'C';
3876                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3877                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3878                             x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3879                             x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3880                             x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3881                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3882                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3883                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3884                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;  /** party name **/
3885                             x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3886                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3887                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3888 
3889                             rowcount := rowcount + 1;
3890 
3891                         END LOOP; /* Select systems for given customer id */
3892                     END LOOP; /* Select customer id */
3893 
3894                 ELSIF l_default = 'ALL' THEN
3895 
3896                     FOR l_system_csr_rec IN l_csr_get_all_site_systems  LOOP
3897                         l_party_id := l_system_csr_rec.id1;
3898                         IF l_old_party_id <> l_party_id THEN
3899                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
3900                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
3901                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3902                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3903                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;
3904                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3905                             x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.party_site_name;
3906                             x_clvl_selections_tbl(rowcount).lse_id := 11;
3907                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
3908 
3909                             l_old_party_id := l_party_id ;
3910                             rowcount := rowcount + 1;
3911 
3912                             /* Set parent record */
3913 
3914                         END IF;
3915 
3916                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
3917                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3918                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3919                         x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3920                         x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3921                         x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3922                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3923                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3924                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3925                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.party_site_name;  /** party name **/
3926                         x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3927                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3928                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3929 
3930                         rowcount := rowcount + 1;
3931 
3932                     END LOOP;  /** Select systems for all customers **/
3933                 END IF ; /** Default <> 'ALL' **/
3934 
3935             END IF;  /** customer id is not null **/
3936 
3937         ELSIF l_filter = 'Party' THEN
3938 
3939             IF l_default = 'CUSTOMER' THEN
3940                 l_party_selected := l_party_id;
3941             ELSE
3942                 l_party_selected := p_clvl_filter_rec.clvl_find_id;
3943             END IF;
3944             --   ----------------errorout(' party selected is '||l_party_selected);
3945             IF l_party_selected IS NOT NULL THEN
3946 
3947                 FOR l_system_csr_rec IN l_csr_get_party_system(l_party_selected) LOOP
3948                     IF rowcount = 1 THEN
3949                         x_clvl_selections_tbl(rowcount).rec_type := 'P';
3950                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
3951                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3952                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3953                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3954                         x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
3955                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
3956                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;
3957                         x_clvl_selections_tbl(rowcount).lse_id := 11;
3958                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
3959                         rowcount := rowcount + 1;
3960 
3961                         /* Set parent record */
3962 
3963                     END IF;
3964 
3965                     x_clvl_selections_tbl(rowcount).rec_type := 'C';
3966                     x_clvl_selections_tbl(rowcount).rec_name := 'System';
3967                     x_clvl_selections_tbl(rowcount).rec_no := rowcount;
3968                     x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
3969                     x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
3970                     x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
3971                     x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
3972                     x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
3973                     x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
3974                     x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** party name **/
3975                     x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
3976                     x_clvl_selections_tbl(rowcount).lse_id := 11;
3977                     x_clvl_selections_tbl(rowcount).lse_name := 'System';
3978 
3979                     --                    ----------------errorout(' child record is '||x_clvl_selections_tbl(rowcount).clvl_name);
3980                     rowcount := rowcount + 1;
3981                 END LOOP;
3982 
3983             ELSE  /* party  id is NULL */
3984                 IF l_default IN  ('RELATED', 'BOTH') THEN
3985                     get_party_id(p_default => l_default,
3986                                  p_party_id => l_party_id,
3987                                  p_org_id => l_org_id,
3988                                  x_party_id_tbl => l_party_id_tbl);
3989 
3990 
3991                     FOR i IN 1 .. l_party_id_tbl.COUNT LOOP
3992                         l_party_selected := l_party_id_tbl(i).party_id;
3993                         --                    ----------------errorout(' party selected is '||l_party_selected);
3994                         --                ----------------errorout(' party id is ' ||l_party_selected);
3995                         FOR l_system_csr_rec IN l_csr_get_party_system(l_party_selected) LOOP
3996 
3997                             IF rowcount = 1 THEN
3998                                 x_clvl_selections_tbl(rowcount).rec_type := 'P';
3999                                 x_clvl_selections_tbl(rowcount).rec_name := 'System';
4000                                 x_clvl_selections_tbl(rowcount).rec_no := rowcount;
4001                                 x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
4002                                 x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
4003                                 x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
4004                                 x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;
4005                                 x_clvl_selections_tbl(rowcount).lse_id := 11;
4006                                 x_clvl_selections_tbl(rowcount).lse_name := 'System';
4007                                 --                      ----------------errorout(' after setting parent record ');
4008                                 --                      ----------------errorout(' parent record is '||x_clvl_selections_tbl(rowcount).party_name);
4009                                 rowcount := rowcount + 1;
4010 
4011                                 /* Set parent record */
4012 
4013                             END IF;
4014 
4015                             x_clvl_selections_tbl(rowcount).rec_type := 'C';
4016                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
4017                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
4018                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
4019                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
4020                             x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
4021                             x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
4022                             x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
4023                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
4024                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** party name **/
4025                             x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
4026                             x_clvl_selections_tbl(rowcount).lse_id := 11;
4027                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
4028                             --                    ----------------errorout(' in child rec '||x_clvl_selections_tbl(rowcount).party_name);
4029                             rowcount := rowcount + 1;
4030 
4031                         END LOOP; /* Select systems for given customer id */
4032                     END LOOP; /* Select customer id */
4033 
4034                 ELSIF l_default = 'ALL' THEN
4035 
4036                     FOR l_system_csr_rec IN l_csr_get_all_party_systems  LOOP
4037                         l_party_id := l_system_csr_rec.id1;
4038                         IF l_old_party_id <> l_party_id THEN
4039                             x_clvl_selections_tbl(rowcount).rec_type := 'P';
4040                             x_clvl_selections_tbl(rowcount).rec_name := 'System';
4041                             x_clvl_selections_tbl(rowcount).rec_no := rowcount;
4042                             x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
4043                             x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
4044                             x_clvl_selections_tbl(rowcount).name := l_system_csr_rec.name;
4045                             x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1;
4046                             x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;
4047                             x_clvl_selections_tbl(rowcount).lse_id := 11;
4048                             x_clvl_selections_tbl(rowcount).lse_name := 'System';
4049 
4050                             l_old_party_id := l_party_id ;
4051                             --                    ----------------errorout(' parent record is '||x_clvl_selections_tbl(rowcount).id1);
4052                             rowcount := rowcount + 1;
4053 
4054                             /* Set parent record */
4055 
4056                         END IF;
4057 
4058                         x_clvl_selections_tbl(rowcount).rec_type := 'C';
4059                         x_clvl_selections_tbl(rowcount).rec_name := 'System';
4060                         x_clvl_selections_tbl(rowcount).rec_no := rowcount;
4061                         x_clvl_selections_tbl(rowcount).id2 := l_system_csr_rec.id2;
4062                         x_clvl_selections_tbl(rowcount).id1 := l_system_csr_rec.id1;
4063                         x_clvl_selections_tbl(rowcount).clvl_id := l_system_csr_rec.system_id;
4064                         x_clvl_selections_tbl(rowcount).clvl_name := l_system_csr_rec.system_name;
4065                         x_clvl_selections_tbl(rowcount).display_name := l_system_csr_rec.system_name ||' , '|| l_system_csr_rec.description ||' , '|| l_system_csr_rec.system_number;
4066                         x_clvl_selections_tbl(rowcount).party_id := l_system_csr_rec.id1; /** party id **/
4067                         x_clvl_selections_tbl(rowcount).party_name := l_system_csr_rec.name;  /** party name **/
4068                         x_clvl_selections_tbl(rowcount).description := l_system_csr_Rec.description;
4069                         x_clvl_selections_tbl(rowcount).lse_id := 11;
4070                         x_clvl_selections_tbl(rowcount).lse_name := 'System';
4071 
4072                         rowcount := rowcount + 1;
4073 
4074                     END LOOP;  /** Select systems for all customers **/
4075                 END IF ; /** Default <> 'ALL' **/
4076 
4077             END IF;  /** customer id is not null **/
4078 
4079         END IF;
4080     END get_system_selections;
4081 
4082     PROCEDURE GetSelections_Prod(p_api_version         IN  NUMBER
4083                                  , p_init_msg_list       IN  VARCHAR2
4084                                  , p_clvl_filter_rec     IN  clvl_filter_rec
4085                                  , x_return_status       OUT NOCOPY VARCHAR2
4086                                  , x_msg_count           OUT NOCOPY NUMBER
4087                                  , x_msg_data            OUT NOCOPY VARCHAR2
4088                                  , x_prod_selections_tbl OUT NOCOPY prod_selections_tbl)
4089     IS
4090     lf_prod_selections_tbl prod_selections_tbl;
4091     rowcount NUMBER := 1;
4092     BEGIN
4093 
4094         ------errorout(' before get_product selections ');
4095         get_product_selection(p_clvl_filter_rec,
4096                               lf_prod_selections_tbl);
4097 
4098         FOR rowcount IN 1 .. lf_prod_selections_tbl.COUNT LOOP
4099 
4100             x_prod_selections_tbl(rowcount).rec_type := lf_prod_selections_tbl(rowcount).rec_type;
4101             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).rec_type);
4102             x_prod_selections_tbl(rowcount).rec_name := 'Item';
4103             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).rec_name);
4104             x_prod_selections_tbl(rowcount).rec_no := rowcount;
4105             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).rec_no);
4106             x_prod_selections_tbl(rowcount).cp_id := lf_prod_selections_tbl(rowcount).cp_id;
4107             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).cp_id);
4108             x_prod_selections_tbl(rowcount).cp_id2 := lf_prod_selections_tbl(rowcount).cp_id2;
4109             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).cp_id2);
4110             x_prod_selections_tbl(rowcount).ser_number := lf_prod_selections_tbl(rowcount).ser_number;
4111             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).ser_number);
4112             x_prod_selections_tbl(rowcount).ref_number := lf_prod_selections_tbl(rowcount).ref_number ;
4113             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).ref_number);
4114             x_prod_selections_tbl(rowcount).quantity := lf_prod_selections_tbl(rowcount).quantity;
4115             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).quantity);
4116             x_prod_selections_tbl(rowcount).orig_net_amt := lf_prod_selections_tbl(rowcount).orig_net_amt;
4117             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).orig_net_amt);
4118             x_prod_selections_tbl(rowcount).price := lf_prod_selections_tbl(rowcount).price;
4119             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).price);
4120             x_prod_selections_tbl(rowcount).inventory_item_id := lf_prod_selections_tbl(rowcount).inventory_item_id;
4121             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).inventory_item_id);
4122             x_prod_selections_tbl(rowcount).site_id := lf_prod_selections_tbl(rowcount).site_id;
4123             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).site_id);
4124             x_prod_selections_tbl(rowcount).uom_code := lf_prod_selections_tbl(rowcount).uom_code;
4125             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).uom_code);
4126             x_prod_selections_tbl(rowcount).name := lf_prod_selections_tbl(rowcount).name;
4127             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).name);
4128             x_prod_selections_tbl(rowcount).display_name := lf_prod_selections_tbl(rowcount).display_name;
4129             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).display_name);
4130             x_prod_selections_tbl(rowcount).description := lf_prod_selections_tbl(rowcount).description;
4131             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).description);
4132             x_prod_selections_tbl(rowcount).model_level := lf_prod_selections_tbl(rowcount).model_level;
4133             x_prod_selections_tbl(rowcount).site_name := lf_prod_selections_tbl(rowcount).site_name;
4134             x_prod_selections_tbl(rowcount).model_level := lf_prod_selections_tbl(rowcount).model_level;
4135             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).site_name);
4136             -- GCHADHA --
4137             -- BUG 4372877 ---
4138             -- 5/25/2005 --
4139             x_prod_selections_tbl(rowcount).ext_reference := lf_prod_selections_tbl(rowcount).ext_reference;
4140             ------errorout(rowcount||' '||x_prod_selections_tbl(rowcount).ext_reference);
4141             -- END GCHADHA --
4142 
4143 
4144 
4145         END LOOP;
4146 
4147         x_return_status := 'S';
4148         ------errorout(' out of getselections Product PVT ');
4149     END GetSelections_Prod;
4150 
4151 
4152     PROCEDURE GetSelections_other(p_api_version         IN  NUMBER
4153                                   , p_init_msg_list       IN  VARCHAR2
4154                                   , p_clvl_filter_rec     IN  clvl_filter_rec
4155                                   , x_return_status       OUT NOCOPY VARCHAR2
4156                                   , x_msg_count           OUT NOCOPY NUMBER
4157                                   , x_msg_data            OUT NOCOPY VARCHAR2
4158                                   , x_clvl_selections_tbl OUT  NOCOPY clvl_selections_tbl)
4159     IS
4160     l_clvl_selections_tbl  clvl_selections_tbl ;
4161     rowcount NUMBER := 1;
4162     BEGIN
4163 
4164         IF p_clvl_filter_rec.clvl_lse_id = 8 THEN   /* Covered Party */
4165             ------------------errorout(' in party selections ');
4166             get_party_selections(p_clvl_filter_rec,
4167                                  l_clvl_selections_tbl);
4168             --                          ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
4169             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
4170 
4171                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
4172                 --           ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
4173                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
4174                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
4175                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
4176                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
4177                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
4178                 ----------------errorout(x_clvl_selections_tbl(rowcount).id1 );
4179                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
4180                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
4181                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
4182                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
4183                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
4184                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
4185                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
4186                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
4187                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
4188                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
4189                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
4190                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4191                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
4192                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4193                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
4194                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
4195                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
4196                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
4197                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
4198                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
4199 
4200             END LOOP;
4201         ELSIF p_clvl_filter_rec.clvl_lse_id = 35 THEN   /* Covered Customer */
4202             ----------------errorout('in customer selections ');
4203 
4204             get_customer_selections(p_clvl_filter_rec,
4205                                     l_clvl_selections_tbl);
4206             --                            ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
4207             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
4208 
4209                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
4210                 --             ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
4211                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
4212                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
4213                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
4214                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
4215                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
4216 
4217                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
4218                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
4219                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
4220                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
4221                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
4222                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
4223                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
4224                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
4225                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
4226                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
4227                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
4228                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4229                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
4230                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4231                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
4232                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
4233                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
4234                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
4235                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
4236                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
4237 
4238             END LOOP;
4239         ELSIF p_clvl_filter_rec.clvl_lse_id = 10 THEN   /* Covered Site */
4240             --       ----------------errorout('in site selections ');
4241             get_site_selections(p_clvl_filter_rec,
4242                                 l_clvl_selections_tbl);
4243             ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
4244             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
4245 
4246                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
4247                 --           ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
4248                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
4249                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
4250                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
4251                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
4252                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
4253                 ----------------errorout(x_clvl_selections_tbl(rowcount).id1 );
4254                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
4255                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
4256                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
4257                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
4258                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
4259                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
4260                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
4261                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
4262                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
4263                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
4264                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
4265                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4266                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
4267                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4268                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
4269                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
4270                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
4271                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
4272                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
4273                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
4274 
4275             END LOOP;
4276         ELSIF p_clvl_filter_rec.clvl_lse_id = 11 THEN   /* Covered System */
4277 
4278 
4279 
4280             get_system_selections(p_clvl_filter_rec,
4281                                   l_clvl_selections_tbl);
4282 
4283             ----------------errorout(' sys count is '||l_clvl_selections_tbl.count);
4284             FOR rowcount IN 1 .. l_clvl_selections_tbl.COUNT LOOP
4285 
4286                 x_clvl_selections_tbl(rowcount).rec_no := l_clvl_selections_tbl(rowcount).rec_no;
4287                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_type);
4288                 x_clvl_selections_tbl(rowcount).rec_name := l_clvl_selections_tbl(rowcount).rec_name;
4289                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_name );
4290                 x_clvl_selections_tbl(rowcount).rec_type := l_clvl_selections_tbl(rowcount).rec_type;
4291                 ----------------errorout(x_clvl_selections_tbl(rowcount).rec_no);
4292                 x_clvl_selections_tbl(rowcount).id1 := l_clvl_selections_tbl(rowcount).id1;
4293                 ----------------errorout(x_clvl_selections_tbl(rowcount).id1 );
4294                 x_clvl_selections_tbl(rowcount).name := l_clvl_selections_tbl(rowcount).name;
4295                 ----------------errorout(x_clvl_selections_tbl(rowcount).id2 );
4296                 x_clvl_selections_tbl(rowcount).id2 := l_clvl_selections_tbl(rowcount).id2;
4297                 ----------------errorout(x_clvl_selections_tbl(rowcount).name );
4298                 x_clvl_selections_tbl(rowcount).Party_id := l_clvl_selections_tbl(rowcount).party_id;
4299                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_id );
4300                 x_clvl_selections_tbl(rowcount).party_name := l_clvl_selections_tbl(rowcount).party_name;
4301                 ----------------errorout(x_clvl_selections_tbl(rowcount).party_name );
4302                 x_clvl_selections_tbl(rowcount).description := l_clvl_selections_tbl(rowcount).description;
4303                 ----------------errorout(x_clvl_selections_tbl(rowcount).description );
4304                 x_clvl_selections_tbl(rowcount).display_name := l_clvl_selections_tbl(rowcount).display_name;
4305                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4306                 x_clvl_selections_tbl(rowcount).clvl_id := l_clvl_selections_tbl(rowcount).clvl_id;
4307                 ----------------errorout(x_clvl_selections_tbl(rowcount).display_name );
4308                 x_clvl_selections_tbl(rowcount).clvl_name := l_clvl_selections_tbl(rowcount).clvl_name;
4309                 ----------------errorout(x_clvl_selections_tbl(rowcount).clvl_name );
4310                 x_clvl_selections_tbl(rowcount).lse_id := l_clvl_selections_tbl(rowcount).lse_id;
4311                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_id );
4312                 x_clvl_selections_tbl(rowcount).lse_name := l_clvl_selections_tbl(rowcount).lse_name;
4313                 -----------------errorout(x_clvl_selections_tbl(rowcount).lse_name );
4314 
4315             END LOOP;
4316         END IF;
4317 
4318     END GetSelections_other;
4319 
4320 
4321 
4322     FUNCTION get_item_name(p_inventory_item_id IN NUMBER)
4323     RETURN VARCHAR2
4324     IS
4325 
4326     CURSOR l_csr_get_item_name(p_inventory_item_Id IN NUMBER)
4327         IS
4328         SELECT name
4329         FROM OKX_SYSTEM_ITEMS_V
4330         WHERE id1 = p_inventory_item_id
4331         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
4332         AND ROWNUM < 2;
4333 
4334     l_item_name  OKX_SYSTEM_ITEMS_V.name%TYPE;
4335 
4336     BEGIN
4337 
4338         OPEN l_csr_Get_item_name(p_inventory_item_id);
4339         FETCH l_csr_get_item_name INTO l_item_name;
4340         CLOSE l_csr_Get_item_name;
4341 
4342         RETURN l_item_name;
4343 
4344 
4345     END;
4346 
4347 
4348     FUNCTION get_item_desc(p_inventory_item_id IN NUMBER)
4349     RETURN VARCHAR2
4350     IS
4351 
4352     CURSOR l_csr_get_item_desc(p_inventory_item_Id IN NUMBER)
4353         IS
4354         SELECT description
4355         FROM OKX_SYSTEM_ITEMS_V
4356         WHERE id1 = p_inventory_item_id
4357         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
4358         AND ROWNUM < 2;
4359 
4360     l_item_desc OKX_SYSTEM_ITEMS_V.description%TYPE;
4361 
4362     BEGIN
4363 
4364         OPEN l_csr_Get_item_desc(p_inventory_item_id);
4365         FETCH l_csr_get_item_desc INTO l_item_desc;
4366         CLOSE l_csr_Get_item_desc;
4367 
4368         RETURN l_item_desc;
4369 
4370     END;
4371 
4372 
4373     FUNCTION get_item_desc(p_inventory_item_id IN NUMBER,
4374                            p_organization_id   IN NUMBER)
4375     RETURN VARCHAR2
4376     IS
4377 
4378     CURSOR l_csr_get_item_desc(p_inventory_item_Id IN NUMBER,
4379                                p_organization_id IN NUMBER)
4380         IS
4381         SELECT description
4382         FROM OKX_SYSTEM_ITEMS_V
4383         WHERE inventory_item_id = p_inventory_item_id
4384         AND   organization_id = p_organization_id
4385         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
4386         AND ROWNUM < 2;
4387 
4388     l_item_desc MTL_SYSTEM_ITEMS_KFV.description%TYPE;
4389 
4390     BEGIN
4391 
4392         OPEN l_csr_Get_item_desc(p_inventory_item_id, p_organization_id);
4393         FETCH l_csr_get_item_desc INTO l_item_desc;
4394         CLOSE l_csr_Get_item_desc;
4395 
4396         RETURN l_item_desc;
4397 
4398     END;
4399 
4400 
4401     FUNCTION get_item_name(p_inventory_item_id IN NUMBER,
4402                            p_organization_id   IN NUMBER)
4403     RETURN VARCHAR2
4404     IS
4405 
4406     CURSOR l_csr_get_item_name(p_inventory_item_Id IN NUMBER,
4407                                p_organization_id IN  NUMBER)
4408         IS
4409         SELECT concatenated_segments name
4410         FROM MTL_SYSTEM_ITEMS_KFV
4411         WHERE inventory_item_id = p_inventory_item_id
4412         AND   organization_id = p_organization_id
4413         AND  TRUNC(SYSDATE) BETWEEN trunc(nvl(start_date_active, SYSDATE)) AND trunc(nvl(end_date_active, SYSDATE))
4414         AND ROWNUM < 2;
4415 
4416     l_item_name  MTL_SYSTEM_ITEMS_KFV.concatenated_segments%TYPE;
4417 
4418     BEGIN
4419 
4420         OPEN l_csr_Get_item_name(p_inventory_item_id, p_organization_id);
4421         FETCH l_csr_get_item_name INTO l_item_name;
4422         CLOSE l_csr_Get_item_name;
4423 
4424         RETURN l_item_name;
4425 
4426     END;
4427 
4428     /** Code for changing/splitting service lines **/
4429 
4430     PROCEDURE get_rev_distr(p_cle_id  IN NUMBER,
4431                             x_rev_tbl OUT NOCOPY OKS_REV_DISTR_PUB.rdsv_tbl_type)
4432     IS
4433     CURSOR rev_cur IS
4434         SELECT chr_id
4435               , cle_id
4436               , account_class
4437               , code_combination_id
4438               , PERCENT
4439         FROM  oks_rev_distributions
4440         WHERE cle_id = p_cle_id;
4441     i     NUMBER := 1;
4442     BEGIN
4443         FOR rev_rec IN rev_cur
4444             LOOP
4445             x_rev_tbl(i).id := OKC_API.G_MISS_NUM;
4446             x_rev_tbl(i).chr_id := rev_rec.chr_id;
4447             x_rev_tbl(i).account_class := rev_rec.account_class;
4448             x_rev_tbl(i).code_combination_id := rev_rec.code_combination_id;
4449             x_rev_tbl(i).PERCENT := rev_rec.PERCENT;
4450             x_rev_tbl(i).object_version_number := OKC_API.G_MISS_NUM;
4451             x_rev_tbl(i).created_by := OKC_API.G_MISS_NUM;
4452             x_rev_tbl(i).creation_date := OKC_API.G_MISS_DATE;
4453             x_rev_tbl(i).last_updated_by := OKC_API.G_MISS_NUM;
4454             x_rev_tbl(i).last_update_date := OKC_API.G_MISS_DATE;
4455             x_rev_tbl(i).last_update_login := OKC_API.G_MISS_NUM;
4456             i := i + 1;
4457         END LOOP;
4458     END get_rev_distr;
4459 
4460     PROCEDURE create_rev_distr(p_cle_id  IN NUMBER,
4461                                p_rev_tbl IN OUT NOCOPY OKS_REV_DISTR_PUB.rdsv_tbl_type,
4462                                x_status  OUT NOCOPY VARCHAR2)
4463     IS
4464     l_api_version  NUMBER := 1.0;
4465     l_msg_count    NUMBER;
4466     l_msg_data     VARCHAR2(2000);
4467     l_rev_tbl      OKS_REV_DISTR_PUB.rdsv_tbl_type;
4468     i              NUMBER;
4469     BEGIN
4470         i := p_rev_tbl.FIRST;
4471         LOOP
4472             p_rev_tbl(i).cle_id := p_cle_id;
4473             EXIT WHEN i = p_rev_tbl.LAST;
4474             i := p_rev_tbl.NEXT(i);
4475         END LOOP;
4476         OKS_REV_DISTR_PUB.insert_Revenue_Distr
4477         (p_api_version => l_api_version
4478          , x_return_status => x_status
4479          , x_msg_count => l_msg_count
4480          , x_msg_data => l_msg_data
4481          , p_rdsv_tbl => p_rev_tbl
4482          , x_rdsv_tbl => l_rev_tbl);
4483     END create_rev_distr;
4484 
4485     PROCEDURE get_sales_cred(p_cle_id  IN NUMBER,
4486                              x_scrv_tbl OUT NOCOPY OKS_SALES_CREDIT_PUB.scrv_tbl_type)
4487     IS
4488     CURSOR scrv_cur IS
4489         SELECT
4490           PERCENT,
4491           chr_id,
4492           ctc_id,
4493           sales_credit_type_id1,
4494           sales_credit_type_id2
4495         FROM OKS_K_SALES_CREDITS
4496         WHERE cle_id = p_cle_id;
4497     i     NUMBER := 1;
4498     BEGIN
4499         FOR scrv_rec IN scrv_cur
4500             LOOP
4501             x_scrv_tbl(i).id := OKC_API.G_MISS_NUM;
4502             x_scrv_tbl(i).PERCENT := scrv_rec.PERCENT;
4503             x_scrv_tbl(i).chr_id := scrv_rec.chr_id;
4504             x_scrv_tbl(i).ctc_id := scrv_rec.ctc_id;
4505             x_scrv_tbl(i).sales_credit_type_id1 := scrv_rec.sales_credit_type_id1;
4506             x_scrv_tbl(i).sales_credit_type_id2 := scrv_rec.sales_credit_type_id2;
4507             x_scrv_tbl(i).object_version_number := OKC_API.G_MISS_NUM;
4508             x_scrv_tbl(i).created_by := OKC_API.G_MISS_NUM;
4509             x_scrv_tbl(i).creation_date := OKC_API.G_MISS_DATE;
4510             x_scrv_tbl(i).last_updated_by := OKC_API.G_MISS_NUM;
4511             x_scrv_tbl(i).last_update_date := OKC_API.G_MISS_DATE;
4512             i := i + 1;
4513         END LOOP;
4514     END get_sales_cred;
4515 
4516     PROCEDURE create_sales_cred(p_cle_id   IN NUMBER,
4517                                 p_scrv_tbl IN OUT NOCOPY OKS_SALES_CREDIT_PUB.scrv_tbl_type,
4518                                 x_status   OUT NOCOPY VARCHAR2) IS
4519     l_api_version NUMBER := 1.0;
4520     l_msg_count NUMBER;
4521     l_msg_data VARCHAR2(2000);
4522     l_scrv_tbl OKS_SALES_CREDIT_PUB.scrv_tbl_type;
4523     i NUMBER;
4524     BEGIN
4525         i := p_scrv_tbl.FIRST;
4526         LOOP
4527             p_scrv_tbl(i).cle_id := p_cle_id;
4528             EXIT WHEN i = p_scrv_tbl.LAST;
4529             i := p_scrv_tbl.NEXT(i);
4530         END LOOP;
4531         OKS_SALES_CREDIT_PUB.insert_Sales_credit(
4532                                                  p_api_version => l_api_version,
4533                                                  x_return_status => x_status,
4534                                                  x_msg_count => l_msg_count,
4535                                                  x_msg_data => l_msg_data,
4536                                                  p_scrv_tbl => p_scrv_tbl,
4537                                                  x_scrv_tbl => l_scrv_tbl);
4538     END create_sales_cred;
4539 
4540     PROCEDURE update_line_item(p_cle_id   IN NUMBER,
4541                                p_item_id  IN VARCHAR2,
4542                                x_status   OUT NOCOPY VARCHAR2) IS
4543     l_api_version   NUMBER := 1.0;
4544     l_msg_count     NUMBER;
4545     l_msg_data      VARCHAR2(2000);
4546     l_cimv_rec_in   OKC_CONTRACT_ITEM_PUB.cimv_rec_type;
4547     l_cimv_rec_out  OKC_CONTRACT_ITEM_PUB.cimv_rec_type;
4548     CURSOR item_cur IS
4549         SELECT id
4550         FROM   okc_k_items_v
4551         WHERE  cle_id = p_cle_id;
4552     BEGIN
4553         OPEN  item_cur;
4554         FETCH item_cur INTO l_cimv_rec_in.id;
4555         CLOSE item_cur;
4556         l_cimv_rec_in.object1_id1 := p_item_id;
4557         OKC_CONTRACT_ITEM_PUB.update_contract_item(
4558                                                    p_api_version => l_api_version,
4559                                                    x_return_status => x_status,
4560                                                    x_msg_count => l_msg_count,
4561                                                    x_msg_data => l_msg_data,
4562                                                    p_cimv_rec => l_cimv_rec_in,
4563                                                    x_cimv_rec => l_cimv_rec_out);
4564     END update_line_item;
4565 
4566     PROCEDURE prorate_amount(p_cle_id     IN NUMBER,
4567                              p_percent    IN NUMBER,
4568                              p_amount     IN NUMBER,
4569                              x_status     OUT NOCOPY VARCHAR2) IS
4570     CURSOR subline_count IS
4571         SELECT COUNT( * )
4572         FROM  okc_k_lines_b
4573         WHERE cle_id = p_cle_id
4574         AND   lse_id IN (7, 8, 9, 10, 11, 35, 18, 25);
4575 
4576     CURSOR subline_cur IS
4577         SELECT id, price_negotiated
4578         FROM okc_k_lines_b
4579         WHERE cle_id = p_cle_id
4580         AND lse_id IN (7, 8, 9, 10, 11, 35, 18, 25);
4581 
4582     l_total_amt NUMBER := 0;
4583     l_count NUMBER;
4584     i NUMBER;
4585     l_api_version NUMBER := 1.0;
4586     l_msg_count NUMBER;
4587     l_msg_data VARCHAR2(2000);
4588     l_clev_tbl_in  OKC_CONTRACT_PUB.clev_tbl_type;
4589     l_clev_tbl_out OKC_CONTRACT_PUB.clev_tbl_type;
4590     BEGIN
4591         OPEN subline_count;
4592         FETCH subline_count INTO l_count;
4593         CLOSE subline_count;
4594         IF l_count = 0 THEN
4595             x_status := OKC_API.G_RET_STS_SUCCESS;
4596             RETURN;
4597         END IF;
4598         i := 1;
4599         FOR subline IN subline_cur
4600             LOOP
4601             l_clev_tbl_in(i).id := subline.id;
4602             IF i <> l_count THEN
4603                 l_clev_tbl_in(i).price_negotiated := subline.price_negotiated * p_percent / 100.0;
4604             ELSE
4605                 l_clev_tbl_in(i).price_negotiated := p_amount - l_total_amt;
4606             END IF;
4607             l_total_amt := l_total_amt + NVL(l_clev_tbl_in(i).price_negotiated, 0);
4608             i := i + 1;
4609         END LOOP;
4610         OKC_CONTRACT_PUB.update_contract_line(
4611                                               p_api_version => l_api_version,
4612                                               x_return_status => x_status,
4613                                               x_msg_count => l_msg_count,
4614                                               x_msg_data => l_msg_data,
4615                                               p_clev_tbl => l_clev_tbl_in,
4616                                               x_clev_tbl => l_clev_tbl_out);
4617     END prorate_amount;
4618 
4619     PROCEDURE refresh_bill_sch(p_cle_id   IN NUMBER,
4620                                --x_rgp_id   OUT NOCOPY NUMBER,
4621                                x_status   OUT NOCOPY VARCHAR2) IS
4622 
4623     l_rgp_id NUMBER;
4624 
4625     l_inv_rule_id NUMBER;
4626 
4627     CURSOR inv_rule_cur(p_id IN NUMBER) IS
4628         SELECT inv_rule_id
4629         FROM okc_k_lines_b
4630         WHERE id = p_id;
4631 
4632     l_sll_tbl OKS_BILL_SCH.StreamLvl_tbl;
4633     l_bill_sch_out_tbl OKS_BILL_SCH.ItemBillSch_tbl;
4634     l_bill_type OKS_K_LINES_V.billing_schedule_type%TYPE;
4635 
4636 
4637     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)
4638     IS
4639     tbl_index NUMBER := 1;
4640     CURSOR sll_cur(p_cle_id IN NUMBER) IS
4641         SELECT id
4642               , chr_id
4643               , cle_id
4644               , dnz_chr_id
4645               , sequence_no
4646               , uom_code
4647               , start_date
4648               , end_date
4649               , level_periods
4650               , uom_per_period
4651               , advance_periods
4652               , level_amount
4653               , invoice_offset_days
4654               , interface_offset_days
4655               , comments
4656               , due_arr_yn
4657               , amount
4658               , lines_detailed_yn
4659         FROM oks_stream_levels_b
4660         WHERE cle_id = p_cle_id;
4661 
4662     CURSOR get_bill_type_cur(p_cle_id IN  NUMBER) IS
4663         SELECT billing_schedule_type
4664         FROM OKS_K_LINES_V
4665         WHERE cle_id = p_cle_id;
4666 
4667     l_bill_type OKS_K_LINES_V.billing_schedule_type%TYPE;
4668 
4669     BEGIN
4670 
4671         OPEN get_bill_type_cur(p_cle_id);
4672         FETCH get_bill_type_cur INTO l_bill_type;
4673         CLOSE get_bill_type_cur;
4674 
4675         x_bill_type := l_bill_type;
4676         FOR sll_rec IN sll_cur(p_cle_id)
4677             LOOP
4678             x_sll_tbl(tbl_index).Id := sll_rec.id;
4679             x_sll_tbl(tbl_index).chr_Id := sll_rec.chr_id;
4680             x_sll_tbl(tbl_index).cle_id := sll_rec.cle_id;
4681             x_sll_tbl(tbl_index).dnz_chr_id := sll_rec.dnz_chr_id;
4682             x_sll_tbl(tbl_index).sequence_no := sll_rec.sequence_no;
4683             x_sll_tbl(tbl_index).uom_code := sll_rec.uom_code;
4684             x_sll_tbl(tbl_index).start_date := sll_rec.start_date;
4685             x_sll_tbl(tbl_index).end_date := sll_rec.end_date;
4686             x_sll_tbl(tbl_index).level_periods := sll_rec.level_periods;
4687             x_sll_tbl(tbl_index).uom_per_period := sll_rec.uom_per_period;
4688             x_sll_tbl(tbl_index).level_amount := sll_rec.level_amount;
4689             x_sll_tbl(tbl_index).invoice_offset_days := sll_rec.invoice_offset_days;
4690             x_sll_tbl(tbl_index).interface_offset_days := sll_rec.interface_offset_days;
4691             x_sll_tbl(tbl_index).comments := sll_rec.comments;
4692             x_sll_tbl(tbl_index).due_arr_yn := sll_rec.due_arr_yn;
4693             x_sll_tbl(tbl_index).amount := sll_rec.amount;
4694             x_sll_tbl(tbl_index).lines_detailed_yn := sll_rec.lines_detailed_yn;
4695 
4696             tbl_index := tbl_index + 1;
4697         END LOOP;
4698 
4699     END Populate_Sll_Table;
4700 
4701     BEGIN
4702 
4703         OPEN  inv_rule_cur(p_cle_id);
4704         FETCH inv_rule_cur INTO l_inv_rule_id;
4705         CLOSE inv_rule_cur;
4706 
4707 
4708         populate_sll_table (p_cle_id, l_sll_tbl, l_bill_type);
4709 
4710         OKS_BILL_SCH.Create_Bill_Sch_Rules
4711         (p_billing_type => l_bill_type,
4712          p_sll_tbl => l_sll_tbl,
4713          p_invoice_rule_id => l_inv_rule_id,
4714          x_bil_sch_out_tbl => l_bill_sch_out_tbl,
4715          x_return_status => x_status);
4716     END refresh_bill_sch;
4717 
4718 
4719     /************/
4720 
4721     --ADDED FOR Bug# 2364507
4722     FUNCTION GetCoveragetemplate(p_item_id IN NUMBER) RETURN NUMBER
4723     IS
4724 
4725     l_org_id    NUMBER := OKC_CONTEXT.GET_OKC_ORGANIZATION_ID;
4726 
4727     --Bug 5041682, modifed the cursor to have a lower parse time, current query takes 3 seconds
4728     CURSOR l_covtemp_csr IS
4729         --SELECT coverage_template_id
4730         --FROM   okx_system_items_v
4731         --WHERE  id1 = p_item_id
4732         --AND    id2 = OKC_CONTEXT.GET_OKC_ORGANIZATION_ID;
4733         SELECT COVERAGE_SCHEDULE_ID
4734         FROM   mtl_system_items_b
4735         WHERE  inventory_item_id = p_item_id
4736         AND    organization_id = nvl(l_org_id, -99) ;
4737 
4738 
4739     l_covtemp_id   NUMBER := NULL;
4740     BEGIN
4741         OPEN  l_covtemp_csr;
4742         FETCH l_covtemp_csr INTO l_covtemp_id;
4743         CLOSE l_covtemp_csr;
4744         RETURN(l_covtemp_id);
4745     END GetCoverageTemplate;
4746 
4747     FUNCTION GetCoverage(p_cle_id IN NUMBER) RETURN NUMBER
4748     IS
4749     CURSOR l_cov_csr IS
4750         SELECT id
4751         FROM   okc_k_lines_b
4752         WHERE  cle_id = p_cle_id
4753         AND    lse_id IN(2, 20);
4754     l_cov_id   NUMBER := NULL;
4755     BEGIN
4756         OPEN  l_cov_csr;
4757         FETCH l_cov_csr INTO l_cov_id;
4758         CLOSE l_cov_csr;
4759         RETURN(l_cov_id);
4760     END GetCoverage;
4761 
4762     PROCEDURE calculate_tax(p_chr_id                   NUMBER,
4763                             p_amt                      NUMBER,
4764                             p_cle_id                   NUMBER,
4765                             x_return_status OUT NOCOPY VARCHAR2,
4766                             x_msg_data      OUT NOCOPY VARCHAR2,
4767                             x_msg_count     OUT NOCOPY NUMBER,
4768                             x_tax_value     OUT NOCOPY NUMBER,
4769                             x_AMOUNT_INCLUDES_TAX_FLAG OUT NOCOPY VARCHAR2,
4770                             x_total OUT NOCOPY NUMBER)
4771     IS
4772     l_calculate_tax            VARCHAR2(150);
4773     -- p_contract_line_rec        OKS_QP_INT_PVT.G_LINE_REC_TYPE;
4774     L_INDEX1                   BINARY_INTEGER;
4775     L_INDEX2                   BINARY_INTEGER;
4776     l_msg_count                NUMBER;
4777     l_msg_data                 VARCHAR2(2000);
4778     l_return_status            VARCHAR2(1) := 'S';
4779     G_RAIL_REC                 OKS_TAX_UTIL_PVT.ra_rec_type;
4780     l_UNIT_SELLING_PRICE       G_RAIL_REC.UNIT_SELLING_PRICE%TYPE;
4781     l_QUANTITY                 G_RAIL_REC.QUANTITY%TYPE;
4782     l_sub_total                G_RAIL_REC.AMOUNT%TYPE;
4783     l_total_amt                G_RAIL_REC.AMOUNT%TYPE;
4784     l_Tax_Code                 G_RAIL_REC.TAX_CODE%TYPE;
4785     l_TAX_RATE                 G_RAIL_REC.TAX_RATE%TYPE;
4786     l_total                    G_RAIL_REC.AMOUNT%TYPE;
4787     l_Tax_Value                G_RAIL_REC.TAX_VALUE%TYPE;
4788     l_AMOUNT_INCLUDES_TAX_FLAG G_RAIL_REC.AMOUNT_INCLUDES_TAX_FLAG%TYPE;
4789     l_price_negotiated         G_RAIL_REC.AMOUNT%TYPE;
4790     l_lse_id                   NUMBER;
4791     BEGIN
4792         G_RAIL_REC.AMOUNT := p_amt;
4793         OKS_TAX_UTIL_PVT.Get_Tax
4794         (
4795          p_api_version => 1.0,
4796          p_init_msg_list => OKC_API.G_TRUE,
4797          p_chr_id => p_chr_id,
4798          p_cle_id => p_cle_id,
4799          px_rail_rec => G_RAIL_REC,
4800          x_msg_count => l_msg_count,
4801          x_msg_data => l_msg_data,
4802          x_return_status => l_return_status
4803          );
4804 
4805         IF (l_return_status = 'S') THEN
4806 
4807             l_UNIT_SELLING_PRICE := G_RAIL_REC.UNIT_SELLING_PRICE;
4808             l_QUANTITY := G_RAIL_REC.QUANTITY;
4809             l_sub_total := G_RAIL_REC.AMOUNT;
4810             l_AMOUNT_INCLUDES_TAX_FLAG := G_RAIL_REC.AMOUNT_INCLUDES_TAX_FLAG;
4811             l_Tax_Code := G_RAIL_REC.TAX_CODE;
4812             l_TAX_RATE := G_RAIL_REC.TAX_RATE ;
4813             l_Tax_Value := G_RAIL_REC.TAX_VALUE;
4814 
4815             IF NVL(l_AMOUNT_INCLUDES_TAX_FLAG, 'N') = 'Y' THEN
4816                 l_tax_value := 0;
4817 
4818                 l_total := l_sub_total + l_Tax_Value;
4819             ELSE
4820                 l_total := l_sub_total + l_Tax_Value;
4821                 l_AMOUNT_INCLUDES_TAX_FLAG := 'N';
4822             END IF;
4823             x_total := l_total;
4824             x_Tax_Value := l_Tax_Value;
4825             x_AMOUNT_INCLUDES_TAX_FLAG := l_AMOUNT_INCLUDES_TAX_FLAG;
4826             x_return_status := l_return_status;
4827             x_msg_count := l_msg_count;
4828             x_msg_data := l_msg_data;
4829         ELSE
4830             x_return_status := l_return_status;
4831             x_msg_count := l_msg_count;
4832             x_msg_data := l_msg_data;
4833         END IF;
4834 
4835     END calculate_tax;
4836 
4837 
4838     FUNCTION GetFormattedInvoiceText(p_item_desc  IN VARCHAR2
4839                                      , p_start_date IN DATE
4840                                      , p_end_date   IN DATE) RETURN VARCHAR2
4841     IS
4842     BEGIN
4843         RETURN(SUBSTR(p_item_desc || ':' || p_start_date || ':' || p_end_date, 1, 450));
4844     END GetFormattedInvoiceText;
4845 
4846     PROCEDURE UpdateIRTRule(p_chr_id        IN  NUMBER
4847                             , p_cle_id        IN  NUMBER
4848                             , p_invoice_text  IN  VARCHAR2
4849                             , p_api_version   IN  NUMBER
4850                             , p_init_msg_list IN  VARCHAR2
4851                             , x_return_status OUT NOCOPY VARCHAR2
4852                             , x_tax_value     OUT NOCOPY NUMBER
4853                             , x_AMOUNT_INCLUDES_TAX_FLAG OUT NOCOPY VARCHAR2
4854                             , x_total         OUT NOCOPY NUMBER)
4855 
4856     IS
4857 
4858     l_khrv_tbl OKS_CONTRACT_HDR_PUB.khrv_tbl_type;
4859     lx_khrv_tbl OKS_CONTRACT_HDR_PUB.khrv_tbl_type;
4860 
4861     l_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
4862     lx_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
4863 
4864     CURSOR l_get_khr_id(p_chr_id IN NUMBER)
4865         IS
4866         SELECT id, object_version_number --BUG#4066428 hkamdar 01/21/05 added object_version_number
4867         FROM OKS_K_HEADERS_V
4868         WHERE chr_id = p_chr_id;
4869 
4870     CURSOR l_get_kln_id(p_dnz_chr_id IN NUMBER, p_cle_id IN NUMBER)
4871         IS
4872         SELECT id, object_version_number
4873         FROM OKS_K_LINES_V
4874         WHERE dnz_chr_id = p_dnz_chr_id
4875         AND cle_id = p_cle_id;
4876 
4877     /** Get tax values for each line for given contract id **/
4878     CURSOR l_get_tot_tax(p_dnz_chr_id IN NUMBER)
4879         IS
4880         SELECT cle.id, SUM(kln.tax_amount)
4881         FROM OKS_K_LINES_V kln, OKC_K_LINES_V cle
4882         WHERE cle.dnz_chr_id = p_dnz_chr_id
4883         AND cle.cle_id IS NULL
4884         AND kln.cle_id = cle.id;
4885 
4886 
4887     /*** Get sum of taxes at subline level **/
4888     CURSOR l_get_tot_tax_subline(p_dnz_chr_id IN NUMBER, p_cle_id IN NUMBER)
4889         IS
4890         SELECT MAX(kln.tax_amount)
4891         FROM OKS_K_LINES_V kln, OKC_K_LINES_V cle
4892         WHERE cle.dnz_chr_id = p_dnz_chr_id
4893         AND cle.cle_id = p_cle_id
4894         AND kln.cle_id = cle.id;
4895 
4896 
4897     l_return_status  VARCHAR2(1) := G_RET_STS_SUCCESS;
4898     l_msg_count      NUMBER;
4899     l_msg_data       VARCHAR2(2000);
4900 
4901     l_object_version_number NUMBER;
4902     l_khr_id         OKS_K_HEADERS_V.id%TYPE;
4903     l_kln_id         OKS_K_LINES_V.id%TYPE;
4904     l_validate_yn    VARCHAR2(1);
4905     --BUG#4066428 hkamdar 01/21/05 added object_version_number
4906     l_hdr_object_ver_num    OKS_K_HEADERS_V.object_version_number%TYPE;
4907 
4908     --LLC
4909 
4910     CURSOR	get_topline_tax_amt_csr (p_cle_id IN NUMBER) IS
4911         SELECT	nvl(SUM(nvl(tax_amount, 0)), 0)
4912         FROM    okc_k_lines_b cle, oks_k_lines_b sle
4913         WHERE   cle.cle_id = p_cle_id
4914         AND     cle.lse_id IN (7, 8, 9, 10, 11, 18, 25, 35)
4915         AND     cle.id = sle.cle_id
4916         AND     cle.dnz_chr_id = sle.dnz_chr_id
4917         AND     cle.date_cancelled IS NULL;
4918 
4919     CURSOR get_hdr_tax_amt_csr (p_chr_id IN NUMBER) IS
4920         SELECT  nvl(SUM(nvl(tax_amount, 0)), 0)
4921         FROM    okc_k_lines_b cle, oks_k_lines_b sle
4922         WHERE   cle.dnz_chr_id = p_chr_id
4923         AND     cle.lse_id IN (1, 12, 14, 19, 46)
4924         AND     cle.cle_id IS NULL
4925         AND     cle.id = sle.cle_id
4926         AND     cle.dnz_chr_id = sle.dnz_chr_id;
4927 
4928 
4929     l_topline_tax_amt        NUMBER;
4930     l_hdr_tax_amt               NUMBER;
4931 
4932     --LLC
4933 
4934     BEGIN
4935 
4936 
4937 
4938         OPEN l_get_kln_id(p_chr_id, p_cle_id);
4939         FETCH l_get_kln_id INTO l_kln_id, l_object_version_number;
4940         CLOSE l_get_kln_id;
4941 
4942         --LLC
4943 
4944         OPEN get_topline_tax_amt_csr(p_cle_id);
4945         FETCH get_topline_tax_amt_csr INTO l_topline_tax_amt;
4946         CLOSE get_topline_tax_amt_csr;
4947 
4948         --LLC
4949 
4950         l_klnv_tbl(1).id := l_kln_id;
4951         l_klnv_tbl(1).cle_id := p_cle_id;
4952         l_klnv_tbl(1).tax_amount := l_topline_tax_amt; --LLC
4953         l_klnv_tbl(1).invoice_text := p_invoice_text;
4954         l_klnv_tbl(1).tax_inclusive_yn := x_amount_includes_tax_flag;
4955         l_klnv_tbl(1).object_Version_number := l_object_version_number ;
4956 
4957 
4958         OKS_CONTRACT_LINE_PUB.update_line(
4959                                           p_api_version => p_api_version,
4960                                           p_init_msg_list => p_init_msg_list,
4961                                           x_return_status => l_return_status,
4962                                           x_msg_count => l_msg_count,
4963                                           x_msg_data => l_msg_data,
4964                                           p_klnv_tbl => l_klnv_tbl,
4965                                           x_klnv_tbl => lx_klnv_tbl,
4966                                           p_validate_yn => l_validate_yn);
4967 
4968 
4969 
4970         x_return_status := l_return_status;
4971 
4972 
4973 
4974         OPEN l_get_khr_id(p_chr_id);
4975         FETCH l_get_khr_id INTO l_khr_id,
4976         l_hdr_object_ver_num; --BUG#4066428 hkamdar 01/21/05 added object_version_number
4977         CLOSE l_get_khr_id;
4978 
4979         --LLC
4980 
4981         OPEN get_hdr_tax_amt_csr(p_chr_id);
4982         FETCH get_hdr_tax_amt_csr INTO l_hdr_tax_amt;
4983         CLOSE get_hdr_tax_amt_csr;
4984 
4985         --LLC
4986 
4987         l_khrv_tbl(1).id := l_khr_id;
4988         l_khrv_tbl(1).chr_id := p_chr_id;
4989         l_khrv_tbl(1).tax_amount := l_hdr_tax_amt; --LLC
4990         --BUG#4066428 hkamdar 01/21/05 added object_version_number
4991         l_khrv_tbl(1).object_version_number := l_hdr_object_ver_num;
4992 
4993 
4994         OKS_CONTRACT_HDR_PUB.update_header(p_api_version => p_api_version,
4995                                            p_init_msg_list => p_init_msg_list,
4996                                            x_return_status => l_return_status,
4997                                            x_msg_count => l_msg_count,
4998                                            x_msg_data => l_msg_data,
4999                                            p_khrv_tbl => l_khrv_tbl,
5000                                            x_khrv_tbl => lx_khrv_tbl,
5001                                            p_validate_yn => l_validate_yn);
5002 
5003         --errorout('After Update header in UpdateIRTRule-'||l_return_status);
5004         --BUG#4066428 hkamdar 01/21/05
5005         x_return_status := l_return_status;
5006         --End BUG#4066428
5007 
5008         IF l_return_status <> 'S' THEN
5009             RETURN;
5010         END IF;
5011 
5012 
5013     END UpdateIRTRule;
5014 
5015     /****************/
5016 
5017     PROCEDURE UpdateIRTRule_Subline(p_cle_id        IN  NUMBER
5018                                     , p_item_desc     IN  VARCHAR2
5019                                     , p_start_date    IN  DATE
5020                                     , p_end_date      IN  DATE
5021                                     , x_return_status OUT NOCOPY VARCHAR2
5022                                     )
5023     IS
5024 
5025     l_klnv_tbl_in OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
5026     lx_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
5027 
5028 
5029     CURSOR l_cle_csr(p_cle_id IN NUMBER) IS
5030         SELECT cle.lse_id
5031              , cle.id line_id
5032              , cle.start_date
5033              , cle.end_date
5034              , cle.price_negotiated amt
5035              , cle.dnz_chr_id chr_id
5036              , kln.id kln_id
5037              , kln.object_version_number
5038         FROM okc_k_lines_b cle,
5039              oks_k_lines_b kln
5040         WHERE cle.cle_id = p_cle_id
5041         AND  kln.cle_id = cle.id
5042         AND  lse_id NOT IN (2, 15, 20, 46);
5043 
5044 
5045     l_cle_rec       l_cle_csr%ROWTYPE;
5046     l_msg_count     NUMBER;
5047     l_msg_data      VARCHAR2(2000);
5048     l_init_msg_list  VARCHAR2(1000);
5049     l_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
5050     l_total                   NUMBER;
5051     l_Tax_Value                NUMBER;
5052     l_AMOUNT_INCLUDES_TAX_FLAG VARCHAR2(1);
5053     l_validate_yn   VARCHAR2(1);
5054 
5055     FUNCTION GetFormattedInvoiceText(p_cle_id      IN NUMBER
5056                                      , p_start_date  IN DATE
5057                                      , p_end_date    IN DATE
5058                                      , p_item_desc   IN VARCHAR2
5059                                      , p_lse_id      IN NUMBER) RETURN VARCHAR2
5060     IS
5061     CURSOR l_item_csr IS
5062         SELECT jtot_object1_code
5063               , object1_id1
5064               , object1_id2
5065               , number_of_items
5066         FROM  okc_k_items
5067         WHERE cle_id = p_cle_id;
5068     l_object_code             okc_k_items.jtot_object1_code%TYPE;
5069     l_object1_id1             okc_k_items.object1_id1%TYPE;
5070     l_object1_id2             okc_k_items.object1_id2%TYPE;
5071     l_no_of_items             okc_k_items.number_of_items%TYPE;
5072     l_name                    VARCHAR2(2000);
5073     l_desc                    VARCHAR2(2000);
5074     l_formatted_invoice_text  VARCHAR2(2000);
5075     BEGIN
5076         OPEN  l_item_csr;
5077         FETCH l_item_csr INTO l_object_code, l_object1_id1, l_object1_id2, l_no_of_items;
5078         CLOSE l_item_csr;
5079 
5080         IF l_object_code IS NULL THEN
5081             RETURN(NULL);
5082         END IF;
5083 
5084         OKC_UTIL.GET_NAME_DESC_FROM_JTFV
5085         (p_object_code => l_object_code
5086          , p_id1 => l_object1_id1
5087          , p_id2 => l_object1_id2
5088          , x_name => l_name
5089          , x_description => l_desc);
5090         IF p_lse_id IN(8, 10, 11, 35) THEN
5091             l_formatted_invoice_text := SUBSTR(p_item_desc || ':' || l_no_of_items || ':' || l_desc || ':' || p_start_date || ':' || p_end_date, 1, 450);
5092         ELSE
5093             IF fnd_profile.VALUE('OKS_ITEM_DISPLAY_PREFERENCE') = 'DISPLAY_DESC' THEN
5094                 l_desc := l_desc;
5095             ELSE
5096                 l_desc := l_name;
5097             END IF;
5098             l_formatted_invoice_text := SUBSTR(p_item_desc || ':' || l_no_of_items || ':' || l_desc || ':' || p_start_date || ':' || p_end_date, 1, 450);
5099         END IF;
5100         RETURN(l_formatted_invoice_text);
5101     END GetFormattedInvoiceText;
5102 
5103 
5104 
5105     BEGIN NULL;
5106 
5107         OPEN  l_cle_csr(p_cle_id);
5108         LOOP
5109             FETCH l_cle_csr INTO l_cle_rec;
5110             EXIT WHEN l_cle_csr%NOTFOUND;
5111             l_klnv_tbl_in(1).cle_id := l_cle_rec.line_id;
5112             l_klnv_tbl_in(1).id := l_cle_rec.kln_id;
5113             l_klnv_tbl_in(1).object_version_number := l_cle_rec.object_version_number;
5114             l_klnv_tbl_in(1).invoice_text := GetFormattedInvoiceText
5115             (l_cle_rec.line_id
5116              , l_cle_rec.start_date
5117              , l_cle_rec.end_date
5118              , p_item_desc
5119              , l_cle_rec.lse_id);
5120 
5121             --*
5122             calculate_tax(p_chr_id => l_cle_rec.chr_id,
5123                           p_amt => l_cle_rec.amt,
5124                           p_cle_id => l_cle_rec.line_id,
5125                           x_return_status => l_return_status,
5126                           x_msg_data => l_msg_data,
5127                           x_msg_count => l_msg_count,
5128                           x_tax_value => l_tax_value,
5129                           x_AMOUNT_INCLUDES_TAX_FLAG => l_AMOUNT_INCLUDES_TAX_FLAG,
5130                           x_total => l_total);
5131             --errorout('After Calculate Tax in UpdateIRTRule_Subline-'||l_return_status);
5132             --BUG#4066428 hkamdar 01/21/05
5133             x_return_status := l_return_status;
5134             --End BUG#4066428
5135 
5136             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5137                 x_return_status := l_return_status;
5138                 RAISE G_ERROR;
5139             END IF;
5140             l_klnv_tbl_in(1).tax_amount := l_tax_value;
5141             l_klnv_tbl_in(1).tax_inclusive_yn := l_AMOUNT_INCLUDES_TAX_FLAG;
5142             --      l_rulv_tbl_in(1).rule_information6 := l_total;
5143 
5144 
5145 
5146             oks_contract_line_pub.update_line (
5147                                                p_api_version => 1.0,
5148                                                p_init_msg_list => l_init_msg_list,
5149                                                x_return_status => l_return_status,
5150                                                x_msg_count => l_msg_count,
5151                                                x_msg_data => l_msg_data,
5152                                                p_klnv_tbl => l_klnv_tbl_in,
5153                                                x_klnv_tbl => lx_klnv_tbl,
5154                                                p_validate_yn => l_validate_yn) ;
5155             --errorout('After Update Line in UpdateIRTRule_Subline-'||l_return_status);
5156         END LOOP;
5157         CLOSE l_cle_csr;
5158         x_return_status := l_return_status;
5159 
5160     END UpdateIRTRule_Subline;
5161 
5162 
5163 
5164     --ADDED FOR Bug# 2364507
5165 
5166     PROCEDURE update_header_amount(p_cle_id IN NUMBER,
5167                                    x_status  OUT NOCOPY VARCHAR2) IS
5168     l_api_version  CONSTANT NUMBER := 1.0;
5169     l_init_msg_list VARCHAR2(2000) := OKC_API.G_FALSE;
5170     l_return_status VARCHAR2(1);
5171     l_msg_count  NUMBER;
5172     l_msg_data  VARCHAR2(2000);
5173     l_msg_index_out NUMBER;
5174     l_chrv_tbl_in             okc_contract_pub.chrv_tbl_type;
5175     l_chrv_tbl_out            okc_contract_pub.chrv_tbl_type;
5176 
5177     CURSOR total_amount(p_chr_id IN NUMBER) IS
5178         SELECT nvl(SUM(price_negotiated), 0) SUM
5179         FROM okc_k_lines_b
5180         WHERE dnz_chr_id = p_chr_id
5181         AND lse_id IN (7, 8, 9, 10, 11, 35, 13, 18, 25)
5182         AND date_cancelled IS NULL; --ignore cancelled sublines
5183 
5184     BEGIN
5185         x_status := OKC_API.G_RET_STS_SUCCESS;
5186         IF p_cle_id IS NOT NULL THEN
5187             FOR cur_total_amount IN total_amount(g_chr_id)
5188                 LOOP
5189                 l_chrv_tbl_in(1).id := g_chr_id;
5190                 l_chrv_tbl_in(1).estimated_amount := cur_total_amount.SUM;
5191                 okc_contract_pub.update_contract_header (
5192                                                          p_api_version => l_api_version,
5193                                                          p_init_msg_list => l_init_msg_list,
5194                                                          x_return_status => l_return_status,
5195                                                          x_msg_count => l_msg_count,
5196                                                          x_msg_data => l_msg_data,
5197                                                          p_chrv_tbl => l_chrv_tbl_in,
5198                                                          x_chrv_tbl => l_chrv_tbl_out );
5199                 x_status := l_return_status;
5200             END LOOP;
5201         END IF;
5202     END update_header_amount;
5203 
5204     PROCEDURE CopyService(p_api_version   IN  NUMBER
5205                           , p_init_msg_list IN  VARCHAR2
5206                           , p_source_rec    IN  copy_source_rec
5207                           , p_target_tbl    IN  copy_target_tbl
5208                           , x_return_status OUT NOCOPY VARCHAR2
5209                           , x_msg_count     OUT NOCOPY NUMBER
5210                           , x_msg_data      OUT NOCOPY VARCHAR2
5211                           , p_change_status IN VARCHAR2) -- Added an additional flag parameter, p_change_status,
5212     -- to decide whether to allow change of status of sublines
5213     -- of the topline during update service
5214     IS
5215 
5216     CURSOR header_cur IS
5217         SELECT dnz_chr_id, start_date, end_date, object_version_number, lse_id
5218         FROM   okc_k_lines_b
5219         WHERE  id = p_source_rec.cle_id;
5220 
5221     CURSOR get_contract_modifier_cur (p_chr_id NUMBER)
5222         IS
5223         SELECT contract_number_modifier
5224         FROM   okc_k_headers_b
5225         WHERE  id = p_chr_id;
5226 
5227 
5228     l_target_tbl        copy_target_tbl;
5229     idx                 NUMBER;
5230     l_rgp_id            NUMBER;
5231     l_return_status     VARCHAR2(20);
5232     l_rev_tbl           OKS_REV_DISTR_PUB.rdsv_tbl_type;
5233     l_salescr_tbl       OKS_SALES_CREDIT_PUB.scrv_tbl_type;
5234     l_msg_index         NUMBER;
5235     l_msg_data          VARCHAR2(2000);
5236     l_total_pct         NUMBER := 0;
5237     l_rev_found         BOOLEAN := FALSE;
5238     l_scr_found         BOOLEAN := FALSE;
5239     l_top_line_number   NUMBER := 0;
5240     G_ERROR             EXCEPTION;
5241     l_object_version_number  NUMBER;
5242 
5243     --ADDED FOR Bug# 2364507
5244     l_covtemp_id        NUMBER;
5245     l_cov_id            NUMBER;
5246     l_start_date        DATE;
5247     l_end_date          DATE;
5248     --l_ac_rec            OKS_COVERAGES_PUB.ac_rec_type;
5249     l_msg_count         NUMBER;
5250     l_oie_id            okc_operation_instances.id%TYPE;
5251     --ADDED FOR Bug# 2364507
5252     l_select_renewal_flag BOOLEAN;
5253     l_operation_lines_tbl opn_lines_tbl;
5254     l_contract_modifier okc_k_headers_b.contract_number_modifier%TYPE;
5255     l_init_msg_list             VARCHAR2(1000);
5256     l_curr_price_negotiated_amt NUMBER;
5257     l_curr_sum_negotiated_amt   NUMBER;
5258 
5259 
5260     --LLC
5261 
5262     l_curr_cancelled_amt	NUMBER;
5263     l_curr_sum_cancelled_amt	NUMBER;
5264     l_topline_cancelled_amt     NUMBER;
5265     l_prorated_cancelled_amt    NUMBER;
5266     l_adjusted_prorated_amt	NUMBER;
5267     l_cancelled_amt             NUMBER;
5268     l_sum_price_negotiated_lines    NUMBER;
5269     l_sum_cancelled_amt_lines   NUMBER;
5270     l_topline_tax_amount        NUMBER;
5271     l_curr_topline_tax_amt      NUMBER;
5272     l_hdr_tax_amt               NUMBER;
5273     l_curr_hdr_tax_amt          NUMBER;
5274 
5275     --LLC
5276 
5277     l_lse_id                    NUMBER;
5278     l_api_components_tbl        OKS_COPY_CONTRACT_PVT.api_components_tbl;
5279     l_lines_tbl                 OKS_COPY_CONTRACT_PVT.api_lines_tbl;
5280     l_published_line_ids_tbl_i  NUMBER;
5281     l_published_line_ids_tbl    OKS_COPY_CONTRACT_PVT.published_line_ids_tbl;
5282     lx_to_chr_id                NUMBER;
5283 
5284 
5285     /*   CURSOR rule_group_cur(p_cle_id IN NUMBER) IS
5286     SELECT id
5287     FROM  okc_rule_groups_b
5288     WHERE cle_id = p_cle_id; */
5289 
5290     CURSOR item_cur (p_cle_id IN NUMBER) IS
5291         SELECT object1_id1, object1_id2, jtot_object1_code
5292         FROM   okc_k_items
5293         WHERE cle_id = p_cle_id;
5294 
5295     item_rec    item_cur%ROWTYPE;
5296 
5297     --TAX
5298 
5299     CURSOR get_price_negotiated_amt_csr (p_cle_id IN NUMBER) IS
5300         SELECT nvl(SUM(price_negotiated), 0) amt
5301         FROM   okc_k_lines_b
5302         WHERE  cle_id = p_cle_id
5303         AND	   date_cancelled IS NULL; ---Added condition to exclude cancelled sublines
5304 
5305     get_price_negotiated_amt_rec		get_price_negotiated_amt_csr%ROWTYPE;
5306 
5307     CURSOR sum_price_negotiated_lines_csr (p_chr_id NUMBER) IS
5308         SELECT nvl(SUM(price_negotiated), 0) amt
5309         FROM   okc_k_lines_b
5310         WHERE  dnz_chr_id = p_chr_id
5311         AND cle_id IS NULL
5312         AND	 date_cancelled IS NULL; ---Added condition to exclude cancelled lines
5313 
5314     CURSOR l_hdr_curr(p_chr_id IN NUMBER)
5315         IS
5316         SELECT currency_code
5317         FROM   okc_k_headers_b
5318         WHERE  id = p_chr_id;
5319 
5320     l_curr_code  VARCHAR2(3);
5321 
5322     sum_price_negotiated_lines_rec	sum_price_negotiated_lines_csr%ROWTYPE;
5323 
5324     l_total                   NUMBER;
5325     l_Tax_Value                NUMBER;
5326     l_AMOUNT_INCLUDES_TAX_FLAG VARCHAR2(1);
5327 
5328     --LLC CANCELLED_AMOUNT
5329 
5330     CURSOR sum_cancelled_amt_lines_csr (p_chr_id NUMBER) IS
5331         SELECT SUM(nvl(cancelled_amount, 0))
5332         FROM   okc_k_lines_b
5333         WHERE  dnz_chr_id = p_chr_id
5334         AND cle_id IS NULL;
5335 
5336 
5337     CURSOR get_topline_cancelled_amt (p_cle_id IN NUMBER) IS
5338         SELECT nvl(SUM(nvl(price_negotiated, 0)), 0) --BUG FIX 4758886 --Forced to return this query 0 value
5339         FROM  okc_k_lines_b
5340         WHERE cle_id = p_cle_id
5341         AND   date_cancelled IS NOT NULL; --Condition to consider only the cancelled sublines
5342 
5343     ---Added for bug 9481526 skuchima
5344 
5345     l_pm_prg_id            oks_k_lines_b.pm_program_id%TYPE;
5346     l_pm_conf_req        oks_k_lines_b.pm_conf_req_yn%TYPE;
5347     l_pm_sch_exists    oks_k_lines_b.pm_sch_exists_yn%TYPE;
5348     l_pm_start_date     DATE;
5349     l_pm_end_date      DATE;
5350 
5351     --fetch the PM details of the new coverage
5352                 CURSOR fetch_pm_details(p_covtemp_id IN number)  is
5353                 SELECT pm_program_id,pm_conf_req_yn,pm_sch_exists_yn
5354                 FROM oks_k_lines_b WHERE cle_id=p_covtemp_id;
5355 
5356     --fetch the line dates
5357                 CURSOR fetch_line_date(p_cle_id IN number)  is
5358                 SELECT start_date,end_date
5359                 FROM okc_k_lines_b WHERE id=p_cle_id;
5360 
5361    --end for bug 9481526 skuchima
5362 
5363 
5364     BEGIN
5365         l_target_tbl := p_target_tbl;
5366         IF l_target_tbl.COUNT = 0 THEN
5367             x_return_status := OKC_API.G_RET_STS_SUCCESS;
5368             RETURN;
5369         END IF;
5370         OPEN  header_cur;
5371         FETCH header_cur INTO g_chr_id, l_start_date, l_end_date, l_object_version_number, l_lse_id ;
5372         CLOSE header_cur;
5373 
5374         OPEN item_cur (p_source_rec.cle_id);
5375         FETCH item_cur INTO item_rec;
5376         CLOSE item_cur;
5377 
5378         OPEN l_hdr_curr(g_chr_id);
5379         FETCH l_hdr_curr INTO l_curr_code;
5380         CLOSE l_hdr_curr;
5381 
5382 
5383         CreateOperationInstance(p_chr_id => g_chr_id
5384                                 , p_object1_id1 => item_rec.object1_id1
5385                                 , p_object1_id2 => item_rec.object1_id2
5386                                 , p_jtot_object1_code => item_rec.jtot_object1_code
5387                                 , x_return_status => l_return_status
5388                                 , x_oie_id => l_oie_id);
5389         --errorout('After CreateOperationInstance-'||l_return_status);
5390         IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5391             x_return_status := l_return_status;
5392             RAISE G_ERROR;
5393         END IF;
5394 
5395         --First copy the source line to create all target lines.
5396         idx := l_target_tbl.FIRST;
5397         -- The original source line will become the first target line.(so, don't copy)
5398         l_target_tbl(idx).cle_id := p_source_rec.cle_id;
5399         -- If there are more target lines then make copies of the source line for each
5400         -- and update the l_target_tbl with the new line id.
5401 
5402         IF idx <> l_target_tbl.LAST THEN
5403             idx := l_target_tbl.NEXT(idx);
5404             get_rev_distr(p_source_rec.cle_id, l_rev_tbl);
5405             IF l_rev_tbl.COUNT > 0 THEN
5406                 l_rev_found := TRUE;
5407             END IF;
5408             get_sales_cred(p_source_rec.cle_id, l_salescr_tbl);
5409             IF l_salescr_tbl.COUNT > 0 THEN
5410                 l_scr_found := TRUE;
5411             END IF;
5412 
5413             --Fix for bug#2221910 start.  Get Max Of Top Lines.
5414 
5415             SELECT nvl(MAX(to_number(line_number)), 0)
5416             INTO   l_top_line_number
5417             FROM   OKC_K_LINES_B
5418             WHERE  dnz_chr_id = g_chr_id
5419             AND    cle_id IS NULL;
5420             --Fix for bug#2221910 end.
5421 
5422             LOOP
5423 
5424                 /***
5425                 OKC_COPY_CONTRACT_PUB.copy_contract_lines(
5426                 p_api_version    => p_api_version,
5427                 p_init_msg_list  => p_init_msg_list,
5428                 x_return_status  => l_return_status,
5429                 x_msg_count      => x_msg_count,
5430                 x_msg_data       => x_msg_data,
5431                 p_from_cle_id    => p_source_rec.cle_id,
5432                 p_to_chr_id      => g_chr_id,
5433                 x_cle_id         => l_target_tbl(idx).cle_id,
5434                 p_change_status  => p_change_status); -- Added an additional flag parameter, p_change_status,
5435                 -- to decide whether to allow change of status of sublines
5436                 -- of the topline during update service
5437 
5438                 --errorout('After copy_contract_lines-'||l_return_status);
5439                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
5440                 x_return_status := l_return_status;
5441                 RAISE G_ERROR;
5442                 ELSE
5443                 OKS_SETUP_UTIL_PUB.Okscopy
5444                 (p_chr_id => g_chr_id,
5445                 p_cle_id => NULL,
5446                 x_return_status => l_return_status,
5447                 p_upd_line_flag => 'Y',
5448                 p_bill_profile_flag => NULL
5449                 );
5450                 --errorout('After OKSCOPY-'||l_return_status);
5451                 END IF;
5452                 ***/
5453 
5454                 --replaced above call with call to new copy API. This will ensure that all new R12 columns will be correctly copied.
5455                 --Bug 4747648
5456                 l_lines_tbl(1).id := p_source_rec.cle_id;
5457                 l_lines_tbl(1).to_k := NULL;
5458                 l_lines_tbl(1).to_line := NULL;
5459                 l_lines_tbl(1).lse_id := l_lse_id;
5460                 l_lines_tbl(1).line_exists_yn := NULL;
5461                 l_lines_tbl(1).line_exp_yn := 'Y'; -- this will make sure all sublines are copied
5462 
5463                 OKS_COPY_CONTRACT_PVT.copy_components (
5464                                                        p_api_version => p_api_version,
5465                                                        p_init_msg_list => p_init_msg_list,
5466                                                        x_return_status => l_return_status,
5467                                                        x_msg_count => x_msg_count,
5468                                                        x_msg_data => x_msg_data,
5469                                                        p_from_chr_id => g_chr_id,
5470                                                        p_to_chr_id => g_chr_id,
5471                                                        p_contract_number => NULL,
5472                                                        p_contract_number_modifier => NULL,
5473                                                        p_to_template_yn => 'N',
5474                                                        p_components_tbl => l_api_components_tbl,  --empty
5475                                                        p_lines_tbl => l_lines_tbl,
5476                                                        p_change_status_YN => p_change_status,  -- Added an additional flag parameter, p_change_status
5477                                                        -- to decide whether to allow change of status of sublines
5478                                                        -- of the topline during update service
5479                                                        p_return_new_top_line_ID_YN => 'Y',
5480                                                        x_to_chr_id => lx_to_chr_id,
5481                                                        p_published_line_ids_tbl => l_published_line_ids_tbl
5482                                                        );
5483 
5484                 l_published_line_ids_tbl_i := l_published_line_ids_tbl.FIRST;
5485                 l_target_tbl(idx).cle_id := l_published_line_ids_tbl(l_published_line_ids_tbl_i).new_line_id;
5486                 --end Bug 4747648
5487 
5488                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5489                     x_return_status := l_return_status;
5490                     RAISE G_ERROR;
5491                 END IF;
5492 
5493                 --Fix for bug#2221910 start.  Update Top Line Sequence number.
5494 
5495                 l_top_line_number := l_top_line_number + 1;
5496                 UPDATE okc_k_lines_b SET line_number = l_top_line_number
5497                 WHERE  id = l_target_tbl(idx).cle_id;
5498                 --Fix for bug#2221910 end.
5499 
5500                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5501                     x_return_status := l_return_status;
5502                     RAISE G_ERROR;
5503                 END IF;
5504 
5505 
5506 
5507                 /************* Commented out because this is being taken care of by OKSCOPY
5508 
5509                 IF l_rev_found THEN
5510                 create_rev_distr(l_target_tbl(idx).cle_id, l_rev_tbl, l_return_status);
5511                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
5512                 x_return_status := l_return_status;
5513                 RAISE G_ERROR;
5514                 END IF;
5515                 END IF;
5516                 IF l_scr_found THEN
5517                 create_sales_cred(l_target_tbl(idx).cle_id, l_salescr_tbl, l_return_status);
5518                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
5519                 x_return_status := l_return_status;
5520                 RAISE G_ERROR;
5521                 END IF;
5522                 END IF;  **********/
5523 
5524 
5525                 EXIT WHEN idx = l_target_tbl.LAST;
5526                 idx := l_target_tbl.NEXT(idx);
5527             END LOOP;
5528         END IF;
5529         -- Now update each target line with the new item id, amount et cetera.
5530         idx := l_target_tbl.FIRST;
5531         LOOP
5532             update_line_item(l_target_tbl(idx).cle_id, l_target_tbl(idx).item_id, l_return_status);
5533             --errorout('After update_line_item-'||l_return_status);
5534             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5535                 x_return_status := l_return_status;
5536                 RAISE G_ERROR;
5537             END IF;
5538 
5539             IF l_target_tbl(idx).percentage <> 100 THEN
5540 
5541                 --LLC
5542 
5543                 --Changes to p_amount being passed when prorated_amount procedure is called, so that p_amount
5544                 --also contains prorated cancelled_amount along with prorated price_negotiated of topline
5545                 --the new adjdusted prorated amount is stored in l_adjusted_prorated_amt
5546 
5547                 OPEN get_topline_cancelled_amt(l_target_tbl(idx).cle_id);
5548                 FETCH get_topline_cancelled_amt INTO l_topline_cancelled_amt;
5549                 CLOSE get_topline_cancelled_amt;
5550 
5551                 l_prorated_cancelled_amt := l_topline_cancelled_amt * l_target_tbl(idx).percentage / 100.0;
5552                 l_adjusted_prorated_amt := l_target_tbl(idx).amount + l_prorated_cancelled_amt;
5553 
5554                 prorate_amount(l_target_tbl(idx).cle_id, l_target_tbl(idx).percentage, l_adjusted_prorated_amt, l_return_status);
5555 
5556                 --LLC
5557 
5558                 --errorout('After prorate_amount-'||l_return_status);
5559                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5560                     x_return_status := l_return_status;
5561                     RAISE G_ERROR;
5562                 END IF;
5563 
5564                 refresh_bill_sch(l_target_tbl(idx).cle_id, l_return_status);
5565                 --errorout('After refresh_bill_sch-'||l_return_status);
5566                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5567                     x_return_status := l_return_status;
5568                     RAISE G_ERROR;
5569                 END IF;
5570             END IF;
5571 
5572             -- Start Bug# 2701879
5573             l_contract_modifier := NULL;
5574 
5575             OPEN get_contract_modifier_cur (g_chr_id);
5576             FETCH get_contract_modifier_cur INTO l_contract_modifier;
5577             CLOSE get_contract_modifier_cur;
5578             --Call procedure to get date_renewed of header and lines
5579             --if modifier exists
5580             --
5581             IF l_contract_modifier IS NOT NULL
5582                 THEN
5583                 select_renewal_info
5584                 (p_chr_id => g_chr_id,
5585                  x_operation_lines_tbl => l_operation_lines_tbl
5586                  );
5587                 l_select_renewal_flag := TRUE;
5588             ELSE
5589                 l_select_renewal_flag := FALSE;
5590             END IF;
5591 
5592             -- Start Bug# 2701879
5593 
5594             --ADDED FOR Bug# 2364507
5595             l_cov_id := GetCoverage(l_target_tbl(idx).cle_id);
5596 
5597             IF l_cov_id IS NOT NULL
5598                 THEN
5599                 OKS_COVERAGES_PUB.Undo_Line
5600                 (p_api_version => 1.0
5601                  , p_init_msg_list => 'T'
5602                  , x_return_status => l_return_status
5603                  , x_msg_count => l_msg_count
5604                  , x_msg_data => l_msg_data
5605                  , p_line_id => l_cov_id);
5606                 --errorout('After Undo_Line-'||l_return_status);
5607                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5608                     x_return_status := l_return_status;
5609                     RAISE G_ERROR;
5610                 END IF;
5611             END IF;
5612 
5613             --start bug#2701879
5614             --Call procedure to update date_renewed of header and lines
5615             --if modifier exists
5616             --
5617             IF l_select_renewal_flag
5618                 THEN
5619                 IF l_operation_lines_tbl.COUNT > 0
5620                     THEN
5621                     update_renewal_info
5622                     (p_operation_lines_tbl => l_operation_lines_tbl,
5623                      x_return_status => l_return_status,
5624                      x_msg_count => l_msg_count,
5625                      x_msg_data => l_msg_data
5626                      );
5627                     --errorout('After update_renewal_info-'||l_return_status);
5628                 END IF;
5629             END IF;
5630             --
5631             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5632                 x_return_status := l_return_status;
5633                 RAISE G_ERROR;
5634             END IF;
5635 
5636             --end bug#2701879
5637 
5638             l_covtemp_id := GetCoverageTemplate(l_target_tbl(idx).item_id);
5639 
5640             IF l_covtemp_id IS NOT NULL
5641                 THEN
5642                 /**
5643                 l_ac_rec.svc_cle_id := l_target_tbl(idx).cle_id;
5644                 l_ac_rec.tmp_cle_id := l_covtemp_id;
5645                 l_ac_rec.start_date := l_start_date;
5646                 l_ac_rec.end_date   := l_end_date;
5647 
5648                 OKS_COVERAGES_PUB.create_actual_coverage
5649                 (p_api_version        => 1.0
5650                 ,p_init_msg_list      => 'T'
5651                 ,p_ac_rec_in          => l_ac_rec
5652                 ,x_return_status      => l_return_status
5653                 ,x_msg_count          => l_msg_count
5654                 ,x_msg_data           => l_msg_data
5655                 ,x_actual_coverage_id => l_cov_id);
5656                 --errorout('After create_actual_coverage-'||l_return_status);
5657                 IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
5658                 x_return_status := l_return_status;
5659                 RAISE G_ERROR;
5660                 END IF;
5661                 **/
5662                --Bug 4718226: need to create standard coverage to service line after split
5663 
5664               --Begin changes for Bug 9481526 :Update Service Shows The PM Schedule Attached to Previous Service line
5665 
5666                 OPEN   fetch_pm_details (l_covtemp_id);
5667                 FETCH fetch_pm_details INTO l_pm_prg_id,l_pm_conf_req,l_pm_sch_exists;
5668                 CLOSE fetch_pm_details;
5669 
5670                  --update the pm details in oks_k_lines_b
5671                  UPDATE oks_k_lines_b
5672                  SET coverage_id = l_covtemp_id,
5673                     standard_cov_yn = 'Y',
5674                     pm_program_id   =l_pm_prg_id ,
5675                     pm_conf_req_yn  =l_pm_conf_req   ,
5676                     pm_sch_exists_yn =l_pm_sch_exists
5677                  WHERE cle_id = l_target_tbl(idx).cle_id;
5678 
5679                  --undo the PM line details
5680                    OKS_PM_PROGRAMS_PVT.UNDO_PM_LINE(
5681                                       p_api_version                  =>1.0    ,
5682              	            p_init_msg_list                 =>'T',
5683                                       x_return_status                =>l_return_status,
5684                                       x_msg_count                    =>l_msg_count,
5685                                       x_msg_data                      =>l_msg_data,
5686                                       p_cle_id                            =>l_target_tbl(idx).cle_id);
5687 
5688                     IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5689                              x_return_status := l_return_status;
5690                               RAISE G_ERROR;
5691                     End IF;
5692 
5693                 --Create the PM schedule if the PM exists for the new coverage
5694                 if l_pm_prg_id IS NOT NULL then
5695 
5696                    --fetch the line dates
5697                       OPEN  fetch_line_date(l_target_tbl(idx).cle_id);
5698                       FETCH fetch_line_date INTO l_pm_start_date,l_pm_end_date;
5699                       CLOSE fetch_line_date;
5700 
5701                 OKS_PM_PROGRAMS_PVT.CREATE_PM_PROGRAM_SCHEDULE(
5702                                     p_api_version            => 1.0    ,
5703                                     p_init_msg_list           => 'T',
5704                                     x_return_status          => l_return_status,
5705                                     x_msg_count             => l_msg_count,
5706                                     x_msg_data               => l_msg_data,
5707                                     p_template_cle_id     => l_covtemp_id, --p_standard_cov_id,
5708                                     p_cle_id                     => l_target_tbl(idx).cle_id, --p_contract_line_id,
5709                                     p_cov_start_date      => l_pm_start_date,
5710                                     p_cov_end_date       => l_pm_end_date);
5711 
5712                       IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5713                              x_return_status := l_return_status;
5714                              RAISE G_ERROR;
5715                       End IF;
5716 
5717              End IF;--l_pm_prg_id
5718 
5719              ---End of changes for Bug 9481526
5720 
5721 
5722 
5723 
5724             END IF;
5725             l_covtemp_id := NULL;
5726             l_cov_id := NULL;
5727 
5728             --LLC Earlier: Call made to UpdateIRTRule and then UpdateIRTRule_Subline
5729             --LLC Now: Call made to UpdateIRTRule_Subline and then to UpdateIRTRule
5730 
5731             UpdateIRTRule_Subline(p_cle_id => l_target_tbl(idx).cle_id
5732                                   , p_item_desc => l_target_tbl(idx).item_desc
5733                                   , p_start_date => l_start_date
5734                                   , p_end_date => l_end_date
5735                                   , x_return_status => l_return_status);
5736             --errorout('After UpdateIRTRule_SubLine-'||l_return_status);
5737             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5738                 x_return_status := l_return_status;
5739                 RAISE G_ERROR;
5740             END IF;
5741             --ADDED FOR Bug# 2364507
5742 
5743 
5744             UpdateIRTRule(p_chr_id => g_chr_id
5745                           , p_cle_id => l_target_tbl(idx).cle_id --LLC ealier: p_source_rec.cle_id
5746                           , p_invoice_text => GetFormattedInvoiceText
5747                           (l_target_tbl(idx).item_desc, l_start_date, l_end_date)
5748                           , p_api_version => 1.0
5749                           , p_init_msg_list => l_init_msg_list
5750                           , x_return_status => l_return_status
5751                           , x_tax_value => l_tax_value
5752                           , x_AMOUNT_INCLUDES_TAX_FLAG => l_AMOUNT_INCLUDES_TAX_FLAG
5753                           , x_total => l_total);
5754 
5755             --errorout('After UpdateIRTRule-'||l_return_status);
5756 
5757             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5758                 x_return_status := l_return_status;
5759                 RAISE G_ERROR;
5760             END IF;
5761 
5762 
5763 
5764             --*
5765 
5766             --price_negotiated for the topline
5767 
5768             OPEN get_price_negotiated_amt_csr(l_target_tbl(idx).cle_id);
5769             FETCH get_price_negotiated_amt_csr INTO get_price_negotiated_amt_rec;
5770             CLOSE get_price_negotiated_amt_csr;
5771 
5772             l_curr_price_negotiated_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5773             (get_price_negotiated_amt_rec.amt,
5774              l_curr_code
5775              );
5776 
5777             --LLC
5778 
5779             --CANCELLED_AMOUNT for the topline
5780 
5781             OPEN get_topline_cancelled_amt(l_target_tbl(idx).cle_id);
5782             FETCH get_topline_cancelled_amt INTO l_cancelled_amt;
5783             CLOSE get_topline_cancelled_amt;
5784 
5785 
5786             l_curr_cancelled_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5787             (l_cancelled_amt,
5788              l_curr_code
5789              );
5790             --Updating topline with the price_negotiated and cancelled_amount
5791 
5792             UPDATE okc_k_lines_b
5793             SET	price_negotiated = l_curr_price_negotiated_amt,
5794              cancelled_amount = l_curr_cancelled_amt
5795             WHERE id = l_target_tbl(idx).cle_id;
5796 
5797             --Estimated_amount for the header
5798 
5799             OPEN sum_price_negotiated_lines_csr(g_chr_id);
5800             FETCH sum_price_negotiated_lines_csr INTO l_sum_price_negotiated_lines;
5801             CLOSE sum_price_negotiated_lines_csr;
5802 
5803 
5804             l_curr_sum_negotiated_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5805             (l_sum_price_negotiated_lines,
5806              l_curr_code
5807 
5808              );
5809 
5810             --CANCELLED_AMOUNT for contract
5811 
5812             OPEN sum_cancelled_amt_lines_csr(g_chr_id);
5813             FETCH sum_cancelled_amt_lines_csr INTO l_sum_cancelled_amt_lines;
5814             CLOSE sum_cancelled_amt_lines_csr;
5815 
5816 
5817             l_curr_sum_cancelled_amt := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
5818             (l_sum_cancelled_amt_lines,
5819              l_curr_code
5820              );
5821 
5822             --Updating Header with the estimated_amount and cancelled_amount
5823 
5824             UPDATE okc_k_headers_b
5825             SET estimated_amount = l_curr_sum_negotiated_amt,
5826              cancelled_amount = l_curr_sum_cancelled_amt
5827             WHERE id = g_chr_id;
5828 
5829             --LLC
5830 
5831 
5832 
5833             --*
5834             --errorout('Calling CreateOperationlines');
5835             CreateOperationLines(p_chr_id => g_chr_id
5836                                  , p_object_line_id => p_source_rec.cle_id
5837                                  , p_subject_line_id => l_target_tbl(idx).cle_id
5838                                  , p_oie_id => l_oie_id
5839                                  , x_return_status => l_return_status);
5840 
5841             --errorout('After CreateOperationlines-'||l_return_status);
5842             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5843                 x_return_status := l_return_status;
5844                 RAISE G_ERROR;
5845             END IF;
5846             l_total_pct := l_total_pct + l_target_tbl(idx).percentage;
5847             EXIT WHEN idx = l_target_tbl.LAST;
5848             idx := l_target_tbl.NEXT(idx);
5849         END LOOP;
5850         IF l_total_pct <> 100 THEN
5851             update_header_amount(p_source_rec.cle_id, l_return_status);
5852             --errorout('After update_header-'||l_return_status);
5853             IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5854                 x_return_status := l_return_status;
5855                 RAISE G_ERROR;
5856             END IF;
5857         END IF;
5858         x_return_status := OKC_API.G_RET_STS_SUCCESS;
5859     EXCEPTION
5860         WHEN G_ERROR THEN
5861             NULL;
5862         WHEN OTHERS THEN
5863             OKC_API.set_message(OKC_API.G_APP_NAME,
5864                                 'OKS_UNEXP_ERROR',
5865                                 'SQLcode',
5866                                 SQLCODE,
5867                                 'SQLerrm',
5868                                 SQLERRM);
5869             -- notify caller of an UNEXPECTED error
5870             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5871     END CopyService;
5872 
5873 
5874     -- Begin modifications for new HZ_CONTACT_POINTS_V2PUB for TCA uptake, aiyengar 11/20/02
5875 
5876 
5877     PROCEDURE Create_Contact_Points
5878     (
5879      p_api_version         IN   NUMBER,
5880      p_init_msg_list       IN   VARCHAR2,
5881      p_commit              IN   VARCHAR2,
5882      P_contact_point_rec   IN   contact_point_rec,
5883      x_return_status       OUT NOCOPY  VARCHAR2,
5884      x_msg_count           OUT NOCOPY  NUMBER,
5885      x_msg_data            OUT NOCOPY  VARCHAR2,
5886      x_contact_point_id    OUT NOCOPY  NUMBER)
5887     IS
5888 
5889     l_contact_point_rec      HZ_CONTACT_POINT_V2PUB.CONTACT_POINT_REC_TYPE;
5890     l_email_rec_type         HZ_CONTACT_POINT_V2PUB.EMAIL_REC_TYPE;
5891     l_phone_rec_type         HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
5892     l_web_rec_type           HZ_CONTACT_POINT_V2PUB.WEB_REC_TYPE ;
5893     l_telex_rec_type         HZ_CONTACT_POINT_V2PUB.TELEX_REC_TYPE;
5894     l_edi_rec_type           HZ_CONTACT_POINT_V2PUB.EDI_REC_TYPE;
5895 
5896     G_ERROR                  EXCEPTION;
5897 
5898     BEGIN
5899 
5900         --commented out intialization for bug#3392035
5901         --l_contact_point_rec.contact_point_id    := FND_API.G_MISS_NUM;
5902 
5903         l_contact_point_rec.contact_point_id := p_contact_point_rec.contact_point_id;
5904         l_contact_point_rec.contact_point_type := p_contact_point_rec.contact_point_type;
5905         l_contact_point_rec.status := p_contact_point_rec.status;
5906         l_contact_point_rec.owner_table_name := p_contact_point_rec.owner_table_name;
5907         l_contact_point_rec.owner_table_id := p_contact_point_rec.owner_table_id;
5908         l_contact_point_rec.primary_flag := p_contact_point_rec.primary_flag;
5909 
5910         l_contact_point_rec.created_by_module := 'OKS_AUTH';
5911 
5912         IF l_contact_point_rec.contact_point_type = 'EMAIL' THEN
5913             l_email_rec_type.email_address := p_contact_point_rec.email_address;
5914         ELSIF l_contact_point_rec.contact_point_type IN('PHONE', 'FAX', 'MOBILE') THEN
5915             IF l_contact_point_rec.contact_point_type = 'PHONE' THEN
5916                 l_phone_rec_type.phone_line_type := 'GEN';
5917             ELSIF l_contact_point_rec.contact_point_type = 'FAX' THEN
5918                 l_contact_point_rec.contact_point_type := 'PHONE';
5919                 l_phone_rec_type.phone_line_type := 'FAX';
5920             ELSIF l_contact_point_rec.contact_point_type = 'MOBILE' THEN -- added for contact creation
5921                 l_contact_point_rec.contact_point_type := 'PHONE'; -- added for contact creation
5922                 l_phone_rec_type.phone_line_type := 'MOBILE'; -- added for contact creation
5923             END IF;
5924             l_phone_rec_type.phone_number := p_contact_point_rec.email_address;
5925             --Added following codition to make area code null if area code having no value 3392035
5926             IF  p_contact_point_rec.area_code IS NULL
5927                 THEN
5928                 l_phone_rec_type.phone_area_code := FND_API.G_MISS_CHAR;
5929             ELSE
5930                 l_phone_rec_type.phone_area_code := p_contact_point_rec.area_code;
5931             END IF;
5932             -- added for contact creation
5933             IF p_contact_point_rec.phone_country_code IS NULL
5934                 THEN
5935                 l_phone_rec_type.phone_country_code := FND_API.G_MISS_CHAR; -- added for contact creation
5936             ELSE
5937                 l_phone_rec_type.phone_country_code := p_contact_point_rec.phone_country_code; -- added for contact creation
5938             END IF;
5939             --contact creation end
5940 
5941         END IF;
5942 
5943         HZ_CONTACT_POINT_V2PUB.create_contact_point (
5944                                                      p_init_msg_list => p_init_msg_list,
5945                                                      p_contact_point_rec => l_contact_point_rec,
5946                                                      p_email_rec => l_email_rec_type,
5947                                                      p_phone_rec => l_phone_rec_type,
5948                                                      x_contact_point_id => x_contact_point_id,
5949                                                      x_return_status => x_return_status,
5950                                                      x_msg_count => x_msg_count,
5951                                                      x_msg_data => x_msg_data
5952                                                      );
5953 
5954         IF x_return_status <> 'S' THEN
5955             RAISE G_ERROR;
5956         END IF;
5957 
5958     EXCEPTION
5959         WHEN G_ERROR THEN
5960             NULL;
5961         WHEN OTHERS THEN
5962             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
5963             OKC_API.set_message
5964             (OKC_API.G_APP_NAME,
5965              G_UNEXPECTED_ERROR,
5966              G_SQLCODE_TOKEN,
5967              SQLCODE,
5968              G_SQLERRM_TOKEN,
5969              SQLERRM);
5970     END Create_Contact_Points;
5971 
5972     PROCEDURE Update_Contact_Points
5973     (
5974      p_api_version         IN   NUMBER,
5975      p_init_msg_list       IN   VARCHAR2,
5976      P_commit              IN   VARCHAR2,
5977      P_contact_point_rec   IN   contact_point_rec,
5978      x_return_status       OUT NOCOPY  VARCHAR2,
5979      x_msg_count           OUT NOCOPY  NUMBER,
5980      x_msg_data            OUT NOCOPY  VARCHAR2)
5981     IS
5982     l_object_Version_number  NUMBER := 1 ;
5983     l_contact_point_rec      HZ_CONTACT_POINT_V2PUB.CONTACT_POINT_REC_TYPE;
5984     l_email_rec_type         HZ_CONTACT_POINT_V2PUB.EMAIL_REC_TYPE;
5985     l_phone_rec_type         HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
5986     G_ERROR                  EXCEPTION;
5987 
5988     CURSOR l_cpoint_csr IS
5989         SELECT last_update_date, object_version_number, contact_point_type
5990         FROM   HZ_CONTACT_POINTS
5991         WHERE  contact_point_id = P_contact_point_rec.contact_point_id;
5992 
5993     l_cpoint_rec l_cpoint_csr%ROWTYPE;
5994 
5995     BEGIN
5996 
5997         l_contact_point_rec.contact_point_id := P_contact_point_rec.contact_point_id;
5998 
5999         OPEN  l_cpoint_csr;
6000         FETCH l_cpoint_csr INTO l_cpoint_rec;
6001         CLOSE l_cpoint_csr;
6002 
6003         IF l_cpoint_rec.contact_point_type = 'EMAIL' THEN
6004             l_email_rec_type.email_address := p_contact_point_rec.email_address;
6005         ELSIF l_cpoint_rec.contact_point_type IN ('PHONE', 'FAX') THEN
6006             l_phone_rec_type.phone_number := p_contact_point_rec.email_address;
6007 
6008             --ADDED following condition to make area code null 3392035
6009             IF p_contact_point_rec.area_code IS NULL
6010                 THEN
6011                 l_phone_rec_type.phone_area_code := FND_API.G_MISS_CHAR;
6012             ELSE
6013                 l_phone_rec_type.phone_area_code := p_contact_point_rec.area_code;
6014             END IF;
6015             -- added for contact creation OCT 2004
6016             IF p_contact_point_rec.phone_country_code IS NULL
6017                 THEN
6018                 l_phone_rec_type.phone_country_code := FND_API.G_MISS_CHAR; -- added for contact creation
6019             ELSE
6020                 l_phone_rec_type.phone_country_code := p_contact_point_rec.phone_country_code; -- added for contact creation
6021             END IF;
6022             --contact creation end OCT 2004
6023 
6024         END IF;
6025         l_object_version_number := l_cpoint_rec.object_Version_number;
6026 
6027         HZ_CONTACT_POINT_V2PUB.update_contact_point (
6028                                                      p_init_msg_list => p_init_msg_list,
6029                                                      p_contact_point_rec => l_contact_point_rec,
6030                                                      p_email_rec => l_email_rec_type,
6031                                                      p_phone_rec => l_phone_rec_type,
6032                                                      x_return_status => x_return_status,
6033                                                      x_msg_count => x_msg_count,
6034                                                      x_msg_data => x_msg_data,
6035                                                      p_object_version_number => l_object_version_number
6036                                                      );
6037         IF x_return_status <> 'S' THEN
6038             RAISE G_ERROR;
6039         END IF;
6040 
6041     EXCEPTION
6042         WHEN G_ERROR THEN
6043             NULL;
6044         WHEN OTHERS THEN
6045             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
6046             OKC_API.set_message
6047             (OKC_API.G_APP_NAME,
6048              G_UNEXPECTED_ERROR,
6049              G_SQLCODE_TOKEN,
6050              SQLCODE,
6051              G_SQLERRM_TOKEN,
6052              SQLERRM);
6053 
6054     END Update_Contact_Points;
6055 
6056     -- End modifications for new HZ_CONTACT_POINTS_V2PUB for TCA uptake, aiyengar 11/20/02
6057 
6058     PROCEDURE CreateOperationInstance(p_chr_id IN NUMBER
6059                                       , p_object1_id1 IN VARCHAR2
6060                                       , p_object1_id2 IN VARCHAR2
6061                                       , p_jtot_object1_code IN VARCHAR2
6062                                       , x_return_status OUT NOCOPY VARCHAR2
6063                                       , x_oie_id OUT NOCOPY NUMBER)
6064     IS
6065 
6066     CURSOR c_clopn_split_csr IS
6067         SELECT id
6068         FROM   okc_class_operations
6069         WHERE  CLS_CODE = 'SERVICE'
6070         AND    OPN_CODE = 'SPLIT';
6071 
6072     l_split_Id    NUMBER := NULL;
6073 
6074     l_api_version      NUMBER := 1.0;
6075     l_init_msg_list    VARCHAR2(1) := G_TRUE;
6076     l_return_status    VARCHAR2(1) := G_RET_STS_SUCCESS;
6077     l_msg_count        NUMBER;
6078     l_msg_data         VARCHAR2(2000);
6079 
6080     l_oiev_tbl   OKC_OPER_INST_PVT.oiev_tbl_type;
6081     x_oiev_tbl   OKC_OPER_INST_PVT.oiev_tbl_type;
6082 
6083     BEGIN
6084 
6085         OPEN  c_clopn_split_csr;
6086         FETCH c_clopn_split_csr INTO l_split_id;
6087         CLOSE c_clopn_split_csr;
6088         IF l_split_id IS NULL THEN
6089             x_return_status := G_RET_STS_ERROR;
6090             OKC_API.set_message(G_APP_NAME_OKS, 'OKS_CLS_OPN_NOT_FOUND');
6091             RAISE G_ERROR;
6092         END IF;
6093 
6094         l_oiev_tbl(1).cop_id := l_split_id;
6095         l_oiev_tbl(1).status_code := 'PROCESSED';
6096         l_oiev_tbl(1).target_chr_id := p_chr_id;
6097         l_oiev_tbl(1).object1_id1 := p_object1_id1;
6098         l_oiev_tbl(1).object1_id2 := p_object1_id2;
6099         l_oiev_tbl(1).jtot_object1_code := p_jtot_object1_code;
6100         OKC_OPER_INST_PUB.Create_Operation_Instance
6101         (p_api_version => l_api_version
6102          , p_init_msg_list => l_init_msg_list
6103          , x_return_status => l_return_status
6104          , x_msg_count => l_msg_count
6105          , x_msg_data => l_msg_data
6106          , p_oiev_tbl => l_oiev_tbl
6107          , x_oiev_tbl => x_oiev_tbl);
6108         IF l_return_status <> G_RET_STS_SUCCESS THEN
6109             x_return_status := l_return_status;
6110             RAISE G_ERROR;
6111         END IF;
6112 
6113         --BUG#4066428 hkamdar 01/21/05
6114         x_return_status := l_return_status;
6115         --End BUG#4066428
6116         x_oie_id := x_oiev_tbl(1).id;
6117     EXCEPTION
6118         WHEN G_ERROR THEN
6119             NULL;
6120         WHEN OTHERS THEN
6121             OKC_API.set_message(G_APP_NAME_OKS,
6122                                 'OKS_UNEXP_ERROR',
6123                                 'SQLcode',
6124                                 SQLCODE,
6125                                 'SQLerrm',
6126                                 SQLERRM);
6127             -- notify caller of an UNEXPECTED error
6128             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
6129     END CreateOperationInstance;
6130 
6131     PROCEDURE CreateOperationLines(p_chr_id IN NUMBER
6132                                    , p_object_line_id IN NUMBER
6133                                    , p_subject_line_id IN NUMBER
6134                                    , p_oie_id IN NUMBER
6135                                    --BUG#4066428 01/24/05 hkamdar
6136                                    --,x_return_status OUT NOCOPY NUMBER)
6137                                    , x_return_status OUT NOCOPY VARCHAR2)
6138     --End BUG#4066428 01/24/05 hkamdar
6139     IS
6140     l_api_version      NUMBER := 1.0;
6141     l_init_msg_list    VARCHAR2(1) := G_TRUE;
6142     l_return_status    VARCHAR2(1) := G_RET_STS_SUCCESS;
6143     l_msg_count        NUMBER;
6144     l_msg_data         VARCHAR2(2000);
6145     l_olev_tbl   OKC_OPER_INST_PVT.olev_tbl_type;
6146     x_olev_tbl   OKC_OPER_INST_PVT.olev_tbl_type;
6147     BEGIN
6148         --  errorout('In Operation Lines');
6149         l_olev_tbl(1).oie_id := p_oie_id;
6150         l_olev_tbl(1).subject_chr_id := p_chr_id;
6151         l_olev_tbl(1).object_chr_id := p_chr_id;
6152         l_olev_tbl(1).subject_cle_id := p_subject_line_id;
6153         l_olev_tbl(1).object_cle_id := p_object_line_id;
6154         OKC_OPER_INST_PUB.Create_Operation_Line
6155         (p_api_version => l_api_version
6156          , p_init_msg_list => l_init_msg_list
6157          , x_return_status => l_return_status
6158          , x_msg_count => l_msg_count
6159          , x_msg_data => l_msg_data
6160          , p_olev_tbl => l_olev_tbl
6161          , x_olev_tbl => x_olev_tbl);
6162 
6163         --	errorout('After calling Create_Operation_Line in OPLINES-'||l_return_status);
6164         IF l_return_status <> G_RET_STS_SUCCESS THEN
6165             x_return_status := l_return_status;
6166             RAISE G_ERROR;
6167         END IF;
6168 
6169         --BUG#4066428 hkamdar 01/21/05
6170         x_return_status := l_return_status;
6171         --End BUG#4066428
6172         --errorout('End CreateOperationlines');
6173     EXCEPTION
6174         WHEN G_ERROR THEN
6175             NULL;
6176         WHEN OTHERS THEN
6177             OKC_API.set_message(G_APP_NAME_OKS,
6178                                 'OKS_UNEXP_ERROR',
6179                                 'SQLcode',
6180                                 SQLCODE,
6181                                 'SQLerrm',
6182                                 SQLERRM);
6183             -- notify caller of an UNEXPECTED error
6184             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
6185     END CreateOperationLines;
6186 
6187 
6188     PROCEDURE CREATE_CII_FOR_SUBSCRIPTION
6189     (
6190      p_api_version   IN NUMBER,
6191      p_init_msg_list IN VARCHAR2,
6192      x_return_status OUT NOCOPY VARCHAR2,
6193      x_msg_count     OUT NOCOPY NUMBER,
6194      x_msg_data      OUT NOCOPY VARCHAR2,
6195      p_cle_id        IN NUMBER,
6196      p_quantity      IN NUMBER DEFAULT 1,
6197      x_instance_id   OUT NOCOPY NUMBER
6198 
6199      )
6200 
6201     IS
6202 
6203     p_instance_rec          CSI_DATASTRUCTURES_PUB.INSTANCE_REC;
6204     p_ext_attrib_values_tbl CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_VALUES_TBL;
6205     p_party_tbl             CSI_DATASTRUCTURES_PUB.PARTY_TBL;
6206     p_account_tbl           CSI_DATASTRUCTURES_PUB.PARTY_ACCOUNT_TBL;
6207     p_pricing_attrib_tbl    CSI_DATASTRUCTURES_PUB.PRICING_ATTRIBS_TBL;
6208     p_org_assignments_tbl   CSI_DATASTRUCTURES_PUB.ORGANIZATION_UNITS_TBL;
6209     p_asset_assignment_tbl  CSI_DATASTRUCTURES_PUB.INSTANCE_ASSET_TBL;
6210     p_txn_rec               CSI_DATASTRUCTURES_PUB.TRANSACTION_REC;
6211 
6212     t_output                VARCHAR2(2000);
6213     t_msg_dummy             NUMBER;
6214 
6215     CURSOR l_get_item_id(p_cle_id IN NUMBER)
6216         IS
6217         SELECT object1_id1, object1_id2, dnz_chr_id, uom_code
6218         FROM   okc_k_items
6219         WHERE  cle_id = p_cle_id;
6220 
6221 
6222     CURSOR l_csr_Get_party_sites(p_party_id IN NUMBER)
6223         IS
6224         SELECT party_site_id
6225         FROM   HZ_PARTY_SITES
6226         WHERE  party_id = p_party_id
6227         AND    identifying_address_flag = 'Y';
6228 
6229     -- Get customer account id
6230     CURSOR l_csr_get_cust_acct_id(p_cle_id IN NUMBER)
6231         IS
6232         SELECT cust_acct_id
6233         FROM okc_k_lines_b
6234         WHERE id = p_cle_id;
6235 
6236 
6237     CURSOR l_Get_party_id(p_cust_acct_id IN NUMBER)
6238         IS
6239         SELECT party_id
6240         FROM   HZ_CUST_ACCOUNTS
6241         WHERE  cust_account_id = p_cust_acct_id;
6242 
6243 
6244     /*** Fetch inventory revision code **/
6245 
6246     CURSOR l_csr_chk_revision_control(p_item_id IN NUMBER, p_organization_id IN NUMBER)
6247         IS
6248         SELECT revision_qty_control_code
6249         FROM mtl_system_items_kfv
6250         WHERE  inventory_item_id = p_item_id
6251         AND    organization_id = p_organization_id;
6252 
6253 
6254     CURSOR l_csr_get_item_revision(p_item_id IN NUMBER, p_organization_id IN NUMBER)
6255         IS
6256         SELECT revision
6257         FROM   MTL_ITEM_REVISIONS_VL
6258         WHERE  inventory_item_id = p_item_id
6259         AND    organization_id = p_organization_id;
6260 
6261 
6262     /* Cursors for traversing logic to get site id */
6263     /*  Fetch ship_to_site_use_id and bill_to_site_use_id */
6264 
6265 
6266     l_inv_item_id   OKX_system_items_v.id1%TYPE;
6267     l_inv_organization_id   NUMBER;
6268     l_dnz_chr_id     NUMBER;
6269     l_party_id       NUMBER;
6270     l_uom            OKC_K_ITEMS.uom_code%TYPE;
6271     l_party_site_id  HZ_PARTY_SITES.party_site_id%TYPE;
6272     l_rgp_id         OKC_RULE_GROUPS_B.id%TYPE;
6273     l_cust_acct_id   OKX_CUSTOMER_ACCOUNTS_V.id1%TYPE;
6274 
6275 
6276     l_revision_control_yn    MTL_SYSTEM_ITEMS_KFV.revision_qty_control_code%TYPE;
6277     l_revision       MTL_ITEM_REVISIONS_VL.revision%TYPE;
6278     l_ship_to_site_use_id   OKC_K_HEADERS_B.ship_to_site_use_id%TYPE;
6279     l_bill_to_site_use_id   OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
6280 
6281     FUNCTION ship_to(p_cle_id IN NUMBER)
6282     RETURN NUMBER
6283     IS
6284     CURSOR l_csr_get_shipto_billto(p_cle_id IN NUMBER)
6285         IS
6286         SELECT ship_to_site_use_id, bill_to_site_use_id
6287         FROM   okc_k_lines_b
6288         WHERE  id = p_cle_id;
6289 
6290 
6291     CURSOR l_csr_partysite_from_custsite(p_shipto_or_billto IN NUMBER)
6292         IS
6293         SELECT party_site_id
6294         FROM okx_cust_site_uses_v
6295         WHERE id1 = p_shipto_or_billto ;
6296 
6297     l_shipto             NUMBER;
6298     l_billto             NUMBER;
6299     l_shipto_or_billto   NUMBER;
6300     l_party_site         NUMBER;
6301 
6302     BEGIN
6303 
6304         OPEN l_csr_get_shipto_billto(p_cle_id);
6305         FETCH l_csr_get_shipto_billto INTO l_shipto, l_billto;
6306         CLOSE l_csr_get_shipto_billto;
6307 
6308         IF l_shipto IS NOT NULL THEN
6309             l_shipto_or_billto := l_shipto;
6310         ELSIF l_billto IS NOT NULL THEN
6311             l_shipto_or_billto := l_billto;
6312         END IF;
6313 
6314         OPEN l_csr_partysite_from_custsite(l_shipto_or_billto);
6315         FETCH l_csr_partysite_from_custsite INTO l_party_site;
6316         CLOSE l_csr_partysite_from_custsite;
6317 
6318         RETURN l_party_site;
6319 
6320     END;
6321 
6322 
6323     BEGIN
6324 
6325         OPEN  l_get_item_id(p_cle_id);
6326         FETCH l_get_item_id INTO  l_inv_item_id, l_inv_organization_id, l_dnz_chr_id, l_uom;
6327         CLOSE l_get_item_id;
6328 
6329 
6330         OPEN  l_csr_get_cust_acct_id(p_cle_id);
6331         FETCH l_csr_get_cust_acct_id INTO l_cust_acct_id;
6332         CLOSE l_csr_get_cust_acct_id;
6333 
6334 
6335         IF l_cust_acct_id IS NULL THEN
6336 
6337             RAISE G_ERROR;
6338         END IF;
6339 
6340 
6341         OPEN  l_get_party_id(l_cust_acct_id);
6342         FETCH l_get_party_id INTO l_party_id;
6343         CLOSE l_get_party_id;
6344 
6345 
6346 
6347         OPEN  l_csr_get_party_sites(l_party_id);
6348         FETCH l_csr_get_party_sites INTO l_party_site_id;
6349         CLOSE l_csr_get_party_sites;
6350 
6351         -- Code added to check whether item is revision controlled or not
6352         -- And pass revision to create_item_instance api accordingly
6353         -- aiyengar
6354 
6355         OPEN l_csr_chk_revision_control(l_inv_item_id, l_inv_organization_id);
6356         FETCH l_csr_chk_revision_control INTO l_revision_control_yn ;
6357         CLOSE l_csr_chk_revision_control;
6358 
6359         IF l_revision_control_yn = 2 THEN
6360             OPEN l_csr_get_item_revision(l_inv_item_id, l_inv_organization_id);
6361             FETCH l_csr_get_item_revision INTO l_revision;
6362             CLOSE l_csr_get_item_revision;
6363 
6364         ELSE
6365             l_revision := '';
6366 
6367         END IF;
6368 
6369 
6370         ----------errorout(' party id '||l_party_id);
6371         ----------errorout(' inv items id '||l_inv_item_id);
6372         ----------errorout(' organization id '||l_inv_organization_id);
6373         -- dnz chr id  '||l_dnz_chr_id);
6374         p_instance_rec.instance_id := NULL;
6375 
6376         p_instance_rec.instance_number := '';
6377         p_instance_rec.external_reference := '';
6378         p_instance_rec.inventory_item_id := l_inv_item_id;
6379         p_instance_rec.vld_organization_id := l_inv_organization_id;
6380         p_instance_rec.inventory_revision := l_revision;
6381         --  p_instance_rec.inv_master_organization_id := l_inv_organization_id; --NULL;
6382         p_instance_rec.serial_number := NULL;
6383         p_instance_rec.mfg_serial_number_flag := '';
6384         p_instance_rec.quantity := p_quantity;
6385         p_instance_rec.unit_of_measure := l_uom;
6386         p_instance_rec.accounting_class_code := '';
6387         p_instance_rec.instance_condition_id := 1;
6388         p_instance_rec.instance_status_id := NULL;
6389         p_instance_rec.customer_view_flag := '';
6390         p_instance_rec.merchant_view_flag := '';
6391         p_instance_rec.sellable_flag := '';
6392         p_instance_rec.system_id := NULL;
6393         p_instance_rec.instance_type_code := '';
6394         p_instance_rec.active_start_date := '';
6395         p_instance_rec.active_end_date := '';
6396 
6397         p_instance_rec.in_transit_order_line_id := NULL;
6398         p_instance_rec.location_type_code := 'HZ_PARTY_SITES';
6399         p_instance_rec.location_id := NVL(ship_to(p_cle_id), l_party_site_id ) ;
6400 
6401 
6402 
6403         --  p_instance_rec.location_type_code := 'INVENTORY';
6404         -- p_instance_rec.location_id :=207 ;
6405 
6406         --  p_instance_rec.inv_organization_id :=l_inv_organization_id;
6407         --  p_instance_rec.inv_subinventory_name := 'Stores'; --'FGI';
6408 
6409         ---p_instance_rec.last_oe_order_line_id := NULL;
6410          /*Added for ER 16039680 */
6411         IF oks_ocint_pub.g_last_oe_order_line_id <> -1 THEN
6412         p_instance_rec.last_oe_order_line_id := oks_ocint_pub.g_last_oe_order_line_id;
6413         ELSE
6414         p_instance_rec.last_oe_order_line_id := NULL;
6415         END IF;
6416 	/*Added for ER 16039680 */
6417         p_instance_rec.last_oe_rma_line_id := NULL;
6418         p_instance_rec.last_po_po_line_id := NULL;
6419         p_instance_rec.last_oe_po_number := '';
6420         p_instance_rec.last_wip_job_id := NULL;
6421         p_instance_rec.last_pa_project_id := NULL;
6422         p_instance_rec.last_pa_task_id := NULL;
6423         p_instance_rec.last_oe_agreement_id := NULL;
6424         p_instance_rec.install_date := SYSDATE;
6425         p_instance_rec.manually_created_flag := '';
6426         p_instance_rec.return_by_date := '';
6427         p_instance_rec.actual_return_date := '';
6428         p_instance_rec.creation_complete_flag := '';
6429         p_instance_rec.completeness_flag := '';
6430         p_instance_rec.version_label := '';
6431         p_instance_rec.version_label_description := '';
6432         p_instance_rec.context := '';
6433         p_instance_rec.attribute1 := '';
6434         p_instance_rec.attribute2 := '';
6435         p_instance_rec.attribute3 := '';
6436         p_instance_rec.attribute4 := '';
6437         p_instance_rec.attribute5 := '';
6438         p_instance_rec.attribute6 := '';
6439         p_instance_rec.attribute7 := '';
6440         p_instance_rec.attribute8 := '';
6441         p_instance_rec.attribute9 := '';
6442         p_instance_rec.attribute10 := '';
6443         p_instance_rec.attribute11 := '';
6444         p_instance_rec.attribute12 := '';
6445         p_instance_rec.attribute13 := '';
6446         p_instance_rec.attribute14 := '';
6447         p_instance_rec.attribute15 := '';
6448         p_instance_rec.object_version_number := NULL;
6449         p_instance_rec.last_txn_line_detail_id := NULL;
6450         p_instance_rec.install_location_type_code := '';
6451         p_instance_rec.install_location_id := NULL;
6452         --  p_instance_rec.instance_usage_code := 'IN_TRANSIT';--'INSTALLED';
6453 
6454         p_party_tbl(1).instance_party_id := NULL;
6455         p_party_tbl(1).instance_id := NULL;
6456         p_party_tbl(1).party_source_table := 'HZ_PARTIES';
6457         p_party_tbl(1).party_id := l_party_id ;
6458         p_party_tbl(1).relationship_type_code := 'OWNER';
6459         p_party_tbl(1).contact_flag := 'N';
6460         p_party_tbl(1).contact_ip_id := NULL;
6461         p_party_tbl(1).active_start_date := '';
6462         p_party_tbl(1).active_end_date := '';
6463         p_party_tbl(1).context := '';
6464         p_party_tbl(1).attribute1 := '';
6465         p_party_tbl(1).attribute2 := '';
6466         p_party_tbl(1).attribute3 := '';
6467         p_party_tbl(1).attribute4 := '';
6468         p_party_tbl(1).attribute5 := '';
6469         p_party_tbl(1).attribute6 := '';
6470         p_party_tbl(1).attribute7 := '';
6471         p_party_tbl(1).attribute8 := '';
6472         p_party_tbl(1).attribute9 := '';
6473         p_party_tbl(1).attribute10 := '';
6474         p_party_tbl(1).attribute11 := '';
6475         p_party_tbl(1).attribute12 := '';
6476         p_party_tbl(1).attribute13 := '';
6477         p_party_tbl(1).attribute14 := '';
6478         p_party_tbl(1).attribute15 := '';
6479         p_party_tbl(1).object_version_number := NULL;
6480 
6481         p_account_tbl(1).ip_account_id := NULL;
6482         p_account_tbl(1).parent_tbl_index := 1; --NULL;
6483         p_account_tbl(1).instance_party_id := NULL;
6484         p_account_tbl(1).party_account_id := l_cust_acct_id; --NULL;
6485         p_account_tbl(1).relationship_type_code := 'OWNER';
6486         -- p_account_tbl(1).bill_to_address := 1000;
6487         --  p_account_tbl(1).ship_to_address := 1001;
6488         p_account_tbl(1).active_start_date := '';
6489         p_account_tbl(1).active_end_date := '';
6490         p_account_tbl(1).context := '';
6491         p_account_tbl(1).attribute1 := '';
6492         p_account_tbl(1).attribute2 := '';
6493         p_account_tbl(1).attribute3 := '';
6494         p_account_tbl(1).attribute4 := '';
6495         p_account_tbl(1).attribute5 := '';
6496         p_account_tbl(1).attribute6 := '';
6497         p_account_tbl(1).attribute7 := '';
6498         p_account_tbl(1).attribute8 := '';
6499         p_account_tbl(1).attribute9 := '';
6500         p_account_tbl(1).attribute10 := '';
6501         p_account_tbl(1).attribute11 := '';
6502         p_account_tbl(1).attribute12 := '';
6503         p_account_tbl(1).attribute13 := '';
6504         p_account_tbl(1).attribute14 := '';
6505         p_account_tbl(1).attribute15 := '';
6506         p_account_tbl(1).object_version_number := NULL;
6507 
6508 
6509         p_org_assignments_tbl(1).instance_ou_id := NULL;
6510         p_org_assignments_tbl(1).instance_id := NULL;
6511         p_org_assignments_tbl(1).operating_unit_id := okc_context.get_okc_org_id;
6512         p_org_assignments_tbl(1).relationship_type_code := 'SOLD_FROM';
6513         p_org_assignments_tbl(1).active_start_date := '';
6514         p_org_assignments_tbl(1).active_end_date := '';
6515         p_org_assignments_tbl(1).context := '';
6516         p_org_assignments_tbl(1).attribute1 := '';
6517         p_org_assignments_tbl(1).attribute2 := '';
6518         p_org_assignments_tbl(1).attribute3 := '';
6519         p_org_assignments_tbl(1).attribute4 := '';
6520         p_org_assignments_tbl(1).attribute5 := '';
6521         p_org_assignments_tbl(1).attribute6 := '';
6522         p_org_assignments_tbl(1).attribute7 := '';
6523         p_org_assignments_tbl(1).attribute8 := '';
6524         p_org_assignments_tbl(1).attribute9 := '';
6525         p_org_assignments_tbl(1).attribute10 := '';
6526         p_org_assignments_tbl(1).attribute11 := '';
6527         p_org_assignments_tbl(1).attribute12 := '';
6528         p_org_assignments_tbl(1).attribute13 := '';
6529         p_org_assignments_tbl(1).attribute14 := '';
6530         p_org_assignments_tbl(1).attribute15 := '';
6531         p_org_assignments_tbl(1).object_version_number := NULL;
6532 
6533         p_txn_rec.transaction_id := NULL;
6534         p_txn_rec.transaction_date := SYSDATE; --TO_DATE('');
6535         p_txn_rec.source_transaction_date := SYSDATE; --TO_DATE('');
6536         p_txn_rec.transaction_type_id := 1; --NULL;
6537         p_txn_rec.txn_sub_type_id := NULL;
6538         p_txn_rec.source_group_ref_id := NULL;
6539         p_txn_rec.source_group_ref := '';
6540         p_txn_rec.source_header_ref_id := NULL;
6541         p_txn_rec.source_header_ref := '';
6542         p_txn_rec.source_line_ref_id := NULL;
6543         p_txn_rec.source_line_ref := '';
6544         p_txn_rec.source_dist_ref_id1 := NULL;
6545         p_txn_rec.source_dist_ref_id2 := NULL;
6546         p_txn_rec.inv_material_transaction_id := NULL;
6547         p_txn_rec.transaction_quantity := NULL;
6548         p_txn_rec.transaction_uom_code := 'EA';
6549         p_txn_rec.transacted_by := NULL;
6550         p_txn_rec.transaction_status_code := '';
6551         p_txn_rec.transaction_action_code := '';
6552         p_txn_rec.message_id := NULL;
6553         p_txn_rec.context := '';
6554         p_txn_rec.attribute1 := '';
6555         p_txn_rec.attribute2 := '';
6556         p_txn_rec.attribute3 := '';
6557         p_txn_rec.attribute4 := '';
6558         p_txn_rec.attribute5 := '';
6559         p_txn_rec.attribute6 := '';
6560         p_txn_rec.attribute7 := '';
6561         p_txn_rec.attribute8 := '';
6562         p_txn_rec.attribute9 := '';
6563         p_txn_rec.attribute10 := '';
6564         p_txn_rec.attribute11 := '';
6565         p_txn_rec.attribute12 := '';
6566         p_txn_rec.attribute13 := '';
6567         p_txn_rec.attribute14 := '';
6568         p_txn_rec.attribute15 := '';
6569         p_txn_rec.object_version_number := NULL;
6570 
6571         -- Now call the stored program
6572         csi_item_instance_pub.create_item_instance(
6573                                                    1.0,
6574                                                    'F',
6575                                                    'F',
6576                                                    1,
6577                                                    p_instance_rec,
6578                                                    p_ext_attrib_values_tbl,
6579                                                    p_party_tbl,
6580                                                    p_account_tbl,
6581                                                    p_pricing_attrib_tbl,
6582                                                    p_org_assignments_tbl,
6583                                                    p_asset_assignment_tbl,
6584                                                    p_txn_rec,
6585                                                    x_return_status,
6586                                                    x_msg_count,
6587                                                    x_msg_data);
6588 
6589         -- Output the results
6590 
6591 
6592         IF x_msg_count > 0
6593             THEN
6594             FOR j IN 1 .. x_msg_count LOOP
6595                 fnd_msg_pub.get
6596                 (j
6597                  , FND_API.G_FALSE
6598                  , x_msg_data
6599                  , t_msg_dummy
6600                  );
6601                 t_output := ('Msg'
6602                              || To_Char
6603                              (j
6604                               )
6605                              || ': '
6606                              || x_msg_data
6607                              );
6608                 --  dbms_output.put_line
6609                 --  ( SubStr
6610                 --    ( t_output
6611                 --    , 1
6612                 --    , 255
6613                 --    )
6614                 --   );
6615             END LOOP;
6616         END IF;
6617 
6618         --  dbms_output.put_line('x_return_status = '||x_return_status);
6619         -- dbms_output.put_line('x_msg_count = '||TO_CHAR(x_msg_count));
6620         -- dbms_output.put_line('x_msg_data = '||x_msg_data);
6621         --- dbms_output.put_line('instance_id = '||p_instance_rec.instance_id);
6622 
6623         /* UPDATE csi_item_instances
6624         SET owner_party_source_table = 'OKC_K_ITEMS_B',
6625         security_group_id = p_cle_id
6626         WHERE instance_id = p_instance_rec.instance_id;
6627         */
6628 
6629         x_instance_id := p_instance_rec.instance_id;
6630 
6631         --  --------errorout(' resultant instance id is '||px_instance_id);
6632 
6633     EXCEPTION
6634         WHEN G_ERROR THEN
6635             x_return_status := G_RET_STS_ERROR;
6636             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKS,
6637                                 p_msg_name => 'OKS_NULL_CUSTACCT');
6638     END;
6639 
6640 
6641     PROCEDURE DELETE_CII_FOR_SUBSCRIPTION
6642     (p_api_version   IN NUMBER,
6643      p_init_msg_list IN VARCHAR2,
6644      x_return_status OUT NOCOPY VARCHAR2,
6645      x_msg_count     OUT NOCOPY NUMBER,
6646      x_msg_data      OUT NOCOPY VARCHAR2,
6647      p_instance_id   IN NUMBER
6648      )
6649     IS
6650     BEGIN
6651 
6652         NULL;
6653     END;
6654 
6655 
6656     PROCEDURE line_contact_name_addr(
6657                                      p_object_code       IN  VARCHAR2,
6658                                      p_id1               IN  VARCHAR2,
6659                                      p_id2               IN  VARCHAR2,
6660                                      x_name              OUT NOCOPY VARCHAR2,
6661                                      x_addr              OUT NOCOPY okx_cust_sites_v.description%TYPE)
6662     IS
6663     --l_name              VARCHAR2(255);
6664     l_from_table        VARCHAR2(200);
6665     l_where_clause      VARCHAR2(2000);
6666     l_sql_stmt          VARCHAR2(1000);
6667     l_not_found         BOOLEAN;
6668     l_cust_acct_site_id NUMBER;
6669     -- l_addr              okx_cust_sites_v.description%type;
6670 
6671     CURSOR jtfv_csr IS
6672         SELECT FROM_TABLE, WHERE_CLAUSE
6673         FROM JTF_OBJECTS_B
6674         WHERE OBJECT_CODE = p_object_code;
6675     TYPE SOURCE_CSR IS REF CURSOR;
6676     sql_csr SOURCE_CSR;
6677 
6678     CURSOR get_address_csr (p_cust_acct_site_id IN NUMBER) IS
6679         SELECT description
6680         FROM   okx_cust_sites_v
6681         WHERE  id1 = p_cust_acct_site_id;
6682     BEGIN
6683         OPEN jtfv_csr;
6684         FETCH jtfv_csr INTO l_from_table, l_where_clause;
6685         l_not_found := jtfv_csr%NOTFOUND;
6686         CLOSE jtfv_csr;
6687 
6688 
6689         l_sql_stmt := 'SELECT name, cust_acct_site_id FROM ' || l_from_table ||
6690         ' WHERE ID1 = :id_1 AND ID2 = :id2';
6691 
6692         IF (l_where_clause IS NOT NULL) THEN
6693             l_sql_stmt := l_sql_stmt || ' AND ' || l_where_clause;
6694         END IF;
6695 
6696 
6697         OPEN sql_csr FOR l_sql_stmt USING p_id1, p_id2;
6698         FETCH sql_csr INTO x_name, l_cust_acct_site_id;
6699         l_not_found := sql_csr%NOTFOUND;
6700         CLOSE sql_csr;
6701 
6702         OPEN   get_address_csr(l_cust_acct_site_id);
6703         FETCH  get_address_csr INTO x_addr;
6704         CLOSE  get_address_csr;
6705 
6706     EXCEPTION
6707         WHEN NO_DATA_FOUND THEN
6708             IF (jtfv_csr%ISOPEN) THEN
6709                 CLOSE jtfv_csr;
6710             END IF;
6711             IF (sql_csr%ISOPEN) THEN
6712                 CLOSE sql_csr;
6713             END IF;
6714     END line_contact_name_addr;
6715 
6716 
6717     PROCEDURE select_renewal_info
6718     (p_chr_id IN NUMBER,
6719      x_operation_lines_tbl OUT NOCOPY opn_lines_tbl
6720      )
6721     IS
6722     --select operation id for renewal of 'SERVICE'
6723     CURSOR class_operation_cur IS
6724         SELECT id
6725         FROM   okc_class_operations
6726         WHERE  opn_code = 'RENEWAL'
6727         AND    cls_code = 'SERVICE';
6728 
6729     --select operation instance id for renewal
6730     CURSOR operation_instance_cur (p_cop_id IN NUMBER)
6731         IS
6732         SELECT id
6733         FROM   okc_operation_instances
6734         WHERE  target_chr_id = p_chr_id
6735         AND    cop_id = p_cop_id;
6736 
6737     CURSOR operation_lines_cur (p_oie_id NUMBER) IS
6738         SELECT creation_date, subject_chr_id, object_chr_id,
6739                subject_cle_id, object_cle_id
6740         FROM okc_operation_lines
6741         WHERE  oie_id = p_oie_id;
6742 
6743     l_opn_id NUMBER;
6744     l_oie_id NUMBER;
6745     l_ctr NUMBER;
6746     BEGIN
6747         OPEN class_operation_cur;
6748         FETCH class_operation_cur INTO l_opn_id;
6749         CLOSE class_operation_cur;
6750 
6751         OPEN operation_instance_cur (l_opn_id);
6752         FETCH  operation_instance_cur INTO l_oie_id;
6753         CLOSE  operation_instance_cur;
6754 
6755         IF x_operation_lines_tbl.COUNT > 0
6756             THEN
6757             x_operation_lines_tbl.DELETE;
6758         END IF;
6759 
6760         --populating table
6761         l_ctr := 1;
6762         FOR operation_lines_rec IN operation_lines_cur (l_oie_id)
6763             LOOP
6764             x_operation_lines_tbl(l_ctr).creation_date := operation_lines_rec.creation_date;
6765             x_operation_lines_tbl(l_ctr).object_chr_id := operation_lines_rec.object_chr_id;
6766             x_operation_lines_tbl(l_ctr).object_cle_id := operation_lines_rec.object_cle_id;
6767             l_ctr := l_ctr + 1;
6768         END LOOP;
6769 
6770     END select_renewal_info;
6771 
6772 
6773     PROCEDURE update_renewal_info
6774     (p_operation_lines_tbl IN opn_lines_tbl,
6775      x_return_status       OUT NOCOPY  VARCHAR2,
6776      x_msg_count           OUT NOCOPY  NUMBER,
6777      x_msg_data            OUT NOCOPY  VARCHAR2
6778      )
6779     IS
6780     BEGIN
6781         IF p_operation_lines_tbl.COUNT > 0
6782             THEN
6783             FOR i IN p_operation_lines_tbl.FIRST..p_operation_lines_tbl.LAST
6784                 LOOP
6785                 IF p_operation_lines_tbl(i).object_cle_id IS NULL
6786                     THEN
6787                     UPDATE okc_k_headers_b
6788                     SET    date_renewed = TRUNC(p_operation_lines_tbl(i).creation_date)
6789                     WHERE  id = p_operation_lines_tbl(i).object_chr_id;
6790                 ELSE
6791                     UPDATE okc_k_lines_b
6792                     SET    date_renewed = TRUNC(p_operation_lines_tbl(i).creation_date)
6793                     WHERE  id = p_operation_lines_tbl(i).object_cle_id;
6794                 END IF;
6795             END LOOP;
6796         END IF; -- IF p_operation_lines_tbl.COUNT > 0
6797         x_return_status := 'S';
6798 
6799     EXCEPTION
6800         WHEN OTHERS THEN
6801             x_return_status := G_UNEXPECTED_ERROR;
6802             OKC_API.set_message(G_APP_NAME_OKS,
6803                                 'OKS_UNEXP_ERROR',
6804                                 'SQLcode',
6805                                 SQLCODE,
6806                                 'SQLerrm',
6807                                 SQLERRM);
6808 
6809     END update_renewal_info;
6810 
6811     PROCEDURE CheckDuplicatePriceAdj(p_api_version   IN  NUMBER
6812                                      , p_init_msg_list IN  VARCHAR2
6813                                      , p_pradj_rec     IN  price_adj_rec
6814                                      , x_return_status OUT NOCOPY VARCHAR2
6815                                      , x_msg_count     OUT NOCOPY NUMBER
6816                                      , x_msg_data      OUT NOCOPY VARCHAR2)
6817     IS
6818 
6819     CURSOR line_cur(c_cle_id NUMBER) IS
6820         SELECT cle_id, line_number
6821         FROM   okc_k_lines_b
6822         WHERE  id = c_cle_id;
6823 
6824     CURSOR price_adj_cur(c_list_line_id NUMBER, c_cle_id NUMBER) IS
6825         SELECT 'x'
6826         FROM   okc_price_adjustments
6827         WHERE  list_line_id = c_list_line_id
6828         AND    cle_id = c_cle_id;
6829 
6830     CURSOR price_adj_cur_hdr(c_list_line_id NUMBER, c_chr_id NUMBER) IS
6831         SELECT 'x'
6832         FROM   okc_price_adjustments
6833         WHERE  list_line_id = c_list_line_id
6834         AND    chr_id = c_chr_id;
6835 
6836     CURSOR sub_line_cur(c_cle_id NUMBER) IS
6837         SELECT id, line_number
6838         FROM   okc_k_lines_b
6839         WHERE  cle_id = c_cle_id
6840         AND    lse_id IN(9, 25);
6841 
6842     l_line_number      VARCHAR2(301) := NULL;
6843     l_cle_id           NUMBER := NULL;
6844     l_pradj_exists     VARCHAR2(1) := NULL;
6845     l_subline_id       NUMBER := NULL;
6846 
6847     BEGIN
6848 
6849         x_return_status := G_RET_STS_SUCCESS;
6850         fnd_msg_pub.initialize;
6851 
6852         IF p_pradj_rec.chr_id IS NOT NULL THEN
6853             OPEN  price_adj_cur_hdr(p_pradj_rec.list_line_id, p_pradj_rec.chr_id);
6854             FETCH price_adj_cur_hdr INTO l_pradj_exists;
6855             CLOSE price_adj_cur_hdr;
6856             IF l_pradj_exists IS NOT NULL THEN
6857                 RAISE G_DUPLICATE_RECORD;
6858             ELSE
6859                 RETURN;
6860             END IF;
6861         END IF;
6862 
6863         OPEN  price_adj_cur(p_pradj_rec.list_line_id, p_pradj_rec.cle_id);
6864         FETCH price_adj_cur INTO l_pradj_exists;
6865         CLOSE price_adj_cur;
6866         IF l_pradj_exists IS NOT NULL THEN
6867             RAISE G_DUPLICATE_RECORD;
6868         END IF;
6869 
6870         OPEN  line_cur(p_pradj_rec.cle_id);
6871         FETCH line_cur INTO l_cle_id, l_line_number;
6872         CLOSE line_cur;
6873 
6874         IF l_cle_id IS NULL THEN --TopLine/Subline
6875             --GET SUBLINES
6876             OPEN sub_line_cur(p_pradj_rec.cle_id);
6877             LOOP
6878                 l_line_number := NULL;
6879                 FETCH sub_line_cur INTO l_subline_id, l_line_number;
6880                 EXIT WHEN sub_line_cur%NOTFOUND;
6881 
6882                 OPEN  price_adj_cur(p_pradj_rec.list_line_id, l_subline_id);
6883                 FETCH price_adj_cur INTO l_pradj_exists;
6884                 CLOSE price_adj_cur;
6885                 IF l_pradj_exists IS NOT NULL THEN
6886                     RAISE G_DUPLICATE_RECORD;
6887                 END IF;
6888                 l_subline_id := NULL;
6889             END LOOP; -- GET SUBLINES
6890         ELSE --TopLine/Subline
6891             OPEN  price_adj_cur(p_pradj_rec.list_line_id, l_cle_id);
6892             FETCH price_adj_cur INTO l_pradj_exists;
6893             CLOSE price_adj_cur;
6894             IF l_pradj_exists IS NOT NULL THEN
6895                 RAISE G_DUPLICATE_RECORD;
6896             END IF;
6897         END IF; --TopLine/Subline
6898     EXCEPTION
6899         WHEN G_DUPLICATE_RECORD THEN
6900             x_return_status := G_RET_STS_ERROR;
6901             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKS,
6902                                 p_msg_name => 'OKS_DUPLICATE_MODIFIER');
6903         WHEN OTHERS THEN
6904             x_return_status := G_UNEXPECTED_ERROR;
6905             OKC_API.set_message(G_APP_NAME_OKS,
6906                                 'OKS_UNEXP_ERROR',
6907                                 'SQLcode',
6908                                 SQLCODE,
6909                                 'SQLerrm',
6910                                 SQLERRM);
6911     END CheckDuplicatePriceAdj;
6912 
6913 
6914     PROCEDURE Update_Line_Amount
6915     (p_line_id       IN   NUMBER,
6916      p_new_service_amount IN NUMBER,
6917      x_return_status OUT  NOCOPY VARCHAR2,
6918      x_msg_count     OUT  NOCOPY NUMBER,
6919      x_msg_data      OUT  NOCOPY VARCHAR2)
6920     IS
6921     l_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
6922     x_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
6923     l_api_version      NUMBER := 1.0;
6924     l_init_msg_list   VARCHAR2(2000) := OKC_API.G_FALSE;
6925     l_return_status   VARCHAR2(1);
6926     l_msg_count       NUMBER;
6927     l_msg_data        VARCHAR2(2000);
6928     l_price_negotiated  NUMBER;
6929     l_klnv_tbl_in               oks_contract_line_pub.klnv_tbl_type;
6930     l_klnv_tbl_out              oks_contract_line_pub.klnv_tbl_type;
6931 
6932 
6933     CURSOR l_csr_total_line_amount(p_line_id IN NUMBER)
6934         IS
6935         SELECT nvl(SUM(nvl(price_negotiated, 0)), 0)
6936         FROM   okc_k_lines_b
6937         WHERE  cle_id = p_line_id
6938         AND    date_cancelled IS NULL; -- line Level Cancellation
6939 
6940     CURSOR toplinetax_cur(p_cle_id IN NUMBER) IS
6941         SELECT SUM(nvl(tax_amount, 0)) amount
6942         FROM okc_k_lines_b cle, oks_k_lines_b kln
6943         WHERE cle.cle_id = p_cle_id
6944         AND   cle.id = kln.cle_id
6945         AND   cle.lse_id IN (7, 8, 9, 10, 11, 13, 35, 25, 46)
6946         AND   cle.date_cancelled IS NULL;
6947 
6948     l_tax_amount       toplinetax_cur%ROWTYPE;
6949 
6950     CURSOR Get_oks_Lines_details(p_cle_id IN NUMBER) IS
6951         SELECT id, object_version_number, dnz_chr_id
6952         FROM oks_k_lines_b
6953         WHERE cle_id = p_cle_id ;
6954 
6955     l_get_oks_details  Get_oks_Lines_details%ROWTYPE;
6956 
6957     BEGIN
6958 
6959         l_clev_rec.id := p_Line_Id;
6960         OPEN l_csr_total_line_amount(p_line_id);
6961         FETCH l_csr_total_line_amount INTO l_price_negotiated;
6962         CLOSE l_csr_total_line_amount;
6963 
6964 
6965 
6966         l_clev_rec.price_negotiated := l_price_negotiated ;
6967 
6968         OKC_CONTRACT_PUB.Update_Contract_Line
6969         (
6970          p_api_version => l_api_version,
6971          p_init_msg_lISt => l_init_msg_lISt,
6972          x_return_status => x_return_status,
6973          x_msg_count => x_msg_count,
6974          x_msg_data => x_msg_data,
6975          p_restricted_update => 'F',
6976          p_clev_rec => l_clev_rec,
6977          x_clev_rec => x_clev_rec
6978          );
6979 
6980         IF NVL(x_return_status, '!') <> OKC_API.G_RET_STS_SUCCESS THEN
6981             RAISE G_ERROR;
6982         END IF;
6983         -- Update Lines Level Tax Amount --
6984         OPEN Get_oks_Lines_details(p_line_id);
6985         FETCH Get_oks_Lines_details INTO l_get_oks_details ;
6986         CLOSE Get_oks_Lines_details;
6987 
6988         OPEN toplinetax_cur(p_line_id);
6989         FETCH toplinetax_cur INTO l_tax_amount;
6990         CLOSE toplinetax_cur;
6991 
6992         l_klnv_tbl_in(1).id := l_get_oks_details.id ;
6993         l_klnv_tbl_in(1).object_version_number := l_get_oks_details.object_version_number;
6994         l_klnv_tbl_in(1).dnz_chr_id := l_get_oks_details.dnz_chr_id;
6995         l_klnv_tbl_in(1).cle_id := p_line_id;
6996         l_klnv_tbl_in(1).tax_amount := l_tax_amount.amount;
6997 
6998 
6999         oks_contract_line_pub.update_line
7000         (
7001          p_api_version => l_api_version,
7002          p_init_msg_list => l_init_msg_list,
7003          x_return_status => l_return_status,
7004          x_msg_count => l_msg_count,
7005          x_msg_data => l_msg_data,
7006          p_klnv_tbl => l_klnv_tbl_in,
7007          x_klnv_tbl => l_klnv_tbl_out,
7008          p_validate_yn => 'N'
7009          );
7010 
7011         x_return_status := l_return_status;
7012         IF NVL(l_return_status, '!') <> OKC_API.G_RET_STS_SUCCESS THEN
7013             RAISE G_ERROR;
7014         END IF;
7015 
7016     EXCEPTION
7017         WHEN G_ERROR THEN
7018             NULL;
7019     END Update_Line_Amount;
7020 
7021     PROCEDURE Update_Coverage_Levels
7022     (p_clvl_rec      IN   Clvl_Rec_Type,
7023      x_return_status OUT  NOCOPY VARCHAR2,
7024      x_msg_count     OUT  NOCOPY NUMBER,
7025      x_msg_data      OUT  NOCOPY VARCHAR2)
7026     IS
7027 
7028     l_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
7029     x_clev_rec         OKC_CONTRACT_PUB.clev_rec_type;
7030     l_api_version      NUMBER := 1.0;
7031     l_init_msg_lISt    VARCHAR2(1) := 'T';
7032 
7033     BEGIN
7034 
7035         ----------errorout_ad('cp line id = ' || to_char(p_clvl_rec.Coverage_Level_Line_Id));
7036         ----------errorout_ad('cp amount = ' || to_char(p_clvl_rec.price_negotiated));
7037         l_clev_rec.id := p_clvl_rec.Coverage_Level_Line_Id;
7038         l_clev_rec.price_unit := p_clvl_rec.price_unit;
7039         l_clev_rec.price_unit_percent := p_clvl_rec.price_unit_percent;
7040         l_clev_rec.price_negotiated := p_clvl_rec.price_negotiated;
7041 
7042         OKC_CONTRACT_PUB.Update_Contract_Line
7043         (
7044          p_api_version => l_api_version,
7045          p_init_msg_lISt => l_init_msg_lISt,
7046          x_return_status => x_return_status,
7047          x_msg_count => x_msg_count,
7048          x_msg_data => x_msg_data,
7049          p_restricted_update => 'F',
7050          p_clev_rec => l_clev_rec,
7051          x_clev_rec => x_clev_rec
7052          );
7053 
7054         ----------errorout_ad('OKC_CONTRACT_PUB.Update_Contract_Line status = ' || x_return_status);
7055 
7056         IF NVL(x_return_status, '!') <> OKC_API.G_RET_STS_SUCCESS THEN
7057             RAISE G_ERROR;
7058         END IF;
7059 
7060     EXCEPTION
7061         WHEN G_ERROR THEN
7062             NULL;
7063     END Update_Coverage_Levels;
7064 
7065     PROCEDURE UPDATE_CONTRACT_AMOUNT(p_header_id IN NUMBER,
7066                                      x_return_status  OUT NOCOPY VARCHAR2) IS
7067     l_api_version     CONSTANT   NUMBER := 1.0;
7068     l_init_msg_list   VARCHAR2(2000) := OKC_API.G_FALSE;
7069     l_return_status   VARCHAR2(1);
7070     l_msg_count       NUMBER;
7071     l_msg_data        VARCHAR2(2000);
7072     l_msg_index_out   NUMBER;
7073     l_chrv_tbl_in     okc_contract_pub.chrv_tbl_type;
7074     l_chrv_tbl_out    okc_contract_pub.chrv_tbl_type;
7075     -- Header Level Tax Amount --
7076     l_khrv_tbl_type_in   oks_contract_hdr_pub.khrv_tbl_type;
7077     l_khrv_tbl_type_out  oks_contract_hdr_pub.khrv_tbl_type;
7078 
7079     -- Header Level Tax Amount --
7080     CURSOR total_amount IS
7081         SELECT nvl(SUM(price_negotiated), 0) SUM
7082         FROM okc_k_lines_b
7083         WHERE dnz_chr_id = p_header_id
7084         AND   cle_id IS NULL
7085         AND   date_cancelled IS NULL; -- line Level Cancellation
7086     --Commented URP
7087     --WHERE dnz_chr_id = p_header_id;
7088 
7089     -- Header Tax Total
7090     CURSOR hdrtax_cur IS
7091         SELECT SUM(kln.tax_amount)  amount
7092         FROM okc_k_lines_b cle, oks_k_lines_b kln
7093         WHERE cle.dnz_chr_id = p_header_id
7094         AND   cle.id = kln.cle_id
7095         AND   cle.lse_id IN (7, 8, 9, 10, 11, 13, 35, 25, 46)
7096         AND   cle.date_cancelled IS NULL;
7097 
7098     l_total_tax hdrtax_cur%ROWTYPE;
7099 
7100     CURSOR Get_Header_details IS
7101         SELECT id, object_version_number
7102         FROM OKS_K_HEADERS_B
7103         WHERE chr_id = p_header_id ;
7104 
7105     l_get_hdr_details get_header_details%ROWTYPE;
7106 
7107     BEGIN
7108         x_return_status := OKC_API.G_RET_STS_SUCCESS;
7109         IF p_header_id IS NOT NULL THEN
7110             l_chrv_tbl_in.DELETE;
7111             FOR cur_total_amount IN total_amount
7112                 LOOP
7113                 l_chrv_tbl_in(1).id := p_header_id;
7114                 l_chrv_tbl_in(1).estimated_amount := cur_total_amount.SUM;
7115                 okc_contract_pub.update_contract_header (
7116                                                          p_api_version => l_api_version,
7117                                                          p_init_msg_list => l_init_msg_list,
7118                                                          x_return_status => l_return_status,
7119                                                          x_msg_count => l_msg_count,
7120                                                          x_msg_data => l_msg_data,
7121                                                          p_chrv_tbl => l_chrv_tbl_in,
7122                                                          x_chrv_tbl => l_chrv_tbl_out
7123                                                          );
7124                 x_return_status := l_return_status;
7125                 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
7126                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7127                 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7128                     RAISE OKC_API.G_EXCEPTION_ERROR;
7129                 END IF;
7130             END LOOP;
7131 
7132             -- Updating Header level tax Amount --
7133             OPEN get_header_details;
7134             FETCH get_header_details INTO l_get_hdr_details;
7135             CLOSE get_header_details;
7136 
7137             OPEN hdrtax_cur;
7138             FETCH hdrtax_cur INTO l_total_tax;
7139             CLOSE hdrtax_cur;
7140 
7141             l_khrv_tbl_type_in(1).id := l_get_hdr_details.id;
7142             l_khrv_tbl_type_in(1).chr_id := p_header_id;
7143             l_khrv_tbl_type_in(1).object_version_number := l_get_hdr_details.object_version_number;
7144             l_khrv_tbl_type_in(1).tax_amount := l_total_tax.amount;
7145 
7146             oks_contract_hdr_pub.update_header(
7147                                                p_api_version => l_api_version,
7148                                                p_init_msg_list => l_init_msg_list,
7149                                                x_return_status => l_return_status,
7150                                                x_msg_count => l_msg_count,
7151                                                x_msg_data => l_msg_data,
7152                                                p_khrv_tbl => l_khrv_tbl_type_in,
7153                                                x_khrv_tbl => l_khrv_tbl_type_out,
7154                                                p_validate_yn => 'N');
7155 
7156             x_return_status := l_return_status;
7157             IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
7158                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7159             ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7160                 RAISE OKC_API.G_EXCEPTION_ERROR;
7161             END IF;
7162             -- Updating Header level tax Amount --
7163 
7164         END IF;
7165     END UPDATE_CONTRACT_AMOUNT;
7166 
7167 
7168 
7169     PROCEDURE GetIgnorableAmount(p_contract_line_id IN NUMBER,
7170                                  x_prorated_amount OUT NOCOPY NUMBER,
7171                                  x_rec_count OUT NOCOPY NUMBER)
7172     IS
7173     CURSOR l_subline_csr IS
7174         SELECT NVL(lines.price_negotiated, 0) price_negotiated,
7175                lines.start_date,
7176                lines.end_date,
7177                lines.date_terminated,
7178                lines.price_unit,
7179                lines.price_unit_percent,
7180                lines.id
7181         FROM   okc_k_lines_b lines
7182         WHERE  lines.cle_id = p_contract_line_id
7183         AND    lines.lse_id IN(7, 8, 9, 10, 11, 18, 25, 35);
7184     l_subline_rec          l_subline_csr%ROWTYPE;
7185     l_prorated_amount      NUMBER := 0;
7186     l_amount               NUMBER := 0;
7187     l_rec_count            NUMBER := 0;
7188     BEGIN
7189         OPEN  l_subline_csr;
7190         LOOP
7191             FETCH l_subline_csr INTO l_subline_rec;
7192             EXIT WHEN l_subline_csr%NOTFOUND;
7193             IF l_subline_rec.date_terminated IS NOT NULL THEN
7194                 IF l_subline_rec.date_terminated <= trunc(SYSDATE) THEN
7195                     l_amount := l_subline_rec.price_negotiated;
7196                 END IF;
7197                 l_rec_count := l_rec_count + 1;
7198                 --Commented to fix Bug#2450212 , 09, Aug 2002  , Sudam
7199                 --ELSIF l_subline_rec.end_date < trunc(sysdate) THEN
7200                 --l_amount := l_subline_rec.price_negotiated;
7201                 --l_rec_count := l_rec_count + 1;
7202             END IF;
7203             l_prorated_amount := l_prorated_amount + l_amount;
7204             l_amount := 0;
7205         END LOOP;
7206         CLOSE l_subline_csr;
7207         x_prorated_amount := l_prorated_amount;
7208         x_rec_count := l_rec_count;
7209     END GetIgnorableAmount;
7210 
7211     /***************/
7212 
7213     PROCEDURE Cascade_Service_Price(
7214                                     p_api_version        IN  NUMBER,
7215                                     p_init_msg_lISt      IN  VARCHAR2,
7216                                     p_contract_line_id   IN  NUMBER,
7217                                     p_new_service_price  IN  NUMBER,
7218                                     x_return_status      OUT NOCOPY VARCHAR2,
7219                                     x_msg_count          OUT NOCOPY NUMBER,
7220                                     x_msg_data           OUT NOCOPY VARCHAR2
7221                                     )
7222     IS
7223 
7224     lc_jtot_obj_code      VARCHAR2(30) := 'OKX_CUSTPROD';
7225 
7226     CURSOR  l_svc_csr IS
7227         SELECT  nvl(SUM(NVL(price_negotiated, 0)), 0) service_amount
7228              , COUNT(price_negotiated)
7229         FROM    okc_k_lines_b lines
7230         WHERE   lines.cle_id = p_contract_line_id
7231         AND     lines.lse_id IN(7, 8, 9, 10, 11, 18, 25, 35)
7232         AND     lines.date_cancelled IS NULL; -- line Level Cancellation
7233 
7234 
7235 
7236     --bug # 2215282 -- exclude terminated/expired/cancelled clvl lines from cascade service pricing
7237     --Removed Status Check but included Date_Terminated for termination
7238     --and end_date for the expiration. This is for same Bug 2215282.
7239 
7240     -- Bug 5228352 --
7241     CURSOR  l_clvl_csr IS
7242         SELECT  okc.id,
7243                 price_negotiated,
7244                  price_unit,
7245                 price_unit_percent,
7246                 lse_id,
7247                 okc.dnz_chr_id,
7248                 currency_code,
7249                 oks.id oks_id,
7250                 oks.object_version_number
7251         FROM    okc_k_lines_b  okc, oks_k_lines_b oks
7252         WHERE   okc.Cle_id = p_contract_line_id
7253         AND     OKS.cle_id = okc.id
7254         AND     (okc.date_terminated IS NULL OR okc.date_terminated > TRUNC(SYSDATE))
7255         AND     lse_id NOT IN(2, 15, 20)
7256         AND     okc.date_cancelled IS NULL; -- line Level Cancellation
7257 
7258       /*Bug#13084968*/
7259       CURSOR  l_clvl_diff_amt_csr IS
7260     	SELECT  okc.id,
7261                 price_negotiated,
7262                 price_unit,
7263                 price_unit_percent,
7264                 lse_id,
7265                 okc.dnz_chr_id,
7266                 currency_code,
7267                 oks.id oks_id,
7268                 oks.object_version_number
7269         FROM    okc_k_lines_b  okc, oks_k_lines_b oks
7270         WHERE   okc.Cle_id = p_contract_line_id
7271         AND     OKS.cle_id = okc.id
7272         AND     (okc.date_terminated IS NULL OR okc.date_terminated > TRUNC(SYSDATE))
7273         AND     lse_id NOT IN(2, 15, 20)
7274         AND Nvl(price_negotiated, 0) <> 0
7275        ORDER BY To_Number(line_number) DESC;
7276 
7277        l_clvl_diff_amt_rec l_clvl_diff_amt_csr%ROWTYPE;
7278        /*Bug#13084968*/
7279 
7280    CURSOR get_tax_details(p_cle_id IN NUMBER) IS
7281         SELECT id, object_version_number
7282         FROM   oks_k_lines_b
7283         WHERE  cle_id = p_cle_id;
7284 
7285    get_tax_rec		get_tax_details%rowtype;
7286    -- Bug 5228352 --
7287 
7288     CURSOR l_aggr_csr(p_chr_id IN NUMBER) IS
7289         SELECT Isa_Agreement_Id
7290         FROM   OKC_GOVERNANCES_V
7291         WHERE  dnz_chr_id = p_chr_id
7292         AND    cle_id IS NULL;
7293 
7294 
7295     l_service_amount      NUMBER;
7296     l_clvl_price          NUMBER;
7297     l_current_percent     NUMBER := 0;
7298     l_new_amount          NUMBER := 0;
7299     l_clvl_rec            Clvl_Rec_type;
7300     l_count               NUMBER := 1;
7301     l_curr_rec            NUMBER := 0;
7302     l_sum_amt             NUMBER := 0;
7303     l_diff_amt            NUMBER := 0;
7304     l_old_id              NUMBER;
7305     l_old_up              NUMBER;
7306     l_old_upp             NUMBER;
7307     --  l_contract_line_rec   OKS_QP_INT_PVT.G_LINE_REC_TYPE;
7308     -- lx_contract_cp_tbl     OKS_QP_INT_PVT.G_SLINE_TBL_TYPE;
7309     l_currency_code       VARCHAR2(15);
7310     i                     NUMBER := 1;
7311     l_pdl_adjusted_amount NUMBER;
7312     l_covlvl_qty   NUMBER;
7313     l_tlvl_priced_qty  NUMBER;
7314     l_aggr_id         NUMBER;
7315     cp_price  NUMBER ;
7316     l_index NUMBER ;
7317 
7318     l_terminated_service_amount NUMBER;
7319     l_terminated_count          NUMBER;
7320     l_percent_terminated        NUMBER;
7321     l_active_service_amount     NUMBER;
7322     l_active_line_count         NUMBER;
7323     l_new_cascade_service_price NUMBER;
7324     l_detail_rec    OKS_QP_PKG.input_details;
7325     l_api_Version     NUMBER := 1;
7326     l_init_msg_list   VARCHAR2(2000) := OKC_API.G_FALSE;
7327     l_return_status   VARCHAR2(1);
7328     l_msg_count       NUMBER;
7329     l_msg_data        VARCHAR2(2000);
7330     l_price_details         OKS_QP_PKG.price_details;
7331     l_modifier_details      QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
7332     l_price_break_details   OKS_QP_PKG.G_PRICE_BREAK_TBL_TYPE;
7333     l_old_lse_id     NUMBER;
7334     l_old_currency_code  VARCHAR2(4);
7335     lx_klnv_tbl OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
7336     l_validate_yn VARCHAR2(1);
7337     l_curr_code    VARCHAR2(30);
7338 
7339 
7340     --    l_rule_rec               OKC_RUL_PVT.rulv_rec_type;
7341     --    l_rule_tbl               OKC_RULE_PUB.rulv_tbl_type;
7342 
7343     l_klnv_tbl   OKS_CONTRACT_LINE_PUB.klnv_tbl_type;
7344     /* for tax calculation */
7345 
7346     G_RAIL_REC             OKS_TAX_UTIL_PVT.ra_rec_type;
7347 
7348     PROCEDURE Get_Currency_Code(p_chr_id    IN  NUMBER
7349                                 , x_curr_code OUT NOCOPY VARCHAR2) IS
7350     CURSOR l_hdr_csr IS
7351         SELECT currency_code
7352        FROM   okc_k_headers_b
7353         WHERE  id = p_chr_id;
7354     BEGIN
7355         x_curr_code := NULL;
7356         OPEN  l_hdr_csr;
7357         FETCH l_hdr_csr INTO x_curr_code;
7358         CLOSE l_hdr_csr;
7359     END Get_Currency_Code;
7360 
7361     FUNCTION Get_Header_Id RETURN NUMBER IS
7362     CURSOR l_hdr_csr IS
7363         SELECT dnz_chr_id
7364         FROM   okc_k_lines_b
7365         WHERE  id = p_contract_line_id;
7366     l_header_id     OKC_K_HEADERS_B.ID%TYPE;
7367     BEGIN
7368         OPEN  l_hdr_csr;
7369         FETCH l_hdr_csr INTO l_header_id;
7370         CLOSE l_hdr_csr;
7371         RETURN(l_header_id);
7372     END Get_Header_Id;
7373 
7374     BEGIN
7375 
7376         OPEN  l_svc_csr;
7377         FETCH l_svc_csr INTO l_service_amount, l_count;
7378         CLOSE l_svc_csr;
7379 
7380         ----------errorout_ad(' l_service_amount '||l_service_amount );
7381         ----------errorout_ad(' l_count '||l_count );
7382 
7383         --bug # 2215282 -- exclude terminated/expired/cancelled clvl lines from cascade service pricing
7384 
7385         GetIgnorableAmount(p_contract_line_id => p_contract_line_id,
7386                            x_prorated_amount => l_terminated_service_amount,
7387                            x_rec_count => l_terminated_count);
7388 
7389         IF l_count = l_terminated_count THEN
7390             RETURN;
7391         END IF;
7392 
7393         ----------errorout_ad(' l_terminated_service_amount '||l_terminated_service_amount );
7394         ----------errorout_ad(' l_terminated_count '||l_terminated_count );
7395 
7396         /** Find total reprice amount to be adjusted #2215282 **/
7397         IF NVL(l_service_amount, 0) <> 0 THEN
7398             IF NVL(l_terminated_service_amount, 0) <> 0 THEN
7399                 l_active_service_amount := NVL(l_service_amount, 0) - NVL(l_terminated_service_amount, 0);
7400                 l_active_line_count := NVL(l_count, 0) - NVL(l_terminated_count, 0);
7401                 l_new_cascade_service_price := p_new_service_price - NVL(l_terminated_service_amount, 0);
7402             ELSE
7403                 l_active_service_amount := l_service_amount;
7404                 l_new_cascade_service_price := p_new_service_price;
7405                 l_active_line_count := l_count;
7406             END IF;
7407         END IF;
7408 
7409         ----------errorout_ad(' l_new_cascade_service_price '||l_new_cascade_service_price );
7410         ----------errorout_ad(' l_active_line_count '||l_active_line_count );
7411 
7412 
7413         FOR  clvl_rec IN l_clvl_csr
7414             LOOP
7415 
7416             -- --------errorout_ad (' clvl '||clvl_rec.id);
7417 
7418             --    --------errorout_ad (' clvl  price negotiated '||clvl_rec.price_negotiated);
7419             /** Check for status of the covered level line **/
7420             l_curr_rec := l_curr_rec + 1;
7421 
7422             l_clvl_price := clvl_rec.Price_Negotiated;
7423             Get_Currency_Code(p_chr_id => Get_Header_Id, x_curr_code => l_curr_code);
7424             --bug # 2215282 -- exclude terminated/expired/cancelled clvl lines from cascade service pricing
7425             IF l_service_amount = 0 THEN
7426                 IF NVL(l_active_line_count, 0) <> 0 THEN
7427                     --     l_new_amount := NVL(l_new_cascade_service_price,0) / NVL(l_active_line_count, 1);
7428 
7429                     l_new_amount := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt
7430                     (
7431                      NVL(l_new_cascade_service_price, 0) / NVL(l_active_line_count, 1),
7432                      l_curr_code
7433                      );
7434                 END IF;
7435             ELSE
7436                 IF NVL(l_active_service_amount, 0) <> 0 THEN
7437                     l_current_percent := (NVL(l_clvl_price, 0) * 100) / NVL(l_active_service_amount, 1);
7438                     --      l_new_amount      := ROUND( ((NVL(l_new_cascade_service_price, 0) * l_current_percent)/100), 2);
7439 
7440                     l_new_amount := OKS_EXTWAR_UTIL_PVT.Round_Currency_amt(
7441                                                                            (NVL(l_new_cascade_service_price, 0) * l_current_percent) / 100,
7442                                                                            l_curr_code
7443                                                                            );
7444 
7445                 END IF;
7446 
7447             END IF;
7448             ----------errorout_ad(' l_new_amount '||l_new_amount);
7449             IF l_curr_rec <= l_count THEN
7450 
7451                 ----------errorout_ad(' before updating cov level ');
7452                 l_clvl_rec.coverage_level_line_id := clvl_rec.id;
7453                 l_clvl_rec.price_negotiated := l_new_amount;
7454                 l_clvl_rec.price_unit := clvl_rec.price_unit;
7455                 l_clvl_rec.price_unit_percent := clvl_rec.price_unit_percent;
7456 
7457                 Update_Coverage_Levels
7458                 (p_clvl_rec => l_clvl_rec,
7459                  x_return_status => x_return_status,
7460                  x_msg_count => x_msg_count,
7461                  x_msg_data => x_msg_data);
7462 
7463                 ----------errorout_ad(' after updating coverag level ' ||clvl_rec.lse_id||' '||clvl_rec.id);
7464 
7465                 /* select price_negotiated into cp_price
7466                 from okc_k_lines_b
7467                 where id = clvl_rec.id; */
7468 
7469                 ----------errorout_ad(' price nego after update '||cp_price);
7470 
7471                 IF Nvl(x_return_status, 'S') <> OKC_API.G_RET_STS_SUCCESS
7472                     THEN
7473                     --              --------errorout_ad (' error in updation of coverage level ');
7474                     RAISE G_ERROR;
7475                 END IF;
7476 
7477                 /** Recalculate Tax **/
7478                 --       --------errorout(' before calculating tax '||clvl_rec.lse_id);
7479 		-- Bug 5228352 --
7480                 IF clvl_rec.lse_id  IN (8, 10, 11, 12, 35 )
7481 		OR (
7482 		    clvl_rec.lse_id IN (7, 9, 18, 25)
7483 		    AND
7484 		    NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'NO')
7485 
7486 		THEN
7487 		-- Bug 5228352 --
7488                     --          --------errorout_ad(' before calculating tax ');
7489                     G_RAIL_REC.amount := l_new_amount ;
7490 
7491                     OKS_TAX_UTIL_PVT.Get_Tax (p_api_version => 1.0,
7492                                               p_init_msg_list => OKC_API.G_TRUE,
7493                                               p_chr_id => clvl_rec.dnz_chr_id,
7494                                               p_cle_id => p_contract_line_id,
7495                                               px_rail_rec => G_RAIL_REC,
7496                                               x_msg_count => x_msg_count,
7497                                               x_msg_data => x_msg_data,
7498                                               x_return_status => l_return_status );
7499 
7500 		    -- Bug 5228352 --
7501 		    IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7502 			RAISE OKC_API.G_EXCEPTION_ERROR;
7503 		    ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7504                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7505 		    END IF;
7506 		    -- Bug 5228352 --
7507 
7508                     --         --------errorout_ad(' error in calc tax '||l_return_status );
7509                     -- Create IRT Rule
7510 
7511 		    -- Bug 5228352 --
7512                     l_klnv_tbl(1).id := clvl_rec.oks_id;
7513                     l_klnv_tbl(1).cle_id := clvl_rec.id;
7514 		    l_klnv_tbl(1).object_version_number := clvl_rec.object_version_number;
7515                     l_klnv_tbl(1).dnz_chr_id := get_header_id;
7516                     l_klnv_tbl(1).tax_inclusive_yn := g_rail_rec.amount_includes_tax_flag;
7517 		    -- Bug 5228352 --
7518 
7519 
7520 
7521 
7522 
7523                     IF  g_rail_rec.amount_includes_tax_flag = 'N' THEN
7524                         l_klnv_tbl(1).tax_amount := NVL(g_rail_rec.tax_value, 0);
7525                         --    l_klnv_tbl(1).rule_information6     := g_rail_rec.amount + NVL(g_rail_rec.tax_value,0);
7526                     ELSE
7527                         l_klnv_tbl(1).tax_amount := 0;
7528                         --    l_rule_rec.rule_information6     := g_rail_rec.amount;
7529                     END IF;
7530 
7531                     -- Update IRT rule
7532                     --           --------errorout_ad(' tax amount  ' || g_rail_rec.tax_value);
7533                     --          --------errorout_ad(' amount '||g_rail_rec.amount);
7534 
7535 
7536 
7537                     OKS_CONTRACT_LINE_PUB.update_line(
7538                                                       p_api_version => p_api_version,
7539                                                       p_init_msg_list => p_init_msg_list,
7540                                                       x_return_status => l_return_status,
7541                                                       x_msg_count => l_msg_count,
7542                                                       x_msg_data => l_msg_data,
7543                                                       p_klnv_tbl => l_klnv_tbl,
7544                                                       x_klnv_tbl => lx_klnv_tbl,
7545                                                       p_validate_yn => l_validate_yn);
7546 		     -- Bug 5228352 --
7547 	            IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7548 			 RAISE OKC_API.G_EXCEPTION_ERROR;
7549 		    ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7550                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7551 		    END IF;
7552 	            -- Bug 5228352 --
7553 
7554 
7555                     --      --------errorout_ad(' after qp int pvt '||l_return_status );
7556 
7557                 END IF; /* Calculate tax  - update IRT rule for non cov item , cov prod */
7558 
7559                 IF NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'YES' THEN
7560 
7561                     IF clvl_rec.lse_id IN (7, 9, 18, 25) THEN
7562                         --         l_detail_rec.chr_id         :=   l_service_rec.header_id; /** header id **/
7563                         --         l_detail_rec.line_id        :=   p_contract_line_id;   /** line id **/
7564                         l_detail_rec.subline_id := clvl_rec.id;             /** Subline id **/
7565                         l_detail_rec.intent := 'OA';
7566                         l_detail_rec.currency := clvl_rec.currency_code; /** Currency code **/
7567                         l_detail_Rec.usage_qty := NULL;
7568                         l_detail_rec.usage_uom_code := NULL;
7569                         l_detail_rec.asking_unit_price := l_new_amount; /* New subine amount after cascade service price */
7570 
7571                         ----------errorout_ad(' ******* cp level  updation ******** '||l_curr_rec);
7572                         ----------errorout_ad(' subline id '||l_detail_rec.subline_id);
7573                         ----------errorout_ad(' currency '||l_detail_rec.currency);
7574                         ----------errorout_ad(' price '||l_detail_rec.asking_unit_price);
7575 
7576                         --                --------errorout_ad(' call compute price for cp  ci ');
7577 
7578                         OKS_QP_INT_PVT.COMPUTE_PRICE
7579                         (
7580                          l_api_version,
7581                          l_init_msg_list,
7582                          l_detail_rec,
7583                          l_price_details,
7584                          l_modifier_details,
7585                          l_price_break_details,
7586                          l_return_status,
7587                          l_msg_count,
7588                          l_msg_data         );
7589 
7590                         IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7591 
7592                             RAISE G_ERROR;
7593                         END IF;
7594 
7595                     END IF;
7596 
7597 
7598                 END IF; /* end of check QP profile option */
7599 
7600                 l_sum_amt := l_sum_amt + l_new_amount;
7601 
7602                 l_old_id := clvl_rec.id;
7603                 l_old_up := clvl_rec.price_unit;
7604                 l_old_upp := clvl_rec.price_unit_percent;
7605                 l_old_lse_id := clvl_rec.lse_id ;
7606                 l_old_currency_code := clvl_rec.currency_code;
7607 
7608             END IF;
7609 
7610         END LOOP;
7611 
7612 
7613         /*** Adjust difference amount arising because of decimals ***/
7614 
7615         l_diff_amt := l_new_cascade_service_price - l_sum_amt;
7616         --  --------errorout_ad(' l_diff_amt '||l_diff_amt);
7617 
7618         IF l_diff_amt IS NOT NULL AND l_diff_amt <> 0  THEN
7619 
7620         /*13084968*/
7621         /*add the difference amount to the last non-zero price_negotiated covered level*/
7622          OPEN l_clvl_diff_amt_csr;
7623          FETCH l_clvl_diff_amt_csr INTO l_clvl_diff_amt_rec;
7624           IF l_clvl_diff_amt_csr%FOUND THEN
7625             l_old_id            := l_clvl_diff_amt_rec.id;
7626             l_old_up            := l_clvl_diff_amt_rec.price_unit;
7627             l_old_upp           := l_clvl_diff_amt_rec.price_unit_percent;
7628             l_old_lse_id        := l_clvl_diff_amt_rec.lse_id;
7629             l_old_currency_code := l_clvl_diff_amt_rec.currency_code;
7630           END IF;
7631          CLOSE l_clvl_diff_amt_csr;
7632          /*13084968*/
7633 
7634             l_clvl_rec.coverage_level_line_id := l_old_id;
7635 	    /*13084968*/
7636             /*l_clvl_rec.price_negotiated := l_clvl_rec.price_negotiated + NVL(l_diff_amt, 0);*/
7637             l_clvl_rec.price_negotiated       := l_clvl_diff_amt_rec.price_negotiated +
7638                                            NVL(l_diff_amt, 0);
7639             /*13084968*/
7640             l_clvl_rec.price_unit := l_old_up;
7641             l_clvl_rec.price_unit_percent := l_old_upp;
7642 
7643             Update_Coverage_Levels(p_clvl_rec => l_clvl_rec,
7644                                    x_return_status => x_return_status,
7645                                    x_msg_count => x_msg_count,
7646                                    x_msg_data => x_msg_data);
7647 
7648             IF Nvl(x_return_status, 'S') <> OKC_API.G_RET_STS_SUCCESS THEN
7649                 RAISE G_ERROR;
7650             END IF;
7651 
7652 
7653 
7654             /*** Calculate tax - update IRT rule for residual value **/
7655             -- Bug 5228352 --
7656             IF l_old_lse_id  IN (8, 10, 11, 12, 35 )
7657 	    OR (   l_old_lse_id IN (7, 9, 18, 25)
7658 		    AND
7659 		    NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'NO')
7660 	    THEN
7661             -- Bug 5228352 --
7662 
7663                 --       --------errorout_ad(' before calculating tax ');
7664 		/*13084968*/
7665 		--G_RAIL_REC.amount := l_clvl_rec.price_negotiated + NVL(l_diff_amt, 0) ;
7666                 G_RAIL_REC.amount := l_clvl_diff_amt_rec.price_negotiated + NVL(l_diff_amt, 0) ;
7667 
7668                 OKS_TAX_UTIL_PVT.Get_Tax (p_api_version => 1.0,
7669                                           p_init_msg_list => OKC_API.G_TRUE,
7670                                           p_chr_id => get_header_id,
7671                                           p_cle_id => l_old_id,
7672                                           px_rail_rec => G_RAIL_REC,
7673                                           x_msg_count => x_msg_count,
7674                                           x_msg_data => x_msg_data,
7675                                           x_return_status => l_return_status );
7676 
7677 		-- Bug 5228352 --
7678 	        IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7679                     RAISE OKC_API.G_EXCEPTION_ERROR;
7680 		ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7681                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7682                 END IF;
7683 	       -- Bug 5228352 --
7684 
7685                 --        --------errorout_ad(' error in calc tax '||l_return_status );
7686                 -- Create IRT Rule
7687 
7688                 -- OKS_QP_INT_PVT.CLEAR_RULE_TABLE ( x_rulv_tbl   =>  l_rule_tbl);
7689 
7690                 -- l_rule_rec             := l_rule_tbl(1);
7691 		-- Bug 5228352 --
7692 		open get_tax_details(l_old_id);
7693 		fetch get_tax_details into get_tax_rec;
7694 		close get_tax_details;
7695 
7696 		l_klnv_tbl(1).id := get_tax_rec.id;
7697                 l_klnv_tbl(1).cle_id := l_old_id;
7698 		l_klnv_tbl(1).object_version_number := get_tax_rec.object_version_number;
7699 		-- Bug 5228352 --
7700 
7701                 l_klnv_tbl(1).dnz_chr_id := get_header_id;
7702                 l_klnv_tbl(1).tax_inclusive_yn := g_rail_rec.amount_includes_tax_flag;
7703 
7704 
7705                 IF  g_rail_rec.amount_includes_tax_flag = 'N' THEN
7706                     l_klnv_tbl(1).tax_amount := NVL(g_rail_rec.tax_value, 0);
7707                     --    l_klnv_tbl(1).rule_information6     := g_rail_rec.amount + NVL(g_rail_rec.tax_value,0);
7708                 ELSE
7709                     l_klnv_tbl(1).tax_amount := 0;
7710                     --    l_rule_rec.rule_information6     := g_rail_rec.amount;
7711                 END IF;
7712 
7713                 ---        l_rule_rec.dnz_chr_id                := Get_header_id;
7714                 --         l_rule_rec.rule_information_category := 'IRT';
7715                 --         l_rule_rec.rule_information5         := g_rail_rec.amount_includes_tax_flag;
7716                 /* Commented for Bug13084968, as tax is already calculated above
7717 		/* IF  g_rail_rec.amount_includes_tax_flag = 'N' THEN
7718                     --      l_rule_rec.rule_information4     := NVL(g_rail_rec.tax_value,0);
7719                     l_klnv_tbl(1).tax_amount := g_rail_rec.amount + NVL(g_rail_rec.tax_value, 0)  ;
7720                 ELSE
7721                     --    l_rule_rec.rule_information4     := 0;
7722                     l_klnv_tbl(1).tax_amount := g_rail_rec.amount;
7723                 END IF;
7724                 */
7725                 -- Update IRT rul
7726 
7727                 OKS_CONTRACT_LINE_PUB.update_line(
7728                                                   p_api_version => p_api_version,
7729                                                   p_init_msg_list => p_init_msg_list,
7730                                                   x_return_status => l_return_status,
7731                                                   x_msg_count => l_msg_count,
7732                                                   x_msg_data => l_msg_data,
7733                                                   p_klnv_tbl => l_klnv_tbl,
7734                                                   x_klnv_tbl => lx_klnv_tbl,
7735                                                   p_validate_yn => l_validate_yn);
7736        	       -- Bug 5228352 --
7737 	        IF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
7738                     RAISE OKC_API.G_EXCEPTION_ERROR;
7739 		ELSIF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7740                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
7741                 END IF;
7742 	       -- Bug 5228352 --
7743 
7744 
7745                 /*             oks_qp_int_pvt.UPDATE_RULE ( p_rule_rec         => l_rule_rec,
7746                 p_line_id          => l_old_id,
7747                 x_return_status    => l_return_status,
7748                 x_msg_count        => x_msg_count,
7749                 x_msg_data         => x_msg_data);
7750                 */
7751                 --       --------errorout_ad(' after qp int pvt '||l_return_status );
7752 
7753             END IF; /* Calculate tax  - update IRT rule for non cov item , cov prod */
7754 
7755 
7756             /*** Profile option to be checked. If 'Yes' then call pricing engine **/
7757 
7758             IF NVL(fnd_profile.VALUE('OKS_USE_QP_FOR_MANUAL_ADJ'), 'NO') = 'YES' THEN
7759 
7760                 IF l_old_lse_id IN (7, 9, 18, 25) THEN
7761                     --   l_detail_rec.chr_id         :=   l_service_red.header_id; /** header id **/
7762                     --   l_detail_rec.line_id        :=   l_service_rec.line_id;   /** line id **/
7763                     l_detail_rec.subline_id := l_old_id;             /** Subline id **/
7764                     l_detail_rec.intent := 'OA';
7765                     l_detail_rec.currency := l_old_currency_code; /** Currency code **/
7766                     l_detail_Rec.usage_qty := NULL;
7767                     l_detail_rec.usage_uom_code := NULL;
7768 		    /*13084968*/
7769                     l_detail_rec.asking_unit_price := l_clvl_diff_amt_rec.price_negotiated + NVL(l_diff_amt, 0) ; /* New subine amount after cascade service price */
7770 
7771                     ----------errorout_ad(' ******* diff amt updation ******** ');
7772                     ----------errorout_ad(' subline id '||l_detail_rec.subline_id);
7773                     ----------errorout_ad(' currency '||l_detail_rec.currency);
7774                     ----------errorout_ad(' price '||l_detail_rec.asking_unit_price);
7775 
7776                     OKS_QP_INT_PVT.COMPUTE_PRICE
7777                     (
7778                      l_api_version,
7779                      l_init_msg_list,
7780                      l_detail_rec,
7781                      l_price_details,
7782                      l_modifier_details,
7783                      l_price_break_details,
7784                      l_return_status,
7785                      l_msg_count,
7786                      l_msg_data         );
7787 
7788                     IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7789                         RAISE G_ERROR;
7790                     END IF;
7791                 END IF;
7792             END IF; /** ENDIF CALL TO QP INT */
7793         END IF; /** ENDIF DIFF AMT **/
7794 
7795         -- Need to update line amount also
7796 
7797 
7798         UPDATE_LINE_AMOUNT(p_contract_line_id,
7799                            p_new_service_price,
7800                            x_return_status,
7801                            x_msg_count,
7802                            x_msg_data  );
7803 
7804 
7805         IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7806             RAISE G_ERROR;
7807         END IF;
7808 
7809 
7810         --Update Header Amount Added For Bug 2236444
7811         UPDATE_CONTRACT_AMOUNT(p_header_id => Get_Header_Id,
7812                                x_return_status => x_return_status);
7813 
7814 
7815         IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7816             RAISE G_ERROR;
7817         END IF;
7818 
7819 
7820 
7821     EXCEPTION
7822         WHEN G_ERROR THEN
7823 
7824             NULL;
7825         WHEN OTHERS THEN
7826 
7827             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKC,
7828                                 p_msg_name => G_UNEXPECTED_ERROR,
7829                                 p_token1 => G_SQLCODE_TOKEN,
7830                                 p_token1_value => SQLCODE,
7831                                 p_token2 => G_SQLERRM_TOKEN,
7832                                 p_token2_value => SQLERRM);
7833 
7834             x_return_status := G_RET_STS_UNEXP_ERROR;
7835 
7836     END Cascade_Service_Price;
7837 
7838 
7839 
7840     PROCEDURE update_quantity(p_cle_id         IN NUMBER,
7841                               x_return_status      OUT NOCOPY VARCHAR2,
7842                               x_msg_count          OUT NOCOPY NUMBER,
7843                               x_msg_data           OUT NOCOPY VARCHAR2
7844                               )
7845     IS
7846     CURSOR get_all_instances_csr IS
7847         SELECT id
7848         FROM okc_k_lines_b
7849         WHERE cle_id = p_cle_id
7850         AND  lse_id IN (9, 25);
7851 
7852     CURSOR get_okc_item_qty_csr (p_item_cle_id NUMBER) IS
7853         SELECT object1_id1, number_of_items
7854         FROM okc_k_items
7855         WHERE cle_id = p_item_cle_id;
7856 
7857     get_okc_item_qty_rec get_okc_item_qty_csr%ROWTYPE;
7858 
7859     CURSOR get_csi_item_qty_csr (p_object1_id1 VARCHAR2) IS
7860         SELECT cii.quantity
7861         FROM  CSI_ITEM_INSTANCES CII
7862         WHERE instance_id = TO_NUMBER(p_object1_id1);
7863 
7864     get_csi_item_qty_rec get_csi_item_qty_csr%ROWTYPE;
7865 
7866     l_input_details   OKS_QP_PKG.INPUT_DETAILS;
7867     l_output_details  OKS_QP_PKG.PRICE_DETAILS;
7868     l_modif_details   QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
7869     l_pb_details      OKS_QP_PKG.G_PRICE_BREAK_TBL_TYPE;
7870     l_return_status   VARCHAR2(20) := 'S';
7871     l_msg_count       NUMBER;
7872     l_msg_data        VARCHAR2(2000);
7873     BEGIN
7874 
7875         FOR get_all_instances_rec IN get_all_instances_csr
7876             LOOP
7877             OPEN get_okc_item_qty_csr(get_all_instances_rec.id);
7878             FETCH get_okc_item_qty_csr INTO get_okc_item_qty_rec;
7879             CLOSE get_okc_item_qty_csr;
7880 
7881             OPEN get_csi_item_qty_csr (get_okc_item_qty_rec.object1_id1);
7882             FETCH get_csi_item_qty_csr INTO get_csi_item_qty_rec;
7883             CLOSE get_csi_item_qty_csr;
7884 
7885             IF NVL(get_csi_item_qty_rec.quantity, 0) > NVL(get_okc_item_qty_rec.number_of_items, 0)
7886                 THEN
7887                 UPDATE okc_k_items
7888                 SET number_of_items = get_csi_item_qty_rec.quantity
7889                 WHERE cle_id = get_all_instances_rec.id;
7890 
7891                 --calling reprice
7892                 l_input_details.line_id := p_cle_id;
7893                 l_input_details.subline_id := get_all_instances_rec.id;
7894                 l_input_details.intent := 'SP';
7895                 OKS_QP_INT_PVT.Compute_Price
7896                 (
7897                  p_api_version => 1.0,
7898                  p_init_msg_list => 'T',
7899                  p_detail_rec => l_input_details,
7900                  x_price_details => l_output_details,
7901                  x_modifier_details => l_modif_details,
7902                  x_price_break_details => l_pb_details,
7903                  x_return_status => l_return_status,
7904                  x_msg_count => l_msg_count,
7905                  x_msg_data => l_msg_data
7906                  );
7907 
7908                 --refresh schedule
7909                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7910                     RAISE G_ERROR;
7911                 END IF;
7912                 oks_bill_sch.Create_Bill_Sch_CP
7913                 (
7914                  p_top_line_id => p_cle_id,
7915                  p_cp_line_id => get_all_instances_rec.id,
7916                  p_cp_new => 'N',
7917                  x_return_status => l_return_status,
7918                  x_msg_count => l_msg_count,
7919                  x_msg_data => l_msg_data);
7920 
7921                 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
7922                     RAISE G_ERROR;
7923                 END IF;
7924             END IF;
7925         END LOOP;
7926         x_return_status := l_return_status;
7927         x_msg_count := l_msg_count;
7928         x_msg_data := l_msg_data;
7929     EXCEPTION
7930         WHEN G_ERROR THEN
7931 
7932             NULL;
7933         WHEN OTHERS THEN
7934 
7935             OKC_API.SET_MESSAGE(p_app_name => G_APP_NAME_OKC,
7936                                 p_msg_name => G_UNEXPECTED_ERROR,
7937                                 p_token1 => G_SQLCODE_TOKEN,
7938                                 p_token1_value => SQLCODE,
7939                                 p_token2 => G_SQLERRM_TOKEN,
7940                                 p_token2_value => SQLERRM);
7941 
7942             x_return_status := G_RET_STS_UNEXP_ERROR;
7943             x_msg_count := l_msg_count;
7944             x_msg_data := l_msg_data;
7945 
7946     END update_quantity;
7947     -- added for contact creation OCT2004
7948     PROCEDURE create_person (
7949                              p_init_msg_list                    IN      VARCHAR2 := FND_API.G_FALSE,
7950                              p_person_tbl                       IN      PERSON_TBL_TYPE,
7951                              x_party_id                         OUT NOCOPY     NUMBER,
7952                              x_party_number                     OUT NOCOPY     VARCHAR2,
7953                              x_profile_id                       OUT NOCOPY     NUMBER,
7954                              x_return_status                    OUT NOCOPY     VARCHAR2,
7955                              x_msg_count                        OUT NOCOPY     NUMBER,
7956                              x_msg_data                         OUT NOCOPY     VARCHAR2
7957                              )IS
7958     l_person_rec                     HZ_PARTY_V2PUB.person_rec_type ;
7959     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
7960     l_return_status                  VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7961 
7962     BEGIN
7963         l_person_rec.person_pre_name_adjunct := p_person_tbl(1).person_pre_name_adjunct;
7964         l_person_rec.person_first_name := p_person_tbl(1).person_first_name;
7965         l_person_rec.person_last_name := p_person_tbl(1).person_last_name;
7966         l_person_rec.content_source_type := 'USER_ENTERED';
7967         l_person_rec.actual_content_source := 'SST';
7968         l_person_rec.created_by_module := 'OKS_AUTH';
7969 
7970 
7971         HZ_PARTY_V2PUB.create_person (
7972                                       p_init_msg_list => l_init_msg_list,
7973                                       p_person_rec => l_person_rec,
7974                                       x_party_id => x_party_id,
7975                                       x_party_number => x_party_number,
7976                                       x_profile_id => x_profile_id,
7977                                       x_return_status => x_return_status,
7978                                       x_msg_count => x_msg_count,
7979                                       x_msg_data => x_msg_data);
7980 
7981     EXCEPTION
7982         WHEN OTHERS THEN
7983             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7984             OKC_API.set_message
7985             (OKC_API.G_APP_NAME,
7986              G_UNEXPECTED_ERROR,
7987              G_SQLCODE_TOKEN,
7988              SQLCODE,
7989              G_SQLERRM_TOKEN,
7990              SQLERRM);
7991     END;
7992 
7993     PROCEDURE update_person (
7994                              p_init_msg_list                    IN      VARCHAR2 := FND_API.G_FALSE,
7995                              p_person_tbl                       IN      PERSON_TBL_TYPE,
7996                              p_party_object_version_number      IN     NUMBER,
7997                              x_profile_id                       OUT NOCOPY     NUMBER,
7998                              x_return_status                    OUT NOCOPY     VARCHAR2,
7999                              x_msg_count                        OUT NOCOPY     NUMBER,
8000                              x_msg_data                         OUT NOCOPY     VARCHAR2
8001                              )IS
8002     l_person_rec                     HZ_PARTY_V2PUB.person_rec_type ;
8003     l_party_rec                      HZ_PARTY_V2PUB.party_rec_type;
8004     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8005     l_party_object_version_number    NUMBER := p_party_object_version_number;
8006     BEGIN
8007 
8008         l_party_rec.party_id := p_person_tbl(1).party_id;
8009         l_person_rec.party_rec := l_party_rec;
8010         l_person_rec.person_pre_name_adjunct := p_person_tbl(1).person_pre_name_adjunct;
8011         l_person_rec.person_first_name := p_person_tbl(1).person_first_name;
8012         l_person_rec.person_last_name := p_person_tbl(1).person_last_name;
8013         l_person_rec.content_source_type := 'USER_ENTERED';
8014         l_person_rec.actual_content_source := 'SST';
8015         --l_person_rec.created_by_module       := 'OKS_AUTH';
8016 
8017         HZ_PARTY_V2PUB.update_person(
8018                                      p_init_msg_list => l_init_msg_list,
8019                                      p_person_rec => l_person_rec,
8020                                      p_party_object_version_number => l_party_object_version_number,
8021                                      x_profile_id => x_profile_id,
8022                                      x_return_status => x_return_status,
8023                                      x_msg_count => x_msg_count,
8024                                      x_msg_data => x_msg_data);
8025     EXCEPTION
8026         WHEN OTHERS THEN
8027             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8028             OKC_API.set_message
8029             (OKC_API.G_APP_NAME,
8030              G_UNEXPECTED_ERROR,
8031              G_SQLCODE_TOKEN,
8032              SQLCODE,
8033              G_SQLERRM_TOKEN,
8034              SQLERRM);
8035 
8036     END;
8037 
8038     PROCEDURE create_org_contact (
8039                                   p_init_msg_list                    IN       VARCHAR2 := FND_API.G_FALSE,
8040                                   p_org_contact_tbl                  IN       ORG_CONTACT_TBL_TYPE,
8041                                   p_relationship_tbl_type            IN       relationship_tbl_type,
8042                                   x_org_contact_id                   OUT NOCOPY      NUMBER,
8043                                   x_party_rel_id                     OUT NOCOPY      NUMBER,
8044                                   x_party_id                         OUT NOCOPY      NUMBER,
8045                                   x_party_number                     OUT NOCOPY      VARCHAR2,
8046                                   x_return_status                    OUT NOCOPY      VARCHAR2,
8047                                   x_msg_count                        OUT NOCOPY      NUMBER,
8048                                   x_msg_data                         OUT NOCOPY      VARCHAR2
8049                                   )IS
8050     l_init_msg_list         CONSTANT  VARCHAR2(1) := 'F';
8051     relationship_rel_rec    HZ_RELATIONSHIP_V2PUB.relationship_rec_type ;
8052     org_contact_rec         HZ_PARTY_CONTACT_V2PUB.org_contact_rec_type ;
8053     BEGIN
8054         relationship_rel_rec.subject_id := p_relationship_tbl_type(1).subject_id;
8055         relationship_rel_rec.subject_type := p_relationship_tbl_type(1).subject_type ; --'PERSON';
8056         relationship_rel_rec.subject_table_name := p_relationship_tbl_type(1).subject_table_name; --'HZ_PARTIES';
8057         relationship_rel_rec.object_id := p_relationship_tbl_type(1).object_id;
8058         relationship_rel_rec.object_type := p_relationship_tbl_type(1).object_type;
8059         relationship_rel_rec.object_table_name := p_relationship_tbl_type(1).object_table_name; --'HZ_PARTIES';
8060         relationship_rel_rec.relationship_code := p_relationship_tbl_type(1).relationship_code ; --'CONTACT_OF';
8061         relationship_rel_rec.relationship_type := p_relationship_tbl_type(1).relationship_type ; --'CONTACT';
8062         relationship_rel_rec.created_by_module := 'OKS_AUTH';
8063         relationship_rel_rec.content_source_type := 'USER_ENTERED';
8064         --  relationship_rel_rec.actual_content_source := 'SST';
8065         org_contact_rec.job_title_code := p_org_contact_tbl(1).job_title_code;
8066         org_contact_rec.job_title := p_org_contact_tbl(1).job_title;
8067         org_contact_rec.party_site_id := p_org_contact_tbl(1).party_site_id;
8068         org_contact_rec.created_by_module := 'OKS_AUTH';
8069         org_contact_rec.party_rel_rec := relationship_rel_rec;
8070         HZ_PARTY_CONTACT_V2PUB.create_org_contact(
8071                                                   p_init_msg_list => l_init_msg_list,
8072                                                   p_org_contact_rec => org_contact_rec,
8073                                                   x_org_contact_id => x_org_contact_id,
8074                                                   x_party_rel_id => x_party_rel_id,
8075                                                   x_party_id => x_party_id,
8076                                                   x_party_number => x_party_number,
8077                                                   x_return_status => x_return_status,
8078                                                   x_msg_count => x_msg_count,
8079                                                   x_msg_data => x_msg_data);
8080 
8081     EXCEPTION
8082         WHEN OTHERS THEN
8083             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8084             OKC_API.set_message
8085             (OKC_API.G_APP_NAME,
8086              G_UNEXPECTED_ERROR,
8087              G_SQLCODE_TOKEN,
8088              SQLCODE,
8089              G_SQLERRM_TOKEN,
8090              SQLERRM);
8091     END;
8092 
8093     PROCEDURE update_org_contact (
8094                                   p_init_msg_list                    IN       VARCHAR2 := FND_API.G_FALSE,
8095                                   p_org_contact_tbl                  IN       ORG_CONTACT_TBL_TYPE,
8096                                   p_relationship_tbl_type            IN       relationship_tbl_type,
8097                                   p_cont_object_version_number       IN OUT NOCOPY   NUMBER,
8098                                   p_rel_object_version_number        IN OUT NOCOPY   NUMBER,
8099                                   p_party_object_version_number      IN OUT NOCOPY   NUMBER,
8100                                   x_return_status                    OUT NOCOPY      VARCHAR2,
8101                                   x_msg_count                        OUT NOCOPY      NUMBER,
8102                                   x_msg_data                         OUT NOCOPY      VARCHAR2
8103                                   )IS
8104     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8105     relationship_rel_rec             HZ_RELATIONSHIP_V2PUB.relationship_rec_type ;
8106     org_contact_rec                  HZ_PARTY_CONTACT_V2PUB.org_contact_rec_type ;
8107     party_rec                        HZ_PARTY_V2PUB.PARTY_REC_TYPE ;
8108     l_cont_object_version_number     NUMBER := p_cont_object_version_number;
8109     l_rel_object_version_number      NUMBER := p_rel_object_version_number;
8110     l_party_object_version_number    NUMBER := p_party_object_version_number;
8111 
8112     BEGIN
8113         party_rec.party_id := p_relationship_tbl_type(1).relationship_id;
8114         relationship_rel_rec.party_rec := party_rec;
8115         relationship_rel_rec.subject_id := p_relationship_tbl_type(1).subject_id;
8116         relationship_rel_rec.subject_type := p_relationship_tbl_type(1).subject_type ; --'PERSON';
8117         relationship_rel_rec.subject_table_name := p_relationship_tbl_type(1).subject_table_name; --'HZ_PARTIES';
8118         relationship_rel_rec.object_id := p_relationship_tbl_type(1).object_id;
8119         relationship_rel_rec.object_type := p_relationship_tbl_type(1).object_type;
8120         relationship_rel_rec.object_table_name := p_relationship_tbl_type(1).object_table_name; --'HZ_PARTIES';
8121         relationship_rel_rec.relationship_code := p_relationship_tbl_type(1).relationship_code ; --'CONTACT_OF';
8122         relationship_rel_rec.relationship_type := p_relationship_tbl_type(1).relationship_type ; --'CONTACT';
8123         relationship_rel_rec.content_source_type := 'USER_ENTERED';
8124         relationship_rel_rec.actual_content_source := 'SST';
8125         org_contact_rec.job_title_code := p_org_contact_tbl(1).job_title_code;
8126         org_contact_rec.job_title := p_org_contact_tbl(1).job_title;
8127         org_contact_rec.org_contact_id := p_org_contact_tbl(1).org_contact_id;
8128         org_contact_rec.party_site_id := p_org_contact_tbl(1).party_site_id;
8129         org_contact_rec.party_rel_rec := relationship_rel_rec;
8130 
8131         HZ_PARTY_CONTACT_V2PUB.update_org_contact(
8132                                                   p_init_msg_list => l_init_msg_list,
8133                                                   p_org_contact_rec => org_contact_rec,
8134                                                   p_cont_object_version_number => l_cont_object_version_number,
8135                                                   p_rel_object_version_number => l_rel_object_version_number,
8136                                                   p_party_object_version_number => l_party_object_version_number,
8137                                                   x_return_status => x_return_status,
8138                                                   x_msg_count => x_msg_count,
8139                                                   x_msg_data => x_msg_data);
8140 
8141     EXCEPTION
8142         WHEN OTHERS THEN
8143             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8144             OKC_API.set_message
8145             (OKC_API.G_APP_NAME,
8146              G_UNEXPECTED_ERROR,
8147              G_SQLCODE_TOKEN,
8148              SQLCODE,
8149              G_SQLERRM_TOKEN,
8150              SQLERRM);
8151     END;
8152 
8153     PROCEDURE create_party_site (
8154                                  p_init_msg_list                 IN          VARCHAR2 := FND_API.G_FALSE,
8155                                  p_party_site_tbl                IN          PARTY_SITE_TBL_TYPE,
8156                                  x_party_site_id                 OUT NOCOPY         NUMBER,
8157                                  x_party_site_number             OUT NOCOPY         VARCHAR2,
8158                                  x_return_status                 OUT NOCOPY         VARCHAR2,
8159                                  x_msg_count                     OUT NOCOPY         NUMBER,
8160                                  x_msg_data                      OUT NOCOPY         VARCHAR2
8161                                  )IS
8162 
8163     party_site_rec                   HZ_PARTY_SITE_V2PUB.PARTY_SITE_REC_TYPE;
8164     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8165     --npalepu added on 4/26/2006 for bug # 5174716
8166     l_hz_prof_val VARCHAR2(1);
8167     l_change_prof VARCHAR2(1) := 'N';
8168     --end npalepu
8169 
8170     BEGIN
8171 
8172         party_site_rec.party_id := p_party_site_tbl(1).party_id ;
8173         party_site_rec.location_id := p_party_site_tbl(1).location_id;
8174         party_site_rec.mailstop := p_party_site_tbl(1).mailstop;
8175         party_site_rec.identifying_address_flag := 'Y';
8176         party_site_rec.created_by_module := 'OKS_AUTH';
8177 
8178         --npalepu added on 4/26/2006 for bug # 5174716
8179         --setting the profile value HZ_GENERATE_PARTY_SITE_NUMBER to Y if it is set to N
8180         --inorder to auto generate the party_site_number irrespective of the profile value
8181         l_hz_prof_val := fnd_profile.value('HZ_GENERATE_PARTY_SITE_NUMBER');
8182         IF l_hz_prof_val = 'N' THEN
8183                 fnd_profile.put('HZ_GENERATE_PARTY_SITE_NUMBER','Y');
8184                 l_change_prof := 'Y';
8185         END IF;
8186         --end npalepu
8187 
8188         HZ_PARTY_SITE_V2PUB.create_party_site(
8189                                               p_init_msg_list => l_init_msg_list,
8190                                               p_party_site_rec => party_site_rec,
8191                                               x_party_site_id => x_party_site_id,
8192                                               x_party_site_number => x_party_site_number,
8193                                               x_return_status => x_return_status,
8194                                               x_msg_count => x_msg_count,
8195                                               x_msg_data => x_msg_data);
8196 
8197         --npalepu added on 4/26/2006 for bug # 5174716
8198         IF l_change_prof = 'Y' THEN
8199                 fnd_profile.put('HZ_GENERATE_PARTY_SITE_NUMBER',l_hz_prof_val);
8200         END IF;
8201         --end npalepu
8202 
8203     EXCEPTION
8204         WHEN OTHERS THEN
8205             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8206             OKC_API.set_message
8207             (OKC_API.G_APP_NAME,
8208              G_UNEXPECTED_ERROR,
8209              G_SQLCODE_TOKEN,
8210              SQLCODE,
8211              G_SQLERRM_TOKEN,
8212              SQLERRM);
8213     END;
8214 
8215     PROCEDURE update_party_site (
8216                                  p_init_msg_list                 IN          VARCHAR2 := FND_API.G_FALSE,
8217                                  p_party_site_tbl                IN          PARTY_SITE_TBL_TYPE,
8218                                  p_object_version_number         IN OUT NOCOPY      NUMBER,
8219                                  x_return_status                 OUT NOCOPY         VARCHAR2,
8220                                  x_msg_count                     OUT NOCOPY         NUMBER,
8221                                  x_msg_data                      OUT NOCOPY         VARCHAR2
8222                                  )IS
8223     party_site_rec                   hz_party_site_v2pub.PARTY_SITE_REC_TYPE;
8224     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8225     l_object_version_number          NUMBER := p_object_version_number;
8226     BEGIN
8227 
8228         party_site_rec.party_id := p_party_site_tbl(1).party_id ;
8229         party_site_rec.location_id := p_party_site_tbl(1).location_id;
8230         party_site_rec.party_site_id := p_party_site_tbl(1).party_site_id;
8231         party_site_rec.mailstop := p_party_site_tbl(1).mailstop;
8232         HZ_PARTY_SITE_V2PUB.update_party_site(
8233                                               p_init_msg_list => l_init_msg_list,
8234                                               p_party_site_rec => party_site_rec,
8235                                               p_object_version_number => l_object_version_number,
8236                                               x_return_status => x_return_status,
8237                                               x_msg_count => x_msg_count,
8238                                               x_msg_data => x_msg_data);
8239 
8240     EXCEPTION
8241         WHEN OTHERS THEN
8242             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8243             OKC_API.set_message
8244             (OKC_API.G_APP_NAME,
8245              G_UNEXPECTED_ERROR,
8246              G_SQLCODE_TOKEN,
8247              SQLCODE,
8248              G_SQLERRM_TOKEN,
8249              SQLERRM);
8250     END;
8251 
8252     PROCEDURE create_cust_account_role (
8253                                         p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
8254                                         p_cust_account_role_tbl                 IN     CUST_ACCOUNT_ROLE_tbl_TYPE,
8255                                         x_cust_account_role_id                  OUT NOCOPY    NUMBER,
8256                                         x_return_status                         OUT NOCOPY    VARCHAR2,
8257                                         x_msg_count                             OUT NOCOPY    NUMBER,
8258                                         x_msg_data                              OUT NOCOPY    VARCHAR2
8259                                         ) IS
8260     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8261     cust_account_role_rec       Hz_cust_account_role_v2pub.cust_account_role_rec_type;
8262     BEGIN
8263         cust_account_role_rec.party_id := p_cust_account_role_tbl(1).party_id;
8264         cust_account_role_rec.role_type := p_cust_account_role_tbl(1).role_type;
8265         cust_account_role_rec.cust_account_id := p_cust_account_role_tbl(1).cust_account_id;
8266         cust_account_role_rec.cust_acct_site_id := p_cust_account_role_tbl(1).cust_acct_site_id;
8267         cust_account_role_rec.primary_flag := p_cust_account_role_tbl(1).primary_flag;
8268         cust_account_role_rec.status := p_cust_account_role_tbl(1).status;
8269         cust_account_role_rec.created_by_module := 'OKS_AUTH';
8270 
8271         Hz_cust_account_role_v2pub.create_cust_account_role(
8272                                                             p_init_msg_list => l_init_msg_list,
8273                                                             p_cust_account_role_rec => cust_account_role_rec,
8274                                                             x_cust_account_role_id => x_cust_account_role_id,
8275                                                             x_return_status => x_return_status,
8276                                                             x_msg_count => x_msg_count,
8277                                                             x_msg_data => x_msg_data);
8278 
8279     EXCEPTION
8280         WHEN OTHERS THEN
8281             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8282             OKC_API.set_message
8283             (OKC_API.G_APP_NAME,
8284              G_UNEXPECTED_ERROR,
8285              G_SQLCODE_TOKEN,
8286              SQLCODE,
8287              G_SQLERRM_TOKEN,
8288              SQLERRM);
8289     END;
8290 
8291     PROCEDURE update_cust_account_role (
8292                                         p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
8293                                         p_cust_account_role_tbl                 IN     CUST_ACCOUNT_ROLE_tbl_TYPE,
8294                                         p_object_version_number                 IN OUT NOCOPY NUMBER,
8295                                         x_return_status                         OUT NOCOPY    VARCHAR2,
8296                                         x_msg_count                             OUT NOCOPY    NUMBER,
8297                                         x_msg_data                              OUT NOCOPY    VARCHAR2
8298                                         )IS
8299     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8300     l_object_version_number          NUMBER := p_object_version_number;
8301     cust_account_role_rec       Hz_cust_account_role_v2pub.cust_account_role_rec_type;
8302     BEGIN
8303         cust_account_role_rec.cust_account_role_id := p_cust_account_role_tbl(1).cust_account_role_id;
8304         cust_account_role_rec.party_id := p_cust_account_role_tbl(1).party_id;
8305         cust_account_role_rec.role_type := p_cust_account_role_tbl(1).role_type;
8306         cust_account_role_rec.cust_account_id := p_cust_account_role_tbl(1).cust_account_id;
8307         cust_account_role_rec.cust_acct_site_id := p_cust_account_role_tbl(1).cust_acct_site_id;
8308         cust_account_role_rec.primary_flag := p_cust_account_role_tbl(1).primary_flag;
8309         cust_account_role_rec.status := p_cust_account_role_tbl(1).status;
8310 
8311         Hz_cust_account_role_v2pub.update_cust_account_role(
8312                                                             p_init_msg_list => l_init_msg_list,
8313                                                             p_cust_account_role_rec => cust_account_role_rec,
8314                                                             p_object_version_number => l_object_version_number,
8315                                                             x_return_status => x_return_status,
8316                                                             x_msg_count => x_msg_count,
8317                                                             x_msg_data => x_msg_data);
8318 
8319     EXCEPTION
8320         WHEN OTHERS THEN
8321             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8322             OKC_API.set_message
8323             (OKC_API.G_APP_NAME,
8324              G_UNEXPECTED_ERROR,
8325              G_SQLCODE_TOKEN,
8326              SQLCODE,
8327              G_SQLERRM_TOKEN,
8328              SQLERRM);
8329     END;
8330 
8331     PROCEDURE create_cust_acct_site (
8332                                      p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
8333                                      p_cust_acct_site_tbl                    IN     CUST_ACCT_SITE_TBL_TYPE,
8334                                      x_cust_acct_site_id                     OUT NOCOPY    NUMBER,
8335                                      x_return_status                         OUT NOCOPY    VARCHAR2,
8336                                      x_msg_count                             OUT NOCOPY    NUMBER,
8337                                      x_msg_data                              OUT NOCOPY    VARCHAR2
8338                                      )IS
8339     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8340     cust_acct_site_rec               HZ_CUST_ACCOUNT_SITE_V2PUB.cust_acct_site_rec_type;
8341     BEGIN
8342 
8343         cust_acct_site_rec.cust_account_id := p_cust_acct_site_tbl(1).cust_account_id ;
8344         cust_acct_site_rec.party_site_id := p_cust_acct_site_tbl(1).party_site_id;
8345         cust_acct_site_rec.created_by_module := 'OKS_AUTH' ;
8346 
8347         Hz_cust_account_site_v2pub.create_cust_acct_site(
8348                                                          p_init_msg_list => l_init_msg_list,
8349                                                          p_cust_acct_site_rec => cust_acct_site_rec,
8350                                                          x_cust_acct_site_id => x_cust_acct_site_id,
8351                                                          x_return_status => x_return_status,
8352                                                          x_msg_count => x_msg_count,
8353                                                          x_msg_data => x_msg_data);
8354 
8355     EXCEPTION
8356         WHEN OTHERS THEN
8357             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8358             OKC_API.set_message
8359             (OKC_API.G_APP_NAME,
8360              G_UNEXPECTED_ERROR,
8361              G_SQLCODE_TOKEN,
8362              SQLCODE,
8363              G_SQLERRM_TOKEN,
8364              SQLERRM);
8365 
8366     END;
8367 
8368     PROCEDURE update_cust_acct_site (
8369                                      p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
8370                                      p_cust_acct_site_tbl                    IN     CUST_ACCT_SITE_TBL_TYPE,
8371                                      p_object_version_number                 IN OUT NOCOPY NUMBER,
8372                                      x_return_status                         OUT NOCOPY    VARCHAR2,
8373                                      x_msg_count                             OUT NOCOPY    NUMBER,
8374                                      x_msg_data                              OUT NOCOPY    VARCHAR2
8375                                      )IS
8376     l_init_msg_list        CONSTANT  VARCHAR2(1) := 'F';
8377     l_object_version_number          NUMBER := p_object_version_number;
8378     cust_acct_site_rec               HZ_CUST_ACCOUNT_SITE_V2PUB.cust_acct_site_rec_type;
8379     BEGIN
8380 
8381         cust_acct_site_rec.cust_account_id := p_cust_acct_site_tbl(1).cust_account_id ;
8382         cust_acct_site_rec.party_site_id := p_cust_acct_site_tbl(1).party_site_id;
8383         cust_acct_site_rec.cust_acct_site_id := p_cust_acct_site_tbl(1).cust_acct_site_id;
8384         --cust_acct_site_rec.created_by_module   := 'OKS_AUTH' ;
8385         Hz_cust_account_site_v2pub.update_cust_acct_site(
8386                                                          p_init_msg_list => l_init_msg_list,
8387                                                          p_cust_acct_site_rec => cust_acct_site_rec,
8388                                                          p_object_version_number => l_object_version_number,
8389                                                          x_return_status => x_return_status,
8390                                                          x_msg_count => x_msg_count,
8391                                                          x_msg_data => x_msg_data);
8392 
8393     EXCEPTION
8394         WHEN OTHERS THEN
8395             x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8396             OKC_API.set_message
8397             (OKC_API.G_APP_NAME,
8398              G_UNEXPECTED_ERROR,
8399              G_SQLCODE_TOKEN,
8400              SQLCODE,
8401              G_SQLERRM_TOKEN,
8402              SQLERRM);
8403     END;
8404 
8405     /**** Partial Period Computation Project  **/
8406     -- P_intent --> 'H' Header
8407     -- P_intent --> 'T' Topline
8408     -- P_intent --> 'S' Subline
8409     FUNCTION Is_Line_Eligible(
8410                               p_api_version        IN  NUMBER,
8411                               p_init_msg_list      IN  VARCHAR2,
8412                               p_contract_hdr_id    IN  NUMBER,  -- VARCHAR2
8413                               p_contract_line_id   IN  NUMBER,
8414                               p_price_list_id      IN  NUMBER,
8415                               p_intent	       IN  VARCHAR2,
8416                               x_msg_count          OUT NOCOPY NUMBER,
8417                               x_msg_data           OUT NOCOPY VARCHAR2
8418                               ) RETURN BOOLEAN IS
8419 
8420     CURSOR check_eligiblity_line IS
8421         SELECT 'Y' FROM OKC_K_LINES_B
8422         WHERE dnz_chr_id = p_contract_hdr_id
8423         AND   id = p_contract_line_id
8424         AND(date_terminated IS NULL OR date_terminated > TRUNC(SYSDATE))
8425         AND date_cancelled IS NULL
8426         AND end_date > NVL(oks_bill_util_pub.get_billed_upto(id, p_intent), end_date - 1);
8427 
8428 
8429     CURSOR get_lines_id IS
8430         SELECT ID, LSE_ID FROM OKC_K_LINES_B
8431         WHERE dnz_chr_id = p_contract_hdr_id
8432         AND cle_id IS NULL
8433         AND(date_terminated IS NULL OR date_terminated > TRUNC(SYSDATE))
8434         AND date_cancelled IS NULL
8435         AND end_date > NVL(oks_bill_util_pub.get_billed_upto(id, 'T'), end_date - 1);
8436 
8437     CURSOR get_lines_details (p_chr_id IN NUMBER, p_cle_id IN NUMBER) IS
8438         SELECT  locked_price_list_id,
8439             locked_price_list_line_id
8440         FROM    OKS_k_LINES_B
8441         WHERE   dnz_chr_id = p_chr_id
8442         AND     cle_id = p_cle_id ;
8443 
8444     l_return_status VARCHAR2(2);
8445     l_status        VARCHAR2(2);
8446     l_locked_price_list_line_id NUMBER;
8447     l_locked_price_list_id NUMBER;
8448     l_source_price_list_line_id NUMBER;
8449     l_api_version          NUMBER := 1.0;
8450     l_init_msg_list        VARCHAR2(1) := 'T';
8451     l_msg_count            NUMBER;
8452     l_msg_data             VARCHAR2(1000);
8453 
8454     BEGIN
8455         -- If Intent is 'H' the call is made from
8456         -- Authoring and we would update the price list
8457         -- Else find the status whether the line is eligible
8458         -- for repricing or not.
8459 
8460         IF P_intent = 'H'
8461             THEN
8462             FOR cur_rec IN get_lines_id
8463                 LOOP
8464                 UPDATE okc_k_lines_b
8465                 SET price_list_id = p_price_list_id
8466                 WHERE dnz_chr_id = p_contract_hdr_id
8467                 AND cle_id IS NULL
8468                 AND ID = CUR_REC.id;
8469 
8470                 IF CUR_REC.lse_id  IN (12, 13) THEN
8471                     -- delete the price break given for Usage line
8472                     -- CURSOR to fetch locked list details
8473 
8474                     OPEN get_lines_details (p_contract_hdr_id, cur_rec.id);
8475                     FETCH get_lines_details INTO l_locked_price_list_id, l_locked_price_list_line_id;
8476                     CLOSE get_lines_details;
8477                     l_source_price_list_line_id := l_locked_price_list_line_id;
8478 
8479                     IF  l_source_price_list_line_id IS NOT NULL THEN
8480                         oks_qp_pkg.delete_locked_pricebreaks(l_api_version,
8481                                                              l_source_price_list_line_id,
8482                                                              l_init_msg_list,
8483                                                              l_return_status,
8484                                                              l_msg_count,
8485                                                              l_msg_data);
8486                         IF l_return_status <> 'S' THEN
8487                             l_status := 'N';
8488                             EXIT;
8489                         END IF;
8490                     END IF;
8491                 END IF;
8492 
8493                 UPDATE OKS_K_LINES_B SET
8494                 locked_price_list_id = NULL,
8495                 locked_price_list_line_id = NULL
8496                 WHERE dnz_chr_id = p_contract_hdr_id
8497                 AND cle_id = cur_rec.id ;
8498             END LOOP;
8499             l_status := nvl(l_status, 'Y');
8500         ELSE
8501             OPEN check_eligiblity_line;
8502             FETCH check_eligiblity_line INTO l_status;
8503             CLOSE check_eligiblity_line;
8504         END IF;
8505 
8506         IF NVL(l_status, 'X') = 'Y'
8507             THEN
8508             RETURN(TRUE);
8509         ELSE
8510             RETURN(FALSE);
8511         END IF;
8512     EXCEPTION
8513         WHEN OTHERS THEN
8514             RETURN(FALSE);
8515             OKC_API.set_message
8516             (OKC_API.G_APP_NAME,
8517              G_UNEXPECTED_ERROR,
8518              G_SQLCODE_TOKEN,
8519              SQLCODE,
8520              G_SQLERRM_TOKEN,
8521              SQLERRM);
8522 
8523     END Is_Line_Eligible;
8524 
8525     /**** Partial Period Computation Project  **/
8526     -- end contact creation OCT 2004
8527 
8528         /*
8529         This new procedure was added to resolve bug 5243626.
8530         It updates amount for a topline if and only if topline amount
8531         does not euqal to the sum of subline amounts. Similarly it
8532         updates the header amount if and only if, the header amount does
8533         not equal the sum of line amounts.
8534 
8535         This avoids unncessary updates to lines and prevents record locking
8536         when multiple users access the same contract. The example given below
8537         illustrates record locking in authoring and how it can be avoided in most cases
8538 
8539                     User 1 Action                       User 2 Action
8540         Time A      Open Contract K1                    Open same Contract K1
8541 
8542         Time B      Modify contract header              Modify topline 1
8543                     -Header record locked               -Top line record locked.
8544                     -No amount changes required.        -No amount changes required.
8545 
8546         Time C      Try to save contract K1             No action
8547                     -Application hangs as               -User 2 continues to hold lock
8548                     -unconditional update of topline    -on topline 1.
8549                     -amount waits for lock on topline
8550                     -1 to be released by User 2.
8551                     -Header and contract version number
8552                     -updated.
8553 
8554         Time D      No action                           Try to save contract K1
8555                                                         -Deadlock detected
8556                                                         -User 1 is waiting for lock on
8557                                                         -topline 1 held by user 2.
8558                                                         -User 2 is waiting for lock on
8559                                                         -version number held by user 1.
8560 
8561         To avoid, the above record locking and deadlock, we one needs to
8562             1. Conditionally update the topline amount and header amount. Do not
8563                update if amounts are in sync whith child entities.
8564             2. Do not update contract version as part of header/line or any other
8565                enitity update. Defer contract version update till all other updates
8566                are successful.
8567 
8568         Please note that if two users attempt to modify the same line or same entity
8569         in a contract, record locking cannot be and should not be prevented.
8570 
8571     */
8572        PROCEDURE CHECK_UPDATE_AMOUNTS
8573     (
8574      p_api_version                           IN NUMBER,
8575      p_init_msg_list                         IN VARCHAR2 DEFAULT FND_API.G_FALSE,
8576      p_commit                                IN VARCHAR2 DEFAULT FND_API.G_FALSE,
8577      p_chr_id                                IN NUMBER,
8578      x_msg_count                             OUT NOCOPY    NUMBER,
8579      x_msg_data                              OUT NOCOPY    VARCHAR2,
8580      x_return_status                         OUT NOCOPY    VARCHAR2
8581     )
8582     IS
8583 
8584       l_api_name CONSTANT VARCHAR2(30) := 'CHECK_UPDATE_AMOUNTS';
8585     l_api_version CONSTANT NUMBER := 1;
8586     l_mod_name VARCHAR2(256) := lower(G_APP_NAME_OKS) || '.plsql.' || G_PKG_NAME || '.' || l_api_name;
8587     l_error_text VARCHAR2(512);
8588 
8589     E_RESOURCE_BUSY  EXCEPTION;
8590     PRAGMA  EXCEPTION_INIT(E_Resource_Busy, -00054);
8591 
8592     l_tl_id_tbl         num_tbl_type;
8593     l_tl_amt_tbl        num_tbl_type;
8594     l_sl_amt_tbl        num_tbl_type;
8595     l_tl_amt_tax_tbl    num_tbl_type;
8596     l_sl_amt_tax_tbl    num_tbl_type;
8597     l_tl_amt            NUMBER;
8598     l_hdr_amt           NUMBER;
8599     l_hdr_amt_tax       NUMBER;
8600     l_tl_amt_tax        NUMBER;
8601     l_dummy             NUMBER;
8602     l_line_name         VARCHAR2(2000);
8603     l_k_num             VARCHAR2(450);
8604     l_header_cancelled  NUMBER;
8605     l_topline_cancelled NUMBER;
8606 
8607     --select all toplines where topline amount is not equal to sum of subline amounts
8608     CURSOR c_k_toplines (cp_chr_id IN NUMBER) IS
8609         SELECT a.id, nvl(a.price_negotiated, 0) topline_amt,
8610         SUM(nvl(b.price_negotiated,0)) sum_subline_amt,
8611         nvl(c.tax_amount,0) topline_tax_amt,
8612         SUM(nvl(d.tax_amount,0)) sum_subline_tax_amt
8613         FROM okc_k_lines_b a, okc_k_lines_b b,
8614              oks_k_lines_b c, oks_k_lines_b d
8615         WHERE a.dnz_chr_id = cp_chr_id AND a.lse_id IN (1,12,14,19)
8616         AND b.dnz_chr_id = a.dnz_chr_id AND b.cle_id = a.id
8617         AND a.id=c.cle_id AND b.id=d.cle_id
8618         AND b.lse_id IN (7,8,9,10,11,35,13,18,25)
8619         AND a.date_cancelled is null
8620         AND b.date_cancelled is null
8621         GROUP BY a.id, a.price_negotiated,c.tax_amount
8622         HAVING nvl(a.price_negotiated, 0) <> SUM(nvl(b.price_negotiated,0))
8623               OR nvl(c.tax_amount, 0) <> SUM(nvl(d.tax_amount,0));
8624 
8625 --cgopinee bugfix for 7717417
8626      CURSOR c_k_tl_zero_sl (cp_chr_id IN NUMBER) IS
8627         SELECT a.id, nvl(a.price_negotiated, 0) topline_amt,
8628         0 sum_subline_amt,
8629         nvl(c.tax_amount,0) topline_tax_amt,
8630         0 sum_subline_tax_amt
8631         FROM okc_k_lines_b a,
8632              oks_k_lines_b c
8633         WHERE a.dnz_chr_id = cp_chr_id
8634         AND a.lse_id IN (1,12,14,19)
8635         AND a.id=c.cle_id
8636         AND a.date_cancelled is null
8637         and not exists( select 1 from okc_k_lines_b b
8638             WHERE b.lse_id IN (7,8,9,10,11,35,13,18,25)
8639                 AND b.date_cancelled is null
8640                 AND b.dnz_chr_id=a.dnz_chr_id
8641                 AND b.cle_id=a.id);
8642 
8643     CURSOR c_lock_tl(cp_id IN NUMBER) IS
8644         SELECT price_negotiated
8645         FROM okc_k_lines_b WHERE id = cp_id
8646         FOR UPDATE OF price_negotiated NOWAIT;
8647 
8648     CURSOR c_line_name(cp_id IN NUMBER) IS
8649         SELECT substr(RTRIM(RTRIM(line_number) || ', ' || RTRIM(lsev.name) || ' ' || RTRIM(clev.name)), 1, 2000) line_name
8650         FROM   okc_line_styles_v lsev, okc_k_lines_v clev
8651         WHERE  lsev.id = clev.lse_id
8652         AND    clev.id =  cp_id;
8653 
8654     CURSOR c_k_hdr(cp_chr_id IN NUMBER) IS
8655         SELECT a.contract_number ||' '|| a.contract_number_modifier,
8656         nvl(a.estimated_amount, 0) hdr_amt,
8657         SUM(nvl(b.price_negotiated,0)) sum_tl_line_amt,
8658         nvl(c.tax_amount,0) hdr_tax_amt,
8659         SUM(nvl(d.tax_amount,0)) sum_tl_line_amt_tax
8660         FROM okc_k_headers_all_b a, okc_k_lines_b b,
8661              oks_k_headers_b c, oks_k_lines_b d
8662         WHERE a.id = cp_chr_id
8663         AND b.dnz_chr_id = a.id AND b.cle_id IS NULL
8664         AND d.dnz_chr_id = c.chr_id AND d.cle_id=b.id
8665         AND b.date_cancelled is null
8666         AND b.lse_id IN (1,12,14,19,46)
8667         GROUP BY a.contract_number, a.contract_number_modifier, a.estimated_amount,c.tax_amount;
8668 
8669   --cgopinee bugfix for 7717417
8670     CURSOR c_k_hdr_zero_tl(cp_chr_id IN NUMBER) IS
8671         SELECT a.contract_number ||' '|| a.contract_number_modifier,
8672         nvl(a.estimated_amount, 0) hdr_amt,
8673         0 sum_tl_line_amt,
8674         nvl(c.tax_amount,0) hdr_tax_amt,
8675         0 sum_tl_line_amt_tax
8676         FROM okc_k_headers_all_b a,
8677              oks_k_headers_b c
8678         WHERE a.id = cp_chr_id
8679         AND c.chr_id = a.id
8680         AND NOT EXISTS (SELECT 1 from okc_k_lines_b b
8681             WHERE  b.dnz_chr_id = a.id
8682             AND b.cle_id IS NULL
8683             AND b.date_cancelled is null
8684             AND b.lse_id IN (1,12,14,19,46));
8685 
8686         CURSOR c_lock_hdr(cp_chr_id IN NUMBER) IS
8687         SELECT estimated_amount
8688         FROM okc_k_headers_all_b WHERE id = cp_chr_id
8689         FOR UPDATE OF estimated_amount NOWAIT;
8690 
8691      -- select all the toplines which has cancelled amount not equal to those of sublines
8692     CURSOR c_k_toplines_cancelled (cp_chr_id IN NUMBER) IS
8693         SELECT a.id, nvl(a.cancelled_amount, 0) topline_canceled_amt,           /*modified for bug:6765336*/
8694             SUM(nvl(b.cancelled_amount,0)) sum_subline_cancelled_amt
8695         FROM okc_k_lines_b a, okc_k_lines_b b
8696         WHERE a.dnz_chr_id = cp_chr_id AND a.lse_id IN (1,12,14,19)
8697 	        AND b.dnz_chr_id = a.dnz_chr_id AND b.cle_id = a.id
8698         AND a.date_cancelled is null
8699         AND b.date_cancelled is not null
8700         GROUP BY a.id, a.cancelled_amount
8701         HAVING nvl(a.cancelled_amount, 0) <> SUM(nvl(b.cancelled_amount,0));       /*modified for bug:6765336*/
8702 
8703      -- select header cancelled amount and sum of topline cancelled amounts
8704      CURSOR c_k_hdr_cancelled(cp_chr_id IN NUMBER) IS
8705         SELECT
8706             nvl(a.cancelled_amount, 0) hdr_cancelled_amt,
8707             SUM(nvl(b.cancelled_amount,0)) sum_tl_line_cancelled_amt
8708         FROM okc_k_headers_all_b a, okc_k_lines_b b
8709         WHERE a.id = cp_chr_id
8710         AND b.dnz_chr_id = a.id AND b.cle_id IS NULL
8711         AND b.lse_id IN (1,12,14,19,46)
8712         GROUP BY a.cancelled_amount;
8713 
8714     BEGIN
8715 
8716         --log key input parameters
8717         IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8718             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);
8719         END IF;
8720 
8721         --standard api initilization and checks
8722         SAVEPOINT check_update_amounts_PVT;
8723         IF NOT FND_API.compatible_api_call (l_api_version, p_api_version, l_api_name, G_PKG_NAME)THEN
8724             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8725         END IF;
8726         IF FND_API.to_boolean(p_init_msg_list ) THEN
8727             FND_MSG_PUB.initialize;
8728         END IF;
8729         x_return_status := FND_API.G_RET_STS_SUCCESS;
8730 
8731         --get all toplines that are out of sync with sublines
8732         OPEN c_k_toplines(p_chr_id);
8733         LOOP
8734              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;
8735             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8736                 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);
8737             END IF;
8738 
8739             EXIT WHEN (l_tl_id_tbl.count = 0);
8740 
8741             FOR i IN l_tl_id_tbl.first..l_tl_id_tbl.last LOOP
8742 
8743                 --before updating the topline amount, first try to obtain a lock on the topline
8744                 --if the lock fails, another user is holding the lock, exit with appropriate
8745                 --error message. If the lock succeeds, update the top line amount
8746                 BEGIN
8747 
8748                     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8749                         FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_line', 'checking lock for line id='||l_tl_id_tbl(i));
8750                     END IF;
8751 
8752                     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
8753                         OPEN c_lock_tl(l_tl_id_tbl(i));
8754                         FETCH c_lock_tl INTO l_dummy;
8755                         CLOSE c_lock_tl;
8756                     END IF;
8757                 EXCEPTION
8758                     WHEN E_RESOURCE_BUSY THEN
8759                         IF c_lock_tl%isopen THEN
8760                             CLOSE c_lock_tl;
8761                         END IF;
8762                         OPEN c_line_name(l_tl_id_tbl(i));
8763                         FETCH c_line_name INTO l_line_name;
8764                         CLOSE c_line_name;
8765 
8766                         --set the error message on the error stack to inform the user
8767                         FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_LINE_LOCKED');
8768                         FND_MESSAGE.set_token('LINE_NAME', l_line_name);
8769 
8770                         IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8771                             FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_line_fail', FALSE);
8772                         END IF;
8773                         FND_MSG_PUB.ADD;
8774 
8775                         l_tl_id_tbl.delete;
8776                         l_tl_amt_tbl.delete;
8777                         l_sl_amt_tbl.delete;
8778                         l_tl_amt_tax_tbl.delete;
8779                         l_sl_amt_tax_tbl.delete;
8780 
8781                         RAISE FND_API.g_exc_error;
8782 
8783                 END; --of anonymous block checking topline locks
8784 
8785             END LOOP;
8786 
8787             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8788                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'able to lock all fetched toplines - updating amount');
8789             END IF;
8790 
8791             --if we come till here, we where able to obtain locks on all the toplines fectched previously
8792             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8793                 UPDATE okc_k_lines_b
8794                     SET price_negotiated = l_sl_amt_tbl(j)
8795                     WHERE id = l_tl_id_tbl(j);
8796 
8797             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8798                 UPDATE oks_k_lines_b
8799                     SET tax_amount = l_sl_amt_tax_tbl(j)
8800                     WHERE cle_id = l_tl_id_tbl(j);
8801 
8802             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8803                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'amounts updated');
8804             END IF;
8805 
8806         END LOOP; --of bulk fetch loop
8807         CLOSE c_k_toplines;
8808         l_tl_id_tbl.delete;
8809         l_tl_amt_tbl.delete;
8810         l_sl_amt_tbl.delete;
8811         l_tl_amt_tax_tbl.delete;
8812         l_sl_amt_tax_tbl.delete;
8813 
8814         --cgopinee bugfix for 7717417
8815         OPEN c_k_tl_zero_sl(p_chr_id);
8816         LOOP
8817              FETCH c_k_tl_zero_sl 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;
8818             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8819                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.c_k_tl_zero_sl.bulk_fetch', 'l_tl_id_tbl.count='||l_tl_id_tbl.count);
8820             END IF;
8821 
8822             EXIT WHEN (l_tl_id_tbl.count = 0);
8823 
8824             FOR i IN l_tl_id_tbl.first..l_tl_id_tbl.last LOOP
8825 
8826                 --before updating the topline amount, first try to obtain a lock on the topline
8827                 --if the lock fails, another user is holding the lock, exit with appropriate
8828                 --error message. If the lock succeeds, update the top line amount
8829                 BEGIN
8830 
8831                     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8832                         FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_line', 'checking lock for line id='||l_tl_id_tbl(i));
8833                     END IF;
8834 
8835                     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
8836                         OPEN c_lock_tl(l_tl_id_tbl(i));
8837                         FETCH c_lock_tl INTO l_dummy;
8838                         CLOSE c_lock_tl;
8839                     END IF;
8840                 EXCEPTION
8841                     WHEN E_RESOURCE_BUSY THEN
8842                         IF c_lock_tl%isopen THEN
8843                             CLOSE c_lock_tl;
8844                         END IF;
8845                         OPEN c_line_name(l_tl_id_tbl(i));
8846                         FETCH c_line_name INTO l_line_name;
8847                         CLOSE c_line_name;
8848 
8849                         --set the error message on the error stack to inform the user
8850                         FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_LINE_LOCKED');
8851                         FND_MESSAGE.set_token('LINE_NAME', l_line_name);
8852 
8853                         IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8854                             FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_line_fail', FALSE);
8855                         END IF;
8856                         FND_MSG_PUB.ADD;
8857 
8858                         l_tl_id_tbl.delete;
8859                         l_tl_amt_tbl.delete;
8860                         l_sl_amt_tbl.delete;
8861                         l_tl_amt_tax_tbl.delete;
8862                         l_sl_amt_tax_tbl.delete;
8863 
8864                         RAISE FND_API.g_exc_error;
8865 
8866                 END; --of anonymous block checking topline locks
8867             END LOOP;
8868 
8869             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8870                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'able to lock all fetched toplines - updating amount');
8871             END IF;
8872 
8873             --if we come till here, we where able to obtain locks on all the toplines fectched previously
8874             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8875                 UPDATE okc_k_lines_b
8876                     SET price_negotiated = l_sl_amt_tbl(j)
8877                     WHERE id = l_tl_id_tbl(j);
8878 
8879             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
8880                 UPDATE oks_k_lines_b
8881                     SET tax_amount = l_sl_amt_tax_tbl(j)
8882                     WHERE cle_id = l_tl_id_tbl(j);
8883 
8884             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8885                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'amounts updated');
8886             END IF;
8887         END LOOP; --of bulk fetch loop
8888 
8889         CLOSE c_k_tl_zero_sl;
8890         l_tl_id_tbl.delete;
8891         l_tl_amt_tbl.delete;
8892         l_sl_amt_tbl.delete;
8893         l_tl_amt_tax_tbl.delete;
8894         l_sl_amt_tax_tbl.delete;
8895         --end of bugfix for 7717417
8896 
8897         OPEN c_k_hdr(p_chr_id);
8898         FETCH c_k_hdr INTO l_k_num, l_hdr_amt, l_tl_amt,l_hdr_amt_tax,l_tl_amt_tax;
8899         CLOSE c_k_hdr;
8900 
8901         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8902             FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_hdr', 'db hdr amt='||l_hdr_amt||' , sum of toplines='||l_tl_amt);
8903         END IF;
8904 
8905         --update the header only if required
8906          IF (l_hdr_amt <> l_tl_amt) OR(l_hdr_amt_tax <> l_tl_amt_tax) THEN
8907 
8908             --before updating the header amount, first try to obtain a lock on the header
8909             --if the lock fails, another user is holding the lock, exit with appropriate
8910             --error message. If the lock succeeds, update the header amount
8911             BEGIN
8912 
8913                 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8914                     FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_hdr', 'checking lock for header id='||p_chr_id);
8915                 END IF;
8916 
8917                 OPEN c_lock_hdr(p_chr_id);
8918                 FETCH c_lock_hdr INTO l_dummy;
8919                 CLOSE c_lock_hdr;
8920 
8921                 IF (l_hdr_amt <> l_tl_amt) THEN
8922                     UPDATE okc_k_headers_all_b
8923                     SET estimated_amount = l_tl_amt
8924                     WHERE id = p_chr_id;
8925                 END IF;
8926 
8927                 IF (l_hdr_amt_tax <> l_tl_amt_tax) THEN
8928                     UPDATE oks_k_headers_b
8929                     SET tax_amount = l_tl_amt_tax
8930                     where chr_id = p_chr_id;
8931                 END IF;
8932 
8933             EXCEPTION
8934                 WHEN E_RESOURCE_BUSY THEN
8935                     IF c_lock_hdr%isopen THEN
8936                         CLOSE c_lock_hdr;
8937                     END IF;
8938                     --set the error message on the error stack to inform the user
8939                     FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_HEADER_LOCKED');
8940                     FND_MESSAGE.set_token('CONTRACT_NUMBER', l_k_num);
8941 
8942                     IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
8943                         FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_header_fail', FALSE);
8944                     END IF;
8945                     FND_MSG_PUB.ADD;
8946 
8947                     RAISE FND_API.g_exc_error;
8948 
8949             END; --of anonymous block checking header lock
8950 
8951         END IF; --of (l_hdr_amt <> l_tl_amt) OR(l_hdr_amt_tax <> l_tl_amt_tax) THEN
8952 
8953         --cgopinee bugfix for 7717417
8954         OPEN c_k_hdr_zero_tl(p_chr_id);
8955 	        FETCH c_k_hdr_zero_tl INTO l_k_num, l_hdr_amt, l_tl_amt,l_hdr_amt_tax,l_tl_amt_tax;
8956 	        CLOSE c_k_hdr_zero_tl;
8957 
8958 	        IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8959 	            FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_hdr', 'db hdr amt='||l_hdr_amt||' , sum of toplines='||l_tl_amt);
8960 	        END IF;
8961 
8962 	        --update the header only if required
8963 	         IF (l_hdr_amt <> l_tl_amt) OR(l_hdr_amt_tax <> l_tl_amt_tax) THEN
8964 
8965 	            --before updating the header amount, first try to obtain a lock on the header
8966 	            --if the lock fails, another user is holding the lock, exit with appropriate
8967 	            --error message. If the lock succeeds, update the header amount
8968 	            BEGIN
8969 
8970 	                IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
8971 	                    FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_hdr', 'checking lock for header id='||p_chr_id);
8972 	                END IF;
8973 
8974 	                OPEN c_lock_hdr(p_chr_id);
8975 	                FETCH c_lock_hdr INTO l_dummy;
8976 	                CLOSE c_lock_hdr;
8977 
8978 	                IF (l_hdr_amt <> l_tl_amt) THEN
8979 	                    UPDATE okc_k_headers_all_b
8980 	                    SET estimated_amount = l_tl_amt
8981 	                    WHERE id = p_chr_id;
8982 	                END IF;
8983 
8984 	                IF (l_hdr_amt_tax <> l_tl_amt_tax) THEN
8985 	                    UPDATE oks_k_headers_b
8986 	                    SET tax_amount = l_tl_amt_tax
8987 	                    where chr_id = p_chr_id;
8988 	                END IF;
8989 
8990 	            EXCEPTION
8991 	                WHEN E_RESOURCE_BUSY THEN
8992 	                    IF c_lock_hdr%isopen THEN
8993 	                        CLOSE c_lock_hdr;
8994 	                    END IF;
8995 	                    --set the error message on the error stack to inform the user
8996 	                    FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_HEADER_LOCKED');
8997 	                    FND_MESSAGE.set_token('CONTRACT_NUMBER', l_k_num);
8998 
8999 	                    IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
9000 	                        FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_header_fail', FALSE);
9001 	                    END IF;
9002 	                    FND_MSG_PUB.ADD;
9003 
9004 	                    RAISE FND_API.g_exc_error;
9005 
9006 	            END; --of anonymous block checking header lock
9007 
9008         END IF; --of (l_hdr_amt <> l_tl_amt) OR(l_hdr_amt_tax <> l_tl_amt_tax)
9009         --end of bugfix for 7717417
9010 
9011         -- to update cancelled amount of toplines.First get all toplines that are out of sync with sublines
9012         OPEN c_k_toplines_cancelled(p_chr_id);
9013         LOOP
9014              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;
9015             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
9016                 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);
9017             END IF;
9018 
9019             EXIT WHEN (l_tl_id_tbl.count = 0);
9020 
9021             FOR i IN l_tl_id_tbl.first..l_tl_id_tbl.last LOOP
9022 
9023                 --before updating the topline cancelled amount, first try to obtain a lock on the topline
9024                 --if the lock fails, another user is holding the lock, exit with appropriate
9025                 --error message. If the lock succeeds, update the top line cancelled amount
9026                 BEGIN
9027 
9028                     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
9029                         FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_line', 'checking lock for line id='||l_tl_id_tbl(i));
9030                     END IF;
9031 
9032                     OPEN c_lock_tl(l_tl_id_tbl(i));
9033                     FETCH c_lock_tl INTO l_dummy;
9034                     CLOSE c_lock_tl;
9035 
9036                 EXCEPTION
9037                     WHEN E_RESOURCE_BUSY THEN
9038                         IF c_lock_tl%isopen THEN
9039                             CLOSE c_lock_tl;
9040                         END IF;
9041                         OPEN c_line_name(l_tl_id_tbl(i));
9042                         FETCH c_line_name INTO l_line_name;
9043                         CLOSE c_line_name;
9044 
9045                         --set the error message on the error stack to inform the user
9046                         FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_LINE_LOCKED');
9047                         FND_MESSAGE.set_token('LINE_NAME', l_line_name);
9048 
9049                         IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
9050                             FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_line_fail', FALSE);
9051                         END IF;
9052                         FND_MSG_PUB.ADD;
9053 
9054                         l_tl_id_tbl.delete;
9055                         l_tl_amt_tbl.delete;
9056                         l_sl_amt_tbl.delete;
9057 
9058                         RAISE FND_API.g_exc_error;
9059 
9060                 END; --of anonymous block checking topline locks
9061 
9062             END LOOP;
9063 
9064             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
9065                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'able to lock all fetched toplines - updating canceled amount');
9066             END IF;
9067 
9068             --if we come till here, we where able to obtain locks on all the toplines fectched previously
9069             FORALL j IN  l_tl_id_tbl.first..l_tl_id_tbl.last
9070                 update okc_k_lines_b
9071                     set cancelled_amount =l_sl_amt_tbl(j)
9072                     where id=l_tl_id_tbl(j);
9073 
9074             IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
9075                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_line', 'cancelled amounts updated');
9076             END IF;
9077 
9078         END LOOP; --of bulk fetch loop
9079         CLOSE c_k_toplines_cancelled;
9080         l_tl_id_tbl.delete;
9081         l_tl_amt_tbl.delete;
9082         l_sl_amt_tbl.delete;
9083 
9084         -- update cancelled amount in header
9085         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
9086                 FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.update_header', 'to update header cancelled amount not equal to sum of toplines.');
9087         END IF;
9088 
9089         OPEN c_k_hdr_cancelled(p_chr_id);
9090         FETCH c_k_hdr_cancelled INTO l_header_cancelled,l_topline_cancelled;
9091         CLOSE c_k_hdr_cancelled;
9092 
9093         --update the header cancelled amount only if required
9094         IF l_header_cancelled <> l_topline_cancelled THEN
9095 
9096             --before updating the header amount, first try to obtain a lock on the header
9097             --if the lock fails, another user is holding the lock, exit with appropriate
9098             --error message. If the lock succeeds, update the header amount
9099             BEGIN
9100 
9101                 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
9102                     FND_LOG.string(FND_LOG.level_statement, l_mod_name || '.lock_hdr', 'checking lock for header id='||p_chr_id);
9103                 END IF;
9104 
9105                 OPEN c_lock_hdr(p_chr_id);
9106                 FETCH c_lock_hdr INTO l_dummy;
9107                 CLOSE c_lock_hdr;
9108 
9109                 update okc_k_headers_all_b
9110                 set cancelled_amount = l_topline_cancelled
9111                 where id=p_chr_id;
9112 
9113             EXCEPTION
9114                 WHEN E_RESOURCE_BUSY THEN
9115                     IF c_lock_hdr%isopen THEN
9116                         CLOSE c_lock_hdr;
9117                     END IF;
9118                     --set the error message on the error stack to inform the user
9119                     FND_MESSAGE.set_name(G_APP_NAME_OKS, 'OKS_HEADER_LOCKED');
9120                     FND_MESSAGE.set_token('CONTRACT_NUMBER', l_k_num);
9121 
9122                     IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
9123                         FND_LOG.message(FND_LOG.level_error, l_mod_name || '.lock_header_fail', FALSE);
9124                     END IF;
9125                     FND_MSG_PUB.ADD;
9126 
9127                     RAISE FND_API.g_exc_error;
9128 
9129             END; --of anonymous block checking header lock
9130 
9131         END IF; --of (l_header_cancelled <> l_topline_cancelled) THEN
9132 
9133 	    IF FND_API.to_boolean(p_commit) THEN
9134 		    COMMIT;
9135 	    END IF;
9136 
9137         --exit
9138         IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9139             FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9140         END IF;
9141         FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
9142 
9143     EXCEPTION
9144         WHEN FND_API.g_exc_error THEN
9145             ROLLBACK TO check_update_amounts_PVT;
9146             x_return_status := FND_API.g_ret_sts_error ;
9147 
9148             IF (FND_LOG.level_error >= FND_LOG.g_current_runtime_level) THEN
9149                 FND_LOG.string(FND_LOG.level_error, l_mod_name || '.end_error', 'x_return_status=' || x_return_status);
9150             END IF;
9151             FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
9152             IF (c_k_toplines%isopen) THEN
9153                 CLOSE c_k_toplines;
9154             END IF;
9155             IF (c_lock_tl%isopen) THEN
9156                 CLOSE c_lock_tl;
9157             END IF;
9158             IF (c_line_name%isopen) THEN
9159                 CLOSE c_line_name;
9160             END IF;
9161             IF (c_k_hdr%isopen) THEN
9162                 CLOSE c_k_hdr;
9163             END IF;
9164             IF (c_lock_hdr%isopen) THEN
9165                 CLOSE c_lock_hdr;
9166             END IF;
9167 
9168 
9169         WHEN FND_API.g_exc_unexpected_error THEN
9170             ROLLBACK TO check_update_amounts_PVT;
9171             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9172 
9173             IF (FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level) THEN
9174                 FND_LOG.string(FND_LOG.level_unexpected, l_mod_name || '.end_unexpected_error', 'x_return_status=' || x_return_status);
9175             END IF;
9176             FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
9177             IF (c_k_toplines%isopen) THEN
9178                 CLOSE c_k_toplines;
9179             END IF;
9180             IF (c_lock_tl%isopen) THEN
9181                 CLOSE c_lock_tl;
9182             END IF;
9183             IF (c_line_name%isopen) THEN
9184                 CLOSE c_line_name;
9185             END IF;
9186             IF (c_k_hdr%isopen) THEN
9187                 CLOSE c_k_hdr;
9188             END IF;
9189             IF (c_lock_hdr%isopen) THEN
9190                 CLOSE c_lock_hdr;
9191             END IF;
9192 
9193         WHEN OTHERS THEN
9194             ROLLBACK TO check_update_amounts_PVT;
9195             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9196 
9197             IF (FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level) THEN
9198                 --first log the sqlerrm
9199                 l_error_text := substr (SQLERRM, 1, 240);
9200                 FND_LOG.string(FND_LOG.level_unexpected, l_mod_name || '.end_other_error', l_error_text);
9201                 --then add it to the message api list
9202                 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name, l_error_text);
9203             END IF;
9204             FND_MSG_PUB.count_and_get(p_count => x_msg_count, p_data => x_msg_data );
9205             IF (c_k_toplines%isopen) THEN
9206                 CLOSE c_k_toplines;
9207             END IF;
9208             IF (c_lock_tl%isopen) THEN
9209                 CLOSE c_lock_tl;
9210             END IF;
9211             IF (c_line_name%isopen) THEN
9212                 CLOSE c_line_name;
9213             END IF;
9214             IF (c_k_hdr%isopen) THEN
9215                 CLOSE c_k_hdr;
9216             END IF;
9217             IF (c_lock_hdr%isopen) THEN
9218                 CLOSE c_lock_hdr;
9219             END IF;
9220 
9221     END CHECK_UPDATE_AMOUNTS;
9222 
9223 
9224     FUNCTION get_net_reading(p_counter_id NUMBER)
9225     RETURN  NUMBER IS
9226 
9227      CURSOR c1 IS
9228      SELECT counter_value_id
9229      FROM   CSI_COUNTER_READINGS
9230      WHERE  counter_id = p_counter_id
9231      AND    value_timestamp in
9232         (select max(value_timestamp) from CSI_COUNTER_READINGS
9233          where counter_id = p_counter_id
9234          and disabled_flag='N');
9235 
9236      l_counter_value_id NUMBER;
9237 
9238      BEGIN
9239 
9240       OPEN c1;
9241       FETCH c1 INTO l_counter_value_id;
9242       CLOSE c1;
9243 
9244       RETURN l_counter_value_id;
9245 
9246      END get_net_reading;
9247 
9248 /*============================================================================+
9249     | Procedure:           check_reprice_request
9250     |
9251     | Purpose:             Check to see if there is any active request runnning in the background for Reprice
9252     |
9253     | In Parameters:       p_chr_id            the contract id
9254     | Out Parameters:      x_return_status     standard return status
9255     |
9256  +============================================================================*/
9257 
9258  PROCEDURE check_reprice_request(
9259    p_chr_id         IN NUMBER   ,
9260    x_return_status OUT NOCOPY VARCHAR2
9261  ) IS
9262     l_api_name CONSTANT VARCHAR2(30) := 'CHECK_REPRICE_REQUEST';
9263     l_api_version CONSTANT NUMBER := 1;
9264     l_mod_name VARCHAR2(256) := lower(G_APP_NAME_OKS) || '.plsql.' || G_PKG_NAME || '.' || l_api_name;
9265     l_error_text VARCHAR2(512);
9266 /*
9267   This will check whether there is any active reprice request running in the background.
9268   If reprice is running ,it will issue a Error message
9269 */
9270 
9271 
9272   Program_ID    NUMBER;
9273   Prog_Appl_ID  NUMBER;
9274   req_id        NUMBER;
9275 
9276   CURSOR  c_reprice_req(l_chr_id IN NUMBER,l_prog_appl_id IN NUMBER,l_prg_id IN NUMBER) IS
9277   SELECT max(request_id)
9278   FROM   fnd_concurrent_requests
9279 	WHERE  program_application_id = l_prog_appl_id
9280 	AND    concurrent_program_id  = l_prg_id
9281   AND    argument2=to_char(l_chr_id)
9282   AND    phase_code  NOT IN ('C');      --- IN ('P','R'); SKUCHIMA
9283 
9284 
9285 BEGIN
9286      IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9287         FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.begin', ' p_chr_id='|| p_chr_id);
9288      END IF;
9289 
9290      x_return_status := FND_API.G_RET_STS_SUCCESS;
9291 
9292 
9293     SELECT concurrent_program_id, p.application_id
9294     INTO   program_id, prog_appl_id
9295     FROM   fnd_concurrent_programs P,
9296            fnd_application A
9297     WHERE  concurrent_program_name  = 'OKSREPCON'
9298     AND    P.application_id         = A.Application_ID
9299     AND    A.application_short_name = 'OKS';
9300 
9301     --Check if any request of the concurrent program 'OKSREPCON' is in Pending or Running Phase for the given contract header id
9302       OPEN c_reprice_req(p_chr_id,prog_appl_id,program_id);
9303          FETCH c_reprice_req INTO req_id;
9304       CLOSE c_reprice_req;
9305 
9306       IF req_id is not null THEN
9307            x_return_status := FND_API.G_RET_STS_ERROR;
9308       ELSE
9309            x_return_status := FND_API.G_RET_STS_SUCCESS;
9310       END IF;
9311 
9312       IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9313         FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9314       END IF;
9315 
9316 EXCEPTION
9317  WHEN OTHERS THEN
9318    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9319     IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9320       FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9321     END IF;
9322 
9323 END CHECK_REPRICE_REQUEST;
9324 
9325 /*11687112 -Cascade ER*/
9326 /*============================================================================+
9327     | Procedure:           check_cascade_request
9328     |
9329     | Purpose:             Check to see if there is any active request runnning in the background for cascade attributes
9330     |
9331     | In Parameters:       p_chr_id            the contract id
9332     | Out Parameters:      x_return_status     standard return status
9333     |
9334  +============================================================================*/
9335 
9336  PROCEDURE check_cascade_request(
9337    p_chr_id         IN NUMBER   ,
9338    x_return_status OUT NOCOPY VARCHAR2
9339  ) IS
9340     l_api_name CONSTANT VARCHAR2(30) := 'CHECK_CASCADE_REQUEST';
9341     l_api_version CONSTANT NUMBER := 1;
9342     l_mod_name VARCHAR2(256) := lower(G_APP_NAME_OKS) || '.plsql.' || G_PKG_NAME || '.' || l_api_name;
9343     l_error_text VARCHAR2(512);
9344 /*
9345   This will check whether there is any active Cascade request running in the background.
9346   If Cascade is running ,it will issue a Error message
9347 */
9348 
9349 
9350   Program_ID    NUMBER;
9351   Prog_Appl_ID  NUMBER;
9352   req_id        NUMBER;
9353 
9354   CURSOR  c_cascade_req(l_chr_id IN NUMBER,l_prog_appl_id IN NUMBER,l_prg_id IN NUMBER) IS
9355   SELECT max(request_id)
9356   FROM   fnd_concurrent_requests
9357 	WHERE  program_application_id = l_prog_appl_id
9358 	AND    concurrent_program_id  = l_prg_id
9359   AND    argument1=to_char(l_chr_id)
9360   AND    phase_code  NOT IN ('C');
9361 
9362 
9363 BEGIN
9364      IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9365         FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.begin', ' p_chr_id='|| p_chr_id);
9366      END IF;
9367 
9368      x_return_status := FND_API.G_RET_STS_SUCCESS;
9369 
9370 
9371     SELECT concurrent_program_id, p.application_id
9372     INTO   program_id, prog_appl_id
9373     FROM   fnd_concurrent_programs P,
9374            fnd_application A
9375     WHERE  concurrent_program_name  = 'OKSCASCR'
9376     AND    P.application_id         = A.Application_ID
9377     AND    A.application_short_name = 'OKS';
9378 
9379     --Check if any request of the concurrent program 'OKSREPCON' is in Pending or Running Phase for the given contract header id
9380       OPEN c_cascade_req(p_chr_id,prog_appl_id,program_id);
9381          FETCH c_cascade_req INTO req_id;
9382       CLOSE c_cascade_req;
9383 
9384       IF req_id is not null THEN
9385            x_return_status := FND_API.G_RET_STS_ERROR;
9386       ELSE
9387            x_return_status := FND_API.G_RET_STS_SUCCESS;
9388       END IF;
9389 
9390       IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9391         FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9392       END IF;
9393 
9394 EXCEPTION
9395  WHEN OTHERS THEN
9396    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9397     IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9398       FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9399     END IF;
9400 
9401 END CHECK_CASCADE_REQUEST;
9402 /*11687112 -Cascade ER*/
9403 
9404 /* 13529287 -- Revalue currency ER */
9405 PROCEDURE revalue_contract(p_chr_id              IN NUMBER,
9406                            p_new_conversion_rate IN NUMBER,
9407 		           p_old_conversion_rate IN NUMBER,
9408                            x_return_status       OUT NOCOPY VARCHAR2) IS
9409 
9410   CURSOR l_topline_csr(p_chr_id NUMBER) IS
9411     SELECT ID, start_date, end_date, lse_id
9412       FROM okc_k_lines_b
9413      WHERE chr_id = p_chr_id
9414        AND lse_id IN (1, 14, 19, 46)
9415        AND date_cancelled IS NULL
9416        AND date_terminated IS NULL
9417      ORDER BY line_number;
9418 
9419   CURSOR l_subline_csr(p_cle_id NUMBER) IS
9420     SELECT ID, start_date, end_date, lse_id ,price_negotiated
9421       FROM okc_k_lines_b
9422      WHERE cle_id = p_cle_id
9423        AND lse_id IN (7, 8, 9, 10, 11, 18, 25, 35)
9424        AND date_cancelled IS NULL
9425        AND date_terminated IS NULL
9426      ORDER BY line_number;
9427 
9428   l_chrv_rec_in   okc_contract_pub.chrv_rec_type;
9429   l_chrv_rec_out  okc_contract_pub.chrv_rec_type;
9430   l_k_det_rec     oks_qp_int_pvt.k_details_rec;
9431   l_input_details oks_qp_pkg.input_details;
9432 
9433   l_output_details OKS_QP_PKG.PRICE_DETAILS;
9434   l_modif_details  QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
9435   l_pb_details     OKS_QP_PKG.G_PRICE_BREAK_TBL_TYPE;
9436   l_msg_count      Number;
9437   l_msg_data       Varchar2(2000);
9438   l_active_request BOOLEAN := FALSE;
9439 
9440   l_api_version CONSTANT NUMBER := 1.0;
9441   l_khdr_rec_in         oks_contract_hdr_pub.khrv_rec_type;
9442   l_khdr_rec_out        oks_contract_hdr_pub.khrv_rec_type;
9443   l_kln_rec_in          oks_contract_line_pub.klnv_rec_type;
9444   l_kln_rec_out         oks_contract_line_pub.klnv_rec_type;
9445   l_clev_rec_in         okc_contract_pub.clev_rec_type;
9446   l_clev_rec_out        okc_contract_pub.clev_rec_type;
9447   l_old_conversion_rate NUMBER;
9448 
9449   l_api_name CONSTANT VARCHAR2(40) := 'REVALUE_CONTRACT';
9450   l_mod_name VARCHAR2(256) := lower(G_APP_NAME_OKS) || '.plsql.' ||
9451                               G_PKG_NAME || '.' || l_api_name;
9452 
9453   g_HDR_LEVEL  CONSTANT VARCHAR2(4) := 'HDR';
9454   G_LINE_LEVEL CONSTANT VARCHAR2(4) := 'TL';
9455 
9456   G_OKC_HDR  CONSTANT VARCHAR2(4) := 'CHR';
9457   G_OKC_LINE CONSTANT VARCHAR2(4) := 'CLE';
9458   G_OKS_HDR  CONSTANT VARCHAR2(4) := 'KHR';
9459   G_OKS_LINE CONSTANT VARCHAR2(4) := 'KLE';
9460 
9461   G_EXC_ERROR EXCEPTION;
9462 
9463   FUNCTION get_amounts(p_id IN NUMBER, p_level IN VARCHAR2) RETURN NUMBER IS
9464     l_api_name CONSTANT VARCHAR2(30) := 'GET_AMOUNTS';
9465 
9466     CURSOR l_line_csr(p_line_id NUMBER) IS
9467       SELECT SUM(price_negotiated) amount
9468         FROM okc_k_lines_b
9469        WHERE cle_id = p_line_id
9470          AND chr_id IS NULL
9471          AND lse_id IN (7, 8, 9, 10, 11, 18, 25, 35)
9472          AND date_cancelled IS NULL;
9473 
9474     CURSOR l_hdr_csr(p_chr_id NUMBER) IS
9475       SELECT SUM(price_negotiated) amount
9476         FROM okc_k_lines_b
9477        WHERE chr_id = p_chr_id
9478          AND cle_id IS NULL
9479          AND date_cancelled IS NULL;
9480 
9481     l_amount NUMBER := 0;
9482   BEGIN
9483 
9484     IF p_level = g_hdr_level THEN
9485       OPEN l_hdr_csr(p_id);
9486 
9487       FETCH l_hdr_csr
9488         INTO l_amount;
9489 
9490       IF l_hdr_csr%NOTFOUND THEN
9491         l_amount := 0;
9492       END IF;
9493 
9494       CLOSE l_hdr_csr;
9495     ELSIF p_level = g_line_level THEN
9496       OPEN l_line_csr(p_id);
9497 
9498       FETCH l_line_csr
9499         INTO l_amount;
9500 
9501       IF l_line_csr%NOTFOUND THEN
9502         l_amount := 0;
9503       END IF;
9504 
9505       CLOSE l_line_csr;
9506     ELSE
9507       l_amount := 0;
9508     END IF;
9509 
9510     RETURN l_amount;
9511   END get_amounts;
9512 
9513   PROCEDURE get_k_details(p_id        IN NUMBER,
9514                           p_type      IN VARCHAR2,
9515                           x_k_det_rec OUT NOCOPY oks_qp_int_pvt.k_details_rec) IS
9516     l_api_name CONSTANT VARCHAR2(30) := 'GET_K_DETAILS';
9517 
9518     CURSOR l_okc_chr_csr(p_id NUMBER) IS
9519       SELECT ID, object_version_number
9520         FROM okc_k_headers_all_b
9521        WHERE ID = p_id;
9522 
9523     CURSOR l_okc_cle_csr(p_id NUMBER) IS
9524       SELECT ID, object_version_number FROM okc_k_lines_b WHERE ID = p_id;
9525 
9526     CURSOR l_oks_chr_csr(p_id NUMBER) IS
9527       SELECT ID, object_version_number
9528         FROM oks_k_headers_b
9529        WHERE chr_id = p_id;
9530 
9531     CURSOR l_oks_cle_csr(p_id NUMBER) IS
9532       SELECT ID, object_version_number
9533         FROM oks_k_lines_b
9534        WHERE cle_id = p_id;
9535   BEGIN
9536 
9537     IF p_type = g_okc_hdr THEN
9538       OPEN l_okc_chr_csr(p_id);
9539 
9540       FETCH l_okc_chr_csr
9541         INTO x_k_det_rec;
9542 
9543       IF l_okc_chr_csr%NOTFOUND THEN
9544         x_k_det_rec.ID                    := NULL;
9545         x_k_det_rec.object_version_number := NULL;
9546       END IF;
9547 
9548       CLOSE l_okc_chr_csr;
9549     ELSIF p_type = g_okc_line THEN
9550       OPEN l_okc_cle_csr(p_id);
9551 
9552       FETCH l_okc_cle_csr
9553         INTO x_k_det_rec;
9554 
9555       IF l_okc_cle_csr%NOTFOUND THEN
9556         x_k_det_rec.ID                    := NULL;
9557         x_k_det_rec.object_version_number := NULL;
9558       END IF;
9559 
9560       CLOSE l_okc_cle_csr;
9561     ELSIF p_type = g_oks_hdr THEN
9562       OPEN l_oks_chr_csr(p_id);
9563 
9564       FETCH l_oks_chr_csr
9565         INTO x_k_det_rec;
9566 
9567       IF l_oks_chr_csr%NOTFOUND THEN
9568         x_k_det_rec.ID                    := NULL;
9569         x_k_det_rec.object_version_number := NULL;
9570       END IF;
9571 
9572       CLOSE l_oks_chr_csr;
9573     ELSIF p_type = g_oks_line THEN
9574       OPEN l_oks_cle_csr(p_id);
9575 
9576       FETCH l_oks_cle_csr
9577         INTO x_k_det_rec;
9578 
9579       IF l_oks_cle_csr%NOTFOUND THEN
9580         x_k_det_rec.ID                    := NULL;
9581         x_k_det_rec.object_version_number := NULL;
9582       END IF;
9583 
9584       CLOSE l_oks_cle_csr;
9585     END IF;
9586 
9587   END get_k_details;
9588 
9589 BEGIN
9590 
9591   -- start debug log
9592   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9593 
9594     FND_LOG.string(FND_LOG.level_procedure,
9595                    l_mod_name,
9596                    '100: Entered INTO revalue contract ');
9597     FND_LOG.string(FND_LOG.level_procedure,
9598                    l_mod_name,
9599                    'p_chr_id  ' || p_chr_id);
9600     FND_LOG.string(FND_LOG.level_procedure,
9601                    l_mod_name,
9602                    'p_new_conversion_rate  ' || p_new_conversion_rate);
9603 
9604   END IF;
9605 
9606   -- Make a save point, in case of error rollback
9607   DBMS_TRANSACTION.SAVEPOINT('REVALUE_PRICE');
9608 
9609   x_return_status := OKC_API.G_RET_STS_SUCCESS;
9610 /*
9611   SELECT Nvl(conversion_rate, 1)
9612     INTO l_old_conversion_rate
9613     FROM okc_k_headers_all_b
9614    WHERE id = p_chr_id;*/
9615 
9616 l_old_conversion_rate:= Nvl(p_old_conversion_rate,1);
9617 
9618   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9619 
9620     FND_LOG.string(FND_LOG.level_procedure,
9621                    l_mod_name,
9622                    'l_old_conversion_rate  ' || l_old_conversion_rate);
9623 
9624   END IF;
9625 
9626   FOR l_topline_rec IN l_topline_csr(p_chr_id)
9627 
9628    LOOP
9629 
9630     IF l_topline_rec.lse_id = 46 THEN
9631 
9632       UPDATE okc_k_lines_b okl
9633          SET okl.price_negotiated = ((okl.price_negotiated *
9634                                     l_old_conversion_rate) /
9635                                     Nvl(p_new_conversion_rate, 1))
9636        WHERE okl.id = l_topline_rec.id;
9637 
9638       l_input_details.line_id := l_topline_rec.id;
9639       l_input_details.intent  := 'SB_O';
9640       oks_qp_int_pvt.compute_price(p_api_version         => 1.0,
9641                                    p_init_msg_list       => 'T',
9642                                    p_detail_rec          => l_input_details,
9643                                    x_price_details       => l_output_details,
9644                                    x_modifier_details    => l_modif_details,
9645                                    x_price_break_details => l_pb_details,
9646                                    x_return_status       => x_return_status,
9647                                    x_msg_count           => l_msg_count,
9648                                    x_msg_data            => l_msg_data);
9649 
9650       IF x_return_status <> OKC_API.G_RET_STS_SUCCESS then
9651 
9652         IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9653 
9654           FND_LOG.string(FND_LOG.level_procedure,
9655                          l_mod_name,
9656                          ' error updating subscription line in revalue contract  ' ||
9657                          l_topline_rec.id);
9658 
9659         END IF;
9660 
9661         RAISE g_exc_error;
9662       END IF;
9663 
9664     ELSE
9665 
9666 
9667       FOR l_subline_rec IN l_subline_csr(l_topline_rec.id) LOOP
9668 
9669         IF l_subline_rec.lse_id NOT IN (7, 9, 25) THEN
9670 
9671       l_clev_rec_in.id               := l_subline_rec.id;
9672       get_k_details(p_id        => l_subline_rec.id,
9673                                    p_type      => g_okc_line,
9674                                    x_k_det_rec => l_k_det_rec);
9675       l_clev_rec_in.object_version_number := l_k_det_rec.object_version_number;
9676       l_clev_rec_in.price_negotiated :=(l_subline_rec.price_negotiated *l_old_conversion_rate) /Nvl(p_new_conversion_rate, 1);
9677 
9678       okc_contract_pub.update_contract_line(p_api_version   => l_api_version,
9679                                             p_init_msg_list => 'T',
9680                                             x_return_status => x_return_status,
9681                                             x_msg_count     => l_msg_count,
9682                                             x_msg_data      => l_msg_data,
9683                                             p_clev_rec      => l_clev_rec_in,
9684                                             x_clev_rec      => l_clev_rec_out);
9685 
9686 
9687       IF x_return_status <> OKC_API.G_RET_STS_SUCCESS then
9688 
9689         IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9690 
9691           FND_LOG.string(FND_LOG.level_procedure,
9692                          l_mod_name,
9693                          ' error updating amounts for a line  ' ||
9694                          l_subline_rec.id);
9695 
9696         END IF;
9697 
9698         RAISE g_exc_error;
9699       END IF;
9700 
9701 
9702      ELSE   --if lse_id in 7,9,25
9703 
9704        UPDATE okc_k_lines_b okl
9705            SET okl.price_negotiated = ((okl.price_negotiated *
9706                                       l_old_conversion_rate) /
9707                                       Nvl(p_new_conversion_rate, 1))
9708          WHERE okl.id = l_subline_rec.id;
9709 
9710         l_input_details.line_id    := l_topline_rec.id;
9711         l_input_details.subline_id := l_subline_rec.id;
9712         l_input_details.intent     := 'OA';
9713 
9714         OKS_QP_INT_PVT.COMPUTE_PRICE(P_API_VERSION         => 1.0,
9715                                      P_INIT_MSG_LIST       => 'T',
9716                                      P_DETAIL_REC          => L_INPUT_DETAILS,
9717                                      X_PRICE_DETAILS       => L_OUTPUT_DETAILS,
9718                                      X_MODIFIER_DETAILS    => L_MODIF_DETAILS,
9719                                      X_PRICE_BREAK_DETAILS => L_PB_DETAILS,
9720                                      X_RETURN_STATUS       => x_RETURN_STATUS,
9721                                      X_MSG_COUNT           => L_MSG_COUNT,
9722                                      X_MSG_DATA            => L_MSG_DATA);
9723 
9724         IF x_return_status <> OKC_API.G_RET_STS_SUCCESS then
9725 
9726           IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9727 
9728             FND_LOG.string(FND_LOG.level_procedure,
9729                            l_mod_name,
9730                            ' error updating sub line in revalue contract  ' ||
9731                            l_subline_rec.id);
9732 
9733           END IF;
9734 
9735           RAISE g_exc_error;
9736         END IF;
9737       END IF; --lse_id  7,9,25
9738       end loop; --sublline
9739 
9740       l_clev_rec_in.ID               := l_topline_rec.id;
9741       l_clev_rec_in.price_negotiated :=
9742        get_amounts(p_id    => l_topline_rec.id,
9743                                                     p_level => g_line_level);
9744       get_k_details(p_id        => l_topline_rec.id,
9745                     p_type      => g_okc_line,
9746                     x_k_det_rec => l_k_det_rec);
9747 
9748       l_clev_rec_in.object_version_number := l_k_det_rec.object_version_number;
9749       okc_contract_pub.update_contract_line(p_api_version   => l_api_version,
9750                                             p_init_msg_list => 'T',
9751                                             x_return_status => x_return_status,
9752                                             x_msg_count     => l_msg_count,
9753                                             x_msg_data      => l_msg_data,
9754                                             p_clev_rec      => l_clev_rec_in,
9755                                             x_clev_rec      => l_clev_rec_out);
9756 
9757       IF x_return_status <> OKC_API.G_RET_STS_SUCCESS then
9758 
9759         IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9760 
9761           FND_LOG.string(FND_LOG.level_procedure,
9762                          l_mod_name,
9763                          ' error updating amounts for a line  ' ||
9764                          l_topline_rec.id);
9765 
9766         END IF;
9767 
9768         RAISE g_exc_error;
9769       END IF;
9770 
9771     END IF; --subscription
9772   end loop; --line
9773 
9774   l_chrv_rec_in.ID               := p_chr_id;
9775   l_chrv_rec_in.estimated_amount :=
9776    get_amounts(p_id    => p_chr_id,
9777                                                 p_level => g_hdr_level);
9778 
9779   get_k_details(p_id        => p_chr_id,
9780                 p_type      => g_okc_hdr,
9781                 x_k_det_rec => l_k_det_rec);
9782   l_chrv_rec_in.object_version_number := l_k_det_rec.object_version_number;
9783 
9784   okc_contract_pub.update_contract_header(p_api_version       => l_api_version,
9785                                           p_init_msg_list     => 'T',
9786                                           x_return_status     => x_return_status,
9787                                           x_msg_count         => l_msg_count,
9788                                           x_msg_data          => l_msg_data,
9789                                           p_restricted_update => okc_api.g_false,
9790                                           p_chrv_rec          => l_chrv_rec_in,
9791                                           x_chrv_rec          => l_chrv_rec_out);
9792 
9793   IF x_return_status <> OKC_API.G_RET_STS_SUCCESS then
9794 
9795     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9796 
9797       FND_LOG.string(FND_LOG.level_procedure,
9798                      l_mod_name,
9799                      ' error updating amounts for a contract header  ' ||
9800                      p_chr_id);
9801 
9802     END IF;
9803 
9804     RAISE g_exc_error;
9805   END IF;
9806 
9807 EXCEPTION
9808   WHEN g_exc_error THEN
9809     -- end debug log
9810     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
9811       FND_LOG.string(FND_LOG.level_procedure,
9812                      l_mod_name,
9813                      'exception raised in revalue contract ');
9814       FND_LOG.string(FND_LOG.level_procedure, l_mod_name, 'Leaving 100 ');
9815     END IF;
9816 
9817     DBMS_TRANSACTION.rollback_savepoint('REVALUE_PRICE');
9818 
9819   WHEN OTHERS THEN
9820     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9821     IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9822       FND_LOG.string(FND_LOG.level_procedure,
9823                      l_mod_name || '.end',
9824                      'error at revalue contract l_return_status=' ||
9825                      x_return_status);
9826       FND_LOG.string(FND_LOG.level_procedure, l_mod_name, 'Leaving 200 ');
9827     END IF;
9828     DBMS_TRANSACTION.rollback_savepoint('REVALUE_PRICE');
9829 
9830 END REVALUE_CONTRACT;
9831 
9832 /*============================================================================+
9833     | Procedure:           check_massupd_request
9834     |
9835     | Purpose:             Check to see if there is any active request runnning in the background for Mass Update
9836     |
9837     | In Parameters:       p_chr_id            the contract id
9838     | Out Parameters:      x_return_status     standard return status
9839     |
9840  +============================================================================*/
9841 
9842  PROCEDURE check_massupd_request(
9843    p_chr_id         IN NUMBER   ,
9844    x_return_status OUT NOCOPY VARCHAR2
9845  ) IS
9846     l_api_name CONSTANT VARCHAR2(30) := 'CHECK_MASSUPD_REQUEST';
9847     l_api_version CONSTANT NUMBER := 1;
9848     l_mod_name VARCHAR2(256) := lower(G_APP_NAME_OKS) || '.plsql.' || G_PKG_NAME || '.' || l_api_name;
9849     l_error_text VARCHAR2(512);
9850 /*
9851   This will check whether there is any active mass update request running in the background.
9852   If mass update request is running ,it will issue an error message
9853 */
9854 
9855 
9856   Program_ID    NUMBER;
9857   Prog_Appl_ID  NUMBER;
9858   req_id        NUMBER;
9859 
9860   CURSOR  c_massupd_req(l_chr_id IN NUMBER,l_prog_appl_id IN NUMBER,l_prg_id IN NUMBER) IS
9861   SELECT max(request_id)
9862   FROM   fnd_concurrent_requests
9863 	WHERE  program_application_id = l_prog_appl_id
9864 	AND    concurrent_program_id  = l_prg_id
9865   AND    argument1=to_char(l_chr_id)
9866   AND    phase_code  NOT IN ('C');
9867 
9868 
9869 BEGIN
9870      IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9871         FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.begin', ' p_chr_id='|| p_chr_id);
9872      END IF;
9873 
9874      x_return_status := FND_API.G_RET_STS_SUCCESS;
9875 
9876 
9877     SELECT concurrent_program_id, p.application_id
9878     INTO   program_id, prog_appl_id
9879     FROM   fnd_concurrent_programs P,
9880            fnd_application A
9881     WHERE  concurrent_program_name  = 'OKSLAUNCHMASSUPD'
9882     AND    P.application_id         = A.Application_ID
9883     AND    A.application_short_name = 'OKS';
9884 
9885     --Check if any request of the concurrent program 'OKSLAUNCHMASSUPD' is in Pending or Running Phase for the given contract header id
9886       OPEN c_massupd_req(p_chr_id,prog_appl_id,program_id);
9887          FETCH c_massupd_req INTO req_id;
9888       CLOSE c_massupd_req;
9889 
9890       IF req_id is not null THEN
9891            x_return_status := FND_API.G_RET_STS_ERROR;
9892       ELSE
9893            x_return_status := FND_API.G_RET_STS_SUCCESS;
9894       END IF;
9895 
9896       IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9897         FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9898       END IF;
9899 
9900 EXCEPTION
9901  WHEN OTHERS THEN
9902    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9903     IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
9904       FND_LOG.string(FND_LOG.level_procedure, l_mod_name || '.end', 'x_return_status='|| x_return_status);
9905     END IF;
9906 
9907 END CHECK_MASSUPD_REQUEST;
9908 
9909 /*============================================================================+
9910  	     | Procedure:           Get_Duration_uom
9911  	     |
9912  	     | Purpose:             VRM
9913  	     |
9914  	     | In Parameters:
9915  	     | Out Parameters:      x_return_status     standard return status
9916  	     |
9917  	  +============================================================================*/
9918 
9919  	  Function Get_Duration(
9920  	     p_start_date in date,
9921  	     p_end_date in DATE
9922  	  ) return NUMBER is
9923  	   l_duration  NUMBER;
9924  	    l_timeunit VARCHAR2(30);
9925  	   l_return_status   VARCHAR2(1);
9926 
9927  	  BEGIN
9928 
9929  	  OKC_TIME_UTIL_PUB.Get_Duration
9930  	           (
9931  	            p_start_date     => p_start_date,
9932  	            p_end_date       => p_end_date,
9933  	            x_duration       => l_duration,
9934  	            x_timeunit       => l_timeunit,
9935  	            x_return_status  => l_return_status
9936  	           );
9937 
9938  	   IF l_duration IS NULL THEN
9939  	        l_duration:=1;
9940  	   END IF;
9941 
9942  	   RETURN l_duration;
9943 
9944  	   END get_duration;
9945 
9946 
9947  	   /*============================================================================+
9948  	     | Procedure:           Get_Duration_uom
9949  	     |
9950  	     | Purpose:             VRM
9951  	     |
9952  	     | In Parameters:
9953  	     | Out Parameters:      x_return_status     standard return status
9954  	     |
9955  	  +============================================================================*/
9956 
9957  	  Function Get_UOM(
9958  	     p_start_date in date,
9959  	     p_end_date in DATE
9960  	  ) return VARCHAR2 is
9961  	   l_duration  NUMBER;
9962  	    l_timeunit VARCHAR2(30);
9963  	   l_return_status   VARCHAR2(1);
9964 
9965  	  BEGIN
9966 
9967  	  OKC_TIME_UTIL_PUB.Get_Duration
9968  	           (
9969  	            p_start_date     => p_start_date,
9970  	            p_end_date       => p_end_date,
9971  	            x_duration       => l_duration,
9972  	            x_timeunit       => l_timeunit,
9973  	            x_return_status  => l_return_status
9974  	           );
9975 
9976 
9977 
9978  	   RETURN l_timeunit;
9979 
9980  	   END Get_UOM;
9981 
9982 END OKS_AUTH_UTIL_PVT;