[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;