1 PACKAGE BODY po_clm_clo_util AS
2 /* $Header: PO_CLM_CLO_UTIL.plb 120.16.12020000.2 2013/02/10 19:37:54 vegajula ship $ */
3
4
5 /* CLM Switch Code Changes - Start */
6
7 FUNCTION getCLMStatus RETURN VARCHAR2
8 IS
9 BEGIN
10 if checkCLMResp (fnd_global.user_id, fnd_global.resp_id,fnd_global.resp_appl_id) ='Y' THEN
11 RETURN 'Y';
12 ELSE
13 RETURN 'N';
14 END IF;
15 EXCEPTION WHEN OTHERS THEN
16 RETURN 'N';
17 END getCLMStatus;
18
19 FUNCTION checkCLMResp ( user_id NUMBER, resp_id NUMBER, appl_id NUMBER ) RETURN VARCHAR2
20 IS
24 Profile_Value_Site_Level := NVL(FND_PROFILE.VALUE('PO_CLM_INSTALLED'),'N');
21 Profile_Value_Site_Level VARCHAR2(1);
22 Profile_Value_Resp_Level VARCHAR2(1);
23 BEGIN
25 Profile_Value_Resp_Level := NVL(FND_PROFILE.VALUE_SPECIFIC( NAME => 'PO_CLM_ENABLED',
26 RESPONSIBILITY_ID => resp_id),'N');
27
28 IF Profile_Value_Site_Level = 'N' THEN
29 RETURN Profile_Value_Site_Level;
30 ELSE
31 RETURN Profile_Value_Resp_Level;
32 END IF;
33
34 EXCEPTION WHEN OTHERS THEN
35 RETURN 'N';
36 END checkCLMResp;
37
38 /* CLM Switch Code Changes - Start */
39
40 FUNCTION IsFundedInfoSLINAllowed RETURN VARCHAR2 IS
41 InfoFundedStatus VARCHAR2(1);
42 BEGIN
43
44 --Change THIS FLAG to Disable Info Funded
45 InfoFundedStatus := 'N';
46
47 IF getCLMStatus <> 'Y'
48 THEN
49 RETURN 'N';
50 ELSE
51 RETURN InfoFundedStatus;
52 END IF;
53 END;
54
55 --Enforce Single Distribution Flag
56 FUNCTION IsEnforceSingleDistEnabled
57 RETURN VARCHAR2
58 IS
59 EnforceSingleDistStatus VARCHAR2(1);
60 BEGIN
61
62 --Change THIS FLAG to Disable Enforce Single Distribution
63 EnforceSingleDistStatus := 'N';
64
65 IF getCLMStatus <> 'Y'
66 THEN
67 RETURN 'N';
68 ELSE
69 RETURN EnforceSingleDistStatus;
70 END IF;
71 END IsEnforceSingleDistEnabled;
72
73 --Complex Pricing Flag
74 FUNCTION IsComplexPricingAllowed return varchar2 is
75 ComplexPricingStatus VARCHAR2(1);
76 BEGIN
77
78 --Change THIS FLAG to Disable Complex Pricing
79 ComplexPricingStatus := 'N';
80 IF getCLMStatus <> 'Y'
81 THEN
82 RETURN 'N';
83 ELSE
84 RETURN ComplexPricingStatus;
85 END IF;
86 END;
87
88 FUNCTION Isclminstalled
89 RETURN BOOLEAN
90 IS
91 BEGIN
92 if getCLMStatus ='Y'
93 THEN
94 RETURN TRUE;
95 ELSE
96 RETURN FALSE;
97 END IF;
98
99 END isclminstalled;
100
101 FUNCTION includeOptionAmount RETURN VARCHAR2 is begin return 'Y'; end;
102
103 FUNCTION validateInfoflags( p_from_clm_info_flag IN VARCHAR2
104 ,p_to_clm_info_flag IN VARCHAR2
105 )
106 RETURN BOOLEAN
107 IS
108 BEGIN
109 IF Nvl(p_from_clm_info_flag,'N') = 'N' AND Nvl(p_to_clm_info_flag,'N') ='N' THEN
110 RETURN FALSE;
111 ELSE
112 RETURN TRUE;
113 END IF;
114 END validateInfoflags;
115
116 FUNCTION valdiateFundFalgs ( p_from_clm_funded_flag IN VARCHAR2
117 ,p_to_clm_funded_flag IN VARCHAR2
118 )
119 RETURN BOOLEAN
120 IS
121 BEGIN
122 IF p_from_clm_funded_flag ='Y' AND p_to_clm_funded_flag='Y' THEN
123 RETURN FALSE ;
124 ELSE
125 RETURN TRUE;
126 END IF;
127 END valdiateFundFalgs;
128
129 Procedure getclmFlags
130 (p_product IN VARCHAR2
131 ,p_document_id IN NUMBER
132 ,p_line_id IN NUMBER
133 ,x_clm_info_flag IN out NOCOPY VARCHAR2
134 ,x_clm_funded_flag IN OUT NOCOPY VARCHAR2)
135 IS
136 l_clm_info_flag NUMBER := NULL;
137 BEGIN
138 IF p_product = 'PO' THEN
139 SELECT Nvl(clm_info_flag,'N'),clm_funded_flag
140 INTO x_clm_info_flag, x_clm_funded_flag
141 FROM po_lines_merge_v
142 WHERE po_line_id = p_line_id AND draft_id = -1;
143 ELSIF p_product = 'ICX' THEN
144 SELECT Nvl(clm_info_flag,'N'),clm_funded_flag
145 INTO x_clm_info_flag, x_clm_funded_flag
146 FROM po_requisition_lines_all
147 WHERE requisition_line_id = p_line_id;
148 ELSIF p_product ='PON' THEN
149 SELECT Nvl(clm_info_flag,'N'),clm_funded_flag
150 INTO x_clm_info_flag, x_clm_funded_flag
151 FROM pon_auction_item_prices_all
152 WHERE line_number = p_line_id
153 AND auction_header_id = p_document_id;
154
155
156 ELSIF p_product='PON BID' THEN
157 SELECT Nvl(clm_info_flag,'N'),clm_funded_flag
158 INTO x_clm_info_flag, x_clm_funded_flag
159 FROM pon_bid_item_prices
160 WHERE BID_NUMBER = p_line_id
161 AND auction_header_id = p_document_id;
162
163 END IF;
164 EXCEPTION
165 WHEN OTHERS THEN
166 NULL;
167 END getclmflags;
168
169 FUNCTION Getlinenum
170 (p_product IN VARCHAR2
171 ,p_document_id IN NUMBER
172 ,p_line_id IN NUMBER)
173 RETURN NUMBER
174 IS
175 l_line_num NUMBER := NULL;
176 BEGIN
177 IF p_product = 'PO' THEN
178 SELECT LINE_NUM --line_num_display
179 INTO l_line_num
180 FROM po_lines_merge_v
181 WHERE po_line_id = p_line_id AND draft_id = -1;
182 ELSIF p_product = 'ICX' THEN
183 SELECT LINE_NUM
184 INTO l_line_num
185 FROM po_requisition_lines_all
186 WHERE requisition_line_id = p_line_id;
187 ELSIF p_product ='PON' THEN
191 WHERE line_number = p_line_id
188 /*SELECT LINE_NUM_DISPLAY
189 INTO l_line_num
190 FROM pon.pon_auction_item_prices_all
192 AND auction_header_id = p_document_id;*/
193 l_line_num := p_line_id;
194
195 ELSIF p_product='PON BID' THEN
196 /* SELECT LINE_NUM_DISPLAY
197 INTO l_line_num
198 FROM pon_bid_item_prices
199 WHERE BID_NUMBER = p_line_id
200 AND auction_header_id = p_document_id;*/
201 l_line_num := p_line_id;
202 END IF;
203
204 RETURN l_line_num;
205 EXCEPTION
206 WHEN OTHERS THEN
207 RETURN NULL;
208 END Getlinenum;
209
210 FUNCTION isOptionExist
211 (p_product IN VARCHAR2,
212 p_document_id IN NUMBER DEFAULT NULL,
213 p_line_id IN VARCHAR2)
214 RETURN VARCHAR2
215 IS
216 l_flag VARCHAR2(1) := 'N';
217 l_line_num NUMBER;
218 BEGIN
219 -- l_line_num:= getlinenum(p_product,p_document_id,p_line_id);
220 IF p_product = 'PO' THEN
221 SELECT 'Y'
222 INTO l_flag
223 FROM dual
224 WHERE EXISTS (SELECT 'x'
225 FROM po_lines_merge_v
226 WHERE CLM_BASE_LINE_NUM = p_line_id AND draft_id = -1
227 AND PO_HEADER_ID=Nvl(p_document_id,PO_HEADER_ID));
228
229 ELSIF p_product = 'ICX' THEN
230
231 SELECT 'Y'
232 INTO l_flag
233 FROM dual
234 WHERE EXISTS (SELECT 'x'
235 FROM po_requisition_lines_all
236 WHERE CLM_BASE_LINE_NUM = p_line_id
237 AND REQUISITION_HEADER_ID=Nvl(p_document_id,REQUISITION_HEADER_ID));
238
239 ELSIF p_product = 'PON' THEN
240 SELECT 'Y'
241 INTO l_flag
242 FROM dual
243 WHERE EXISTS (SELECT 'x'
244 FROM pon_auction_item_prices_all
245 WHERE 1=1
246 AND CLM_BASE_LINE_NUM = p_line_id
247 AND auction_header_id = p_document_id);
248
249 ELSIF p_product = 'OFFER' THEN
250 l_flag := 'N';
251 /*SELECT 'Y'
252 INTO l_flag
253 FROM dual
254 WHERE EXISTS (SELECT 'x'
255 FROM pon_bid_item_prices
256 WHERE CLM_BASE_LINE_NUM = p_line_id
257 AND auction_header_id = p_document_id);*/
258
259 END IF;
260
261 RETURN l_flag;
262
263 EXCEPTION
264 WHEN No_Data_Found THEN
265 RETURN 'N';
266 WHEN OTHERS THEN
267 RETURN 'N';
268
269 END isOptionExist;
270
271 FUNCTION Isclinvalidformove
272 (p_product IN VARCHAR2,
273 p_document_id IN NUMBER DEFAULT NULL,
274 p_line_id IN VARCHAR2)
275 RETURN VARCHAR2
276 IS
277 l_flag VARCHAR2(1) := 'N';
278 BEGIN
279 IF p_product = 'PO' THEN
280 SELECT 'Y'
281 INTO l_flag
282 FROM dual
283 WHERE NOT EXISTS (SELECT 'x'
284 FROM po_lines_merge_v
285 WHERE group_line_id = p_line_id AND draft_id = -1);
286
287
288 ELSIF p_product = 'ICX' THEN
289 SELECT 'Y'
290 INTO l_flag
291 FROM dual
292 WHERE NOT EXISTS (SELECT 'x'
293 FROM po_requisition_lines_all
294 WHERE group_line_id = p_line_id);
295
296
297
298
299 ELSIF p_product = 'PON' THEN
300 SELECT 'Y'
301 INTO l_flag
302 FROM dual
303 WHERE NOT EXISTS (SELECT 'x'
304 FROM pon_auction_item_prices_all
305 WHERE group_line_id = p_line_id
306 AND auction_header_id = p_document_id);
307
308
309 --Unsolicited Lines Project
310 ELSIF p_product = 'OFFER' THEN
311 SELECT 'Y'
312 INTO l_flag
313 FROM dual
314 WHERE NOT EXISTS (SELECT 'x'
315 FROM pon_bid_item_prices
316 WHERE bid_number = p_document_id
317 AND group_line_id = p_line_id);
318
319
320 END IF;
321
322 RETURN l_flag;
323 EXCEPTION
324 WHEN No_Data_Found THEN
325 RETURN 'N';
326 WHEN OTHERS THEN
327 RETURN 'N';
328 END isclinvalidformove;
329
330 FUNCTION Get_group_line_id
331 (p_product IN VARCHAR2,
332 p_document_id IN NUMBER DEFAULT NULL,
333 p_group_line_id IN VARCHAR2)
334 RETURN NUMBER
335 IS
336 l_group_line_id NUMBER := NULL;
337 BEGIN
338 IF p_product = 'PO' THEN
339 SELECT group_line_id
340 INTO l_group_line_id
341 FROM po_lines_merge_v
342 WHERE po_line_id = p_group_line_id AND draft_id = -1;
343 ELSIF p_product = 'ICX' THEN
344 SELECT group_line_id
345 INTO l_group_line_id
346 FROM po_requisition_lines_all
347 WHERE requisition_line_id = p_group_line_id;
348 ELSIF p_product = 'PON' THEN
349 SELECT group_line_id
350 INTO l_group_line_id
351 FROM pon_auction_item_prices_all
352 WHERE auction_header_id = p_document_id
356 INTO l_group_line_id
353 AND line_number = p_group_line_id;
354 ELSIF p_product = 'PON BID' THEN
355 SELECT group_line_id
357 FROM pon_bid_item_prices
358 WHERE auction_header_id = p_document_id
359 AND bid_number = p_group_line_id;
360 END IF;
361
362 RETURN l_group_line_id;
363 EXCEPTION
364 WHEN OTHERS THEN
365 NULL;
366 END get_group_line_id;
367
368
369 PROCEDURE Check_Uda_Enabled
370 (
371 p_functional_area_code IN VARCHAR2
372 ,p_document_type_code IN VARCHAR2
373 ,p_document_style_id IN NUMBER
374 ,x_enabled_flag OUT NOCOPY VARCHAR2
375 ,x_return_status OUT NOCOPY VARCHAR2
376 ,x_errorcode OUT NOCOPY NUMBER
377 ,x_msg_count OUT NOCOPY NUMBER
378 ,x_msg_data OUT NOCOPY VARCHAR2
379 )
380 IS
381 d_progress NUMBER := 0;
382
383 BEGIN
384
385 --kkolukul: Fix for bug 9298800
386 IF( p_functional_area_code = 'REQUISITIONS') THEN
387
388 x_enabled_flag := por_util_pkg.get_federal_enabled_flag;
389 ELSIF p_functional_area_code = 'PURCHASING' THEN
390 SELECT NVL(CLM_FLAG, 'N')
391 INTO x_enabled_flag
392 FROM PO_DOC_STYLE_HEADERS
393 WHERE STYLE_ID = p_document_style_id;
394
395 ELSE
396 x_enabled_flag := 'Y';
397
398 END IF;
399
400 x_return_status := FND_API.G_RET_STS_SUCCESS;
401
402 EXCEPTION
403 WHEN OTHERS THEN
404 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
405
406 END Check_Uda_Enabled;
407
408
409 /*To check whether uda is enabled*/
410 PROCEDURE check_po_uda_enabled
411 (
412 p_document_type_code IN VARCHAR2,
413 p_document_style_id IN VARCHAR2,
414 x_enabled_flag OUT NOCOPY VARCHAR2,
415 x_return_status OUT NOCOPY VARCHAR2
416 )
417 IS
418 d_progress NUMBER := 0;
419 l_errorcode NUMBER;
420 l_msg_count NUMBER;
421 l_msg_data VARCHAR2(2000);
422
423 BEGIN
424
425 check_uda_enabled(p_functional_area_code => 'PURCHASING',
426 p_document_type_code => p_document_type_code, --<Bug 14837341>
427 p_document_style_id => p_document_style_id,
428 x_enabled_flag => x_enabled_flag,
429 x_return_status => x_return_status,
430 x_errorcode => l_errorcode,
431 x_msg_count => l_msg_count,
432 x_msg_data => l_msg_data
433 );
434
435 EXCEPTION
436 WHEN OTHERS THEN
437 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
438
439 END check_po_uda_enabled;
440
441
442 FUNCTION Isvalidtomove
443 (p_product IN VARCHAR2,
444 p_action IN VARCHAR2,
445 p_document_id IN NUMBER DEFAULT NULL,
446 p_from_line_id IN NUMBER,
447 p_from_group_line_id IN NUMBER,
448 p_from_clm_info_flag IN VARCHAR2,
449 p_from_clm_option_indicator IN VARCHAR2,
450 p_from_clm_base_line_num IN NUMBER,
451 p_from_clm_option_num IN NUMBER,
452 p_from_clm_option_from_date IN DATE,
453 p_from_clm_option_to_date IN DATE,
454 p_from_clm_funded_flag IN VARCHAR2,
455 p_to_line_id IN NUMBER,
456 p_to_group_line_id IN NUMBER,
457 p_to_clm_info_flag IN VARCHAR2,
458 p_to_clm_option_indicator IN VARCHAR2,
459 p_to_clm_base_line_num IN NUMBER,
460 p_to_clm_option_num IN NUMBER,
461 p_to_clm_option_from_date IN DATE,
462 p_to_clm_option_to_date IN DATE,
463 p_to_clm_funded_flag IN VARCHAR2)
464 RETURN VARCHAR2
465 IS
466
467 l_group_line_id NUMBER;
468 l_clm_info_flag VARCHAR2(1);
469 l_clm_funded_flag VARCHAR2(1);
470
471 BEGIN
472 -- Do not show option lines
473
474 IF p_from_line_id = p_to_line_id THEN
475 RETURN 'N';
476 END IF;
477
478 IF(Nvl(p_from_clm_option_indicator,'N') = 'O' AND
479 p_from_clm_base_line_num is not null) THEN
480 RETURN 'N';
481 END IF;
482
483 --IS_FROM_TO_VALID
484 IF (p_product = 'PON'
485 AND p_action IN ('BEFORE','AFTER')
486 AND IS_FROM_TO_VALID(p_from_line_id,
487 p_to_line_id,
488 p_action,
489 p_document_id) = 'NO') THEN
490
491 RETURN 'N';
492 END IF;
493
494 -- Unsolicited Lines Project
495 IF (p_product = 'OFFER'
496 AND p_action IN ('BEFORE','AFTER')
497 AND IS_UNSOL_FROM_TO_VALID(p_from_line_id,
498 p_to_line_id,
499 p_action,
500 p_document_id) = 'NO') THEN
501
502 RETURN 'N';
503 END IF;
504
505 /* moving a normal clin/slin before or after then show all normal clins start*/
506 IF p_action IN ('BEFORE','AFTER')
507 AND p_from_clm_base_line_num IS NULL THEN
508 IF p_to_clm_base_line_num IS NOT NULL THEN
509 RETURN 'N';
510 END IF;
511
512
516
513 IF ( p_from_group_line_id = p_to_group_line_id AND p_from_clm_info_flag <> p_to_clm_info_flag ) THEN
514 RETURN 'N'; -- dont move priced slins before/after info slins
515 END IF;
517 IF (p_from_group_line_id IS NOT NULL AND Nvl(isOptionExist(p_product,p_document_id,p_from_line_id),'N') = 'Y'
518 AND p_to_group_line_id IS NULL) THEN
519 RETURN 'N'; -- A base slin can't be moved out of its clin hierarchy
520 END IF;
521
522 IF p_from_group_line_id IS NULL
523 AND p_to_group_line_id IS NULL
524 AND p_to_clm_base_line_num IS NULL THEN
525 RETURN 'Y';
526 END IF;
527
528 IF p_from_group_line_id IS NOT NULL
529 AND p_to_group_line_id IS NULL
530 AND p_to_clm_base_line_num IS NULL THEN
531 RETURN 'Y';
532 END IF;
533
534 IF p_from_group_line_id IS NOT NULL
535 AND p_to_group_line_id = p_from_group_line_id
536 AND p_to_clm_base_line_num IS NULL THEN
537 RETURN 'Y';
538 END IF;
539
540 RETURN 'N';
541 END IF;
542
543 /* moving a normal clin/slin before or after then show all normal clins end*/
544
545 /* Moving a Normal clin/slin as slin start*/
546 IF p_action = 'AS_SLIN'
547 AND p_from_clm_base_line_num IS NULL THEN
548
549 IF p_to_clm_base_line_num IS NOT NULL THEN
550 RETURN 'N';
551 END IF;
552
553 IF NOT validateInfoflags(p_from_clm_info_flag,p_to_clm_info_flag)
554 OR NOT valdiateFundFalgs(p_from_clm_funded_flag,p_to_clm_funded_flag) THEN
555 RETURN 'N';
556 END IF;
557
558 IF p_from_group_line_id IS NULL THEN
559
560 IF Isclinvalidformove(p_product,p_document_id,p_from_line_id) = 'N'
561 OR isOptionExist(p_product,p_document_id,p_from_line_id) = 'Y'
562 THEN
563 RETURN 'N';
564 END IF;
565
566 IF p_to_group_line_id IS NULL THEN
567
568 /* Unsolicited Lines Project : If OFFER, check for unsol line references.
569 * A Unsolcited CLIN with sol line references cannot be moved into a structure
570 * where clin already has references.
571 */
572 IF PON_UNSOL_UTIL_PKG.HAS_SOL_LINE_REFERENCES(p_document_id,p_from_line_id) = 'Y'
573 AND PON_UNSOL_UTIL_PKG.HAS_SOL_LINE_REFERENCES(p_document_id,p_to_line_id) = 'Y' THEN
574
575 RETURN 'N';
576 END IF;
577
578 RETURN 'Y';
579 END IF;
580 END IF;
581
582
583 IF p_from_group_line_id IS NOT NULL
584 AND p_to_group_line_id IS NULL THEN
585 IF isOptionExist(p_product,p_document_id,p_from_line_id) = 'Y' then
586 return 'N';
587 end if;
588 IF p_from_group_line_id = p_to_line_id THEN
589 RETURN 'N';
590 END IF;
591
592 /* Unsolicited Lines Project : If OFFER, check for unsol line references.
593 * A Unsolcited SLIN with sol line references cannot be moved into a structure
594 * where clin already has references.
595 */
596 IF PON_UNSOL_UTIL_PKG.HAS_SOL_LINE_REFERENCES(p_document_id,p_from_line_id) = 'Y'
597 AND PON_UNSOL_UTIL_PKG.HAS_SOL_LINE_REFERENCES(p_document_id,p_to_line_id) = 'Y' THEN
598
599 RETURN 'N';
600 END IF;
601
602 RETURN 'Y';
603 END IF;
604
605 RETURN 'N';
606 END IF;
607
608 /* Moving a Normal clin/slin as slin end*/
609 /* Moving a Normal clin/slin as option start */
610 IF p_action = 'AS_OPTION'
611 AND p_from_clm_base_line_num IS NULL THEN
612 IF p_to_clm_base_line_num IS NOT NULL THEN
613 RETURN 'N';
614 END IF;
615
616 IF p_from_group_line_id IS NULL THEN
617 IF Isclinvalidformove(p_product,p_document_id,p_from_line_id) = 'N'
618 OR isOptionExist(p_product,p_document_id,p_from_line_id) = 'Y'
619 THEN
620 RETURN 'N';
621 END IF;
622
623 IF p_from_line_id = p_to_group_line_id THEN
624 RETURN 'N';
625 END IF;
626
627 IF p_to_group_line_id IS NOT NULL THEN
628 -- i.e Making normal clin as option to slin if the to line is 'slin'
629 -- Then validate info and funding flags with the parent of the 'to slin'.
630 getclmFlags
631 (p_product => p_product
632 ,p_document_id => p_document_id
633 ,p_line_id => p_to_group_line_id
634 ,x_clm_info_flag => l_clm_info_flag
635 ,x_clm_funded_flag => l_clm_funded_flag);
636
637 IF NOT validateInfoflags(p_from_clm_info_flag,l_clm_info_flag)
638 OR NOT valdiateFundFalgs(p_from_clm_funded_flag,l_clm_funded_flag) THEN
639 RETURN 'N';
640 END IF;
641 END IF;
642 RETURN 'Y';
643 END IF;
644
645 /* Show only base slins from the current clin - option clins are eliminated
646 at the first palce itself */
647 IF p_from_group_line_id IS NOT NULL THEN
648 IF p_to_group_line_id = p_from_group_line_id THEN
649 RETURN 'Y';
650 END IF;
651
652 RETURN 'N';
653 END IF;
654 END IF;
655
656 /* Moving a Normal clin/slin as option end */
657 /* Moving a o-clin/o-slin before,after is an invalid operation start*/
661 IF p_from_group_line_id IS NULL THEN
658 IF p_action IN ('BEFORE','AFTER')
659 AND p_from_clm_base_line_num IS NOT NULL THEN
660
662 IF p_to_group_line_id IS NULL AND p_from_clm_base_line_num=p_to_clm_base_line_num THEN
663 RETURN 'Y';
664 END IF;
665 END IF;
666
667 IF p_from_group_line_id IS NOT NULL THEN
668 IF p_to_group_line_id = p_from_group_line_id AND p_from_clm_base_line_num=p_to_clm_base_line_num THEN
669 RETURN 'Y';
670 END IF;
671 END IF;
672
673 RETURN 'N';
674 END IF;
675
676 /* Moving a o-clin/o-slin before,after is an invalid operation end*/
677 /* moving a o-clin/slin as slin start*/
678 IF p_action = 'AS_SLIN'
679 AND p_from_clm_base_line_num IS NOT NULL THEN
680 IF p_to_clm_base_line_num IS NOT NULL
681 AND p_to_group_line_id IS NOT NULL THEN
682 RETURN 'N';
683 END IF;
684
685 IF p_from_group_line_id IS NULL THEN
686 RETURN 'N';
687 END IF;
688
689 IF p_from_group_line_id IS NOT NULL THEN
690
691 IF NOT validateInfoflags(p_from_clm_info_flag,p_to_clm_info_flag)
692 OR NOT valdiateFundFalgs(p_from_clm_funded_flag,p_to_clm_funded_flag) THEN
693 RETURN 'N';
694 END IF;
695
696 IF p_to_group_line_id IS NULL
697 AND p_to_clm_base_line_num IS NOT NULL THEN
698 RETURN 'Y';
699 END IF;
700 END IF;
701
702 RETURN 'N';
703 END IF;
704
705 /* moving a o-clin/slin as slin end*/
706 /* moving a o-clin/slin as option start*/
707 IF p_action = 'AS_OPTION'
708 AND p_from_clm_base_line_num IS NOT NULL THEN
709 IF p_to_clm_base_line_num IS NOT NULL THEN
710 RETURN 'N';
711 END IF;
712
713 IF p_from_clm_base_line_num = p_to_line_id THEN
714 RETURN 'N';
715 END IF;
716
717 IF p_from_group_line_id IS NULL THEN
718 RETURN 'Y';
719 END IF;
720
721 IF p_from_group_line_id IS NOT NULL
722 AND p_to_group_line_id = p_from_group_line_id THEN
723 RETURN 'Y';
724 END IF;
725
726 RETURN 'N';
727 END IF;
728
729 /* moving a o-clin/slin as option end*/
730 RETURN 'N';
731 EXCEPTION
732 WHEN OTHERS THEN
733 RETURN 'N';
734 END isvalidtomove;
735
736 FUNCTION PO_HEADERS_ALL_DATA_SEC (object_schema in varchar2, object_name varchar2) return varchar2 AS
737 ProfileValue VARCHAR2(1);
738 p_user_id NUMBER;
739 p_resp_id NUMBER;
740 p_appl_id NUMBER;
741 p_emp_id NUMBER;
742 p_proc_name VARCHAR2(100) := 'PO.PLSQL.PO_HEADERS_ALL_DATA_SEC';
743 BEGIN
744 p_user_id := fnd_global.user_id;
745 p_resp_id := fnd_global.resp_id;
746 p_appl_id := fnd_global.resp_appl_id;
747 SELECT Nvl(employee_id,-999) INTO p_emp_id FROM fnd_user WHERE user_id = p_user_id;
748
749 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
750 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'Enter PO_HEADERS_ALL_DATA_SEC Procedure');
751 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_user_id : ' || p_user_id);
752 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_resp_id : ' || p_resp_id);
753 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_appl_id : ' || p_appl_id);
754 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_emp_id : ' || p_emp_id);
755 END IF;
756
757 IF p_emp_id <> -999 THEN
758 ProfileValue := PO_CLM_CLO_UTIL.checkCLMResp(p_user_id, p_resp_id, p_appl_id);
759
760 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
761 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'ProfileValue : '||ProfileValue);
762 END IF;
763
764 IF ProfileValue <> 'N' THEN
765 return ' EXISTS (SELECT REF.STYLE_ID FROM PO_DOC_STYLE_HEADERS REF WHERE
766 REF.STYLE_ID = PO_HEADERS_ALL_SEC.STYLE_ID AND REF.CLM_FLAG=''Y'') ';
767 ELSE
768 return ' EXISTS (SELECT REF.STYLE_ID FROM PO_DOC_STYLE_HEADERS REF WHERE
769 REF.STYLE_ID = PO_HEADERS_ALL_SEC.STYLE_ID AND NVL(REF.CLM_FLAG,''N'') = ''N'') ';
770 END IF;
771 ELSE
772 return ' 1=1 ';
773 END IF;
774
775 EXCEPTION WHEN OTHERS THEN
776 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
777 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'Error : '||SQLERRM);
778 END IF;
779 END PO_HEADERS_ALL_DATA_SEC;
780
781 FUNCTION OKC_BUS_DOC_TYPES_DATA_SEC (object_schema in varchar2, object_name varchar2) return varchar2 AS
782 ProfileValue VARCHAR2(1);
783 p_user_id NUMBER;
784 p_resp_id NUMBER;
785 p_appl_id NUMBER;
786 p_emp_id NUMBER;
787 p_proc_name VARCHAR2(100) := 'OKC.PLSQL.OKC_BUS_DOC_TYPES_DATA_SEC';
788 BEGIN
789 p_user_id := fnd_global.user_id;
790 p_resp_id := fnd_global.resp_id;
791 p_appl_id := fnd_global.resp_appl_id;
792 SELECT Nvl(employee_id,-999) INTO p_emp_id FROM fnd_user WHERE user_id = p_user_id;
793
794 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
795 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'Enter OKC_BUS_DOC_TYPES_DATA_SEC Procedure');
799 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_emp_id : ' || p_emp_id);
796 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_user_id : ' || p_user_id);
797 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_resp_id : ' || p_resp_id);
798 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_appl_id : ' || p_appl_id);
800 END IF;
801
802 IF p_emp_id <> -999 THEN
803 IF (p_appl_id = 396 OR p_appl_id = 201) THEN
804 ProfileValue := PO_CLM_CLO_UTIL.checkCLMResp(p_user_id, p_resp_id, p_appl_id);
805
806 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
807 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'ProfileValue : '||ProfileValue);
808 END IF;
809
810 IF ProfileValue <> 'N' THEN
811 return ' OKC_BUS_DOC_TYPES_SEC.DOCUMENT_TYPE_CLASS IN (''SOURCING'',''PO'') AND
812 OKC_BUS_DOC_TYPES_SEC.DOCUMENT_TYPE IN (''PA_BLANKET'',''PA_CONTRACT'',''PO_STANDARD'',
813 ''PA_BLANKET_MOD'',''PA_CONTRACT_MOD'',''PO_STANDARD_MOD'',''SOLICITATION_RESPONSE'')';
814 ELSE
815 return ' OKC_BUS_DOC_TYPES_SEC.DOCUMENT_TYPE_CLASS IN (''SOURCING'',''PO'') AND
816 OKC_BUS_DOC_TYPES_SEC.DOCUMENT_TYPE IN (''PA_BLANKET'',''PA_CONTRACT'',''PO_STANDARD'',
817 ''AUCTION_RESPONSE'',''RFI_RESPONSE'',''RFQ_RESPONSE'')';
818 END IF;
819 ELSE
820 return ' 1=1 ';
821 END IF;
822 ELSE
823 return ' 1=1 ';
824 END IF;
825
826 EXCEPTION WHEN OTHERS THEN
827 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
828 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'Error : '||SQLERRM);
829 END IF;
830 END OKC_BUS_DOC_TYPES_DATA_SEC;
831
832
833
834 FUNCTION OKC_DELIVERABLES_DATA_SEC (object_schema in varchar2, object_name varchar2) return varchar2 AS
835 ProfileValue VARCHAR2(1);
836 p_user_id NUMBER;
837 p_resp_id NUMBER;
838 p_appl_id NUMBER;
839 p_emp_id NUMBER;
840 p_proc_name VARCHAR2(100) := 'OKC.PLSQL.OKC_DELIVERABLES_DATA_SEC';
841 BEGIN
842 p_user_id := fnd_global.user_id;
843 p_resp_id := fnd_global.resp_id;
844 p_appl_id := fnd_global.resp_appl_id;
845 SELECT Nvl(employee_id,-999) INTO p_emp_id FROM fnd_user WHERE user_id = p_user_id;
846
847 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
848 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'Enter OKC_DELIVERABLES_DATA_SEC Procedure');
849 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_user_id : ' || p_user_id);
850 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_resp_id : ' || p_resp_id);
851 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_appl_id : ' || p_appl_id);
852 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'p_emp_id : ' || p_emp_id);
853 END IF;
854
855 IF p_emp_id <> -999 THEN
856 ProfileValue := PO_CLM_CLO_UTIL.checkCLMResp(p_user_id, p_resp_id, p_appl_id);
857
858 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
859 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'ProfileValue : '||ProfileValue);
860 END IF;
861
862 IF p_appl_id = 201 THEN
863 return ' EXISTS (SELECT POH.PO_HEADER_ID FROM PO_HEADERS_ALL_SEC POH
864 WHERE POH.PO_HEADER_ID = OKC_DELIVERABLES_SEC.BUSINESS_DOCUMENT_ID) ';
865 ELSIF p_appl_id = 396 THEN
866 return ' exists ( SELECT PAH.AUCTION_HEADER_ID FROM PON_AUCTION_HEADERS_ALL PAH
867 WHERE PAH.AUCTION_HEADER_ID = OKC_DELIVERABLES_SEC.BUSINESS_DOCUMENT_ID) ';
868 ELSE
869 return ' 1=1 ';
870 END IF;
871 ELSE
872 return ' 1=1 ';
873 END IF;
874
875 EXCEPTION WHEN OTHERS THEN
876 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
877 fnd_log.string(FND_LOG.LEVEL_PROCEDURE, p_proc_name || '.invoked', 'Error : '||SQLERRM);
878 END IF;
879 END OKC_DELIVERABLES_DATA_SEC;
880
881 FUNCTION IS_FROM_TO_VALID (p_from_line_id IN NUMBER,
882 p_to_line_id IN NUMBER,
883 p_action IN VARCHAR,
884 p_document_id IN NUMBER) RETURN VARCHAR2 AS
885
886 l_from_disp_line_num VARCHAR2(6);
887 l_to_disp_line_num VARCHAR2(6);
888 l_pred_line_id VARCHAR2(6);
889 l_succ_line_id VARCHAR2(6);
890 l_from_group_line_id NUMBER;
891 l_to_group_line_id NUMBER;
892 BEGIN
893
894 SELECT line_num_display,group_line_id
895 INTO l_from_disp_line_num,l_from_group_line_id
896 FROM pon_auction_item_prices_all
897 WHERE line_number = p_from_line_id
898 AND auction_header_id = p_document_id;
899
900
901 SELECT line_num_display,group_line_id
902 INTO l_to_disp_line_num ,l_to_group_line_id
903 FROM pon_auction_item_prices_all
904 WHERE line_number = p_to_line_id
905 AND auction_header_id = p_document_id;
906
907 IF p_action = 'BEFORE' THEN
908 SELECT line_num_display
909 INTO l_succ_line_id
910 FROM
911
912 (SELECT line_num_display
913 FROM pon_auction_item_prices_all
914 WHERE auction_header_id = p_document_id
915 AND Nvl(l_from_GROUP_LINE_ID,-1) = Nvl(GROUP_LINE_ID,-1)
916 AND line_num_display > l_from_disp_line_num
920 WHERE ROWNUM = 1;
917
918 ORDER BY line_num_display)
919
921
922 IF ( l_to_disp_line_num = l_succ_line_id)
923 THEN
924 RETURN 'NO';
925
926 ELSE
927 RETURN 'NONE';
928 END IF;
929 END IF;
930
931 IF p_action = 'AFTER' THEN
932 SELECT line_num_display
933 INTO l_pred_line_id
934 FROM
935
936 (SELECT line_num_display
937 FROM pon_auction_item_prices_all
938 WHERE auction_header_id = p_document_id
939 AND Nvl(l_from_GROUP_LINE_ID,-1) = Nvl(group_line_id,-1)
940 AND line_num_display < l_from_disp_line_num
941
942 ORDER BY line_num_display DESC)
943
944 WHERE ROWNUM = 1;
945
946 IF ( l_pred_line_id = l_to_disp_line_num)
947 THEN
948 RETURN 'NO';
949
950 ELSE
951 RETURN 'NONE';
952 END IF;
953 END IF;
954
955 EXCEPTION WHEN No_Data_Found THEN
956
957 RETURN 'NONE';
958
959 END IS_FROM_TO_VALID;
960
961 FUNCTION IS_UNSOL_FROM_TO_VALID (p_from_line_id IN NUMBER,
962 p_to_line_id IN NUMBER,
963 p_action IN VARCHAR,
964 p_document_id IN NUMBER) RETURN VARCHAR2 AS
965
966 l_from_disp_line_num VARCHAR2(6);
967 l_to_disp_line_num VARCHAR2(6);
968 l_pred_line_id VARCHAR2(6);
969 l_succ_line_id VARCHAR2(6);
970 l_from_group_line_id NUMBER;
971 l_to_group_line_id NUMBER;
972 BEGIN
973
974 SELECT line_num_display,group_line_id
975 INTO l_from_disp_line_num,l_from_group_line_id
976 FROM pon_bid_item_prices
977 WHERE bid_number = p_document_id
978 AND line_number = p_from_line_id
979 AND auction_line_number = -1;
980
981
982 SELECT line_num_display,group_line_id
983 INTO l_to_disp_line_num ,l_to_group_line_id
984 FROM pon_bid_item_prices
985 WHERE bid_number = p_document_id
986 AND line_number = p_to_line_id
987 AND auction_line_number = -1;
988
989 IF p_action = 'BEFORE' THEN
990 SELECT line_num_display
991 INTO l_succ_line_id
992 FROM
993
994 (SELECT line_num_display
995 FROM pon_bid_item_prices
996 WHERE bid_number = p_document_id
997 AND auction_line_number = -1
998 AND Nvl(l_from_GROUP_LINE_ID,-1) = Nvl(GROUP_LINE_ID,-1)
999 AND line_num_display > l_from_disp_line_num
1000
1001 ORDER BY line_num_display)
1002
1003 WHERE ROWNUM = 1;
1004
1005 IF ( l_to_disp_line_num = l_succ_line_id)
1006 THEN
1007 RETURN 'NO';
1008
1009 ELSE
1010 RETURN 'NONE';
1011 END IF;
1012 END IF;
1013
1014 IF p_action = 'AFTER' THEN
1015 SELECT line_num_display
1016 INTO l_pred_line_id
1017 FROM
1018
1019 (SELECT line_num_display
1020 FROM pon_bid_item_prices
1021 WHERE bid_number = p_document_id
1022 AND auction_line_number = -1
1023 AND Nvl(l_from_GROUP_LINE_ID,-1) = Nvl(group_line_id,-1)
1024 AND line_num_display < l_from_disp_line_num
1025
1026 ORDER BY line_num_display DESC)
1027
1028 WHERE ROWNUM = 1;
1029
1030 IF ( l_pred_line_id = l_to_disp_line_num)
1031 THEN
1032 RETURN 'NO';
1033
1034 ELSE
1035 RETURN 'NONE';
1036 END IF;
1037 END IF;
1038
1039 EXCEPTION WHEN No_Data_Found THEN
1040
1041 RETURN 'NONE';
1042
1043 END IS_UNSOL_FROM_TO_VALID;
1044
1045
1046 END;