[Home] [Help]
PACKAGE BODY: APPS.QP_PRICE_FORMULA_UPG_UTIL_PVT
Source
1 PACKAGE BODY QP_PRICE_FORMULA_UPG_UTIL_PVT AS
2 /* $Header: QPXVUPFB.pls 120.2 2006/03/21 11:15:55 rnayani noship $ */
3
4 /***********************************************************************
5 Type Definition for a table of varchar2 to hold multiple contexts
6 ************************************************************************/
7 TYPE contexts_tbl IS TABLE OF VARCHAR2(30)
8 INDEX BY BINARY_INTEGER;
9
10 err_msg VARCHAR2(240);
11 G_Context VARCHAR2(40);
12
13 /***********************************************************************
14 Procedure to Insert a row into the Formula Header tables.
15 ************************************************************************/
16
17 PROCEDURE Insert_Price_Formula(
18 p_price_formula_id NUMBER,
19 p_creation_date DATE,
20 p_created_by NUMBER,
21 p_last_update_date DATE,
22 p_last_updated_by NUMBER,
23 p_last_update_login NUMBER,
24 p_context VARCHAR2,
25 p_attribute1 VARCHAR2,
26 p_attribute2 VARCHAR2,
27 p_attribute3 VARCHAR2,
28 p_attribute4 VARCHAR2,
29 p_attribute5 VARCHAR2,
30 p_attribute6 VARCHAR2,
31 p_attribute7 VARCHAR2,
32 p_attribute8 VARCHAR2,
33 p_attribute9 VARCHAR2,
34 p_attribute10 VARCHAR2,
35 p_attribute11 VARCHAR2,
36 p_attribute12 VARCHAR2,
37 p_attribute13 VARCHAR2,
38 p_attribute14 VARCHAR2,
39 p_attribute15 VARCHAR2,
40 p_formula VARCHAR2,
41 p_start_date_active DATE,
42 p_end_date_active DATE,
43 p_name VARCHAR2,
44 p_description VARCHAR2
45 )
46 IS
47
48 BEGIN
49
50 INSERT INTO qp_price_formulas_b
51 ( price_formula_id,
52 creation_date,
53 created_by,
54 last_update_date,
55 last_updated_by,
56 last_update_login,
57 context,
58 attribute1,
59 attribute2,
60 attribute3,
61 attribute4,
62 attribute5,
63 attribute6,
64 attribute7,
65 attribute8,
66 attribute9,
67 attribute10,
68 attribute11,
69 attribute12,
70 attribute13,
71 attribute14,
72 attribute15,
73 formula,
74 start_date_active,
75 end_date_active
76 )
77 VALUES
78 ( p_price_formula_id,
79 nvl(p_creation_date, sysdate),
80 nvl(p_created_by, -1),
81 nvl(p_last_update_date, sysdate),
82 nvl(p_last_updated_by, -1),
83 nvl(p_last_update_login,-1),
84 p_context,
85 p_attribute1,
86 p_attribute2,
87 p_attribute3,
88 p_attribute4,
89 p_attribute5,
90 p_attribute6,
91 p_attribute7,
92 p_attribute8,
93 p_attribute9,
94 p_attribute10,
95 p_attribute11,
96 p_attribute12,
97 p_attribute13,
98 p_attribute14,
99 p_attribute15,
100 p_formula,
101 p_start_date_active,
102 p_end_date_active
103 );
104
105 INSERT INTO qp_price_formulas_tl
106 ( price_formula_id,
107 language,
108 source_lang,
109 name,
110 description,
111 creation_date,
112 created_by,
113 last_update_date,
114 last_updated_by,
115 last_update_login
116 )
117 SELECT
118 p_price_formula_id,
119 l.LANGUAGE_CODE,
120 userenv('LANG'),
121 p_name,
122 p_description,
123 nvl(p_creation_date, sysdate),
124 nvl(p_created_by, -1),
125 nvl(p_last_update_date, sysdate),
126 nvl(p_last_updated_by, -1),
127 nvl(p_last_update_login,-1)
128 FROM FND_LANGUAGES l
129 WHERE l.INSTALLED_FLAG in ('I', 'B')
130 AND NOT EXISTS (SELECT NULL
131 FROM qp_price_formulas_tl t
132 WHERE t.price_formula_id = p_price_formula_id
133 AND t.language = l.LANGUAGE_CODE);
134
135 EXCEPTION
136
137 WHEN OTHERS THEN
138 err_msg := substr(sqlerrm, 1, 240);
139 rollback;
140 QP_UTIL.Log_Error (
141 p_id1 => 'Price Formula Id' || to_char(p_price_formula_id),
142 p_id2 => 'Formula Name' || p_name,
143 p_error_type => 'FORMULA',
144 p_error_desc => err_msg,
145 p_error_module => 'Insert_Price_Formula');
146 raise;
147
148 END Insert_Price_Formula;
149
150
151
152 /***********************************************************************
153 Procedure to Insert a row into the Formula Lines table.
154 ************************************************************************/
155
156 PROCEDURE Insert_Price_Formula_Line(
157 p_price_formula_line_id NUMBER,
158 p_creation_date DATE,
159 p_created_by NUMBER,
160 p_last_update_date DATE,
161 p_last_updated_by NUMBER,
162 p_last_update_login NUMBER,
163 p_price_formula_id NUMBER,
164 p_price_formula_line_type_code VARCHAR2,
165 p_price_list_line_id NUMBER,
166 p_price_modifier_list_id NUMBER,
167 p_pricing_attribute_context VARCHAR2,
168 p_pricing_attribute VARCHAR2,
169 p_context VARCHAR2,
170 p_attribute1 VARCHAR2,
171 p_attribute2 VARCHAR2,
172 p_attribute3 VARCHAR2,
173 p_attribute4 VARCHAR2,
174 p_attribute5 VARCHAR2,
175 p_attribute6 VARCHAR2,
176 p_attribute7 VARCHAR2,
177 p_attribute8 VARCHAR2,
178 p_attribute9 VARCHAR2,
179 p_attribute10 VARCHAR2,
180 p_attribute11 VARCHAR2,
181 p_attribute12 VARCHAR2,
182 p_attribute13 VARCHAR2,
183 p_attribute14 VARCHAR2,
184 p_attribute15 VARCHAR2,
185 p_start_date_active DATE,
186 p_end_date_active DATE,
187 p_step_number NUMBER,
188 p_numeric_constant NUMBER
189 )
190 IS
191
192 BEGIN
193
194 INSERT INTO qp_price_formula_lines
195 ( price_formula_line_id
196 , creation_date
197 , created_by
198 , last_update_date
199 , last_updated_by
200 , last_update_login
201 , price_formula_id
202 , price_formula_line_type_code
203 , price_list_line_id
204 , price_modifier_list_id
205 , pricing_attribute_context
206 , pricing_attribute
207 , context
208 , attribute1
209 , attribute2
210 , attribute3
211 , attribute4
212 , attribute5
213 , attribute6
214 , attribute7
215 , attribute8
216 , attribute9
217 , attribute10
218 , attribute11
219 , attribute12
220 , attribute13
221 , attribute14
222 , attribute15
223 , start_date_active
224 , end_date_active
225 , step_number
226 , numeric_constant
227 )
228 VALUES
229 ( p_price_formula_line_id
230 , p_creation_date
231 , p_created_by
232 , p_last_update_date
233 , p_last_updated_by
234 , p_last_update_login
235 , p_price_formula_id
236 , p_price_formula_line_type_code
237 , p_price_list_line_id
238 , p_price_modifier_list_id
239 , p_pricing_attribute_context
240 , p_pricing_attribute
241 , p_context
242 , p_attribute1
243 , p_attribute2
244 , p_attribute3
245 , p_attribute4
246 , p_attribute5
247 , p_attribute6
248 , p_attribute7
249 , p_attribute8
250 , p_attribute9
251 , p_attribute10
252 , p_attribute11
253 , p_attribute12
254 , p_attribute13
255 , p_attribute14
256 , p_attribute15
257 , p_start_date_active
258 , p_end_date_active
259 , p_step_number
260 , p_numeric_constant
261 );
262
263 EXCEPTION
264
265 WHEN OTHERS THEN
266 err_msg := substr(sqlerrm, 1, 240);
267 rollback;
268 QP_UTIL.Log_Error (
269 p_id1 => 'Price Formula Id' || to_char(p_price_formula_id),
270 p_id2 => 'Price Formula Line Id' || to_char(p_price_formula_line_id),
271 p_error_type => 'FORMULA',
272 p_error_desc => err_msg,
273 p_error_module => 'Insert_Price_Formula_Line');
274 raise;
275
276 END Insert_Price_Formula_Line;
277
278
279 /***********************************************************************
280 Procedure to Insert a row into the List Header tables.
281 ************************************************************************/
282
283 PROCEDURE Insert_List_Header(
284 p_list_header_id NUMBER,
285 p_creation_date DATE,
286 p_created_by NUMBER,
287 p_last_update_date DATE,
288 p_last_updated_by NUMBER,
289 p_last_update_login NUMBER,
290 p_list_type_code VARCHAR2,
291 p_automatic_flag VARCHAR2,
292 p_currency_code VARCHAR2,
293 p_context VARCHAR2,
294 p_attribute1 VARCHAR2,
295 p_attribute2 VARCHAR2,
296 p_attribute3 VARCHAR2,
297 p_attribute4 VARCHAR2,
298 p_attribute5 VARCHAR2,
299 p_attribute6 VARCHAR2,
300 p_attribute7 VARCHAR2,
301 p_attribute8 VARCHAR2,
302 p_attribute9 VARCHAR2,
303 p_attribute10 VARCHAR2,
304 p_attribute11 VARCHAR2,
305 p_attribute12 VARCHAR2,
306 p_attribute13 VARCHAR2,
307 p_attribute14 VARCHAR2,
308 p_attribute15 VARCHAR2,
309 p_source_system_code VARCHAR2,
310 p_active_flag VARCHAR2,
311 p_ask_for_flag VARCHAR2,
312 p_name VARCHAR2,
313 p_description VARCHAR2,
314 p_version_no VARCHAR2
315 )
316 IS
317 BEGIN
318
319 INSERT INTO qp_list_headers_b (
320 list_header_id,
321 creation_date,
322 created_by,
323 last_update_date,
324 last_updated_by,
325 last_update_login,
326 list_type_code,
327 automatic_flag,
328 currency_code,
329 source_system_code,
330 active_flag,
331 ask_for_flag,
332 context, attribute1, attribute2, attribute3, attribute4,
333 attribute5, attribute6, attribute7, attribute8, attribute9,
334 attribute10, attribute11, attribute12, attribute13, attribute14, attribute15
335 --ENH Upgrade BOAPI for orig_sys...ref RAVI
336 ,ORIG_SYSTEM_HEADER_REF
337 )
338 VALUES(
339 p_list_header_id,
340 p_creation_date,
341 p_created_by,
342 p_last_update_date,
343 p_last_updated_by,
344 p_last_update_login,
345 p_list_type_code,
346 p_automatic_flag,
347 p_currency_code,
348 p_source_system_code,
349 p_active_flag,
350 p_ask_for_flag,
351 p_context, p_attribute1, p_attribute2, p_attribute3, p_attribute4,
352 p_attribute5, p_attribute6, p_attribute7, p_attribute8, p_attribute9,
353 p_attribute10, p_attribute11, p_attribute12, p_attribute13, p_attribute14,
354 p_attribute15
355 --ENH Upgrade BOAPI for orig_sys...ref RAVI
356 ,QP_PRICE_LIST_UTIL.Get_Orig_Sys_Hdr(p_list_header_id)
357 );
358
359 INSERT INTO qp_list_headers_tl (
360 list_header_id,
361 language,
362 source_lang,
363 name,
364 description,
365 creation_date,
366 created_by,
367 last_update_date,
368 last_updated_by,
369 last_update_login,
370 version_no
371 )
372 SELECT
373 p_list_header_id,
374 l.LANGUAGE_CODE,
375 userenv('LANG'),
376 p_name,
377 p_description,
378 p_creation_date,
379 p_created_by,
380 p_last_update_date,
381 p_last_updated_by,
382 p_last_update_login,
383 p_version_no
384 FROM FND_LANGUAGES l
385 WHERE l.INSTALLED_FLAG in ('I', 'B')
386 AND NOT EXISTS (SELECT NULL
387 FROM qp_list_headers_tl t
388 WHERE t.list_header_id = p_list_header_id
389 AND t.language = l.LANGUAGE_CODE);
390 EXCEPTION
391 WHEN OTHERS THEN
392 err_msg := substr(sqlerrm, 1, 240);
393 rollback;
394 QP_UTIL.Log_Error (
395 p_id1 => 'List Header Id' || to_char(p_list_header_id),
396 p_id2 => 'Price Modifier List Name' || p_name,
397 p_error_type => 'FORMULA',
398 p_error_desc => err_msg,
399 p_error_module => 'Insert_List_Header');
400 raise;
401
402 END Insert_List_Header;
403
404
405 /***********************************************************************
406 Procedure to Insert a row into the List Lines table.
407 ************************************************************************/
408
409 PROCEDURE Insert_List_Line(
410 p_list_line_id NUMBER,
411 p_creation_date DATE,
412 p_created_by NUMBER,
413 p_last_update_date DATE,
414 p_last_updated_by NUMBER,
415 p_last_update_login NUMBER,
416 p_list_header_id NUMBER,
417 p_list_line_type_code VARCHAR2,
418 p_automatic_flag VARCHAR2,
419 p_modifier_level_code VARCHAR2,
420 p_arithmetic_operator VARCHAR2,
421 p_operand NUMBER,
422 p_pricing_phase_id NUMBER,
423 p_incompatibility_grp_code VARCHAR2,
424 p_pricing_group_sequence NUMBER,
425 p_accrual_flag VARCHAR2,
426 p_product_precedence NUMBER,
427 p_base_qty NUMBER,
428 p_base_uom_code VARCHAR2,
429 p_recurring_flag VARCHAR2,
430 p_proration_type_code VARCHAR2,
431 p_print_on_invoice_flag VARCHAR2,
432 p_context VARCHAR2,
433 p_attribute1 VARCHAR2,
434 p_attribute2 VARCHAR2,
435 p_attribute3 VARCHAR2,
436 p_attribute4 VARCHAR2,
437 p_attribute5 VARCHAR2,
438 p_attribute6 VARCHAR2,
439 p_attribute7 VARCHAR2,
440 p_attribute8 VARCHAR2,
441 p_attribute9 VARCHAR2,
442 p_attribute10 VARCHAR2,
443 p_attribute11 VARCHAR2,
444 p_attribute12 VARCHAR2,
445 p_attribute13 VARCHAR2,
446 p_attribute14 VARCHAR2,
447 p_attribute15 VARCHAR2
448 )
449 IS
450 BEGIN
451
452 INSERT INTO qp_list_lines (
453 list_line_id,
454 list_line_no,
455 creation_date,
456 created_by,
457 last_update_date,
458 last_updated_by,
459 last_update_login,
460 list_header_id,
461 list_line_type_code,
462 automatic_flag,
463 modifier_level_code,
464 arithmetic_operator,
465 operand,
466 pricing_phase_id,
467 incompatibility_grp_code,
468 pricing_group_sequence,
469 accrual_flag,
470 product_precedence,
471 base_qty,
472 base_uom_code,
473 recurring_flag,
474 proration_type_code,
475 print_on_invoice_flag,
476 context, attribute1, attribute2, attribute3, attribute4, attribute5,
477 attribute6, attribute7, attribute8, attribute9, attribute10,
478 attribute11, attribute12, attribute13, attribute14, attribute15
479 --ENH Upgrade BOAPI for orig_sys...ref RAVI
480 ,ORIG_SYS_LINE_REF
481 ,ORIG_SYS_HEADER_REF
482 )
483 VALUES (
484 p_list_line_id,
485 p_list_line_id,
486 p_creation_date,
487 p_created_by,
488 p_last_update_date,
489 p_last_updated_by,
490 p_last_update_login,
491 p_list_header_id,
492 p_list_line_type_code,
493 p_automatic_flag,
494 p_modifier_level_code,
495 p_arithmetic_operator,
496 p_operand,
497 p_pricing_phase_id,
498 p_incompatibility_grp_code,
499 p_pricing_group_sequence,
500 p_accrual_flag,
501 p_product_precedence,
502 p_base_qty,
503 p_base_uom_code,
504 p_recurring_flag,
505 p_proration_type_code,
506 p_print_on_invoice_flag,
507 p_context,
508 p_attribute1, p_attribute2, p_attribute3, p_attribute4, p_attribute5,
509 p_attribute6, p_attribute7, p_attribute8, p_attribute9, p_attribute10,
510 p_attribute11, p_attribute12, p_attribute13, p_attribute14, p_attribute15
511 --ENH Upgrade BOAPI for orig_sys...ref RAVI
512 ,to_char(p_list_line_id)
513 ,(select h.ORIG_SYSTEM_HEADER_REF from qp_list_headers_b h where h.list_header_id=p_list_header_id)
514 );
515
516 EXCEPTION
517 WHEN OTHERS THEN
518 err_msg := substr(sqlerrm, 1, 240);
519 rollback;
520 QP_UTIL.Log_Error (
521 p_id1 => 'List Header Id' || to_char(p_list_header_id),
522 p_id2 => 'List Line Id' || to_char(p_list_line_id),
523 p_error_type => 'FORMULA',
524 p_error_desc => err_msg,
525 p_error_module => 'Insert_List_List');
526 raise;
527
528 END Insert_List_Line;
529
530
531 /***********************************************************************
532 Procedure to Insert a row into the Pricing Attributes table.
533 ************************************************************************/
534
535 PROCEDURE Insert_Pricing_Attribute(
536 p_creation_date DATE,
537 p_created_by NUMBER,
538 p_last_update_date DATE,
539 p_last_updated_by NUMBER,
540 p_last_update_login NUMBER,
541 p_list_line_id NUMBER,
542 p_excluder_flag VARCHAR2,
543 p_accumulate_flag VARCHAR2,
544 p_pricing_attribute_context VARCHAR2,
545 p_pricing_attribute VARCHAR2,
546 p_pricing_attr_value_from VARCHAR2,
547 p_pricing_attr_value_to VARCHAR2,
548 p_pricing_attribute_datatype VARCHAR2,
549 p_comparison_operator_code VARCHAR2
550 )
551 IS
552 l_pricing_attribute_id NUMBER;
553 l_attribute_grouping_no NUMBER;
554
555 BEGIN
556
557 SELECT QP_PRICING_ATTRIBUTES_S.nextval
558 INTO l_pricing_attribute_id
559 FROM DUAL;
560
561 SELECT QP_PRICING_ATTR_GROUP_NO_S.nextval
562 INTO l_attribute_grouping_no
563 FROM DUAL;
564
565 INSERT INTO qp_pricing_attributes(
566 pricing_attribute_id,
567 creation_date,
568 created_by,
569 last_update_date,
570 last_updated_by,
571 last_update_login,
572 list_line_id,
573 excluder_flag,
574 accumulate_flag,
575 pricing_attribute_context,
576 pricing_attribute,
577 pricing_attr_value_from,
578 pricing_attr_value_to,
579 attribute_grouping_no,
580 pricing_attribute_datatype,
581 comparison_operator_code
582 --ENH Upgrade BOAPI for orig_sys...ref RAVI
583 ,ORIG_SYS_PRICING_ATTR_REF
584 ,ORIG_SYS_LINE_REF
585 ,ORIG_SYS_HEADER_REF
586 )
587 VALUES
588 (
589 l_pricing_attribute_id,
590 p_creation_date,
591 p_created_by,
592 p_last_update_date,
593 p_last_updated_by,
594 p_last_update_login,
595 p_list_line_id,
596 p_excluder_flag,
597 p_accumulate_flag,
598 p_pricing_attribute_context,
599 p_pricing_attribute,
600 p_pricing_attr_value_from,
601 p_pricing_attr_value_to,
602 l_attribute_grouping_no,
603 p_pricing_attribute_datatype,
604 p_comparison_operator_code
605 --ENH Upgrade BOAPI for orig_sys...ref RAVI
606 ,to_char(l_pricing_attribute_id)
607 ,(select l.ORIG_SYS_LINE_REF from qp_list_lines l where l.list_line_id=p_list_line_id)
608 ,(select l.ORIG_SYS_HEADER_REF from qp_list_lines l where l.list_line_id=p_list_line_id)
609 );
610
611 EXCEPTION
612 WHEN OTHERS THEN
613 err_msg := substr(sqlerrm, 1, 240);
614 rollback;
615 QP_UTIL.Log_Error (
616 p_id1 => 'List Line Id' || to_char(p_list_line_id),
617 p_id2 => 'Pricing Attribute Id' || to_char(l_pricing_attribute_id),
618 p_id3 => 'Pricing Attribute Value' || p_pricing_attr_value_from,
619 p_error_type => 'FORMULA',
620 p_error_desc => err_msg,
621 p_error_module => 'Insert_Pricing_Attribute');
622 raise;
623
624 END Insert_Pricing_Attribute;
625
626
627 /***********************************************************************
628 Procedure to Upgrade unused Pricing Rule Components to Factors tables.
629 ************************************************************************/
630
631 PROCEDURE Upgrade_Unused_Components
632 IS
633
634 l_exists VARCHAR2(1);
635 l_list_header_id NUMBER;
636 l_list_line_id NUMBER;
637
638 CURSOR unused_components_cur
639 IS
640 SELECT *
641 FROM so_rule_formula_components c
642 WHERE c.formula_component_id NOT IN
643 (SELECT b.formula_component_id
644 FROM so_pricing_rule_lines b);
645
646 BEGIN
647
648 FOR l_comp_rec IN unused_components_cur
649 LOOP
650 BEGIN -- block around all the code in the components loop
651 l_exists := NULL;
652
653 BEGIN
654 SELECT 'Y'
655 INTO l_exists
656 FROM qp_list_headers_vl v
657 WHERE v.name = l_comp_rec.name;
658 EXCEPTION
659 WHEN NO_DATA_FOUND THEN
660 l_exists := NULL;
661 END;
662
663 IF l_exists IS NULL THEN -- Price Modifier List Id does not already exist
664
665 SELECT QP_LIST_HEADERS_B_S.nextval
666 INTO l_list_header_id
667 FROM DUAL;
668
669 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_List_Header(
670 l_list_header_id,
671 l_comp_rec.creation_date,
672 l_comp_rec.created_by,
673 l_comp_rec.last_update_date,
674 l_comp_rec.last_updated_by,
675 l_comp_rec.last_update_login,
676 'PML', --list_type_code
677 'N', --automatic_flag
678 null, --currency_code
679 l_comp_rec.context,
680 l_comp_rec.attribute1,
681 l_comp_rec.attribute2,
682 l_comp_rec.attribute3,
683 l_comp_rec.attribute4,
684 l_comp_rec.attribute5,
685 l_comp_rec.attribute6,
686 l_comp_rec.attribute7,
687 l_comp_rec.attribute8,
688 l_comp_rec.attribute9,
689 l_comp_rec.attribute10,
690 l_comp_rec.attribute11,
691 l_comp_rec.attribute12,
692 l_comp_rec.attribute13,
693 l_comp_rec.attribute14,
694 l_comp_rec.attribute15,
695 'QP', --source_system_code
696 'Y', --active_flag
697 'N', --ask_for_flag
698 l_comp_rec.name,
699 l_comp_rec.description,
700 '1' --version_no
701 );
702
703
704 SELECT QP_LIST_LINES_S.nextval
705 INTO l_list_line_id
706 FROM DUAL;
707
708 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_List_Line(
709 l_list_line_id,
710 l_comp_rec.creation_date,
711 l_comp_rec.created_by,
712 l_comp_rec.last_update_date,
713 l_comp_rec.last_updated_by,
714 l_comp_rec.last_update_login,
715 l_list_header_id,
716 'PMR', --list_line_type_code
717 'N', --automatic_flag
718 'NONE',--modifier_level_code
719 null, --arithmetic_operator
720 0, --operand
721 null, --pricing_phase_id
722 null, --incompatibility_grp_code
723 1, --pricing_group_sequence
724 'N', --accrual_flag
725 null, --product_precedence
726 1, --base_qty
727 null, --base_uom_code
728 'Y', --recurring_flag
729 null, --proration_type_code,
730 'N', --print_on_invoice_flag
731 null, --context and 15 attributes
732 null, null, null, null, null,
733 null, null, null, null, null,
734 null, null, null, null, null );
735
736 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Pricing_Attribute(
737 nvl(l_comp_rec.creation_date,sysdate), nvl(l_comp_rec.created_by, -1),
738 nvl(l_comp_rec.last_update_date,sysdate), nvl(l_comp_rec.last_updated_by,-1),
739 nvl(l_comp_rec.last_update_login,-1), l_list_line_id, 'N', 'N',
740 null, null, null, null, 'C', '=');
741
742 END IF;
743 EXCEPTION
744 WHEN OTHERS THEN
745 err_msg := substr(sqlerrm, 1, 240);
746 rollback;
747 QP_UTIL.Log_Error (
748 p_id1 => 'Modifier List Id ' || to_char(l_list_header_id) ,
749 p_error_type => 'FORMULA',
750 p_error_desc => err_msg,
751 p_error_module => 'Upgrade_Unused_Components');
752 END; -- Block around all the code in the components loop
753
754 commit; -- for each successful component
755 END LOOP;
756
757 EXCEPTION
758 WHEN OTHERS THEN
759 err_msg := substr(sqlerrm, 1, 240);
760 rollback;
761 QP_UTIL.Log_Error (
762 p_id1 => 'Modifier List Id ' || to_char(l_list_header_id),
763 p_error_type => 'FORMULA',
764 p_error_desc => err_msg,
765 p_error_module => 'Upgrade_Unused_Components');
766 raise;
767
768 END Upgrade_Unused_Components;
769
770
771 /**********************************************************************
772 Procedure to get database Attribute Value for a given Display Attribute
773 Value.
774 ************************************************************************/
775
776 FUNCTION Get_Attr_Value(p_context IN VARCHAR2,
777 p_attribute IN VARCHAR2,
778 p_attr_display_value IN VARCHAR2)
779 RETURN VARCHAR2
780 IS
781 l_attr_value VARCHAR2(40);
782
783 BEGIN
784 IF p_context = 'ITEM' AND p_attribute = 'PRICING_ATTRIBUTE1' THEN
785 -- If display value is an Item Number
786
787 BEGIN
788 SELECT TO_CHAR(inventory_item_id)
789 INTO l_attr_value
790 FROM mtl_system_items_vl
791 WHERE organization_id = FND_PROFILE.value('SO_ORGANIZATION_ID')
792 AND rtrim(ltrim(concatenated_segments)) =
793 rtrim(ltrim(p_attr_display_value));
794 EXCEPTION
795 WHEN NO_DATA_FOUND THEN
796 l_attr_value := p_attr_display_value;
797 END;
798
799 RETURN l_attr_value;
800
801 ELSIF p_context = 'ITEM' AND p_attribute = 'PRICING_ATTRIBUTE2' THEN
802 -- If display value is an Item Category
803
804 BEGIN
805 SELECT TO_CHAR(category_id)
806 INTO l_attr_value
807 FROM mtl_categories_kfv
808 WHERE rtrim(ltrim(concatenated_segments)) =
809 rtrim(ltrim(p_attr_display_value));
810
811
812 EXCEPTION
813 WHEN NO_DATA_FOUND THEN
814 l_attr_value := p_attr_display_value;
815 END;
816
817 RETURN l_attr_value;
818
819 ELSE
820 --If Others
821
822 l_attr_value := p_attr_display_value;
823
824 RETURN l_attr_value;
825
826 END IF; --If Item Number, Item Category or Other
827
828 EXCEPTION
829 WHEN OTHERS THEN
830 err_msg := substr(sqlerrm, 1, 240);
831 rollback;
832 QP_UTIL.Log_Error (
833 p_id1 => 'Attribute Display Value' || p_attr_display_value,
834 p_error_type => 'FORMULA',
835 p_error_desc => err_msg,
836 p_error_module => 'Get_Attr_Value');
837 raise;
838 END Get_Attr_Value;
839
840
841 /**************************************************************************
842 Procedure to Get Context and Attribute given the entity id, and entity code
843 ***************************************************************************/
844
845 PROCEDURE Get_Ctx_Attr(p_price_formula_id IN NUMBER,
846 p_entity_id IN NUMBER,
847 x_contexts OUT NOCOPY /* file.sql.39 change */ CONTEXTS_TBL,
848 x_attribute OUT NOCOPY /* file.sql.39 change */ VARCHAR2)
849 IS
850 l_ctx_var VARCHAR2(40);
851 l_attribute VARCHAR2(40);
852 l_count NUMBER := 0;
853
854 CURSOR context_cur(a_price_formula_id NUMBER)
855 IS
856 SELECT DISTINCT nvl(pricing_context, 'Upgrade Context')
857 FROM so_price_list_lines_115
858 WHERE pricing_rule_id = a_price_formula_id;
859
860 CURSOR flex_context_cur(a_pricing_attribute VARCHAR2)
861 IS
862 SELECT decode(descriptive_flex_context_code, 'Global Data Elements',
863 'Upgrade Context', descriptive_flex_context_code)
864 FROM fnd_descr_flex_column_usages
865 WHERE descriptive_flexfield_name = 'PRICING_ATTRIBUTES'
866 AND application_column_name = a_pricing_attribute;
867
868 BEGIN
869 IF to_char(p_entity_id) IN ('1001','1045','1208','1020', '1021','1022',
870 '1023','1024','1025','1026','1027','1028',
871 '1029','1030','1031','1032','1033','1034',
872 '1035','1036','1037','1038','1039')
873 THEN
874 --For Item related entity-codes get the Context and Attribute using API
875 QP_UTIL.Get_Context_Attribute( p_entity_id,
876 l_ctx_var,
877 l_attribute);
878 --dbms_output.put_line('In get_ctx..');
879 x_contexts(1) := l_ctx_var;
880 x_attribute := l_attribute;
881
882 ELSE -- If entity id not in list above
883
884 --dbms_output.put_line('In get_ctx..1');
885 SELECT entity_code
886 INTO l_attribute
887 FROM so_entities
888 WHERE entity_id = p_entity_id;
889
890 x_attribute := l_attribute;
891
892 IF G_Context IS NOT NULL THEN
893 x_contexts(1) := G_Context;
894
895 ELSE
896
897 --Context is not known, So get context from Price List Line to
898 --which formula attached or if not found on any Price List Line
899 --get any one Context and attribute from fnd descr flex table
900
901 OPEN context_cur(p_price_formula_id);
902 FETCH context_cur INTO l_ctx_var;
903
904 IF context_cur%FOUND THEN
905 l_count := l_count + 1; -- Do this only for one context. Not
906 x_contexts(l_count) := l_ctx_var; -- in a loop. Loop may be in future.
907 END IF;
908
909 CLOSE context_cur;
910
911 --dbms_output.put_line('In get_ctx..2');
912 IF l_count = 0 THEN
913 OPEN flex_context_cur(l_attribute);
914 FETCH flex_context_cur
915 INTO l_ctx_var;
916
917 --dbms_output.put_line('In get_ctx..3');
918 IF flex_context_cur%NOTFOUND THEN
919 raise NO_DATA_FOUND;
920 END IF;
921
922 x_contexts(1) := l_ctx_var;
923
924 CLOSE flex_context_cur;
925 END IF; --If l_count = 0
926
927 END IF; -- If G_Context is not null
928
929 END IF; -- If entity_id not in list
930
931 EXCEPTION
932 WHEN OTHERS THEN
933 err_msg := substr(sqlerrm, 1, 240);
934 rollback;
935 QP_UTIL.Log_Error (
936 p_id1 => 'Entity Id ' || to_char(p_entity_id),
937 p_error_type => 'FORMULA',
938 p_error_desc => err_msg,
939 p_error_module => 'Get_Ctx_Attr');
940 raise;
941
942 END Get_Ctx_Attr;
943
944
945 /**************************************************************************
946 Procedure to Get Attribute given the entity id. This procedure is meant
947 mainly for those Entity Ids whose Contexts are not Item.
948 ***************************************************************************/
949
950 PROCEDURE Get_Attribute(p_entity_id IN NUMBER,
951 x_attribute OUT NOCOPY /* file.sql.39 change */ VARCHAR2)
952 IS
953 l_attribute VARCHAR2(40);
954
955 BEGIN
956
957 SELECT entity_code
958 INTO l_attribute
959 FROM so_entities
960 WHERE entity_id = p_entity_id;
961
962 x_attribute := l_attribute;
963 EXCEPTION
964 WHEN OTHERS THEN
965 err_msg := substr(sqlerrm, 1, 240);
966 rollback;
967 QP_UTIL.Log_Error (
968 p_id1 => 'Entity Id ' || to_char(p_entity_id),
969 p_error_type => 'FORMULA',
970 p_error_desc => err_msg,
971 p_error_module => 'Get_Attribute');
972 raise;
973
974 END Get_Attribute;
975
976 /**************************************************************************
977 Procedure to divide the pricing rules into partitions that will aid in
978 parallel processing of the upgrade.
979 ***************************************************************************/
980
981 --PROCEDURE Create_Parallel_Slabs (l_workers IN NUMBER := 5) --2422176
982 PROCEDURE Create_Parallel_Slabs (l_workers IN NUMBER)
983 IS
984 l_min_line NUMBER;
985 l_max_line NUMBER;
986 l_worker_start NUMBER;
987 l_worker_end NUMBER;
988
989 BEGIN
990
991 DELETE qp_upg_lines_distribution
992 WHERE line_type = 'PRF'; --line_type for Pricing Formulas
993
994 COMMIT;
995
996 BEGIN
997 SELECT nvl(min(pricing_rule_id),0),
998 nvl(max(pricing_rule_id),0)
999 INTO l_min_line, l_max_line
1000 FROM so_pricing_rules_vl;
1001
1002 EXCEPTION
1003 WHEN OTHERS THEN
1004 NULL;
1005 END;
1006
1007 FOR i IN 1..l_workers LOOP
1008 l_worker_start :=
1009 l_min_line + trunc( (i-1) * (l_max_line-l_min_line)/l_workers);
1010 l_worker_end :=
1011 l_min_line + trunc(i*(l_max_line-l_min_line)/l_workers);
1012
1013 IF i <> l_workers THEN
1014 l_worker_end := l_worker_end - 1;
1015 END IF;
1016
1017 qp_modifier_upgrade_util_pvt.insert_line_distribution
1018 (l_worker => i,
1019 l_start_line => l_worker_start,
1020 l_end_line => l_worker_end,
1021 l_type_var => 'PRF');
1022
1023 END LOOP;
1024
1025 COMMIT;
1026
1027
1028 END Create_Parallel_Slabs;
1029
1030
1031 /***********************************************************************
1032 Procedure to Upgrade from Pricing Rules to Price Formula tables.
1033 ************************************************************************/
1034
1035 --PROCEDURE Upgrade_Price_Formulas (l_worker IN NUMBER := 1) --2422176
1036 PROCEDURE Upgrade_Price_Formulas (l_worker IN NUMBER)
1037 IS
1038
1039 l_item_context_flag BOOLEAN := TRUE;
1040 l_exists VARCHAR2(1);
1041 l_price_formula_line_id NUMBER;
1042 l_list_header_id NUMBER;
1043 l_list_line_id NUMBER;
1044
1045 l_entity1 VARCHAR2(30);
1046 l_entity2 VARCHAR2(30);
1047 l_entity3 VARCHAR2(30);
1048 l_entity4 VARCHAR2(30);
1049 l_entity5 VARCHAR2(30);
1050
1051 l_contexts CONTEXTS_TBL;
1052 l_context1 VARCHAR2(30);
1053 l_context2 VARCHAR2(30);
1054 l_context3 VARCHAR2(30);
1055 l_context4 VARCHAR2(30);
1056 l_context5 VARCHAR2(30);
1057
1058 l_attribute1 VARCHAR2(40);
1059 l_attribute2 VARCHAR2(40);
1060 l_attribute3 VARCHAR2(40);
1061 l_attribute4 VARCHAR2(40);
1062 l_attribute5 VARCHAR2(40);
1063
1064 l_attr_value VARCHAR2(240);
1065
1066 l_min_line NUMBER;
1067 l_max_line NUMBER;
1068
1069 x_context_flag VARCHAR2(1);
1070 x_attribute_flag VARCHAR2(1);
1071 x_value_flag VARCHAR2(1);
1072 x_datatype VARCHAR2(1);
1073 x_precedence NUMBER;
1074 x_error_code NUMBER;
1075
1076 CURSOR so_pricing_rules_cur (a_min_line NUMBER,
1077 a_max_line NUMBER)
1078 IS
1079 SELECT *
1080 FROM so_pricing_rules_vl
1081 WHERE pricing_rule_id BETWEEN a_min_line AND a_max_line;
1082
1083 CURSOR so_pricing_rule_lines_cur (a_pricing_rule_id NUMBER)
1084 IS
1085 SELECT *
1086 FROM so_pricing_rule_lines l
1087 WHERE l.pricing_rule_id = a_pricing_rule_id;
1088
1089 CURSOR so_rule_line_comp_values_cur(a_pricing_rule_id NUMBER,
1090 a_step_number NUMBER)
1091 IS
1092 SELECT l.pricing_rule_id,
1093 v.amount,
1094 v.creation_date, v.created_by, v.last_update_date,
1095 v.last_updated_by, v.last_update_login,
1096 v.context, v.attribute1, v.attribute2, v.attribute3,
1097 v.attribute4, v.attribute5, v.attribute6, v.attribute7,
1098 v.attribute8, v.attribute9, v.attribute10, v.attribute11,
1099 v.attribute12, v.attribute13, v.attribute14, v.attribute15,
1100 c.name, c.description,
1101 c.creation_date c_creation_date, c.created_by c_created_by,
1102 c.last_update_date c_last_update_date, c.last_updated_by c_last_updated_by,
1103 c.last_update_login c_last_update_login,
1104 c.entity_id_1, c.entity_id_2, c.entity_id_3, c.entity_id_4,
1105 c.entity_id_5, v.value1, v.value2, v.value3, v.value4, v.value5,
1106 c.context c_context, c.attribute1 c_attribute1, c.attribute2 c_attribute2,
1107 c.attribute3 c_attribute3, c.attribute4 c_attribute4,
1108 c.attribute5 c_attribute5, c.attribute6 c_attribute6,
1109 c.attribute7 c_attribute7, c.attribute8 c_attribute8,
1110 c.attribute9 c_attribute9, c.attribute10 c_attribute10,
1111 c.attribute11 c_attribute11, c.attribute12 c_attribute12,
1112 c.attribute13 c_attribute13, c.attribute14 c_attribute14,
1113 c.attribute15 c_attribute15
1114
1115 FROM so_pricing_rule_lines l, so_pricing_rule_line_values v,
1116 so_rule_formula_components c
1117 WHERE l.pricing_rule_id = v.pricing_rule_id(+)
1118 AND l.step_number = v.step_number(+)
1119 AND l.formula_component_id = c.formula_component_id
1120 AND l.pricing_rule_id = a_pricing_rule_id
1121 AND l.step_number = a_step_number;
1122
1123 BEGIN
1124
1125 BEGIN
1126 SELECT start_line_id, end_line_id
1127 INTO l_min_line, l_max_line
1128 FROM qp_upg_lines_distribution
1129 WHERE line_type = 'PRF'
1130 AND worker = l_worker;
1131
1132 EXCEPTION
1133 WHEN NO_DATA_FOUND THEN
1134 l_min_line := 0;
1135 l_max_line := 0;
1136
1137 END;
1138
1139 FOR l_rec IN so_pricing_rules_cur(l_min_line, l_max_line)
1140 LOOP
1141
1142 BEGIN -- Block around all code in the Pricing Rules Loop
1143 l_exists := NULL;
1144
1145 BEGIN
1146 SELECT 'Y'
1147 INTO l_exists
1148 FROM qp_price_formulas_b b
1149 WHERE b.price_formula_id = l_rec.pricing_rule_id;
1150 EXCEPTION
1151 WHEN NO_DATA_FOUND THEN
1152 l_exists := NULL;
1153 END;
1154
1155 IF l_exists IS NULL THEN -- Formula Id does not already exist
1156
1157 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Price_Formula(
1158 l_rec.pricing_rule_id, --price_formula_id
1159 l_rec.creation_date,
1160 l_rec.created_by,
1161 l_rec.last_update_date,
1162 l_rec.last_updated_by,
1163 l_rec.last_update_login,
1164 l_rec.context,
1165 l_rec.attribute1,
1166 l_rec.attribute2,
1167 l_rec.attribute3,
1168 l_rec.attribute4,
1169 l_rec.attribute5,
1170 l_rec.attribute6,
1171 l_rec.attribute7,
1172 l_rec.attribute8,
1173 l_rec.attribute9,
1174 l_rec.attribute10,
1175 l_rec.attribute11,
1176 l_rec.attribute12,
1177 l_rec.attribute13,
1178 l_rec.attribute14,
1179 l_rec.attribute15,
1180 l_rec.formula,
1181 l_rec.start_date_active,
1182 l_rec.end_date_active,
1183 l_rec.name,
1184 l_rec.description);
1185
1186
1187 FOR l_lines_rec IN
1188 so_pricing_rule_lines_cur(l_rec.pricing_rule_id)
1189 LOOP
1190
1191 SELECT QP_PRICE_FORMULA_LINES_S.nextval
1192 INTO l_price_formula_line_id
1193 FROM DUAL;
1194
1195 --Before inserting the formula line record, insert a Modifier List
1196 --(Factor List), Modifier(Factor) and Modifier attributes
1197 --(Factor Pricing Attributes). Need to get contexts first.
1198
1199 SELECT entity_id_1, entity_id_2, entity_id_3, entity_id_4, entity_id_5
1200 INTO l_entity1, l_entity2, l_entity3, l_entity4, l_entity5
1201 FROM so_rule_formula_components
1202 WHERE formula_component_id = l_lines_rec.formula_component_id;
1203
1204 --Function to get Context and Attribute based on entity_code.
1205 --If entity_code is not an item-context then fetch contexts from
1206 --price list lines or descriptive flexfield setup
1207
1208 l_contexts.delete; --Empty the plsql table of contexts each time
1209 l_attribute1 := '';-- Reset the attribute values
1210 G_Context := '';
1211
1212 IF l_entity1 IS NOT NULL THEN
1213 Get_Ctx_Attr(l_rec.pricing_rule_id, l_entity1,
1214 l_contexts, l_attribute1);
1215 l_context1 := l_contexts(1);
1216 IF l_context1 <> 'ITEM' THEN
1217 G_Context := l_context1;
1218 END IF;
1219 END IF;
1220
1221 l_contexts.delete; --Empty the plsql table of contexts each time
1222 l_attribute2 := '';-- Reset the attribute values
1223
1224 IF l_entity2 IS NOT NULL THEN
1225 Get_Ctx_Attr(l_rec.pricing_rule_id, l_entity2,
1226 l_contexts, l_attribute2);
1227 l_context2 := l_contexts(1);
1228 IF l_context2 <> 'ITEM' THEN
1229 IF G_Context IS NULL THEN
1230 G_Context := l_context2;
1231 END IF;
1232 END IF;
1233 END IF;
1234
1235 l_contexts.delete; --Empty the plsql table of contexts each time
1236 l_attribute3 := '';-- Reset the attribute values
1237
1238 IF l_entity3 IS NOT NULL THEN
1239 Get_Ctx_Attr(l_rec.pricing_rule_id, l_entity3,
1240 l_contexts, l_attribute3);
1241 l_context3 := l_contexts(1);
1242 IF l_context3 <> 'ITEM' THEN
1243 IF G_Context IS NULL THEN
1244 G_Context := l_context3;
1245 END IF;
1246 END IF;
1247 END IF;
1248
1249 l_contexts.delete; --Empty the plsql table of contexts each time
1250 l_attribute4 := '';-- Reset the attribute values
1251
1252 IF l_entity4 IS NOT NULL THEN
1253 Get_Ctx_Attr(l_rec.pricing_rule_id, l_entity4,
1254 l_contexts, l_attribute4);
1255 l_context4 := l_contexts(1);
1256 IF l_context4 <> 'ITEM' THEN
1257 IF G_Context IS NULL THEN
1258 G_Context := l_context4;
1259 END IF;
1260 END IF;
1261 END IF;
1262
1263 l_contexts.delete; --Empty the plsql table of contexts each time
1264 l_attribute5 := '';-- Reset the attribute values
1265
1266 IF l_entity5 IS NOT NULL THEN
1267 Get_Ctx_Attr(l_rec.pricing_rule_id, l_entity5,
1268 l_contexts, l_attribute5);
1269 l_context5 := l_contexts(1);
1270 IF l_context5 <> 'ITEM' THEN
1271 IF G_Context IS NULL THEN
1272 G_Context := l_context5;
1273 END IF;
1274 END IF;
1275 END IF;
1276
1277 FOR l_value_rec IN so_rule_line_comp_values_cur(l_lines_rec.pricing_rule_id,
1278 l_lines_rec.step_number)
1279 LOOP
1280
1281 IF so_rule_line_comp_values_cur%ROWCOUNT = 1 THEN
1282
1283 SELECT QP_LIST_HEADERS_B_S.nextval
1284 INTO l_list_header_id
1285 FROM DUAL;
1286
1287 --dbms_output.put_line(' list header '||l_list_header_id);
1288 --dbms_output.put_line(l_value_rec.name || to_char(l_price_formula_line_id));
1289 --dbms_output.put_line(l_lines_rec.pricing_rule_id);
1290 --dbms_output.put_line(l_lines_rec.step_number);
1291
1292
1293 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_List_Header(
1294 l_list_header_id,
1295 l_value_rec.c_creation_date,
1296 l_value_rec.c_created_by,
1297 l_value_rec.c_last_update_date,
1298 l_value_rec.c_last_updated_by,
1299 l_value_rec.c_last_update_login,
1300 'PML', --list_type_code
1301 'N', --automatic_flag
1302 null, --currency_code
1303 l_value_rec.c_context,
1304 l_value_rec.c_attribute1,
1305 l_value_rec.c_attribute2,
1306 l_value_rec.c_attribute3,
1307 l_value_rec.c_attribute4,
1308 l_value_rec.c_attribute5,
1309 l_value_rec.c_attribute6,
1310 l_value_rec.c_attribute7,
1311 l_value_rec.c_attribute8,
1312 l_value_rec.c_attribute9,
1313 l_value_rec.c_attribute10,
1314 l_value_rec.c_attribute11,
1315 l_value_rec.c_attribute12,
1316 l_value_rec.c_attribute13,
1317 l_value_rec.c_attribute14,
1318 l_value_rec.c_attribute15,
1319 'QP', --source_system_code
1320 'Y', --active_flag
1321 'N', --ask_for_flag
1322 l_value_rec.name || to_char(l_price_formula_line_id),
1323 l_value_rec.description,
1324 '1' --version_no
1325 );
1326
1327 END IF; --If rowcount = 1
1328
1329 SELECT QP_LIST_LINES_S.nextval
1330 INTO l_list_line_id
1331 FROM DUAL;
1332
1333 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_List_Line(
1334 l_list_line_id,
1335 nvl(l_value_rec.creation_date,sysdate),
1336 nvl(l_value_rec.created_by,-1),
1337 nvl(l_value_rec.last_update_date, sysdate),
1338 nvl(l_value_rec.last_updated_by,-1),
1339 nvl(l_value_rec.last_update_login, -1),
1340 l_list_header_id,
1341 'PMR', --list_line_type_code
1342 'N', --automatic_flag
1343 'NONE',--modifier_level_code
1344 null, --arithmetic_operator
1345 nvl(l_value_rec.amount, 0), --operand
1346 null, --pricing_phase_id
1347 null, --incompatibility_grp_code
1348 1, --pricing_group_sequence
1349 'N', --accrual_flag
1350 null, --product_precedence
1351 1, --base_qty
1352 null, --base_uom_code
1353 'Y', --recurring_flag
1354 null, --proration_type_code,
1355 'N', --print_on_invoice_flag
1356 l_value_rec.context, l_value_rec.attribute1,
1357 l_value_rec.attribute2, l_value_rec.attribute3,
1358 l_value_rec.attribute4, l_value_rec.attribute5,
1359 l_value_rec.attribute6, l_value_rec.attribute7,
1360 l_value_rec.attribute8, l_value_rec.attribute9,
1361 l_value_rec.attribute10,l_value_rec.attribute11,
1362 l_value_rec.attribute12,l_value_rec.attribute13,
1363 l_value_rec.attribute14,l_value_rec.attribute15
1364 );
1365
1366 IF l_value_rec.entity_id_1 IS NOT NULL THEN
1367
1368 l_attr_value :=
1369 Get_Attr_Value(l_context1, l_attribute1, l_value_rec.value1);
1370
1371 QP_UTIL.validate_qp_flexfield(
1372 flexfield_name => 'QP_ATTR_DEFNS_PRICING',
1373 context => l_context1, attribute => l_attribute1,
1374 value => l_attr_value, application_short_name => 'QP',
1375 context_flag => x_context_flag,
1376 attribute_flag => x_attribute_flag,
1377 value_flag => x_value_flag, datatype => x_datatype,
1378 precedence => x_precedence, error_code => x_error_code);
1379
1380 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Pricing_Attribute(
1381 nvl(l_value_rec.creation_date,sysdate), nvl(l_value_rec.created_by, -1),
1382 nvl(l_value_rec.last_update_date,sysdate), nvl(l_value_rec.last_updated_by,-1),
1383 nvl(l_value_rec.last_update_login,-1), l_list_line_id, 'N', 'N',
1384 l_context1, l_attribute1, l_attr_value, null,
1385 x_datatype, '=');
1386
1387 END IF;
1388
1389
1390 IF l_value_rec.entity_id_2 IS NOT NULL THEN
1391
1392 l_attr_value :=
1393 Get_Attr_Value(l_context2, l_attribute2, l_value_rec.value2);
1394
1395 QP_UTIL.validate_qp_flexfield(
1396 flexfield_name => 'QP_ATTR_DEFNS_PRICING',
1397 context => l_context2, attribute => l_attribute2,
1398 value => l_attr_value, application_short_name => 'QP',
1399 context_flag => x_context_flag,
1400 attribute_flag => x_attribute_flag,
1401 value_flag => x_value_flag, datatype => x_datatype,
1402 precedence => x_precedence, error_code => x_error_code);
1403
1404 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Pricing_Attribute(
1405 nvl(l_value_rec.creation_date,sysdate), nvl(l_value_rec.created_by, -1),
1406 nvl(l_value_rec.last_update_date,sysdate), nvl(l_value_rec.last_updated_by,-1),
1407 nvl(l_value_rec.last_update_login,-1), l_list_line_id, 'N', 'N',
1408 l_context2, l_attribute2, l_attr_value, null,
1409 x_datatype, '=');
1410 END IF;
1411
1412
1413 IF l_value_rec.entity_id_3 IS NOT NULL THEN
1414
1415 l_attr_value :=
1416 Get_Attr_Value(l_context3, l_attribute3, l_value_rec.value3);
1417
1418 QP_UTIL.validate_qp_flexfield(
1419 flexfield_name => 'QP_ATTR_DEFNS_PRICING',
1420 context => l_context3, attribute => l_attribute3,
1421 value => l_attr_value,
1422 application_short_name => 'QP',
1423 context_flag => x_context_flag,
1424 attribute_flag => x_attribute_flag,
1425 value_flag => x_value_flag, datatype => x_datatype,
1426 precedence => x_precedence, error_code => x_error_code);
1427
1428 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Pricing_Attribute(
1429 nvl(l_value_rec.creation_date,sysdate), nvl(l_value_rec.created_by, -1),
1430 nvl(l_value_rec.last_update_date,sysdate), nvl(l_value_rec.last_updated_by,-1),
1431 nvl(l_value_rec.last_update_login,-1), l_list_line_id, 'N', 'N',
1432 l_context3, l_attribute3, l_attr_value, null,
1433 x_datatype, '=');
1434 END IF;
1435
1436
1437 IF l_value_rec.entity_id_4 IS NOT NULL THEN
1438
1439 l_attr_value :=
1440 Get_Attr_Value(l_context4, l_attribute4, l_value_rec.value4);
1441
1442 QP_UTIL.validate_qp_flexfield(
1443 flexfield_name => 'QP_ATTR_DEFNS_PRICING',
1444 context => l_context4, attribute => l_attribute4,
1445 value => l_attr_value,
1446 application_short_name => 'QP',
1447 context_flag => x_context_flag,
1448 attribute_flag => x_attribute_flag,
1449 value_flag => x_value_flag, datatype => x_datatype,
1450 precedence => x_precedence, error_code => x_error_code);
1451
1452 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Pricing_Attribute(
1453 nvl(l_value_rec.creation_date,sysdate), nvl(l_value_rec.created_by, -1),
1454 nvl(l_value_rec.last_update_date,sysdate), nvl(l_value_rec.last_updated_by,-1),
1455 nvl(l_value_rec.last_update_login,-1), l_list_line_id, 'N', 'N',
1456 l_context4, l_attribute4, l_attr_value, null,
1457 x_datatype, '=');
1458 END IF;
1459
1460
1461 IF l_value_rec.entity_id_5 IS NOT NULL THEN
1462
1463 l_attr_value :=
1464 Get_Attr_Value(l_context5, l_attribute5, l_value_rec.value5);
1465
1466 QP_UTIL.validate_qp_flexfield(
1467 flexfield_name => 'QP_ATTR_DEFNS_PRICING',
1468 context => l_context5, attribute => l_attribute5,
1469 value => l_attr_value,
1470 application_short_name => 'QP',
1471 context_flag => x_context_flag,
1472 attribute_flag => x_attribute_flag,
1473 value_flag => x_value_flag, datatype => x_datatype,
1474 precedence => x_precedence, error_code => x_error_code);
1475
1476 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Pricing_Attribute(
1477 nvl(l_value_rec.creation_date,sysdate), nvl(l_value_rec.created_by, -1),
1478 nvl(l_value_rec.last_update_date,sysdate), nvl(l_value_rec.last_updated_by,-1),
1479 nvl(l_value_rec.last_update_login,-1), l_list_line_id, 'N', 'N',
1480 l_context5, l_attribute5, l_attr_value, null,
1481 x_datatype, '=');
1482 END IF;
1483
1484 END LOOP; -- Loop through rule lines values
1485
1486
1487 QP_PRICE_FORMULA_UPG_UTIL_PVT.Insert_Price_Formula_Line(
1488 l_price_formula_line_id, --price_formula_line_id
1489 l_lines_rec.creation_date,
1490 l_lines_rec.created_by,
1491 l_lines_rec.last_update_date,
1492 l_lines_rec.last_updated_by,
1493 l_lines_rec.last_update_login,
1494 l_lines_rec.pricing_rule_id, --price_formula_id
1495 'ML', --price_formula_line_type_code
1496 null, --price_list_line_id
1497 l_list_header_id, --price_modifier_list_id
1498 null, --pricing_attribute_context
1499 null, --pricing_attribute
1500 l_lines_rec.context,
1501 l_lines_rec.attribute1,
1502 l_lines_rec.attribute2,
1503 l_lines_rec.attribute3,
1504 l_lines_rec.attribute4,
1505 l_lines_rec.attribute5,
1506 l_lines_rec.attribute6,
1507 l_lines_rec.attribute7,
1508 l_lines_rec.attribute8,
1509 l_lines_rec.attribute9,
1510 l_lines_rec.attribute10,
1511 l_lines_rec.attribute11,
1512 l_lines_rec.attribute12,
1513 l_lines_rec.attribute13,
1514 l_lines_rec.attribute14,
1515 l_lines_rec.attribute15,
1516 l_lines_rec.start_date_active,
1517 l_lines_rec.end_date_active,
1518 l_lines_rec.step_number,
1519 null --numeric_constant
1520 );
1521
1522 END LOOP; -- Loop through Pricing Rule Lines
1523
1524 END IF; -- If formula does not already exist
1525
1526 EXCEPTION
1527 WHEN NO_DATA_FOUND OR DUP_VAL_ON_INDEX OR VALUE_ERROR THEN
1528 err_msg := substr(sqlerrm, 1, 240);
1529 rollback;
1530 QP_UTIL.Log_Error (
1531 p_id1 => 'Price Formula Id' || to_char(l_rec.pricing_rule_id),
1532 p_error_type => 'FORMULA',
1533 p_error_desc => err_msg,
1534 p_error_module => 'Upgrade_Price_Formulas');
1535
1536 WHEN OTHERS THEN
1537 err_msg := substr(sqlerrm, 1, 240);
1538 rollback;
1539 QP_UTIL.Log_Error (
1540 p_id1 => 'Price Formula Id' || to_char(l_rec.pricing_rule_id),
1541 p_error_type => 'FORMULA',
1542 p_error_desc => err_msg,
1543 p_error_module => 'Upgrade_Price_Formulas');
1544 raise;
1545
1546 END; --Block around all the code in the Pricing Rule Loop
1547
1548 commit; --For each successful Pricing Rule
1549 END LOOP; --Loop through Pricing Rules
1550
1551 Upgrade_Unused_Components; -- Call Proc. to upgrade unused rule components
1552
1553 -- Flexfield Merging
1554 -- Run the utility procedure to upgrade Descriptive Flexfields
1555 -- from Pricing to Price Formulas
1556 -- QP_UTIL.qp_upgrade_context('OE', 'QP', 'SO_PRICING_RULES', 'QP_PRICE_FORMULAS_B');
1557 -- QP_UTIL.qp_upgrade_context('OE', 'QP', 'SO_PRICING_RULE_LINES', 'QP_PRICE_FORMULA_LINES');
1558 -- QP_UTIL.qp_upgrade_context('OE', 'QP', 'SO_RULE_FORMULA_COMPONENTS', 'QP_LIST_HEADERS');
1559 -- QP_UTIL.qp_upgrade_context('OE', 'QP', 'SO_PRICING_RULE_LINE_VALUES', 'QP_LIST_LINES');
1560 commit;
1561
1562 EXCEPTION
1563 WHEN OTHERS THEN
1564 err_msg := substr(sqlerrm, 1, 240);
1565 rollback;
1566 QP_UTIL.Log_Error (
1567 p_id1 => null,
1568 p_error_type => 'FORMULA',
1569 p_error_desc => err_msg,
1570 p_error_module => 'Upgrade_Price_Formulas');
1571 raise;
1572
1573 END Upgrade_Price_Formulas;
1574
1575
1576 END QP_PRICE_FORMULA_UPG_UTIL_PVT;